规划用户定义的消息处理节点

规划如何编写消息处理节点或输出节点,以及如何浏览节点内的消息。

设计因素

在开发和实现消息处理节点前,请注意以下事项:

语法元素导航

集成节点为节点提供一些函数,节点可调用这些函数来遍历以树形式表示的消息,另外,还为节点提供支持从当前元素浏览至其他元素的函数和方法:
  • 父代
  • 第一个子代
  • 最后一个子代
  • 前一个(或左侧)同代
  • 下一个(或右侧)同代
下图显示了这些关系。
该图显示了连接到父元素,子元素和同代元素的语法元素。

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

下图描述了显示整个元素互连范围的简单语法元素树。
该图显示了具有根元素和子元素的语法元素树。

元素 A 是树的根元素。 它没有父代,因为它是根。 它具有元素 B 的第一个子代。 由于 A 没有其他子代,因此元素 B 也是 A 的最后一个子代。

元素 B 有三个子代:元素 CDE。 元素 CB 的第一个子代;元素 EB 的最后一个子代。

元素 C 有两个同代:元素 DE。 元素 C 的下一个同代是元素 D。 元素 D 的下一个同代是元素 E。 元素 E 的先前同代是元素 D。 元素 D 的先前同代是元素 C

下图显示了集成节点接收的典型 IBM MQ 消息的第一代语法元素。 (并非所有消息都具有 MQRFH2 头。)
该图展示了一个根元素及其典型的 IBM MQ 子元素。

这些第一代元素通常称为“文件夹”,其中存储了表示消息头和消息内容数据的语法元素。 在此示例中,根的第一个子代是 Properties 文件夹。 Properties 的下一个同代是 MQMD 头的文件夹。 下一个同代是 MQRFH2 头的文件夹。 最后一个文件夹表示消息内容,在此示例中,它是 XML 消息。

上图包括 MQMD 和 MQRFH2 头。 处理 IBM® MQ 的处理节点接收的所有消息都包含一个MQMD头;此外还可能包含其他一些头。

浏览 XML 消息

请查看以下 XML 消息:
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>IBM MQ</Department>
    </Company>
  </Business>
在此示例中,元素为以下类型:
名称元素
Business、Product、Company、Title、Location 和 Department
值元素
IBM, Hursley , WebSphere® MQ
名称/值元素
type='messaging'

使用提供的节点实用程序和方法(或类似的解析器实用程序函数)浏览消息。 要使用以上显示的 XML 消息,必须先调用 cniRootElement,并将节点接收的消息作为对此函数的输入。 在 Java™中,必须对入局 MbMessage 对象调用 getRootElement 。 此调用将返回表示元素根的 MbElement。 请勿在用户定义节点中修改此根元素。

此图是集成节点接收到的典型消息的第一代语法元素,显示根元素的最后一个子代是包含 XML 解析树的文件夹。 通过在 C 节点中调用 cniLastChild (将先前调用的输出作为此函数的输入) ,或者通过在 Java 节点中的根元素上调用方法 getLastChild 来浏览到此文件夹。

只有一个元素 (<Business>) 处于消息的顶级,因此请调用 cniFirstChild (在 C中) 或 getFirstChild (在 Java 中) 以移至树中的此点。 使用 cniElementTypegetType 获取其类型 (即 name) ,后跟 cniElementNamegetName 以返回名称本身 (Business)。

元素 <Business> 有两个子代:<Product><Company>。 使用 cniFirstChildgetFirstChild,后跟 cniNextSiblinggetNextSibling,依次浏览每个子代。

元素 <Product> 有一个属性 (type='messaging'),它是一个子元素。 使用 cniFirstChildgetFirstChild 浏览到此元素,使用 cniElementTypegetType 返回其类型 (即 name-value)。 使用 cniElementNamegetName 可获取名称。 要获取值,请调用 cniElementValueType 以返回类型,然后调用 cniElementValue 组中的相应函数,在本示例中为 cniElementCharacterValue。 在 Java 中,使用方法 getValue,它返回表示元素值的 Java 对象。

元素 <Company> 具有三个子代,每个子代都有作为值元素(IBMHursleyIBM MQ)的子代。 使用上述函数可浏览这些子代并访问它们的值。

其他函数可以用于复制元素树(或树的一部分)。 然后可以通过添加或除去元素并更改其名称和值来创建输出消息。 有关更多信息,请参阅 C 节点实用程序函数C 解析器实用程序函数或 Java 用户定义节点 API。