规划用户定义的消息处理节点
规划如何编写消息处理节点或输出节点,以及如何浏览节点内的消息。
设计因素
- 将由哪个解析器解析消息。
- 是否为此消息处理节点覆盖缺省消息解析器属性值。
- 哪一种线程技术模型适用于此消息处理节点。
- 如何结束节点必须支持的消息处理及事务支持。
- 哪些消息处理节点必需的配置属性必须进行外部化以供消息流设计者改动。
- 用户定义节点将提供哪些可选节点 API。
- 常见的开发问题:
- 用户定义扩展的线程技术注意事项
- 用户定义节点中的存储管理
- 用户定义节点中的字符串处理
- 错误和异常处理
- 期望特定头文件夹的内置节点的期望消息格式,请参阅 消息解析器的元素定义
语法元素导航
- 父代
- 第一个子代
- 最后一个子代
- 前一个(或左侧)同代
- 下一个(或右侧)同代

其他函数和方法支持处理元素本身,可创建元素、设置或查询其值、将新元素插入树以及从树中除去元素。 请参阅 C 节点实用程序函数 和 C 解析器实用程序函数或 Javadoc 信息以获取更多详细信息。

元素 A 是树的根元素。 它没有父代,因为它是根。 它具有元素 B 的第一个子代。 由于 A 没有其他子代,因此元素 B 也是 A 的最后一个子代。
元素 B 有三个子代:元素 C、D 和 E。 元素 C 是 B 的第一个子代;元素 E 是 B 的最后一个子代。
元素 C 有两个同代:元素 D 和 E。 元素 C 的下一个同代是元素 D。 元素 D 的下一个同代是元素 E。 元素 E 的先前同代是元素 D。 元素 D 的先前同代是元素 C。

这些第一代元素通常称为“文件夹”,其中存储了表示消息头和消息内容数据的语法元素。 在此示例中,根的第一个子代是 Properties 文件夹。 Properties 的下一个同代是 MQMD 头的文件夹。 下一个同代是 MQRFH2 头的文件夹。 最后一个文件夹表示消息内容,在此示例中,它是 XML 消息。
上图包括 MQMD 和 MQRFH2 头。 处理 IBM® MQ 的处理节点接收的所有消息都包含一个MQMD头;此外还可能包含其他一些头。
浏览 XML 消息
<Business>
<Product type='messaging'></Product>
<Company>
<Title>IBM</Title>
<Location>Hursley</Location>
<Department>IBM MQ</Department>
</Company>
</Business>使用提供的节点实用程序和方法(或类似的解析器实用程序函数)浏览消息。 要使用以上显示的 XML 消息,必须先调用 cniRootElement,并将节点接收的消息作为对此函数的输入。 在 Java™中,必须对入局 MbMessage 对象调用 getRootElement 。 此调用将返回表示元素根的 MbElement。 请勿在用户定义节点中修改此根元素。
此图是集成节点接收到的典型消息的第一代语法元素,显示根元素的最后一个子代是包含 XML 解析树的文件夹。 通过在 C 节点中调用 cniLastChild (将先前调用的输出作为此函数的输入) ,或者通过在 Java 节点中的根元素上调用方法 getLastChild 来浏览到此文件夹。
只有一个元素 (<Business>) 处于消息的顶级,因此请调用 cniFirstChild (在 C中) 或 getFirstChild (在 Java 中) 以移至树中的此点。 使用 cniElementType 或 getType 获取其类型 (即 name) ,后跟 cniElementName 或 getName 以返回名称本身 (Business)。
元素 <Business> 有两个子代:<Product> 和 <Company>。 使用 cniFirstChild 或 getFirstChild,后跟 cniNextSibling 或 getNextSibling,依次浏览每个子代。
元素 <Product> 有一个属性 (type='messaging'),它是一个子元素。 使用 cniFirstChild 或 getFirstChild 浏览到此元素,使用 cniElementType 或 getType 返回其类型 (即 name-value)。 使用 cniElementName 或 getName 可获取名称。 要获取值,请调用 cniElementValueType 以返回类型,然后调用 cniElementValue 组中的相应函数,在本示例中为 cniElementCharacterValue。 在 Java 中,使用方法 getValue,它返回表示元素值的 Java 对象。
元素 <Company> 具有三个子代,每个子代都有作为值元素(IBM、Hursley 和 IBM MQ)的子代。 使用上述函数可浏览这些子代并访问它们的值。
其他函数可以用于复制元素树(或树的一部分)。 然后可以通过添加或除去元素并更改其名称和值来创建输出消息。 有关更多信息,请参阅 C 节点实用程序函数 和 C 解析器实用程序函数或 Java 用户定义节点 API。