WSDL 複合型拡張を使用する Web サービスがあるとします。以下の (有効な WSDL) の例を考えてみましょうVechicle
。Car
との 2 つのタイプが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>
およびその型をその要素の 1 つとして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 のブログは、ここで貴重な情報を提供してくれました。
私の質問は、特にWS-I Basic Profileに関連して、これが Web サービスの相互運用性に関してどのように機能するかということです。WS-I 準拠の Web サービス フレームワークがそのような Web サービスを利用できると確信できますか? . WS-I は基本的に、WSDL で許可されているもののサブセットのみを指定していることを理解しています。この問題を理解するために WS-I 仕様を読んでみましたが、うまくいきませんでした。言語は私には難しすぎる。いくつかの懸念を提起する2004 年の記事を見つけました。
この懸念の基本的な理由は、値オブジェクトの継承のための拡張メカニズムの使用は、WS-I 基本プロファイルによって明確に除外されていませんが、WS-I 基本プロファイルの範囲外であるためです。現在、WS-I 基本プロファイルで拡張構造を使用することについては言及されておらず、さらに、WS-I コンプライアンス テスト スイートはこのケースをカバーしていません。
...しかし、それは 2004 年のことであり、明らかに WS-I Basic Profile v1.0 に関連しています。その後、WS-I Basic プロファイル 1.1、1.2、および 2.0 仕様がリリースされました。
問題は、WSDL 値型拡張機能 (つまり<xs:complexType name="xxx" abstract="true">
および) を使用する Web サービスは、 WS-I Basic Profileに準拠<xs:extension base="xxx">
していると主張するすべてのフレームワークで機能するかということです。彼らはそのような Web サービスを利用できますか?