第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 エンティティーを表すために生成されます。
- org.objectweb.hello_world_soap_http.types パッケージの XML タイプを表すクラス。HelloWorld の例では、生成されるタイプは、要求メッセージと応答メッセージのさまざまなラッパーのみです。これらのデータ型の一部は、非同期呼び出しモデルに役立ちます。