处理 ObjectMessage 有效内容需要其他处理,这是因为 JMS ObjectMessage 有效内容是序列化的 Java 对象。
JMSInput 节点通过在消息上调用 getObject( ) 获取有效内容。getObject( ) 返回已反序列化的原始类对象。必须对 JMSInput 节点提供此类定义,并且应该确保可以通过代理的 Java 类路径访问它。(在 mqsiprofile 批处理文件中定义类路径,该文件在可执行文件目录中;例如,在 Windows 上,mqsiprofile.cmd 在 install_dir/bin 目录中。)
JMSInput 节点调用 BLOB 解析器,该解析器通过使用从对象创建的位流创建消息体。
该 Java 对象可以随后在 JavaCompute 节点或用户定义的扩展中重新序列化,并使用其方法调用进行更新。
MapMessage 和 StreamMessage 的有效内容只能作为单独的元素抽取,并且必须由 JMSInput 节点重新格式化之后才能用于创建消息体。
JMSMap 域是代理 XML 解析器的同义词,它预期 XML 数据流。然而,MapMessage 有效内容数据是作为“名称 - 值”对集合从消息对象抽取的。JMS API 用于获取“名称 - 值”对。
JMSInput 节点将每个“名称 - 值”对作为 XML 元素和值追加到位流,并使用 dt= 属性保留值的类型。
<map> <Item_8_of_10_Char dt='char'>A</Item_8_of_10_Char> <Item_5_of_10_Double dt='r8'>999999.0</Item_5_of_10_Double> <Item_10_of_10_String>Last Map Item</Item_10_of_10_String> <Item_9_of_10_Boolean dt='boolean'>0</Item_9_of_10_Boolean> <Item_2_of_10_Integrer dt='i4'>999</Item_2_of_10_Integrer> <Item_3_of_10_Short dt='i2'>9999</Item_3_of_10_Short> <Item_7_of_10_Byte dt='i1'>9</Item_7_of_10_Byte> <Item_6_of_10_Float dt='r4'>2.24</Item_6_of_10_Float> <Item_1_of_10_String>P2P Map Msg Number:1</Item_1_of_10_String> <Item_4_of_10_Long dt='i8'>99999</Item_4_of_10_Long> </map>在此示例中,消息包含 10 个字段。字段名已由 JMS 客户机应用程序生成,并使用 item_n_of_x_t 格式,其中:
StreamMessage 有效内容数据是一系列字段,其中每个字段具有一种特定的类型。这些字段没有关联的名称,因此使用缺省元素名称 elt 来生成 XML 元素。与 MapMessage 类似,JMS API 只允许对各字段进行单独检索。JMSInput 节点从 JMS 消息抽取这些字段并将每个字段以 XML 格式追加到位流。
<stream> <elt>P2P Stream Message Number :7</elt> <elt dt='i4'>999</elt> <elt dt='i2'>9999</elt> <elt dt='i8'>99999</elt> <elt dt='r8'>999999.0</elt> <elt dt='r4'>2.24</elt> <elt dt='i1'>9</elt> <elt dt='char'>A</elt> <elt dt='boolean'>0</elt> <elt>Last Stream Item</elt> </stream>在此示例中,JMS 客户机应用程序将 10 个输入的值添加到了 StreamMessage。