4

WSDL 複合型拡張を使用する Web サービスがあるとします。以下の (有効な WSDL) の例を考えてみましょうVechicleCarとの 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 サービスを利用できますか?

4

1 に答える 1

1

WS-I Basic Profileは、xmlについて次のように述べています。

プロファイルは、Webサービス記述言語(WSDL)を使用して、メッセージを操作するエンドポイントのセットとしてサービスの記述を有効にします。プロファイルのこのセクションには、参照により次の仕様が組み込まれています(...):XMLスキーマパート1:構造

そのため、XMLスキーマを基になっているものとして参照します。そこに、あなたは見つけるでしょう

抽象複合型は、{基本型定義}として、または要素宣言の{型定義}としても使用できます。ただし、いずれの場合も、xsi:type(§ 2.6.1)または置換グループの操作。

さらに、それはドキュメントが言うことがたくさんある構造を定義します。<extension base="QName">

しかし、これはすべて概念レベルであり、必ずしもオブジェクトの継承に直接関連しているわけではありません。そのようなマッピングを作成することはおそらくそれほど難しいことではありませんが(そしてあなたのリンクはそれを正確に示しています)、それは厳密に定義されていません。私は彼らが懸念を提起するときにそれについて話していると思います。

したがって、技術的および構文的に、構造は標準の一部ですが、実装は予期しない方法でそれを処理する可能性があります。一方、標準に準拠しているツールは、有効なWS-I XMLを受け入れて出力し、XML標準でも指定されているように検証を実行できる必要があります。

結論として、どういうわけかあなたの構築を処理できないツールは、有効なWS-I実装ではないと思います。

于 2012-12-14T02:53:54.990 に答える