这描述了在导入 WSDL 定义时生成的对象,以及一些需要注意的局限性。
如果需要解析 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 物理格式的物理属性中指定,并且需要进行相应的设置。
此消息上的 xsi:type 输出策略设置为“Never”。
输入消息 | 输出消息 | |
---|---|---|
从何处派生而来 | 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 输出策略设置为“从不”。
<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 数组语法的某些用法。尽管在解析过程中创建了有用的树(并且可以在写入时序列化),请注意:
例如,使用 offset[2] 指定的数组的第一个元素可能在 ESQL 中作为 InputRoot.MRM.array.item[1] 而不是作为 InputRoot.MRM.array.item[3] 访问。
<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 创建的代理模型必须手动编辑以处理此种情况,除非它可以使解析器将其作为自定义元素。