假设我们有一个使用WSDL复杂类型扩展的Web服务。考虑下面的(有效的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 Basic Profile相关。 我可以确定符合WS-I标准的Web服务框架是否能够使用此类Web服务?。据我所知,WS-I基本上只指定了WSDL中允许的子集。我已经尝试阅读WS-I规范来理解这个问题,但没有真正的运气。这种语言对我来说太难了。我发现article from 2004引起了一些担忧:
这种担忧的基本原因是使用了扩展名 值对象继承的机制在WS-I基础之外 简介,虽然没有明确排除它。目前,有 没有提到在WS-I基本配置文件中使用扩展构造 此外,WS-I一致性测试套件不包括此内容 情况下。
...但那是在2004年,显然与WS-I Basic Profile v1.0有关。从那时起,WS-I Basic配置文件1.1,1.2和2.0规范已经发布。
所以问题是:使用WSDL值类型扩展功能的Web服务(即<xs:complexType name="xxx" abstract="true">
和<xs:extension base="xxx">
)是否适用于声称符合WS-I Basic Profile的所有框架?他们可以使用这样的网络服务吗?
答案 0 :(得分:1)
WS-I Basic Profile说明以下关于xml的内容:
配置文件使用Web服务描述语言(WSDL)将服务描述作为对消息进行操作的端点集。该概况的这一部分通过引用(...)包含以下规范:XML Schema Part 1: Structures
因此它将XML Schema引用为它所基于的东西。 In there, you'll find:
抽象复杂类型可以用作{基本类型定义},甚至可以用作元素声明的{类型定义},在每种情况下都提供具体的派生类型定义用于验证·,通过xsi: type(§2.6.1)或替换组的操作。
此外,it defines该文档有很多话要说的构造<extension base="QName">
。
但所有这些都是概念层面的,不一定直接将它与对象继承相关联。虽然制作这样的映射可能并不太困难(并且您的链接确实显示了这一点),但它也没有严格定义。我猜这是他们在提出问题时所谈论的内容。
从技术和语法上讲,构造是标准的一部分,但实现可能会以不可预见的方式处理它。另一方面,遵循标准的工具应该能够接受和输出有效的WS-I XML,并执行XML standard中指定的验证。
总而言之,我会说任何无法以某种方式处理构造的工具都不是有效的WS-I实现。