10.6 メタデータの発行

Webサービス側のJAX-WSエンジンは,要求に応じてWebサービス(Webサービス実装クラスまたはプロバイダ実装クラス)のメタデータを記述したWSDLファイルを発行できます。発行されたWSDLファイルは,cjwsimportコマンドを使用してWebサービス,およびWebサービスクライアントの開発に必要なJavaコードを生成するときに利用できます。

ここでは,メタデータの発行を利用するに当たって,注意が必要な点について説明します。

<この節の構成>
(1) メタデータの発行条件
(2) 発行されるメタデータ
(3) WSDLの更新
(4) メタデータ発行の有効/無効
(5) WARファイルに複数のWebサービス実装クラスまたはプロバイダ実装クラスを含む場合の注意
(6) WSDL定義またはXML Schemaをインポート/インクルードしている場合の注意
(7) WSDLのsoap12:binding要素のtransport属性についての注意

(1) メタデータの発行条件

POJOとEJBのWebサービスのそれぞれの発行条件を説明します。

(a) POJOのWebサービスの場合

POJOのWebサービスのメタデータの発行条件を次の表に示します。Webサービス側のJAX-WSエンジンが,次の表に示す条件をすべて満たしたHTTPリクエストを受信したときにメタデータが発行されます。

表10-10 POJOのWebサービスのメタデータの発行に必要なHTTPリクエスト

項番項目条件
1HTTPメソッドGETメソッド
2URLスキーマhttpまたはhttps
3ホスト名(:ポート番号)メタデータの発行を要求するWebサービスが存在するホスト名(およびポート番号)
4コンテキストパスメタデータの発行を要求するWebサービスが含まれるWebアプリケーションのコンテキストパス
5Webサービス名メタデータの発行を要求する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

(b) EJBのWebサービスの場合

EJBのWebサービスのメタデータの発行条件を次の表に示します。Webサービス側のJAX-WSエンジンが,次の表に示す条件をすべて満たしたHTTPリクエストを受信したときにメタデータが発行されます。

表10-11 EJBのWebサービスのメタデータの発行に必要なHTTPリクエスト

項番項目条件
1HTTPメソッドGETメソッド
2URLスキーマhttpまたはhttps
3ホスト名(:ポート番号)メタデータの発行を要求するWebサービスが存在するホスト名(およびポート番号)
4コンテキストパスメタデータの発行を要求するWebサービスが含まれるWebアプリケーションのコンテキストパス
5Webサービス名メタデータの発行を要求するWebサービス(Webサービス実装クラスのサービス名)
6EJBのクラス名メタデータの発行を要求する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

(2) 発行されるメタデータ

リクエスト時の条件と,発行されるメタデータの対応を次の表に示します。

表10-12 リクエストの条件と発行されるメタデータの対応

項番リクエスト時の条件発行されるメタデータWebサービスの適用可否
POJOEJB
1javax.jws.WebServiceアノテーション(Webサービス実装クラスの場合),またはjavax.xml.ws.WebServiceProviderアノテーション(プロバイダ実装クラスの場合)にwsdlLocation属性がある場合wsdlLocation属性に指定された場所にあるWSDLファイルが返されます。
2javax.jws.WebServiceアノテーション(Webサービス実装クラスの場合),またはjavax.xml.ws.WebServiceProviderアノテーション(プロバイダ実装クラスの場合)にwsdlLocation属性の指定はないが,デプロイされたWARファイルのWEB-INF/wsdlディレクトリにwsdl:service要素を持つWSDLファイルがある場合デプロイされたWebアプリケーションのWEB-INF/wsdlディレクトリにあるWSDLファイルが返されます。
3WSDLがWebアプリケーション内にない場合
(項番1および項番2以外の場合)
対象がWebサービス実装クラスの場合は,WSDLが新たに生成されて返されます。
対象がプロバイダ実装クラスの場合は,メタデータは発行されません。
(凡例)
○:適用されます。
-:適用されません。
注※
EJBのWebサービスの場合,Webサービス実装クラスだけに適用されます。

メタデータが発行される前提条件は,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によるカスタマイズ」を参照してください。

(3) WSDLの更新

Webサービス側のJAX-WSエンジンは,Webサービスがデプロイされるときに,Webサービス実装クラスであれば必要に応じてWSDLファイルを自動生成します。自動生成しない場合でも,WARファイルに含まれるWSDLを基に,次の情報を反映したWSDLを返します。

(4) メタデータ発行の有効/無効

メタデータの発行の有効/無効は,com.cosminexus.jaxws.security.publish_wsdlプロパティの値で指定できます。POJOとEJBの両方のWebサービスで指定できます。com.cosminexus.jaxws.security.publish_wsdlプロパティについては,「10.1.2 共通定義ファイルの設定項目」を参照してください。

(5) WARファイルに複数のWebサービス実装クラスまたはプロバイダ実装クラスを含む場合の注意

メタデータは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ディレクトリに含める必要があります。

(6) WSDL定義またはXML Schemaをインポート/インクルードしている場合の注意

WSDL定義またはXML Schemaをインポート,インクルードしている場合,Webサービスの開発で使用したWSDL定義やXML SchemaをそのままWARファイルに含めると,正常にメタデータが発行できなくなることがあります。

インポートまたはインクルード対象のファイルをWARファイルに含める場合,インポート元またはインクルード元のWSDL定義やXML Schemaに含まれるパス情報を確認し,次に示す方法でパス情報を適切に修正する必要があります。

(7) WSDLのsoap12:binding要素のtransport属性についての注意

自動生成されて発行されるSOAP 1.2仕様のWSDLで,soap12:binding要素のtransport属性は,デフォルトでは次のURLです。

http://www.w3.org/2003/05/soap/bindings/HTTP/

次のURLに変更したい場合は,動作定義ファイルに定義を追加してください。

変更したいURL
http://schemas.xmlsoap.org/soap/http
追加する定義の内容

com.cosminexus.jaxws.publish_wsdl.soap12binding=WSI_BP20_TRANSPORT