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「サービスプロバイダー用に生成されたクラス」 サービスプロバイダーを作成するために生成されるファイルについて説明します。
File | 説明 |
---|---|
SEI。このファイルには、サービスプロバイダーが実装するインターフェイスが含まれています。このファイルは編集しないでください。 | |
| エンドポイント。このファイルには、コンシューマーがサービスで要求を行うために使用する Java クラスが含まれています。 |
スケルトン実装クラス。このファイルを変更して、サービスプロバイダーを構築します。 | |
| サービスプロバイダーをスタンドアロンプロセスとして展開できるようにする基本的なサーバーメインライン。詳細は、31章サービスの公開 を参照してください。 |
さらに、コードジェネレーターは、WSDL コントラクトで定義されているすべてのタイプの Java クラスを生成します。
生成されたパッケージ
生成されたコードは、WSDL コントラクトで使用されている名前空間に基づいてパッケージに配置されます。(wsdl:portType
要素、wsdl:service
要素、および wsdl:port
要素に基づき) サービスをサポートするために生成されたクラスは、WSDL コントラクトのターゲット namespace に基づいてパッケージに配置されます。コントラクトの types
要素で定義された型を実装するために生成されたクラスは、types
要素の targetNamespace
属性に基づいてパッケージに配置されます。
マッピングアルゴリズムは次のとおりです。
-
先頭の
http://
またはurn://
は名前空間から取り除かれます。 -
namespace の最初の文字列が有効なインターネットドメイン (例:
.com
または.gov
で終わる) である場合、先頭のwww.
は文字列から取り除かれ、残りの 2 つのコンポーネントは反転される。 -
namespace の最後の文字列がパターン
.xxx
または.xx
のファイル拡張子で終わる場合、エクステンションは取り除かれる。 - 名前空間の残りの文字列は、結果の文字列に追加され、ドットで区切られます。
- すべての文字は小文字になります。