规则集 XOM 的 XML 序列化

在用于规则集执行的 REST 服务中,以不同方式序列化基本 Java™ 类型, XSD 类型和 Java XOM 类。

根据规则集参数是表示为 XML 元素还是表示为 Java 类型,将以不同方式处理规则集参数。

基本类型

原语类型是可以编写为内联字符串的 Java 类型和类。 用于将基本类型序列化为规则集参数的 XML 元素是参数名称空间中规则集参数的名称。

您可以在此处找到更多信息:

动态 XOM

对于动态 XOM ,根元素取决于规则集参数的定义方式。 将根据规则集所基于的动态 XOM 的原始 XSD 代码对 XML 描述进行序列化。

根元素的名称
对于基于动态 XOM 的规则集,根元素名称确定如下:
  • 如果参数是规则集特征符中的 XML 元素,那么该元素将用作请求和响应中参数的根元素名称。
  • 如果参数是复杂或基本 Java 类型,那么在配置的 param 名称空间内,参数名称将用作请求和响应中参数的根元素名称。
    注: 如果规则集参数满足以下条件,那么将从 XML 元素声明该参数: 该参数使用 XML 复杂类型,该 XML 复杂类型的 XML 元素是从原始导入的 XSD 文件中的该复杂类型声明的。 例如,从以下 XSD 定义开始:
    <xsd:element name="MyConference">
       <xsd:complexType>
          <xsd:sequence>
             <xsd:element name="session" type="session" maxOccurs="unbounded"/>
             <xsd:element name="participant" type="participant" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
       </xsd:complexType>
    </xsd:element>
    MyConference XML 元素声明规则集参数:
    <par:Request xmlns:par="http://www.ibm.com/rules/decisionservice/myruleapp/myruleset/param" xmlns:jav="http://www.acme.com/myconference">
       <jav:MyConference>
          <jav:session>
            […]
          <jav:session>
       <jav:MyConference>
    </par:Request>
序列化
根元素取决于您的 XML 类型。
  • 对于 XML 复杂类型,参数声明使用参数名称 (在参数名称空间中) 作为根元素。
  • 对于 XML 元素,参数声明使用定义的 XML 元素作为原始名称空间中的根元素。 在这种情况下,在 WADL 代码中提供了附加到每个节点的参数的名称作为注释消息。
当多个元素具有相同的名称时,元素节点将按字母顺序进行区分。 在这种情况下,如果您希望其中一个元素为空,那么必须将 xsi:nil 属性设置为 true。 仅当针对动态 XOM 的原始 XSD 模式中的根元素将 nillable 属性设置为 true 时,才能执行此操作。 nillable 属性的缺省值为 false

Java XOM

对于 Java XOM ,根元素派生自参数声明, XML 序列化使用 JAXB 注释。 规则集参数支持数组。
根元素的名称

对于基于 Java XOM 的规则集,参数声明使用参数名称 (在参数名称空间中) 作为根元素。

序列化
Java XOM 类的 XML 结构通过标准 JAXB 进程进行序列化。 如果缺省序列化未提供您期望的类结果,那么可以使用 JAXB 注释来定制序列化过程。
注: 仅当您使用 XmlElement 注释指定参数时,或者如果有效的 getXXXsetXXX 方法适用于该参数时,该参数才可视为 XML 元素。
数组作为规则集参数
在 Java XOM 中,可以将规则集参数指定为简单或多维数组。 对于每种类型的数组,以不同方式处理 XML 序列化:
  • 如果规则集参数是简单数组,那么参数名称将作为 XML 中的标准数组重复。
  • 如果规则集参数是多维数组,那么参数名称在 XML 中作为第一个维度的标准数组类型重复,然后将 item 元素用于后续维度。 例如:
    <myMultiDimArrayParam>
          <item>1</item>
          <item>2</item>
        </myMultiDimArrayParam>
        <myMultiDimArrayParam>
          <item>3</item>
          <item>4</item>
          <item>5</item>
    </myMultiDimArrayParam>