第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 ターゲット名前空間から生成されます。この名前空間で定義されたすべての WSDL エンティティー (たとえば、Greeter ポートタイプや SOAPService サービス) は、この Java パッケージの Java クラスにマップされます。
  • org.apache.hello_world_soap_http.types: このパッケージは http://apache.org/hello_world_soap_http/types ターゲット名前空間から生成されます。この 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 の例では、生成されるタイプは、要求メッセージと応答メッセージのさまざまなラッパーのみです。これらのデータ型の一部は、非同期呼び出しモデルに役立ちます。