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

本主题为写消息处理节点以确保其功能正确性提供指导。它解释您可以如何使用消息处理节点来浏览消息。

设计注意事项

在开发和实现消息处理节点前,您应该确定以下内容:
  • 将解析消息的消息解析器
  • 是否为此消息处理节点覆盖缺省消息解析器属性值。
  • 消息处理节点的相应的线程技术模型
  • 消息处理的结束和节点将支持的事务支持
  • 消息处理节点必需的配置属性应该具体化以供消息流设计者改动。
  • 用户定义的节点将提供的可选的节点 API
  • 一般开发问题:

语法元素导航

代理基础结构提供函数,使消息处理节点可以穿过消息的树表示,并附带允许从当前元素浏览到其以下内容的功能和方法:
  • 父代
  • 第一个子代
  • 最后一个子代
  • 前一个(或左边)兄弟
  • 下一个(或右边)兄弟
如下图中所示。其他支持元素本身的处理的功能和方法,附带创建元素,设置或查询其值,将新元素插入树并从树除去元素的功能和方法。请参阅C 节点实用程序函数C 解析器实用程序函数 或 Javadoc,以获取更多信息。

附带到其他元素的连接的语法元素


该图显示语法元素。它连接到其余元素。其余元素为:元素左边和右边的前一个兄弟和下一个兄弟,元素下的第一个子代和最后一个子代,以及元素上的父代。
下一个图描述显示元素之间相互连接的整个范围的简单语法元素树。

语法元素树


该图显示语法元素树。元素 A 在图表的顶部,在元素 B 上,依次在元素 C、D 和 E 上,这些元素在同一级别。

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

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

元素 C 有两个兄弟:元素 DE。元素 C下一个兄弟是元素 D。元素 D下一个兄弟是元素 E。元素 E前一个兄弟是元素 D。元素 D前一个兄弟是元素 C

下图显示由 WebSphere Message Broker 接收到的典型消息的第一个生成的语法元素。(注意不是所有消息都具有 MQRFH2 头。)

一般消息中生成的第一个语法元素


在图的顶部是具有 Root 标签的框。左面将框连接到下面已标记“属性”的框的线,右面另一条线连接 到下面标记的 XML。在这两者之间,又有两个框,标记为 MQMD 和 MQRFH2。

这些第一代的元素通常作为“文件夹”引用,在其中存储表示消息头和消息内容数据的语法元素。在此示例中,根的第一个子代是属性文件夹。属性的下一个兄弟是进入 WebSphere MQ 消息的 MQMD 的文件夹。 下一个兄弟是 MQRFH2 头的文件夹。最后,有代表消息内容的文件夹,此消息(在此示例中)是一个 XML 消息。

上图包括 MQMD 和 MQRFH2 头。由消息处理节点接收的所有消息都包括 MQMD 头,还可以包括一些其他头。

浏览 XML 消息

假设我们有以下 XML 消息:
  <Business>
        <Product type='messaging'></Product>
        <Company>
            <Title>IBM</Title>
            <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
        </Company>
    </Business>
在此示例中,元素为以下类型:
名称元素
业务、产品、公司、标题、位置、部门
值元素
IBM、Hursley、WebSphere MQ
名称-值元素
type='messaging'

您可以使用节点实用程序和方法(或类似的解析器实用程序函数)来通过消息浏览。采用上面显示的 XML 消息,您首先需要调用 cniRootElement,附带由节点接收的消息作为对此函数的输入。在 Java 中,您需要在进入 MbMessage 上调用 getRootElement。这返回代表元素的根的 MbElement。根元素不应该由用户定义的节点来修改。

上图显示根元素的最后的子代是包含 XML 解析树的文件夹。您可以通过在 C 节点中调用 cniLastChild(前一个调用的输出作为对此函数的输入)来浏览此文件夹,或通过在 Java 节点中的根元素上调用方法 getLastChild 来浏览此文件夹。

有一个仅(<Business>)在消息顶层的元素,因此调用 cniFirstChild(在 C 中)或 getFirstChild(在 Java 中)移动到树中的这一点。您可以使用 cniElementTypegetElementType 来获取其类型( 即,名称),后跟 cniElementNamegetName 来返回名称本身(业务)。

<业务> 有两个子代,<产品><公司>,因此,您可以使用 cniFirstChildgetFirstChild,后跟 cniNextSiblinggetNextSibling 来依次浏览它们。

<产品> 具有属性(type='messaging'),它是一个子元素。再次使用 cniFirstChildgetFirstChild 来浏览到此元素,以及 cniElementTypegetType 来返回其类型(即,名称-值)。如前使用 cniElementNamegetName 来获取名称。要获取值,调用 cniElementValueType 来返回类型,后跟 cniElementValue 组中的适当函数。在此示例中,它会是 cniElementCharacterValue。在 Java 中使用方法 getValue,会返 回代表元素值的 Java 对象。

<公司> 具有三个子代,每个具有值元素(IBMHursleyWebSphere MQ)的子代。您可以使用已经描述为浏 览它们并访问其值的函数。

其他函数可以用于复制元素树(或树的一部分)。然后可以通过添加或除去元素修改副本,并更改其名称和值来创建输出消息。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
as01395_