从 WSDL 导入:生成的对象和局限性

这描述了在导入 WSDL 定义时生成的对象,以及一些需要注意的局限性。

生成的对象

命令行导入复制的文件
mqsicreatemsgdefsfromwsdl 命令将其需要的 WSDL 文件在导入运行前复制到工作空间。这些是顶级 WSDL 文件,以及任何使用绝对位置或相对位置解决的导入。文件被复制到称为 importFiles 的文件夹中的指定消息集下。
报告文件
WSDL 导入器将导入操作的结果附加到报告文件,列出在此过程中出现的任何错误。报告文件的文件名是 <message set>.wsdl.report.txt
SOAP 消息定义
将需要的 SOAP mxsds 添加到消息集。当前,始终导入 SOAP 1.1 定义。这样做有几个原因:
  • 与 SOAP 1.2 相比,SOAP 1.1 使用得更广泛。
  • 对于 WSDL 1.1,没有标准的 SOAP 1.2 绑定。这意味着 WSDL 导入器无法可靠地确定是否需要 SOAP 1.2。
  • 不能同时导入 SOAP 1.1 和 SOAP 1.2 定义,这是因为它们都使用相同的消息名称(例如,Envelope)。

如果需要解析 SOAP 1.2 实例文档,则应该手动删除 SOAP 1.1 定义,然后通过在“新建消息定义文件”向导中选择 IBM 提供的消息来导入 SOAP 1.2 定义。

如果您的消息集具有 TDS 或 CWF 层,您可能会发现许多针对导入的 SOAP 定义的警告。其中的大多数可以忽略,但是需要考虑布尔属性的允许值。在 SOAP 1.1 中,一个布尔值具有值 1 或 0,而在 SOAP 1.2 中,值是“true”和“false”。消息集的布尔值的 XML 表示在 XML 物理格式的物理属性中指定,并且需要进行相应的设置。

消息定义文件
其他消息定义文件名创建为 <input file name>.mxsd,其内容取决于 WSDL 样式。
文档样式
样式 =“文档”的 WSDL 消息部分(包括所有 SOAP 头、故障和头故障部分)引用在 XML Schema 中定义的元素。此元素在 mxsd 中作为全局元素和代理消息导入。

此消息上的 xsi:type 输出策略设置为“Never”。

rpc 样式
样式 =“rpc”的 WSDL 消息部分(仅那些分配给 SOAP 主体的)引用在 XML 模式中定义的类型。在这种情况下,输入和输出消息创建如下:
  输入消息 输出消息
从何处派生而来 WSDL 操作的 wsdl:input 子代(如果有),以及 WSDL 消息和其识别的部分 WSDL 操作的 wsdl:output 子代(如果有),以及 WSDL 消息和其识别的部分
元素名称 WSDL 操作元素上的名称属性的值 后缀为“Response”的 WSDL 操作元素上的名称属性的值
元素的名称空间 相应的 soap:body 元素上的名称空间属性值 相应的 soap:body 元素上的名称空间属性值

本地复杂类型的每个消息,是一个元素序列。每个元素的名称是分别由输入或输出元素识别的消息的 WSDL 部分上的名称属性值。这些元素没有名称空间(底层模式表示形式 =“未限定的” ),并且为本地作用域以避免名称冲突。这些局部元素的类型是 XML 模式类型(由相应的部分元素引用)。(此类型在 WSDL 模式中将为全局类型。)

如果 soap:body 在 WSDL 定义中使用 use =“encoded” 来定义,则消息定义包含对 SOAP-ENV 名称空间中的属性组 encodingStyle 的引用,并且 xsi: type 输出策略设置为 “遵循 SOAP 编码规则”。否则,消息上的 xsi: type 输出策略设置为“从不”。

局限性

这描述与导入 WSDL 定义相关的一些局限性。这是 WSDL 不与 WS-I 兼容的地方。
SOAP 数组
WSDL 1.1 定义可以定义 SOAP 数组(仅对 WSDL rpc 编码的样式和不 WS-I 兼容的可用):
    <xsd:complexType name="t">
          <xsd:complexContent>
            <xsd:restriction base="SOAP-ENC:Array">
              <xsd:sequence>
                <xsd:element name="item" type="string" maxOccurs="unbounded"/>
              </xsd:sequence>
              <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/>
                        </xsd:restriction>
          </xsd:complexContent>
    </xsd:complexType>

不完全支持 SOAP 数组语法的某些用法。尽管在解析过程中创建了有用的树(并且可以在写入时序列化),请注意:

  • 模型不考虑 SOAP-ENC:arrayType 属性。
  • 部分发送的数组的模型不考虑 SOAP-ENC:offset 属性。

    例如,使用 offset[2] 指定的数组的第一个元素可能在 ESQL 中作为 InputRoot.MRM.array.item[1] 而不是作为 InputRoot.MRM.array.item[3] 访问。

  • 多维数组的模型将表示序列化为单维。例如,一个 2 维数组在 ESQL 中不是作为 InputRoot.MRM.array.item[x][y] 访问,而是作为 InputRoot.MRM.array.item[i](其中索引 i 必须正确计算)访问。
匿名元素
除上述外,WSDL 描述以下格式的 SOAP 实例文档:
    <SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]">
       <item xsi:type="xsd:string">A general text string</item>
       <item xsi:type="xsd:token">A restriction of the string type</item>
       <item xsi:type="xsd:Name">ARestrictionOfTheTokenType</item>
    </SOAP-ENC:Array>

代理模型按要求对此进行处理,但是在 SOAP 编码中,数组元素也可用使用 SOAP 编码空间的类型元素。这意味着使用相同 WSDL 定义的应用处可用创建以下形式的实例文档:

    <SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]">
       <SOAP-ENC:string>A general text string</SOAP-ENC:string>
       <SOAP-ENC:token>A restriction of the string type</SOAP-ENC:token>
       <SOAP-ENC:Name>ARestrictionOfTheTokenType</ SOAP-ENC:Name>
    </SOAP-ENC:Array>

通过导入 WSDL 创建的代理模型必须手动编辑以处理此种情况,除非它可以使解析器将其作为自定义元素。

相关概念
消息建模
消息模型
相关任务
开发消息模型
使用消息定义文件
使用消息模型对象
相关参考
消息模型引用信息
导入格式
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ad30560_