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- メッセージをデコードし続けます。