1.6. qpid::messaging Message::get/setContentObject()
構造化された AMQP 1.0 メッセージには、さまざまな方法でエンコードされたメッセージのボディーがあります。
Ruby および Python API は、構造化 AMQP 1.0 メッセージのボディーをデコードしません。AMQP 1.0 タイプとして送信されたメッセージはこれらのライブラリーによって受信できますが、ボディーはデコードされません。Ruby API および Python API を使用するアプリケーションは、ボディー自体をデコードする必要があります。
C++ API および C# API には新しいメソッドが追加され、構造化された AMQP 1.0 メッセージのセマンティックコンテンツ
Message::getContentObject()
Message::setContentObject()
にアクセスします。これらのメソッドにより、メッセージのボディーにバリアントとしてアクセスまたは操作することができます。これらの方法を使用すると、プロトコルバージョンの両方で機能し、map-、list-、text-、または binary- メッセージの両方で機能するときに、最も広く適用可能なコードが生成されます。
content オブジェクトはバリアントで、型を判別できるバリアントで、コンテンツを自動的にデコードできるようにします。
以下の C++ 例は、新しいメソッドを示しています。
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()
また、コンテンツの raw バイトを Message::setContent()
引き続き参照します。API の encode()
decode()
およびメソッドは AMQP 0-10 形式の map- および list- メッセージをデコードし続けます。