Menu Close

第28章 WSDL コントラクトからのコンシューマーの開発

概要

コンシューマーを作成する方法の 1 つは、WSDL コントラクトから始めることです。コントラクトは、コンシューマーがリクエストを行うサービスの操作、メッセージ、およびトランスポートの詳細を定義します。コンシューマーの開始点コードは、WSDL コントラクトから生成されます。コンシューマーが必要とする機能は、生成されるコードに追加されます。

28.1. スタブコードの生成

概要

cxf-codegen-plugin Maven プラグインは、WSDL コントラクトからスタブコードを生成します。スタブコードは、リモートサービスで操作を呼び出すのに必要なサポートコードを提供します。

コンシューマーの場合は、cxf-codegen-plugin Maven プラグインは以下の型のコードを生成します。

  • スタブコード: コンシューマーを実装するためのサポートファイル。
  • 開始点コード: リモートサービスに接続し、リモートサービス上ですべての操作を呼び出すサンプルコード。

コンシューマーコードの生成

コンシューマーコードを生成するには、cxf-codegen-plugin Maven プラグインを使用します。例28.1「コンシューマーコードの生成」に、コードジェネレーターを使用してコンシューマーコードを生成する方法を示します。

例28.1 コンシューマーコードの生成

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>${cxf.version}</version>
  <executions>
    <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration>
        <sourceRoot>outputDir</sourceRoot>
        <wsdlOptions>
          <wsdlOption>
            <wsdl>wsdl</wsdl>
            <extraargs>
              <extraarg>-client</extraarg>
            </extraargs>
          </wsdlOption>
        </wsdlOptions>
      </configuration>
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>

ここで、OutputDir は生成されたファイルが置かれるディレクトリーの場所で、wsdl は WSDL コントラクトの場所を指定します。-client オプションは、コンシューマーの main() メソッドの開始点コードを生成します。

cxf-codegen-plugin Maven プラグインで利用可能な引数の完全なリストは、「cxf-codegen-plugin」を参照してください。

生成されるコード

コード生成プラグインは、例26.1「HelloWorld WSDL コントラクト」に記載されているコントラクト用に以下の Java パッケージを生成します。

  • org.apache.hello_world_soap_http: このパッケージは http://apache.org/hello_world_soap_http ターゲット namespace から生成されます。この namespace で定義されるすべての WSDL エンティティー (例: Greeter ポート型および SOAPService サービス) は、この Java パッケージの Java クラスにマッピングされます。
  • org.apache.hello_world_soap_http.types: このパッケージは http://apache.org/hello_world_soap_http/types ターゲット namespace から生成されます。この namespace で定義されるすべての XML 型 (つまり、HelloWorld コントラクトの wsdl:types 要素で定義されるものすべて) は、この Java パッケージの Java クラスにマッピングされます。

cxf-codegen-plugin Maven プラグインによって生成されるスタブファイルは、以下のカテゴリーに分類されます。

  • org.apache.hello_world_soap_http パッケージの WSDL エンティティーを表すクラス。WSDL エンティティーを表すために以下のクラスが生成されます。

    • Greeter: Greeter wsdl:portType 要素を表す Java インターフェース。JAX-WS の用語では、この Java インターフェースはサービスエンドポイントインターフェース (SEI) です。
    • SOAPService: SOAPService wsdl:service 要素を表す Java サービスクラス (javax.xml.ws.Service を拡張)。
    • PingMeFault: pingMeFault wsdl:fault 要素を表す Java 例外クラス (java.lang.Exception を拡張)。
  • org.objectweb.hello_world_soap_http.types パッケージの XML 型を表すクラス。HelloWorld の例では、生成された型のみがリクエストおよびリプライメッセージのさまざまなラッパーになります。これらのデータ型の一部は、非同期呼び出しモデルに役立ちます。