1.6. qpid::messaging Message::get/setContentObject()
Structured AMQP 1.0 messages can have the body of the message encoded in a variety of ways.
The Ruby and Python APIs do not decode the body of structured AMQP 1.0 message. A message sent as an AMQP 1.0 type can be received by these libraries, but the body is not decoded. Applications using the Ruby and Python APIs need to decode the body themselves.
The C++ and C# APIs have the new methods
Message::getContentObject()
and Message::setContentObject()
to access the semantic content of structured AMQP 1.0 messages. These methods allow the body of the message to be accessed or manipulated as a Variant. Using these methods produces the most widely applicable code as they work for both protocol versions and work with map-, list-, text- or binary- messages.
The content object is a Variant, allowing the type to be determined, and also allowing the content to be automatically decoded.
The following C++ example demonstrates the new methods:
bool Formatter::isMapMsg(qpid::messaging::Message& msg) { return(msg.getContentObject().getType() == qpid::types::VAR_MAP); } bool Formatter::isListMsg(qpid::messaging::Message& msg) { return(msg.getContentObject().getType() == qpid::types::VAR_LIST); } qpid::types::Variant::Map Formatter::getMsgAsMap(qpid::messaging::Message& msg) { qpid::types::Variant::Map intMap; intMap = msg.getContentObject().asMap(); return(intMap); } qpid::types::Variant::List Formatter::getMsgAsList(qpid::messaging::Message& msg) { qpid::types::Variant::List intList; intList = msg.getContentObject().asList(); return(intList); }
Message::getContent()
and Message::setContent()
continue to refer to the raw bytes of the content. The encode()
and decode()
methods in the API continue to decode map- and list- messages in the AMQP 0-10 format.