Web服务互操作性 - WSDL复杂类型扩展

4
假设我们有一个使用WSDL复杂类型扩展的Web服务。考虑下面的(有效的WSDL)示例,其中Vechicle是抽象的。两种类型CarBike都从它继承:
<xs:complexType name="Vehicle" abstract="true">
  <xs:sequence>
    <xs:element name="common1" type="xs:string" minOccurs="0"/>
    <xs:element name="common2" type="xs:string" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="Car">
  <xs:complexContent>
    <xs:extension base="tns:Vehicle">
      <xs:sequence>
        <xs:element name="carValue1" type="xs:string" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
<xs:complexType name="Bike">
  <xs:complexContent>
    <xs:extension base="tns:Vehicle">
      <xs:sequence>
        <xs:element name="bikeValue1" type="xs:string" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

还有一种类型是Transport,它使用Vehicle类型作为其中的一个元素:

<xs:complexType name="Transport">
  <xs:sequence>
      <xs:choice>
        <xs:element ref="tns:Car"/>
        <xs:element ref="tns:Bike"/>
      </xs:choice>
    <xs:element name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>

请注意,Vehicle不是Transport中的一个可能类型,这当然是因为Vehicle是抽象的。在Java Metro堆栈中很容易生成上述内容。Blaise Doughan's blogs给了我一些有价值的意见。
我的问题是关于Web服务互操作性方面的,特别是关于WS-I基本配置文件我能确定符合WS-I标准的Web服务框架将能够使用这样的Web服务吗? 我知道WS-I基本上只规定了WSDL中允许的子集。我尝试阅读WS-I规范以理解这个问题,但没有真正的进展。对我来说,语言太过复杂。我找到了一篇2004年的文章,提出了一些问题:
这种担忧的基本原因是使用扩展机制进行值对象继承不符合WS-I基本配置文件的规定,尽管它没有被明确排除。目前,在WS-I基本配置文件中没有提到使用扩展结构,此外,WS-I兼容性测试套件也不涵盖此案例。
......但那是在2004年,显然与WS-I基本配置文件v1.0有关。自那时以来,WS-I基本配置文件1.1、1.2和2.0规范已经发布。
问题是:使用WSDL值类型扩展功能(即<xs:complexType name="xxx" abstract="true"><xs:extension base="xxx">)的Web服务是否能在所有声称符合WS-I基本配置文件的框架中工作?他们能够消费这样的Web服务吗?
1个回答

1

WS-I Basic Profile称以下关于xml的内容:

该Profile使用Web服务描述语言(WSDL)来将服务的描述作为在消息上操作的端点集合。Profile的这一部分通过引用以下规范(...)纳入了以下规范:XML Schema Part 1:结构

因此,它将XML Schema作为其基础之一进行引用。在那里,你会发现

抽象复杂类型可以用作{基类型定义},甚至可以用作元素声明的{类型定义},在每种情况下都必须使用具体派生类型定义进行验证,无论是通过xsi:type(§2.6.1)还是替换组的操作。

此外,它定义了关于<extension base="QName">的构造,文档中有很多内容介绍。
但是所有这些都是在概念层面上,不一定直接涉及对象继承。虽然可能不太难做出这样的映射(而且您的链接正好说明了这一点),但也没有严格定义。我想这就是他们提出关注的原因。
因此,在技术和语法上,该结构是标准的一部分,但实现可能以未预见的方式处理它。另一方面,遵循标准的工具应该能够同时接受和输出有效的WS-I XML,并执行XML标准中指定的验证。
总之,我认为任何无法以某种方式处理您的结构的工具都不是有效的WS-I实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接