用户定义解析器生命周期

用户定义的消息流解析器的各个生命阶段。

涉及以下几个阶段:
  • 注册
  • 实例化
  • 处理
  • 消除

本主题描述运行用户定义解析器时在 WebSphere® IBM® Integration 组件之间进行的交互。 它以开始每个阶段的事件、每个阶段过程中和之后发生的事件以及调用的 API 来解释每个阶段。 理解此处的这些概 念有助于您更有效地设计和开发解析器。

注册

用户定义解析器生命周期的第一阶段是注册阶段。 注册阶段的目的是向集成节点注册用户定义的解析器。 此阶段在集成服务器启动时开始。

实例化

在解析器生命周期的实例化阶段期间创建了解析器。 当接收到输入消息或在 计算 节点中构建输出消息时,将识别相关解析器,并从消息头 (例如 MQMD) 获取解析器需求。 集成节点启动并载入可载入实施库(LIL)和解析器工厂。 在调用 cpiCreateContext 功能之前,集成节点将创建名称元素用作解析器的有效根元素。 然而,未命名此元素。 解析器应该在 cpiSetElementName 函数中命名此元素。 集成服务器进程创建解析器的实例,并且集成节点调用 cpiCreateContext 以允许解析器对象获取消息的合适部分。

然后,集成节点调用 cpiParseBuffercpiParseBuffer 执行任何必要的初始化,并返回解析器接管所有权 的消息内容的长度。 解析器访问要解析多少消息数据,并声明相 应的字节数。

当创建用户定义解析器对象的实例时,集成节点还会调用上下文创建实施函数 cpiCreateContext。 此调用允许解析器分配与解析器相关联的实例数据。 另还需要 cpiDeleteContext 函数来删除解析器对象的上下文。

处理

在处理阶段,解析器操作、更改和引用消息对象中的元素。 发生任何消息处理活动时消息流处理阶段开始,例如,导航,需要访问在与消息相关的集成节点的内部模型演示中不存在的消息内的元素。

在消息流处理阶段期间,相应调用解析器来试图浏览消息树。 解析器将检查调用 cpiParseBuffer 时分配的缓冲区,并创建任何必要的消息元素。

然后解析器可以使用以下任何或全部解析器实现函数浏览消息元素:
  • cpiParseFirstChild
  • cpiParseLastChild
  • cpiParsePreviousSibling
  • cpiParseNextSibling

当任何形式的导航(例如指定消息字段的过滤器表达式)制作成语法元素树(它按逻辑表示用户定义解析器所支持的消息格式的数据)的一部分时,会调用这 些函数。 当集成节点中的操作需要语法元素树才能构建或扩展时将发生此导航。

决定如何更好地导航语法元素树时,请考虑以下几点:
  • 语法元素具有到其父母、兄弟、长子和幼子的五个指针,因此提供有限集合的导航。
  • 相同内部类用于执行所有这些导航。
  • 解析器不控制导航。 ESQL 或用户定义节点决定导航的方法以及调用导航解析器实现函数的顺序。 用户定义解析器对方向和顺序没有控制权,因此需要正确地响应选中导航计划; 例如从右到左解析,也可从左到右解析。
  • 撰写用户定义解析器时,请将解析器代码置于 parseNextItem 函数中。 此函数应该在设置名称、值并适当完成标志时一次一个元素来构建语法元素树。 如何实施此函数,取决于要解析的位流的性质。 提供的样本解析器将演示 该行为。

当解析器完成解析语法元素树相关的部分时,调用 cpiWriteBuffer。 此函数将语法元素树中属于它的那部分追加到与解析器对象相关联的消息缓冲器中的位流,并 创建输出消息。

消除

消除阶段是用户定义解析器生命周期的最后阶段。 当解析器已经将语法元素树的一部分写到位流并创建输出消息时,需要释放由集成节点为解析器使用所创建的系统资源。

当使用 mqsistop 命令来停止执行过程时,将开始销毁阶段。