验证消息

开始之前:

阅读有关消息流节点的概念主题和 MRM 解析器和域

代理为预定义消息提供基于消息字典的验证。因此,验证仅适用于您已在 MRM 域中建模并定义的消息。

代理不对自定义消息提供任何验证。您无法直接对 XML DTD 或 XML 模式进行消息验证。而应通过使用 Message Brokers Toolkit 导入您的 XML DTD 或 XML 模式,在 MRM 域中创建等价模型。

设计消息流的目的是为了转换和路由符合某些规则的消息。缺省情况下,MRM 解析器会对消息执行某些有效性检验,但只是为了确保解析操作的完整性。然而,通过在消息流中某些节点上指定验证选项,还可能根据消息字典中包含的消息模型执行更严格的消息验证。

您可以使用验证选项来验证以下消息:

这些验证选项可保证对进入和离开消息流的数据进行验证。这些选项对所执行的验证提供某种程度的控制,以:

还可指定发生验证故障时采取何种操作。

消息验证涉及浏览消息树和检查其有效性。在解析消息时它是树创建的扩展,并且在写输出消息时是位流创建的扩展。

以下节点具有验证选项:

节点类型 有验证选项的节点
输入节点 MQInput、SCADAInput、HTTPInput、JMSInput 和 TimeoutNotification
输出节点 MQOutput、MQReply、SCADAOutput、HTTPReply 和 JMSOutput
其他节点 Compute、Mapping、JavaCompute、Validate、ResetContentDescriptor、MQGet 和 HTTPRequest

验证选项还可以在 ESQL CREATE 语句和 ASBITSTREAM 函数上指定。

要验证输入节点接收的输入消息,可在输入节点上指定验证属性。 随后会在解析消息位流以形成消息树时验证输入消息。

您还可以使用输入节点的“解析计时”属性控制此时是否解析和验证整个消息,或者是否仅当引用消息中的个别字段时才对它们进行解析和验证。

要验证由 Compute 节点、Mapping 节点或 JavaCompute 节点创建的输出消息,可在节点自身指定验证属性,也可在发送消息的输出节点上指定验证属性。验证会在输出节点从消息树创建消息位流时执行。

或者,您可使用 Validate 节点在消息流中某个特定位置对消息树进行验证,也可使用 Compute、Filter 或 Database 节点中的 ESQL ASBITSTREAM 函数。

如果您保持验证设置未改变,缺省情况下会发生有限的验证数。在此缺省级别,如果下列之一为真,即会抛出异常:
  • 存在数据不匹配,例如,解析器无法解释为指定的字段类型提供的数据
  • 输出消息中元素的顺序与逻辑消息树中的顺序不匹配(仅 CWF 和 TDS 固定长度模型)
此外,缺省情况下的 MRM 解析器会在以下情况中执行有限的补救操作:
  1. 对于固定格式(仅 CWF 和 TDS 固定长度模型)会在输出时废弃无关的字段
  2. 如果缺少必需的内容,则在输出时会为固定格式(仅 CWF 和 TDS 固定长度模型)提供缺省值(如果可用)
  3. 如果树中的元素数据类型与字典中指定的类型不匹配,则数据类型会在输出时进行转换以便与所有格式的字典定义匹配(如果可能)。

然而,通过使用验证选项,您可以请求更彻底的消息验证。例如,您可能要验证以下一个或多个条件,并抛出异常或记录错误:

样本描述了某些验证选项。

使用验证选项时,了解以下行为是很重要的:
  • 控制是否发生“随需应变”解析(有时称为部分解析)的“解析计时”属性会影响输入消息(包括消息头)的验证计时。

    有关“解析计时”的更多信息,请参阅MRM 域中消息的验证属性

  • 如果将消息树传递到输出节点,则缺省情况下,该输出节点会继承消息树中有效的验证选项。可通过在输出节点上指定一组新的验证选项来覆盖这些选项。
  • 如果消息树作为输入传递到 Compute、Mapping 或 JavaCompute 节点,则 Compute、Mapping 或 JavaCompute 节点创建的任何新输出消息树都具有节点本身指定的验证选项(即使复制了整条消息)。您可覆盖该操作并指定节点创建的消息继承输入消息树的验证选项。
  • 当写位流并应用验证选项时,对整个消息进行验证。消息树可能包含未解析的类型(例如,如果 Compute 节点将未解析的类型从输入消息复制到输出消息并且未解析它)。如果遇到这样一种类型,会发生验证错误,因为验证此类型是不可能的。要防止发生此问题,确保在将所有未解析的类型复制到输出消息之前对它们进行解析。

有关如何使用不同属性控制验证的信息,请参阅MRM 域中消息的验证属性

相关概念
预定义和自定义消息
消息流概述
相关任务
设计消息流
创建消息流
定义消息流内容
相关参考
内置节点
MRM 域中消息的验证属性
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac00400_