假设我们有一个使用WSDL复杂类型扩展的Web服务。考虑下面的(有效的WSDL)示例,其中
请注意,
我的问题是关于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值类型扩展功能(即
Vechicle
是抽象的。两种类型Car
和Bike
都从它继承:<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服务吗?