Menu Close
27.2. 開始点コードの生成
概要
JAX-WS は、WSDL で定義されたサービスからそのサービスをサービスプロバイダーとして実装する Java クラスへの詳細なマッピングを指定します。wsdl:portType
要素で定義される論理インターフェースは、サービスエンドポイントインターフェース (SEI) にマッピングされます。WSDL で定義された複合型は、Java Architecture for XML Binding (JAXB) 仕様で定義されているマッピングに従って Java クラスにマッピングされます。wsdl:service
要素で定義されるエンドポイントも、サービスを実装するサービスプロバイダーにアクセスするためにコンシューマーによって使用される Java クラスに生成されます。
cxf-codegen-plugin
Maven プラグインがこのコードを生成します。実装の開始点コードを生成するオプションも提供します。コードジェネレーターには、生成されるコードを制御するためのさまざまなオプションが用意されています。
コードジェネレーターの実行
例27.1「サービスコードの生成」に、コードジェネレーターを使用して、サービスの開始点コードを生成する方法を示します。
例27.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>-server</extraarg> <extraarg>-impl</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
これにより、以下の操作が行われます。
-
-impl
オプションは、WSDL コントラクトの各wsdl:portType
要素のシェル実装クラスを生成します。 -
-server
オプションは、サービスプロバイダーをスタンドアロンアプリケーションとして実行するための単純なmain()
を生成します。 -
sourceRoot
は、生成されたコードが outputDir という名前のディレクトリーに書き込まれることを指定します。 -
wsdl
要素は、コードが生成される WSDL コントラクトを指定します。
コードジェネレーターのオプションの完全なリストは、「cxf-codegen-plugin」を参照してください。
生成されるコード
表27.1「サービスプロバイダー用に生成されるクラス」で、サービスプロバイダを作成するために生成されるファイルについて説明します。
表27.1 サービスプロバイダー用に生成されるクラス
ファイル | 説明 |
---|---|
SEI。このファイルには、サービスプロバイダーが実装するインターフェースが含まれます。このファイルは編集しないでください。 | |
| エンドポイント。このファイルには、サービスに対するリクエストを行うために使用する Java クラスコンシューマーが含まれます。 |
スケルトン実装クラス。このファイルを変更して、サービスプロバイダーをビルドします。 | |
| サービスプロバイダーをスタンドアロンプロセスとしてデプロイすることができる基本的なサーバーメインライン。詳細は、「31章サービスの公開」を参照してください。 |
さらに、コードジェネレーターは、WSDL コントラクトで定義されたすべての型の Java クラスを生成します。
生成されるパッケージ
生成されたコードは、WSDL コントラクトで使用される namespace に基づいてパッケージに配置されます。(wsdl:portType
要素、wsdl:service
要素、および wsdl:port
要素に基づき) サービスをサポートするために生成されたクラスは、WSDL コントラクトのターゲット namespace に基づいてパッケージに配置されます。コントラクトの types
要素で定義された型を実装するために生成されたクラスは、types
要素の targetNamespace
属性に基づいてパッケージに配置されます。
マッピングアルゴリズムは以下のようになります。
-
先頭の
http://
またはurn://
は、namespace から取り除かれる。 -
namespace の最初の文字列が有効なインターネットドメイン (例:
.com
または.gov
で終わる) である場合、先頭のwww.
は文字列から取り除かれ、残りの 2 つのコンポーネントは反転される。 -
namespace の最後の文字列がパターン
.xxx
または.xx
のファイル拡張子で終わる場合、エクステンションは取り除かれる。 - namespace の残りの文字列は、ピリオドで区切って結果の文字列に追加される。
- すべての文字は小文字に変換される。