Webサービス側のJAX-WSエンジンは,要求に応じてWebサービス(Webサービス実装クラスまたはプロバイダ実装クラス)のメタデータを記述したWSDLファイルを発行できます。発行されたWSDLファイルは,cjwsimportコマンドを使用してWebサービス,およびWebサービスクライアントの開発に必要なJavaコードを生成するときに利用できます。
ここでは,メタデータの発行を利用するに当たって,注意が必要な点について説明します。
POJOとEJBのWebサービスのそれぞれの発行条件を説明します。
POJOのWebサービスのメタデータの発行条件を次の表に示します。Webサービス側のJAX-WSエンジンが,次の表に示す条件をすべて満たしたHTTPリクエストを受信したときにメタデータが発行されます。
表10-10 POJOのWebサービスのメタデータの発行に必要なHTTPリクエスト
項番 | 項目 | 条件 | |
---|---|---|---|
1 | HTTPメソッド | GETメソッド | |
2 | URL | スキーマ | httpまたはhttps |
3 | ホスト名(:ポート番号) | メタデータの発行を要求するWebサービスが存在するホスト名(およびポート番号) | |
4 | コンテキストパス | メタデータの発行を要求するWebサービスが含まれるWebアプリケーションのコンテキストパス | |
5 | Webサービス名 | メタデータの発行を要求するWebサービス(Webサービス実装クラスまたはプロバイダ実装クラスのサービス名) | |
6 | クエリストリング | "wsdl"または"WSDL"(文字の大小は区別されます) |
要求されたURLに対応するWebサービスに関連づけられたWSDLファイルが,HTTPレスポンスのコンテンツとして要求元に発行されます。リクエストURLには,次に示すようなクエリストリングを付加する必要があります。
GET http://sample.com:8085/fromjava/AddNumbersImplService?wsdl HTTP/1.1
GET http://sample.com:8085/fromjava/AddNumbersImplService?WSDL HTTP/1.1
EJBのWebサービスのメタデータの発行条件を次の表に示します。Webサービス側のJAX-WSエンジンが,次の表に示す条件をすべて満たしたHTTPリクエストを受信したときにメタデータが発行されます。
表10-11 EJBのWebサービスのメタデータの発行に必要なHTTPリクエスト
項番 | 項目 | 条件 | |
---|---|---|---|
1 | HTTPメソッド | GETメソッド | |
2 | URL | スキーマ | httpまたはhttps |
3 | ホスト名(:ポート番号) | メタデータの発行を要求するWebサービスが存在するホスト名(およびポート番号) | |
4 | コンテキストパス | メタデータの発行を要求するWebサービスが含まれるWebアプリケーションのコンテキストパス | |
5 | Webサービス名 | メタデータの発行を要求するWebサービス(Webサービス実装クラスのサービス名) | |
6 | EJBのクラス名 | メタデータの発行を要求するWebサービスのEJBのクラス名 | |
7 | クエリストリング | "wsdl"または"WSDL"(文字の大小は区別されます) |
要求されたURLに対応するWebサービスに関連づけられたWSDLファイルが,HTTPレスポンスのコンテンツとして要求元に発行されます。リクエストURLには,次に示すようなクエリストリングを付加する必要があります。
GET http://sample.com:8085/statelessjava/AddNumbersImplService/AddNumbersImpl?wsdl HTTP/1.1
GET http://sample.com:8085/statelessjava/AddNumbersImplService/AddNumbersImpl?WSDL HTTP/1.1
リクエスト時の条件と,発行されるメタデータの対応を次の表に示します。
表10-12 リクエストの条件と発行されるメタデータの対応
項番 | リクエスト時の条件 | 発行されるメタデータ | Webサービスの適用可否 | |
---|---|---|---|---|
POJO | EJB※ | |||
1 | javax.jws.WebServiceアノテーション(Webサービス実装クラスの場合),またはjavax.xml.ws.WebServiceProviderアノテーション(プロバイダ実装クラスの場合)にwsdlLocation属性がある場合 | wsdlLocation属性に指定された場所にあるWSDLファイルが返されます。 | ○ | ○ |
2 | javax.jws.WebServiceアノテーション(Webサービス実装クラスの場合),またはjavax.xml.ws.WebServiceProviderアノテーション(プロバイダ実装クラスの場合)にwsdlLocation属性の指定はないが,デプロイされたWARファイルのWEB-INF/wsdlディレクトリにwsdl:service要素を持つWSDLファイルがある場合 | デプロイされたWebアプリケーションのWEB-INF/wsdlディレクトリにあるWSDLファイルが返されます。 | ○ | - |
3 | WSDLがWebアプリケーション内にない場合 (項番1および項番2以外の場合) | 対象がWebサービス実装クラスの場合は,WSDLが新たに生成されて返されます。 対象がプロバイダ実装クラスの場合は,メタデータは発行されません。 | ○ | ○ |
メタデータが発行される前提条件は,Webサービスのアプリケーションがエラーもなく,正常にデプロイされ実行が開始されている状態です。
メタデータの発行に関する注意事項を示します。
プロバイダ実装クラスの場合,基本的にWSDLを持つ必要がありません。また,このため,標準仕様でもjavax.xml.ws.WebServiceProviderアノテーションとWSDLのマッピング規則は定義されていません。そのため,メタデータを発行したい場合,作成したWSDLをWARファイルに適切に含めておく必要があります(Webサービス実装クラスの場合とは異なり,JAX-WSエンジンによって自動生成されません)。また,WARファイルにcosminexus-jaxws.xmlを含めない場合,javax.xml.ws.WebServiceProviderアノテーションのportName属性とtargetNamespace属性は必須です。WSDLの定義内容に従って,適切な値を設定してください。cosminexus-jaxws.xmlについては,「10.3 cosminexus-jaxws.xmlによるカスタマイズ」を参照してください。
Webサービス側のJAX-WSエンジンは,Webサービスがデプロイされるときに,Webサービス実装クラスであれば必要に応じてWSDLファイルを自動生成します。自動生成しない場合でも,WARファイルに含まれるWSDLを基に,次の情報を反映したWSDLを返します。
<!-- Published by Cosminexus JAX-WS 0900 (2012.01.01 00:00). --> |
メタデータの発行の有効/無効は,com.cosminexus.jaxws.security.publish_wsdlプロパティの値で指定できます。POJOとEJBの両方のWebサービスで指定できます。com.cosminexus.jaxws.security.publish_wsdlプロパティについては,「10.1.2 共通定義ファイルの設定項目」を参照してください。
メタデータはWebサービス実装クラスまたはプロバイダ実装クラス単位で取得します。WARファイルに複数のWebサービス実装クラスまたはプロバイダ実装クラスを含む場合,Webサービス側のJAX-WSエンジンで新たに生成して返すWSDL定義のwsdl:binding要素およびwsdl:port要素は,リクエストで指定したURLのWebサービス実装クラスまたはプロバイダ実装クラスに対応したwsdl:binding要素とwsdl:port要素だけです。WARファイルに含まれるほかのWebサービス実装クラスまたはプロバイダ実装クラスに対応したwsdl:binding要素とwsdl:port要素は含まれません。
WARファイル中のすべてのWebサービス実装クラスまたはプロバイダ実装クラスに対応したwsdl:binding要素とwsdl:port要素を含むメタデータを公開したい場合,Webサービス(アプリケーション)開発者が適切なメタデータをあらかじめ作成し,WEB-INF/wsdlディレクトリに含める必要があります。
WSDL定義またはXML Schemaをインポート,インクルードしている場合,Webサービスの開発で使用したWSDL定義やXML SchemaをそのままWARファイルに含めると,正常にメタデータが発行できなくなることがあります。
インポートまたはインクルード対象のファイルをWARファイルに含める場合,インポート元またはインクルード元のWSDL定義やXML Schemaに含まれるパス情報を確認し,次に示す方法でパス情報を適切に修正する必要があります。
自動生成されて発行されるSOAP 1.2仕様のWSDLで,soap12:binding要素のtransport属性は,デフォルトでは次のURLです。
http://www.w3.org/2003/05/soap/bindings/HTTP/
次のURLに変更したい場合は,動作定義ファイルに定義を追加してください。
com.cosminexus.jaxws.publish_wsdl.soap12binding=WSI_BP20_TRANSPORT |