Cosminexus アプリケーションサーバ V8

Webサービス開発の手引

手引書

3020-3-U31-40

目　　次

前書き

変更内容

はじめに

第1編　概要

1.　Webサービスの開発および実行の概要

1.1　Webサービスの開発の概要

1.2　Webサービスの開発時および実行時に使用する機能

1.3　Webサービスの開発および実行の前提条件

1.3.1　前提となる構成ソフトウェア

1.3.2　機能および仕様に関する前提条件

1.4　WebサービスとWebサービスクライアントの形態

1.4.1　Webサービスの形態

1.4.2　Webサービスクライアントの形態

1.5　JAX-WSエンジンの設定

2.　開発の流れ

2.1　Webサービス開発の流れ

2.1.1　WSDLを起点とした開発の流れ

2.1.2　SEIを起点とした開発の流れ

2.1.3　SEIを起点とした開発の流れ（cjwsgenコマンドを使用する場合）

2.1.4　プロバイダを起点とした開発の流れ

2.2　Webサービスクライアント開発の流れ

2.2.1　スタブベースのWebサービスクライアントの開発の流れ

2.2.2　ディスパッチベースのWebサービスクライアントの開発の流れ

2.2.3　APIベースのWebサービスクライアントの開発の流れ

第2編　開発と実行

3.　開発のポイント

3.1　WSDLの作成

3.2　WSDLとJavaソースのマッピング

3.2.1　WSDLからJavaソースへのマッピング例

3.2.2　JavaソースからWSDLへのマッピング例

3.3　Webサービス実装クラスおよびプロバイダ実装クラスの作成

3.4　web.xmlの作成

3.5　アーカイブの作成

3.5.1　WARファイルの構成

3.5.2　EJB JARファイルの構成

3.5.3　EARファイルの作成

3.5.4　EJBのWebサービスの設定用WARファイルの作成

3.6　Webサービスクライアントの実装

3.6.1　スタブベースの実装例

3.6.2　ディスパッチベースの実装例

3.6.3　JAX-WS APIを使用する場合の実装例

3.6.4　注意事項

3.6.5　アドレッシング機能を使用したWebサービスにアクセスする場合の注意事項

4.　WSDLを起点とした開発の例

4.1　開発例の構成（WSDL起点）

4.2　開発例の流れ（WSDL起点）

4.3　Webサービスの開発例（WSDL起点）

4.3.1　WSDLファイルを作成する

4.3.2　SEIを生成する

4.3.3　Webサービス実装クラスを作成する

4.3.4　Webサービス実装クラスをコンパイルする

4.3.5　web.xmlを作成する

4.3.6　application.xmlを作成する

4.3.7　EARファイルを作成する

4.4　デプロイと開始の例（WSDL起点）

4.4.1　EARファイルをデプロイする

4.4.2　Webサービスを開始する

4.5　Webサービスクライアントの開発例（WSDL起点）

4.5.1　サービスクラスを生成する

4.5.2　Webサービスクライアントの実装クラスを作成する

4.5.3　Webサービスクライアントの実装クラスをコンパイルする

4.6　Webサービスの実行例（WSDL起点）

4.6.1　Javaアプリケーション用オプション定義ファイルを作成する

4.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

4.6.3　Webサービスクライアントを実行する

5.　SEIを起点とした開発の例

5.1　開発例の構成（SEI起点）

5.2　開発例の流れ（SEI起点）

5.3　Webサービスの開発例（SEI起点）

5.3.1　Webサービス実装クラスを作成する

5.3.2　Javaソースを生成する

5.3.3　web.xmlを作成する

5.3.4　application.xmlを作成する

5.3.5　WSDLファイルを作成する（任意）

5.3.6　EARファイルを作成する

5.4　デプロイと開始の例（SEI起点）

5.4.1　EARファイルをデプロイする

5.4.2　Webサービスを開始する

5.5　Webサービスクライアントの開発例（SEI起点）

5.5.1　サービスクラスを生成する

5.5.2　Webサービスクライアントの実装クラスを作成する

5.5.3　Webサービスクライアントの実装クラスをコンパイルする

5.6　Webサービスの実行例（SEI起点）

5.6.1　Javaアプリケーション用オプション定義ファイルを作成する

5.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

5.6.3　Webサービスクライアントを実行する

6.　SEIを起点とした開発の例（cjwsgenコマンドを使用する場合）

6.1　開発例の構成（SEI起点・cjwsgenコマンド）

6.2　開発例の流れ（SEI起点・cjwsgenコマンド）

6.3　Webサービスの開発例（SEI起点・cjwsgenコマンド）

6.3.1　コンパイル済みのクラスファイルを保存する

6.3.2　Javaソースを生成する

6.3.3　web.xmlを作成する

6.3.4　application.xmlを作成する

6.3.5　EARファイルを作成する

6.4　デプロイと開始の例（SEI起点・cjwsgenコマンド）

6.4.1　EARファイルをデプロイする

6.4.2　Webサービスを開始する

6.5　Webサービスクライアントの開発例（SEI起点・cjwsgenコマンド）

6.5.1　サービスクラスを生成する

6.5.2　Webサービスクライアントの実装クラスを作成する

6.5.3　Webサービスクライアントの実装クラスをコンパイルする

6.6　Webサービスの実行例（SEI起点・cjwsgenコマンド）

6.6.1　Javaアプリケーション用オプション定義ファイルを作成する

6.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

6.6.3　Webサービスクライアントを実行する

7.　SEIを起点とした開発の例（カスタマイズする場合）

7.1　開発例の構成（SEI起点・カスタマイズ）

7.2　開発例の流れ（SEI起点・カスタマイズ）

7.3　Webサービスの開発例（SEI起点・カスタマイズ）

7.3.1　Webサービス実装クラスを作成する

7.3.2　Javaソースを生成する

7.3.3　web.xmlを作成する

7.3.4　application.xmlを作成する

7.3.5　EARファイルを作成する

7.4　デプロイと開始の例（SEI起点・カスタマイズ）

7.4.1　EARファイルをデプロイする

7.4.2　Webサービスを開始する

7.5　Webサービスクライアントの開発例（SEI起点・カスタマイズ）

7.5.1　サービスクラスを生成する

7.5.2　Webサービスクライアントの実装クラスを作成する

7.5.3　Webサービスクライアントの実装クラスをコンパイルする

7.6　Webサービスの実行例（SEI起点・カスタマイズ）

7.6.1　Javaアプリケーション用オプション定義ファイルを作成する

7.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

7.6.3　Webサービスクライアントを実行する

8.　SEIを起点とした開発の例（EJBのWebサービスの場合）

8.1　開発例の構成（SEI起点・EJBのWebサービス）

8.2　開発例の流れ（SEI起点・EJBのWebサービス）

8.3　Webサービスの開発例（SEI起点・EJBのWebサービス）

8.3.1　Webサービス実装クラスを作成する

8.3.2　Javaソースを生成する

8.3.3　application.xmlを作成する

8.3.4　WSDLファイルを作成する（任意）

8.3.5　EARファイルを作成する

8.4　デプロイと開始の例（SEI起点・EJBのWebサービス）

8.4.1　EARファイルをデプロイする

8.4.2　Webサービスを開始する

8.5　Webサービスクライアントの開発例（SEI起点・EJBのWebサービス）

8.5.1　サービスクラスを生成する

8.5.2　Webサービスクライアントの実装クラスを作成する

8.5.3　Webサービスクライアントの実装クラスをコンパイルする

8.6　Webサービスの実行例（SEI起点・EJBのWebサービス）

8.6.1　Javaアプリケーション用オプション定義ファイルを作成する

8.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

8.6.3　Webサービスクライアントを実行する

9.　プロバイダを起点とした開発の例（SAAJを利用した場合）

9.1　開発例の構成（プロバイダ起点・SAAJ）

9.2　開発例の流れ（プロバイダ起点・SAAJ）

9.3　Webサービスの開発例（プロバイダ起点・SAAJ）

9.3.1　プロバイダ実装クラスを作成する

9.3.2　Javaソースを生成する

9.3.3　web.xmlを作成する

9.3.4　application.xmlを作成する

9.3.5　EARファイルを作成する

9.4　デプロイと開始の例（プロバイダ起点・SAAJ）

9.4.1　EARファイルをデプロイする

9.4.2　Webサービスを開始する

9.5　Webサービスクライアントの開発例（プロバイダ起点・SAAJ）

9.5.1　Webサービスクライアントの実装クラスを作成する

9.5.2　Webサービスクライアントの実装クラスをコンパイルする

9.6　Webサービスの実行例（プロバイダ起点・SAAJ）

9.6.1　Javaアプリケーション用オプション定義ファイルを作成する

9.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

9.6.3　Webサービスクライアントを実行する

10.　JAX-WS機能の設定と動作

10.1　動作定義ファイル

10.1.1　動作定義ファイルの記述規則

10.1.2　共通定義ファイルの設定項目

10.1.3　プロセス別の定義ファイルの設定

10.2　JAX-WSエンジンの動作

10.2.1　JAX-WSエンジンの動作とサポート範囲

10.2.2　ディスカバリとディスパッチ

10.3　cosminexus-jaxws.xmlによるカスタマイズ

10.3.1　cosminexus-jaxws.xmlのファイル名と格納先

10.3.2　cosminexus-jaxws.xmlの書式

10.4　フォルトと例外の処理

10.4.1　Webサービス側のフォルトおよび例外の処理

10.4.2　Webサービスクライアント側のフォルトの処理

10.4.3　Java例外の伝搬

10.4.4　例外をフォルトにバインディングする場合のHTTPステータスコード

10.4.5　エラーページをカスタマイズする場合の注意事項

10.5　インタフェースの透過性

10.6　メタデータの発行

10.7　Webサービスの情報表示

10.8　使用できるHTTPメソッド

10.9　Webサービスの初期化と破棄

10.10　プロキシサーバ経由の接続

10.11　SSLプロトコルによる接続

10.12　ベーシック認証による接続

10.13　SOAPのバージョン選択

10.13.1　SOAPのバージョン選択（Webサービス開発時）

10.13.2　SOAPのバージョン選択（Webサービスクライアント開発時）

10.13.3　SOAPのバージョン選択（実行時）

10.14　コマンドラインを利用したクライアントアプリケーションの実行

10.14.1　コマンドライン利用時の設定

10.14.2　コマンドラインの実行

10.14.3　コマンドライン利用時の注意事項

10.15　HTTPステータスコード

10.16　HTTPヘッダ

10.17　HTTPリクエストボディのgzip圧縮

10.18　HTTPレスポンス圧縮機能との連携

10.19　EJBのWebサービス呼び出し

第3編　リファレンス

11.　コマンド

11.1　cjwsimportコマンド

11.2　aptコマンド

11.3　cjwsgenコマンド

11.4　UACが有効なWindowsでコマンドラインインタフェースを使用する場合の注意事項

11.4.1　管理者がコマンドラインインタフェースを使用する場合

11.4.2　管理者以外がコマンドラインインタフェースを使用する場合

12.　WSDLからJavaへのマッピング

12.1　WSDLからJavaへのデフォルトマッピング

12.1.1　名前空間からパッケージ名へのマッピング

12.1.2　ポートタイプからSEI名へのマッピング

12.1.3　オペレーションからメソッド名へのマッピング

12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）

12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）

12.1.6　スキーマ型からJava型へのマッピング

12.1.7　フォルトから例外クラスへのマッピング

12.1.8　バインディング拡張要素からパラメタへのマッピング

12.1.9　サービスおよびポートからサービスクラスへのマッピング

12.1.10　WSDLからJavaへのマッピングに関する注意事項

12.2　WSDLからJavaへのマッピングのカスタマイズ

12.2.1　埋め込みによるバインディング宣言でのカスタマイズ

12.2.2　外部バインディングファイルによるカスタマイズ

12.2.3　埋め込みによるバインディング宣言と外部バインディングファイルの同時指定

12.2.4　jaxws:bindings要素に指定できる値

12.2.5　カスタマイズ対象となった要素の値

12.2.6　名前衝突時の対応

12.2.7　jaxws:provider要素を記述した場合の動作

12.2.8　SEI名をカスタマイズする場合の注意事項

12.2.9　jaxws:parameter要素でinoutパラメタ名をカスタマイズする場合の注意事項

13.　JavaからWSDLへのマッピング

13.1　JavaからWSDLへのデフォルトマッピング

13.1.1　パッケージ名から名前空間へのマッピング

13.1.2　Webサービス実装クラスからSEIへのマッピング

13.1.3　SEI名からポートタイプへのマッピング

13.1.4　SEIのメソッド名からオペレーションへのマッピング

13.1.5　パラメタおよび戻り値からメッセージのパートへのマッピング（wrapperスタイルの場合）

13.1.6　パラメタおよび戻り値からメッセージのパートへのマッピング（non-wrapperスタイルの場合）

13.1.7　Javaのラッパ例外クラスからフォルトへのマッピング

13.1.8　SEIからバインディングへのマッピング

13.1.9　Webサービス実装クラスからサービスおよびポートへのマッピング

13.1.10　JavaからWSDLへのマッピングに関する注意事項

13.2　JavaからWSDLへのマッピングのカスタマイズ

13.2.1　アノテーション一覧

13.2.2　com.sun.xml.ws.developer.StreamingAttachmentアノテーション

13.2.3　javax.jws.HandlerChainアノテーション

13.2.4　javax.jws.soap.SOAPBindingアノテーション

13.2.5　javax.jws.WebMethodアノテーション

13.2.6　javax.jws.WebParamアノテーション

13.2.7　javax.jws.WebResultアノテーション

13.2.8　javax.jws.WebServiceアノテーション

13.2.9　javax.xml.bind.annotation.XmlMimeTypeアノテーション

13.2.10　javax.xml.ws.Actionアノテーション

13.2.11　javax.xml.ws.BindingTypeアノテーション

13.2.12　javax.xml.ws.FaultActionアノテーション

13.2.13　javax.xml.ws.RequestWrapperアノテーション

13.2.14　javax.xml.ws.ResponseWrapperアノテーション

13.2.15　javax.xml.ws.ServiceModeアノテーション

13.2.16　javax.xml.ws.soap.Addressingアノテーション

13.2.17　javax.xml.ws.soap.MTOMアノテーション

13.2.18　javax.xml.ws.WebFaultアノテーション

13.2.19　javax.xml.ws.WebServiceProviderアノテーション

14.　標準仕様のサポート範囲

14.1　WSDL 1.1仕様のサポート範囲

14.1.1　wsdl:definitions要素

14.1.2　wsdl:import要素

14.1.3　wsdl:types要素

14.1.4　wsdl:message要素

14.1.5　wsdl:part要素

14.1.6　wsdl:portType要素

14.1.7　wsdl:operation要素（wsdl:portType要素の子要素の場合）

14.1.8　wsdl:input要素（wsdl:portType要素の孫要素の場合）

14.1.9　wsdl:output要素（wsdl:portType要素の孫要素の場合）

14.1.10　wsdl:fault要素（wsdl:portType要素の孫要素の場合）

14.1.11　wsdl:binding要素

14.1.12　wsdl:operation要素（wsdl:binding要素の子要素の場合）

14.1.13　wsdl:input要素（wsdl:binding要素の孫要素の場合）

14.1.14　wsdl:output要素（wsdl:binding要素の孫要素の場合）

14.1.15　wsdl:fault要素（wsdl:binding要素の孫要素の場合）

14.1.16　wsdl:service要素

14.1.17　wsdl:port要素

14.1.18　wsdl:documentation要素

14.1.19　soap:binding要素

14.1.20　soap:operation要素

14.1.21　soap:body要素

14.1.22　soap:header要素

14.1.23　soap:fault要素

14.1.24　soap:address要素

14.1.25　soap12:operation要素

14.1.26　soap12:binding要素

14.1.27　soap12:body要素

14.1.28　soap12:header要素

14.1.29　soap12:fault要素

14.1.30　soap12:address要素

14.1.31　xsd:schema要素

14.2　WSDL作成時の注意事項

14.3　JAX-WS 2.1仕様のサポート範囲

14.3.1　JAX-WS 2.1仕様の機能のサポート範囲

14.3.2　Conformanceへの対応

14.4　ハンドラチェイン設定ファイルのサポート範囲

14.4.1　javaee:handler-chains要素

14.4.2　javaee:handler-chain要素

14.4.3　javaee:handler要素

14.4.4　javaee:handler-name要素

14.4.5　javaee:handler-class要素

14.4.6　javaee:soap-header要素

14.4.7　javaee:soap-role要素

14.5　SAAJ 1.3仕様のサポート範囲

14.5.1　Detailインタフェース

14.5.2　Nodeインタフェース

14.5.3　SOAPBodyインタフェース

14.5.4　SOAPElementインタフェース

14.5.5　SOAPEnvelopeインタフェース

14.5.6　SOAPFaultインタフェース

14.5.7　SOAPHeaderインタフェース

14.5.8　SOAPHeaderElementインタフェース

14.5.9　AttachmentPartクラス

14.5.10　MessageFactoryクラス

14.5.11　MimeHeaderクラス

14.5.12　MimeHeadersクラス

14.5.13　SAAJResultクラス

14.5.14　SOAPFactoryクラス

14.5.15　SOAPMessageクラス

14.5.16　SOAPPartクラス

14.5.17　添付ファイルを使用する場合のサポート範囲

14.6　WS-RM 1.2仕様のサポート範囲

14.7　WS-RM Policy 1.2仕様のサポート範囲

15.　JAX-WS APIのサポート範囲

15.1　インタフェースおよびクラスの一覧（JAX-WS）

15.2　クライアントAPI

15.2.1　javax.xml.ws.BindingProviderインタフェース

15.2.2　javax.xml.ws.Dispatchインタフェース

15.2.3　javax.xml.ws.EndpointReferenceクラス

15.2.4　javax.xml.ws.Serviceクラス

15.2.5　javax.xml.ws.wsaddressing.W3CEndpointReferenceクラス

15.3　サービスAPI

15.3.1　javax.xml.ws.Providerインタフェース

15.3.2　javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラス

15.4　コアAPI

15.4.1　com.sun.xml.ws.developer.StreamingAttachmentFeatureクラス

15.4.2　com.sun.xml.ws.developer.StreamingDataHandlerクラス

15.4.3　org.jvnet.mimepull.MIMEConfigクラス

15.4.4　javax.xml.ws.handler.Handler<C extends MessageContext>インタフェース

15.4.5　javax.xml.ws.handler.HandlerResolverインタフェース

15.4.6　javax.xml.ws.handler.LogicalMessageContextインタフェース

15.4.7　javax.xml.ws.handler.MessageContextインタフェース

15.4.8　javax.xml.ws.handler.PortInfoインタフェース

15.4.9　javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェース

15.4.10　javax.xml.ws.handler.soap.SOAPMessageContextインタフェース

15.4.11　javax.xml.ws.Holder<T>クラス

15.4.12　javax.xml.ws.LogicalMessageインタフェース

15.4.13　javax.xml.ws.ProtocolExceptionクラス

15.4.14　javax.xml.ws.soap.AddressingFeatureクラス

15.4.15　javax.xml.ws.soap.MTOMFeatureクラス

15.4.16　javax.xml.ws.soap.SOAPBindingインタフェース

15.4.17　javax.xml.ws.soap.SOAPFaultExceptionクラス

15.4.18　javax.xml.ws.WebServiceExceptionクラス

15.5　メッセージコンテキストの使用

15.5.1　メッセージコンテキストのプロパティのサポート範囲

15.5.2　メッセージコンテキスト使用時の注意事項

16.　WS-RM 1.2機能のAPIと設定

16.1　com.sun.xml.ws.Closeableクラス

16.2　WS-Policyによる設定

第4編　拡張機能

17.　WSDLインポート機能

17.1　WSDLインポート機能とは

17.2　インポートできるWSDL定義

17.3　wsdl:import要素の書式

18.　添付ファイル機能（wsi:swaRef形式）

18.1　添付ファイル機能とは（wsi:swaRef形式）

18.2　添付ファイルのJavaインタフェース（wsi:swaRef形式）

18.3　添付ファイルのWSDL（wsi:swaRef形式）

18.3.1　添付ファイル使用時のWSDLの記述（wsi:swaRef形式）

18.3.2　添付ファイルのJava型とWSDLのマッピング（wsi:swaRef形式）

18.3.3　WSDLから添付ファイルのJava型へのマッピング（wsi:swaRef形式）

18.4　添付ファイル付きSOAPメッセージ（wsi:swaRef形式）

18.4.1　添付ファイルからSOAPメッセージへのマッピング（wsi:swaRef形式）

18.4.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（wsi:swaRef形式）

18.4.3　SOAPメッセージから添付ファイルへのマッピング（wsi:swaRef形式）

18.5　添付ファイルのJavaインスタンスの生成と取得（wsi:swaRef形式）

18.5.1　添付ファイルのインスタンスを生成する方法（wsi:swaRef形式）

18.5.2　添付ファイルデータを取得する方法（wsi:swaRef形式）

19.　SEIを起点とした開発の例（wsi:swaRef形式の添付ファイル使用時）

19.1　開発例の構成（SEI起点・wsi:swaRef形式の添付ファイル）

19.2　開発例の流れ（SEI起点・wsi:swaRef形式の添付ファイル）

19.3　Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

19.3.1　Webサービス実装クラスを作成する

19.3.2　Javaソースを生成する

19.3.3　web.xmlを作成する

19.3.4　application.xmlを作成する

19.3.5　EARファイルを作成する

19.4　デプロイと開始の例（SEI起点・wsi:swaRef形式の添付ファイル）

19.4.1　EARファイルをデプロイする

19.4.2　Webサービスを開始する

19.5　Webサービスクライアントの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

19.5.1　サービスクラスを生成する

19.5.2　Webサービスクライアントの実装クラスを作成する

19.5.3　Webサービスクライアントの実装クラスをコンパイルする

19.6　Webサービスの実行例（SEI起点・wsi:swaRef形式の添付ファイル）

19.6.1　Javaアプリケーション用オプション定義ファイルを作成する

19.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

19.6.3　Webサービスクライアントを実行する

20.　添付ファイル機能（MTOM/XOP）

20.1　添付ファイル機能とは（MTOM/XOP）

20.2　添付ファイルのJavaインタフェース（MTOM/XOP）

20.3　添付ファイルのWSDL（MTOM/XOP）

20.3.1　non-wrapperスタイルでのMTOM/XOP仕様形式の添付ファイル（MTOM/XOP）

20.4　JAX-WSエンジンの動作

20.4.1　Webサービス側JAX-WSエンジンの動作

20.4.2　Webサービスクライアント側JAX-WSエンジンの動作

20.5　MTOM/XOP仕様形式の添付ファイルのSOAPメッセージ

20.5.1　添付ファイルからSOAPメッセージへのマッピング（MTOM/XOP）

20.5.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（MTOM/XOP）

20.5.3　SOAPメッセージから添付ファイルへのマッピング（MTOM/XOP）

20.6　注意事項

21.　SEIを起点とした開発の例（MTOM/XOP仕様形式の添付ファイル使用時）

21.1　開発例の構成（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.2　開発例の流れ（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.3　Webサービスの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.3.1　Webサービス実装クラスを作成する

21.3.2　Javaソースを生成する

21.3.3　web.xmlを作成する

21.3.4　application.xmlを作成する

21.3.5　EARファイルを作成する

21.4　デプロイと開始の例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.4.1　EARファイルをデプロイする

21.4.2　Webサービスを開始する

21.5　Webサービスクライアントの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.5.1　サービスクラスを生成する

21.5.2　Webサービスクライアントの実装クラスを作成する

21.5.3　Webサービスクライアントの実装クラスをコンパイルする

21.6　Webサービスの実行例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.6.1　Javaアプリケーション用オプション定義ファイルを作成する

21.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

21.6.3　Webサービスクライアントを実行する

22.　ストリーミング

22.1　ストリーミングとは

22.2　ストリーミングの使用方法

22.2.1　Webサービス側

22.2.2　Webサービスクライアント側

22.2.3　parseEagerlyによる変化

22.2.4　ストリーミングされた添付ファイルの操作

22.3　一時ファイル（ストリーミング）

22.3.1　命名規則

22.3.2　出力と削除

22.3.3　見積もり方法

23.　SEIを起点とした開発の例（ストリーミング使用時）

23.1　開発例の構成（SEI起点・ストリーミング）

23.2　開発例の流れ（SEI起点・ストリーミング）

23.3　Webサービスの開発例（SEI起点・ストリーミング）

23.3.1　Webサービス実装クラスを作成する

23.3.2　Javaソースを生成する

23.3.3　web.xmlを作成する

23.3.4　application.xmlを作成する

23.3.5　EARファイルを作成する

23.4　デプロイと開始の例（SEI起点・ストリーミング）

23.4.1　EARファイルをデプロイする

23.4.2　Webサービスを開始する

23.5　Webサービスクライアントの開発例（SEI起点・ストリーミング）

23.5.1　サービスクラスを生成する

23.5.2　Webサービスクライアントの実装クラスを作成する

23.5.3　Webサービスクライアントの実装クラスをコンパイルする

23.6　Webサービスの実行例（SEI起点・ストリーミング）

23.6.1　Javaアプリケーション用オプション定義ファイルを作成する

23.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

23.6.3　Webサービスクライアントを実行する

24.　WS-RM 1.2機能

24.1　WS-RM 1.2機能とは

24.2　WS-RM 1.2機能を使用したメッセージの流れ

24.3　WS-RM 1.2機能の送達保証

24.4　WS-RM Policyの追加方法

25.　WSDLを起点とした開発の例（WS-RM 1.2機能使用時）

25.1　開発例の構成（WSDL起点・WS-RM 1.2）

25.2　開発例の流れ（WSDL起点・WS-RM 1.2）

25.3　Webサービスの開発例（WSDL起点・WS-RM 1.2）

25.3.1　WSDLファイルを作成する

25.3.2　WSDLファイルにWS-RM Policyを追加する

25.3.3　SEIを生成する

25.3.4　Webサービス実装クラスを作成する

25.3.5　Webサービス実装クラスをコンパイルする

25.3.6　web.xmlを作成する

25.3.7　application.xmlを作成する

25.3.8　EARファイルを作成する

25.4　デプロイと開始の例（WSDL起点・WS-RM 1.2）

25.4.1　EARファイルをデプロイする

25.4.2　Webサービスを開始する

25.5　Webサービスクライアントの開発例（WSDL起点・WS-RM 1.2）

25.5.1　サービスクラスを生成する

25.5.2　Webサービスクライアントの実装クラスを作成する

25.5.3　Webサービスクライアントの実装クラスにシーケンス終了処理を追加する

25.5.4　Webサービスクライアントの実装クラスをコンパイルする

25.6　Webサービスの実行例（WSDL起点・WS-RM 1.2）

25.6.1　Javaアプリケーション用オプション定義ファイルを作成する

25.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

25.6.3　Webサービスクライアントを実行する

26.　ハンドラフレームワーク

26.1　ハンドラフレームワークとは

26.2　Webサービスセキュリティ機能を使用する場合の注意事項

26.3　EJBのWebサービスに適用する場合の注意事項

26.4　ハンドラの型

26.5　ハンドラチェインの編成と実行順序

26.5.1　handleMessageメソッドの処理

26.5.2　handleFaultメソッドの処理

26.5.3　closeメソッドの処理

26.6　ハンドラの初期化と破棄

26.7　SOAPヘッダが含まれる場合のハンドラの動作と設定

26.7.1　SOAPヘッダが含まれる場合のハンドラの動作（Webサービス側）

26.7.2　SOAPヘッダが含まれる場合のハンドラの動作（Webサービスクライアント側）

26.7.3　処理できるSOAPヘッダの設定方法

26.8　ハンドラの配置

26.9　ハンドラチェインの設定

26.9.1　Webサービス側のハンドラチェインの設定

26.9.2　Webサービスクライアント側のハンドラチェインの設定

27.　アドレッシング機能

27.1　アドレッシング機能とは

27.1.1　同期通信

27.1.2　非同期通信

27.2　WSDLの拡張要素と拡張属性

27.2.1　WSDLの拡張要素

27.2.2　WSDLの拡張属性

27.3　アドレッシング機能で使用するアノテーションの注意事項

27.4　フォルトメッセージ

27.4.1　サポートしていないサブサブコード

27.4.2　フォルトメッセージの注意事項

27.5　Webサービス側のJAX-WSエンジンの動作（アドレッシング機能使用時）

27.5.1　リクエストメッセージ受信時の動作

27.5.2　レスポンスメッセージ

27.5.3　wsaw:Anonymous要素指定時の動作

27.5.4　Addressingアノテーション指定時の動作

27.5.5　Actionアノテーション指定時の動作

27.5.6　wsa:Action要素指定時の動作

27.5.7　wsa:MessageID要素を指定していない場合の動作

27.6　Webサービスクライアント側のJAX-WSエンジンの動作（アドレッシング機能使用時）

27.6.1　メッセージ送受信時の動作

27.6.2　AddressingFeatureクラスと匿名URI

27.6.3　wsaw:Action属性を指定していない場合の動作

27.6.4　wsa:Action要素の注意事項

27.6.5　SEIの取得に関する注意事項

28.　SEIを起点とした開発の例（アドレッシング機能使用時）

28.1　開発例の構成（SEI起点・アドレッシング）

28.2　開発例の流れ（SEI起点・アドレッシング）

28.3　Webサービスの開発例（SEI起点・アドレッシング）

28.3.1　Webサービス実装クラスを作成する

28.3.2　Javaソースを生成する

28.3.3　web.xmlを作成する

28.3.4　application.xmlを作成する

28.3.5　EARファイルを作成する

28.4　デプロイと開始の例（SEI起点・アドレッシング）

28.4.1　EARファイルをデプロイする

28.4.2　Webサービスを開始する

28.5　Webサービスクライアントの開発例（SEI起点・アドレッシング）

28.5.1　サービスクラスを生成する

28.5.2　Webサービスクライアントの実装クラスを作成する

28.5.3　Webサービスクライアントの実装クラスをコンパイルする

28.6　Webサービスの実行例（SEI起点・アドレッシング）

28.6.1　Javaアプリケーション用オプション定義ファイルを作成する

28.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

28.6.3　Webサービスクライアントを実行する

第5編　トラブルシュート

29.　障害対策

29.1　障害の種類と対策

29.1.1　プログラムの実行中に異常終了する場合

29.1.2　プログラムが意図したとおりに動作しない場合

29.1.3　期待した性能が出ない場合

29.2　障害発生時に取得する資料

29.3　ログ

29.3.1　ログの種類

29.3.2　ログの出力先

29.3.3　ログの重要度と出力条件

29.3.4　ログのフォーマット

29.3.5　ログの設定方法

29.3.6　ログの見積もり

29.4　性能解析トレース（PRF）

29.4.1　性能解析トレースの取得レベル

29.4.2　性能解析トレースのトレース出力情報

29.4.3　性能解析トレースによる性能解析方法

付録

付録A　旧バージョンからの移行

付録A.1　バージョンアップインストール

付録A.2　旧バージョンで作成したWSDLの互換性

付録B　旧バージョンのWS-RM機能

付録B.1　WS-RM 1.1機能を使用したメッセージの流れ

付録B.2　WS-RM 1.1機能を使用する場合のシステム構成

付録B.3　WS-RM 1.1機能の送達保証

付録B.4　WS-RM 1.1機能のAPI一覧

付録B.5　WS-RM 1.1機能のプロパティ設定

付録B.6　WS-RM 1.1機能の性能解析トレース（PRF）

付録B.7　WS-RM 1.1仕様のサポート範囲

付録C　POJOのWebサービスからEJBのWebサービスへの移行

付録D　JAX-WSエンジンのメモリ使用量の算出

付録D.1　アプリケーション起動時のメモリ使用量

付録D.2　1リクエスト当たりのメモリ使用量

付録D.3　添付ファイル使用時の1リクエスト当たりのメモリ使用量

付録D.4　単位時間当たりのメモリ使用量の算出

付録E　このマニュアルの参考情報

付録E.1　関連マニュアル

付録E.2　このマニュアルでの表記

付録E.3　英略語

付録E.4　KB（キロバイト）などの単位表記について

付録F　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.

前書き

■ 対象製品

●適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003（x64）※¹，Windows Server 2003 R2（x64）※¹，Windows Server 2008 x86，Windows Server 2008 x64※¹，Windows Server 2008 R2※¹

P-2443-7B84　 uCosminexus Application Server Standard-R　 08-70
P-2443-7D84　 uCosminexus Application Server Standard　 08-70
P-2443-7K84　 uCosminexus Application Server Enterprise　 08-70
P-2443-7S84　 uCosminexus Service Platform　 08-70※2

●適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Vista，Windows XP，Windows 7（32bit），Windows 7（x64）※¹

P-2443-7E84　 uCosminexus Developer Standard　 08-70
P-2443-7F84　 uCosminexus Developer Professional　 08-70
P-2443-7T84　 uCosminexus Service Architect　 08-70※2

●適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003（x64）※¹，Windows Server 2003 R2（x64）※¹，Windows Server 2008 x86，Windows Server 2008 x64※¹，Windows Server 2008 R2※¹，Windows Vista，Windows XP，Windows 7（32bit），Windows 7（x64）※¹

P-2443-7H84　 uCosminexus Client　 08-70

●適用OS：Windows Server 2003（x64），Windows Server 2003 R2（x64），Windows Server 2008 x64，Windows Server 2008 R2

P-2943-7B84　 uCosminexus Application Server Standard-R　 08-70
P-2943-7D84　 uCosminexus Application Server Standard　 08-70
P-2943-7K84　 uCosminexus Application Server Enterprise　 08-70
P-2943-7S84　 uCosminexus Service Platform　 08-70※2

●適用OS：AIX 5L V5.3，AIX V6.1，AIX V7.1

P-1M43-7D81　 uCosminexus Application Server Standard　 08-70※2
P-1M43-7K81　 uCosminexus Application Server Enterprise　 08-70※2
P-1M43-7S81　 uCosminexus Service Platform　 08-70※2

●適用OS：HP-UX 11i V2（IPF），HP-UX 11i V3（IPF）

P-1J43-7D81　 uCosminexus Application Server Standard　 08-70
P-1J43-7K81　 uCosminexus Application Server Enterprise　 08-70
P-1J43-7S81　 uCosminexus Service Platform　 08-70※2

●適用OS：Red Hat Enterprise Linux AS 4（x86），Red Hat Enterprise Linux ES 4（x86），Red Hat Enterprise Linux AS 4（AMD64 & Intel EM64T），Red Hat Enterprise Linux ES 4（AMD64 & Intel EM64T），Red Hat Enterprise Linux 5 Advanced Platform（x86），Red Hat Enterprise Linux 5（x86），Red Hat Enterprise Linux 5 Advanced Platform（AMD/Intel 64），Red Hat Enterprise Linux 5（AMD/Intel 64），Red Hat Enterprise Linux Server 6（32-bit x86），Red Hat Enterprise Linux Server 6（64-bit x86_64）

P-9S43-7B81　 uCosminexus Application Server Standard-R　 08-70※2
P-9S43-7D81　 uCosminexus Application Server Standard　 08-70※2
P-9S43-7K81　 uCosminexus Application Server Enterprise　 08-70※2
P-9S43-7S81　 uCosminexus Service Platform　 08-70※2

注※1　WOW64（Windows On Windows 64）環境だけで使用できます。
注※2　この製品については，サポート時期をご確認ください。
これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
本製品では日立トレース共通ライブラリをインストールします。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

AIXは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
AIX 5Lは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
AMDは，Advanced Micro Devices,Inc.の商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
gzipは，米国FSF(Free Software Foundation)が配布しているソフトウェアです。
HP-UXは，Hewlett-Packard Companyのオペレーティングシステムの名称です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
J2EEは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Javaは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
JDKは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
JSPは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Red Hatは，米国およびその他の国でRed Hat,Inc. の登録商標もしくは商標です。
SOAP（Simple Object Access Protocol）は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Solarisは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Sunは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
W3Cは，World Wide Web Consortiumの商標（多数の国において登録された）です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
X/Openは，The Open Groupの英国ならびに他の国における登録商標です。

■ マイクロソフト製品のスクリーンショットの使用について

Microsoft Corporationのガイドラインに従って画面写真を使用しています。

■ マイクロソフト製品の表記について

このマニュアルでは，マイクロソフト製品の名称を次のように表記しています。

製品名 | 表記
Microsoft(R) Windows(R) 7 Enterprise | Windows 7 | Windows
Microsoft(R) Windows(R) 7 Professional
Microsoft(R) Windows(R) 7 Ultimate
Microsoft(R) Windows Server(R) 2003，Enterprise Edition 日本語版 | Windows Server 2003 Enterprise Edition | Windows Server 2003
Microsoft(R) Windows Server(R) 2003，Standard Edition 日本語版 | Windows Server 2003 Standard Edition
Microsoft(R) Windows Server(R) 2003 R2，Enterprise Edition 日本語版 | Windows Server 2003 R2 Enterprise Edition | Windows Server 2003 R2
Microsoft(R) Windows Server(R) 2003 R2，Standard Edition 日本語版 | Windows Server 2003 R2 Standard Edition
Microsoft(R) Windows Server(R) 2003，Enterprise x64 Edition 日本語版 | Windows Server 2003 Enterprise x64 Edition | Windows Server 2003（x64）
Microsoft(R) Windows Server(R) 2003，Standard x64 Edition 日本語版 | Windows Server 2003 Standard x64 Edition
Microsoft(R) Windows Server(R) 2003 R2，Enterprise x64 Edition 日本語版 | Windows Server 2003 R2 Enterprise x64 Edition | Windows Server 2003 R2（x64）
Microsoft(R) Windows Server(R) 2003 R2，Standard x64 Edition 日本語版 | Windows Server 2003 R2 Standard x64 Edition
Microsoft(R) Windows Server(R) 2008 Enterprise 32-bit 日本語版 | Windows Server 2008 x86 | Windows Server 2008
Microsoft(R) Windows Server(R) 2008 Standard 32-bit 日本語版
Microsoft(R) Windows Server(R) 2008 Enterprise 日本語版 | Windows Server 2008 x64
Microsoft(R) Windows Server(R) 2008 Standard 日本語版
Microsoft(R) Windows Server(R) 2008 R2 Enterprise 日本語版 | Windows Server 2008 R2
Microsoft(R) Windows Server(R) 2008 R2 Standard 日本語版
Microsoft(R) Windows Vista(R) Business | Windows Vista Business | Windows Vista
Microsoft(R) Windows Vista(R) Enterprise | Windows Vista Enterprise
Microsoft(R) Windows Vista(R) Ultimate | Windows Vista Ultimate
Microsoft(R) Windows(R) XP Professional Operating System | Windows XP

なお，製品名にx64を含む製品を「Windows(x64)」，含まない製品を「Windows(x86)」と区別して表記していることがあります。

■ 発行

2011年 7月 3020-3-U31-40

■ 著作権

All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.

変更内容

変更内容(3020-3-U31-40)uCosminexus Application Server Enterprise 08-70，uCosminexus Application Server Standard 08-70，uCosminexus Application Server Standard-R 08-70，uCosminexus Client 08-70，uCosminexus Developer Professional 08-70，uCosminexus Developer Standard 08-70，uCosminexus Service Architect 08-70，uCosminexus Service Platform 08-70

追加・変更内容
変更個所

EJBのWebサービスをサポートしました。
1.2，1.3.2，2.1.2，2.1.3，3.1，3.3，3.5.2，3.5.3，3.5.4，8.，10.2.2，10.3，10.4，10.4.3，10.4.4，10.6，10.8，10.9，10.19，11.2，29.1，29.4.2，付録C

WSEE（JSR-109）仕様をサポートしました。
1.2，1.3.2

複数スレッドでポートまたはディスパッチを共有する場合について記載を追加しました。
3.6.1，3.6.2，3.6.3

64ビット版の記載を追加しました。
5.3.2，7.3.2，9.3.2，11.2，19.3.2

HTTPヘッダについて記載を追加しました。
10.16

HTTPリクエストボディのgzip圧縮をサポートしました。
10.17，15.5.1

jaxws:parameter要素でinoutパラメタ名をカスタマイズする場合の注意事項の記載を追加しました。
12.2.9

wrapperスタイルとnon-wrapperスタイルの記載を追加しました。
13.1.10，18.4.3

ストリーミングをサポートしました。
13.2.2，15.1，15.4.1，15.4.2，15.4.3，22.，23.

WS-RM 1.2仕様をサポートしました。
14.6，14.7，16.，24.，25.，29.3.4，29.4.2

WS-Addressing機能の注意事項を追加しました。
15.2.4

添付ファイル機能のクラスおよびインタフェースの記載を追加しました。
15.4.15，15.4.16

メッセージコンテキストに，オペレーションの記述を追加しました。
15.5.1，15.5.2

次の製品の適用OSにAIX，HP-UXを追加しました。

uCosminexus Application Server Standard

uCosminexus Application Server Enterprise

uCosminexus Service Platform

－

次の製品の適用OS にRed Hat Enterprise Linux 6 を追加しました。

uCosminexus Application Server Standard-R

uCosminexus Application Server Standard

uCosminexus Application Server Enterprise

uCosminexus Service Platform

－

uCosminexus Application Server Enterprise 08-53，uCosminexus Application Server Standard 08-53，uCosminexus Application Server Standard-R 08-53，uCosminexus Client 08-53，uCosminexus Developer Professional 08-53，uCosminexus Developer Standard 08-53，uCosminexus Service Architect 08-53，uCosminexus Service Platform 08-53

追加・変更内容
変更個所

MTOM/XOP仕様形式の添付ファイルをサポートしました。
1.3.2，10.2.1，10.2.2，12.1.10，13.1.10，13.2.1，13.2.9，13.2.17，14.1.31，15.1，20.，21.

com.cosminexus.jaxws.publish_wsdl.soap12bindingをサポートしました。
10.1.2

HTTPレスポンス圧縮機能との連携をサポートしました。
10.18

-soap12bindingについて記述を追加しました。
11.3

SOAPバインディングに，transport属性値からBindingTypeアノテーションへのマッピングを追加しました。
12.1.8

SOAP11HTTP_MTOM_BINDINGとSOAP12HTTP_MTOM_BINDINGの記述を追加しました。また，javax.xml.ws.BindingTypeアノテーションからsoap:binding要素またはsoap12:binding要素のtransport属性値へのマッピングについて記述を追加しました。
13.2.11

「http://schemas.xmlsoap.org/soap/http」の記述を追加しました。
14.1.26

対象製品としてuCosminexus Application Server Standard-Rを追加しました。
－

次の製品の適用OSからAIX，HP-UX，Linux（IPF）を削除しました。

uCosminexus Application Server Standard

uCosminexus Application Server Enterprise

uCosminexus Service Platform

－

単なる誤字・脱字などはお断りなく訂正しました。

今版(3020-3-U31-40)では，前版(3020-3-U31-20)との対応は次のようになっています。

旧(3020-3-U31-20)
新(3020-3-U31-40)

13.6　WS-RM 1.1仕様のサポート範囲
付録B.7　WS-RM 1.1仕様のサポート範囲

15.　WS-RM機能のAPI
付録B.4　WS-RM 1.1機能のAPI一覧
付録B.5　WS-RM 1.1機能のプロパティ設定

19.　WS-RM機能
付録B.　旧バージョンのWS-RM機能
付録B.1　WS-RM 1.1機能を使用したメッセージの流れ
付録B.2　WS-RM 1.1機能を使用する場合のシステム構成
付録B.3　WS-RM 1.1機能の送達保証

20.　SEIを起点とした開発の例（WS-RM機能使用時）
削除

27.4.2(3)　性能解析トレースのトレース取得ポイント（WS-RM機能使用時）
付録B.6　WS-RM 1.1 機能の性能解析トレース（PRF）

付録C.4　常用漢字以外の漢字の使用について
削除

変更内容(3020-3-U31-20)uCosminexus Application Server Enterprise 08-50，uCosminexus Application Server Standard 08-50，uCosminexus Client 08-50，uCosminexus Developer Professional 08-50，uCosminexus Developer Standard 08-50，uCosminexus Service Architect 08-50，uCosminexus Service Platform 08-50

追加・変更内容

プロバイダ実装クラスをサポートしました。

ディスパッチベースのWebサービスクライアントをサポートしました。

WS-Addressing 1.0仕様をサポートしました。

cjwsgenコマンドをサポートしました。

SOAP 1.2仕様をサポートしました。

SAAJ 1.3仕様をサポートしました。

web.xmlの要件についての説明を追加しました。

cjwsimportコマンドに-wsdllocationオプションを追加しました。

javax.xml.ws.Serviceオブジェクトおよびポートの再利用についての説明を追加しました。

Webサービスクライアント実装時の注意事項を追加しました。

配列またはjava.util.Listを利用する場合の注意事項を追加しました。

HTTPステータスコードの説明を追加しました。

WARファイルでエラーページをカスタマイズする場合の注意事項を追加しました。

non-wrapperスタイルの配列についての説明を追加しました。

環境変数でcjwsimportコマンドにオプションを追加できるようになりました。

Windowsのユーザアカウント制御が有効な場合に，CosminexusのJAX-WS機能のコマンドラインインタフェースを実行するときの注意事項を追加しました。

JavaからWSDLへのマッピングをカスタマイズするときに使用できるアノテーションを追加しました。

javax.jws.WebMethodアノテーションのexclude要素において，publicメソッドが一つもない場合の動作を変更しました。

soap:fault要素のname属性には親要素のname属性と同じ値を指定する必要があることを追加しました。

soap:header要素またはsoap12:header要素のpart属性に指定する値に関する注意事項を追加しました。

ハンドラチェイン設定ファイルのjavaee:soap-role要素に記述する値に関する注意事項を追加しました。

WS-RM 1.1仕様をサポートしました。

サービスAPIを追加しました。

クライアントAPIを追加しました。

javax.xml.ws.Serviceクラスで新しいメソッドをサポートしました。

コアAPIを追加しました。

メッセージコンテキスト使用時の注意事項を追加しました。

Webサービスセキュリティ機能を使用する場合の注意事項を追加しました。

ハンドラチェインの設定項目を追加しました。

通信ログの文字エンコーディングの説明を追加しました。

次の製品の適用OSにWindows Server 2008 R2を追加しました。

uCosminexus Application Server Standard

uCosminexus Application Server Enterprise

uCosminexus Service Platform

uCosminexus Client

次の製品の適用OSからSolarisを削除しました。

uCosminexus Application Server Standard

uCosminexus Application Server Enterprise

次の製品の適用OSにWindows 7を追加しました。

uCosminexus Developer Standard

uCosminexus Developer Professional

uCosminexus Service Architect

uCosminexus Client

はじめに

このマニュアルは，Cosminexusで提供する機能を利用して，JAX-WS 2.1仕様に対応したWebサービスを開発，実行する方法について説明したものです。

Cosminexusでは，次のプログラムプロダクトを使用してJAX-WS 2.1仕様に対応したWebサービスを開発できます。

uCosminexus Developer Standard

uCosminexus Developer Professional

uCosminexus Service Architect

Cosminexusでは，次のプログラムプロダクトを使用してJAX-WS 2.1仕様に対応したWebサービスを実行できます。

uCosminexus Application Server Standard

uCosminexus Application Server Standard-R

uCosminexus Application Server Enterprise

uCosminexus Service Platform

なお，SOAPアプリケーション開発支援機能およびSOAP通信基盤を使用して，Webサービス（SOAPアプリケーション）を開発，実行する方法については，マニュアル「Cosminexus アプリケーションサーバ SOAPアプリケーション開発の手引」を参照してください。

対象読者

このマニュアルは，Cosminexusを使用してJAX-WS 2.1仕様に対応したWebサービスを開発，実行する方を対象としています。このマニュアルをご利用になる方は，次の内容を理解されていることを前提とします。

J2EEサーバに関する基本的な知識

Java EE仕様に関する基本的な知識

XML仕様に関する基本的な知識

WS-RM 1.1仕様またはWS-RM 1.2仕様に関する基本的な知識

SOAP 1.1仕様またはSOAP 1.2仕様，WSDL 1.1仕様，およびXML Schemaに関する知識

JAX-WS 2.1仕様（JSR-224），JAXB 2.1仕様（JSR-222），およびWebサービスメタデータ仕様に関する知識（JSR-181）

Java言語によるオブジェクト指向プログラミングの知識（アノテーションも含む）

図中で使用している記号

このマニュアルの図中で使用している記号について次に示します。

コーディング例で使用している記号

このマニュアルでは，次に示す記号を使用して，コーディング例を記述しています。

記号
意味

…
リーダ
記述が省略されていることを示します。この記号の直前に示された項目を繰り返し複数個指定できます。

（例）

値…では，「値を必要個指定する」ことを示します。

/*　*/
//
コメント文として扱うことを示します。

（例）

//メッセージを送信する

太字
例題で使用する指定値および生成される値を示します。
構築する環境に合わせて読み替えてください。

コマンドの形式で使用している記号

このマニュアルでは，次に示す記号を使用して，コマンドの形式を記述しています。

記号 | 意味
［　］ | この記号で囲まれている項目は，省略してもよいことを示します。
<　> | この記号で囲まれている項目は，可変値を指定することを示します。

JAX-WS 2.1仕様の対応バージョンについて

このマニュアルで「JAX-WS 2.1仕様」と表記した場合，次のバージョンの仕様を意味します。

Specification: JSR-000224 - JavaTMAPI for XML-Based Web ServicesVersion: 2.1Status: Maintenance Release 2Release: 7 May 2007

また，このマニュアルで「バインディング宣言のスキーマ」と表記した場合，次のスキーマを意味します。

http://java.sun.com/xml/ns/jaxws/wsdl_customizationschema_2_0.xsd(Date Published: May 11, 2006)

プレフィクスと名前空間URIの対応

このマニュアルで使用するプレフィクスと名前空間URIの対応を次に示します。特に断りがないかぎり，次のプレフィクスを使用します。

プレフィクス | 名前空間URI
cwsrm | http://jaxws.cosminexus.com/cwsrm
javaee | http://java.sun.com/xml/ns/javaee
jaxb | http://java.sun.com/xml/ns/jaxb
jaxws | http://java.sun.com/xml/ns/jaxws
jaxwsdd | http://java.sun.com/xml/ns/jax-ws/ri/runtime
net35rmp | http://schemas.microsoft.com/ws-rx/wsrmp/200702
soap | http://schemas.xmlsoap.org/wsdl/soap/
soap12 | http://schemas.xmlsoap.org/wsdl/soap12/
soapenv | http://schemas.xmlsoap.org/soap/envelope/
soapenv12 | http://www.w3.org/2003/05/soap-envelope
wsa | http://www.w3.org/2005/08/addressing
wsam | http://www.w3.org/2007/05/addressing/metadata
wsaw | http://www.w3.org/2006/05/addressing/wsdl
wsdl | http://schemas.xmlsoap.org/wsdl/
wsi | http://ws-i.org/profiles/basic/1.1/xsd
wsp | http://www.w3.org/ns/ws-policy
wsrm | http://docs.oasis-open.org/ws-rx/wsrm/200702
wsrmp | http://docs.oasis-open.org/ws-rx/wsrmp/200702
wsu | http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
xmime | http://www.w3.org/2005/05/xmlmime
xop | http://www.w3.org/2004/08/xop/include
xsd | http://www.w3.org/2001/XMLSchema
xsi | http://www.w3.org/2001/XMLSchema-instance

1.　Webサービスの開発および実行の概要

CosminexusのJAX-WS機能を使用して，JAX-WS 2.1仕様に従ったWebサービスを開発できます。

この章では，Webサービス開発の概要，および前提条件について説明します。

＜この章の構成＞

1.1　Webサービスの開発の概要

1.2　Webサービスの開発時および実行時に使用する機能

1.3　Webサービスの開発および実行の前提条件

1.4　WebサービスとWebサービスクライアントの形態

1.5　JAX-WSエンジンの設定

1.1　Webサービスの開発の概要

Cosminexusでは，Webサービスの通信基盤としてJAX-WSエンジンを提供しています。JAX-WSエンジンは，JAX-WS 2.1仕様に従って，WebサービスクライアントとWebサービス間のSOAPメッセージのバインディングを実現します。

このマニュアルでは，JAX-WSエンジンを介して利用できるWebサービスの開発方法について説明します。

Webサービスは，次のどれかの方法で開発します。

WSDLを起点とした開発
Webサービスの定義を記述したWSDLを起点とした開発方法です。コマンドでWSDLからJavaソースを生成し，WebサービスおよびWebサービスクライアントに必要な処理を実装します。

SEI（サービスエンドポイントインタフェース）を起点とした開発
SEIを起点とした開発方法です。作成したWebサービス実装クラスから，コマンドでWebサービスの実装に必要な追加のJavaソース（Java Beansクラスなど）を生成します。さらに，コマンドでWSDLからWebサービスクライアントの実装に必要なJavaソースを生成します。

プロバイダを起点とした開発
プロバイダを起点とした開発方法です。作成したプロバイダ実装クラスをコマンドでコンパイルします。

それぞれの開発の流れについては，「2.　開発の流れ」を参照してください。

参考

SOAPアプリケーションの開発について

既存機能であるSOAPアプリケーション開発支援機能およびSOAP通信基盤を使用して，Webサービスを開発することもできます（このときに開発するアプリケーションを「SOAPアプリケーション」と呼びます）。ただし，SOAPアプリケーションはSOAP通信基盤で動作することを前提としているため，JAX-WSエンジン上で利用する場合には条件があります。

SOAPアプリケーションの開発については，マニュアル「Cosminexus アプリケーションサーバ SOAPアプリケーション開発の手引」を参照してください。

JAX-WSエンジン上で利用する場合の条件および移行手順については，「付録A　旧バージョンからの移行」を参照してください。

1.2　Webサービスの開発時および実行時に使用する機能

CosminexusのWebサービスは，次のどちらの仕様範囲でも作成できます。

POJO
Javaの仕様範囲でJavaオブジェクトを作成する方法です。

EJB
ビジネスアプリケーション向けに拡張したJavaオブジェクトの仕様です。

次の図に示すWebサービスの構成を基に，JAX-WSエンジンおよび開発時および実行時に使用する機能について説明します。

図1-1　Webサービスの構成（POJOのWebサービス）

図1-2　Webサービスの構成（EJBのWebサービス）

JAX-WSエンジン
Webサービスの通信基盤となるエンジンです。Webサービス側およびWebサービスクライアント側に配置され，送受信されたSOAPメッセージのマーシャル／アンマーシャルをする役割を果たします。

Webサービスクライアント側のJAX-WSエンジン

WebサービスクライアントからJAX-WS APIを介してJavaオブジェクトを受け取り，SOAP要求メッセージを生成（マーシャル）します。生成したSOAP要求メッセージは呼び出し先のWebサービスに送信します。

また，WebサービスからSOAP応答メッセージを受け取り，Javaオブジェクトを生成（アンマーシャル）します。生成したJavaオブジェクトはWebサービスクライアントに返します。

Webサービス側のJAX-WSエンジン

Webサービスクライアント側からSOAP要求メッセージを受け取り，Javaオブジェクトを生成（アンマーシャル）します。このとき，対象となるWebサービス実装クラスまたはプロバイダ実装クラスを見つけ出し（ディスカバリ），オペレーションに対応するメソッドを呼び出します（ディスパッチ）。また，対象となるWebサービス実装クラスまたはプロバイダ実装クラスからJavaオブジェクトを受け取り，SOAP応答メッセージを生成（マーシャル）します。生成したSOAP応答メッセージは，呼び出し元であるWebサービスクライアントに返します。

コマンド
Webサービスの開発で使用するコマンドです。WebサービスおよびWebサービスクライアントの実装に必要なJavaソースやWSDLを生成できます。JAX-WSエンジンを利用するWebサービスの開発では次のコマンドを使用します。

cjwsimportコマンド

aptコマンド

cjwsgenコマンド

cjwsimportコマンドおよびaptコマンドを実行すると，JAX-WS 2.1仕様に従って，WSDLとJavaソースがマッピングされます。
cjwsgenコマンドを実行すると，コンパイルしたWebサービス実装クラスから，Webサービスの実装に必要なスタブや，開発に必要なWSDLが生成されます。
コマンドの使用方法については，「11.　コマンド」を参照してください。

自動生成クラス
コマンドを実行して生成されるJavaソースです。生成されたJavaソースに，WebサービスおよびWebサービスクライアントの処理を実装します。

JAX-WS API
JAX-WS 2.1仕様のAPIです。プロバイダを起点としたWebサービスの開発や，ディスパッチベースのWebサービスクライアントを開発する場合に使用します。また，ハンドラフレームワークやアドレッシングなどの機能を追加する場合にも使用できます。

1.3　Webサービスの開発および実行の前提条件

Cosminexus上でWebサービスを開発する場合の前提条件，およびサポート範囲について説明します。

＜この節の構成＞

1.3.1　前提となる構成ソフトウェア

1.3.2　機能および仕様に関する前提条件

1.3.1　前提となる構成ソフトウェア

WebサービスはDeveloperを利用して開発し，Application Serverを利用して実行します。

Developerの前提ソフトウェアについては，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「1.4　開発環境のマシン構成」を参照してください。

Application Serverの前提ソフトウェアについては，マニュアル「Cosminexus アプリケーションサーバ 概説」の「2.3　構成ソフトウェア」を参照してください。

1.3.2　機能および仕様に関する前提条件

Cosminexus上でWebサービスを開発するときに利用できる機能および仕様について説明します。標準仕様のサポート範囲については，「14.　標準仕様のサポート範囲」を参照してください。

＜この項の構成＞

(1)　デフォルトマッピング

(2)　マッピングのカスタマイズ

(3)　JavaとWSDL間のバインディング

(4)　WSDL仕様

(5)　SOAP仕様

(6)　Message Exchange Pattern（MEP）

(7)　非同期関連の機能

(8)　Dispatch／Providerインタフェース関連の機能

(9)　Endpointクラスおよび発行関連の機能

(10)　ハンドラ関連の機能

(11)　添付ファイルの使用

(12)　メッセージコンテキスト

(13)　API

(14)　XML／HTTPバインディング

(15)　関連する標準仕様

(1)　デフォルトマッピング

CosminexusのJAX-WS機能で提供しているコマンドは，JAX-WS 2.1仕様の2章で規定されたWSDLからJavaへのデフォルトのマッピング，JAX-WS 2.1仕様の3章で規定されたJavaからWSDLへのデフォルトのマッピングに従って動作します。

また，Webサービス側のJAX-WSエンジンは，WebサービスのメタデータであるWSDLを要求された場合，WARファイルまたはEJB JARファイルにWSDLがなければ，JAX-WS 2.1仕様の3章で規定されたJavaからWSDLへのデフォルトのマッピングに従って，WSDLを生成します。

WSDLからJavaへのデフォルトのマッピングについては，「12.1　WSDLからJavaへのデフォルトマッピング」を参照してください。JavaからWSDLへのデフォルトのマッピングについては，「13.1　JavaからWSDLへのデフォルトマッピング」を参照してください。

(2)　マッピングのカスタマイズ

CosminexusのJAX-WS機能で提供しているコマンドは，JAX-WS 2.1仕様の7章で規定されたWSDLからJavaへのマッピングのカスタマイズ（バインディング宣言），およびJAX-WS 2.1仕様の8章で規定されたJavaからWSDLへのマッピングのカスタマイズ（アノテーション）に従って動作します。

また，Webサービス側のJAX-WSエンジンは，WebサービスのメタデータであるWSDLを要求された場合，WARファイルまたはEJB JARファイルにWSDLがなければ，JAX-WS 2.1仕様の7章で規定されたJavaからWSDLへのマッピングのカスタマイズに従って，WSDLを生成します。

WARファイルについては「3.5.1　WARファイルの構成」を参照してください。EJB JARファイルについては「3.5.2　EJB JARファイルの構成」を参照してください。WSDLからJavaへのマッピングのカスタマイズについては，「12.2　WSDLからJavaへのマッピングのカスタマイズ」を参照してください。JavaからWSDLへのデフォルトのマッピングについては，「13.2　JavaからWSDLへのマッピングのカスタマイズ」を参照してください。

(3)　JavaとWSDL間のバインディング

CosminexusのJAX-WSエンジンは，WebサービスおよびWebサービスクライアントともに，JAX-WS 2.1仕様の2章および3章に従って，JavaとWSDL間をバインディングします。

CosminexusのJAX-WSエンジンのサポート範囲については，「10.2　JAX-WSエンジンの動作」を参照してください。

(4)　WSDL仕様

CosminexusのJAX-WS機能では，WSDL 1.1仕様のWSDLをサポートしています。WSDL定義のスタイルとしては，document/literalスタイルだけサポートしています。document/literalスタイルであれば，wrapperスタイルおよびnon-wrapperスタイルのどちらも利用できます。

WSDL 1.1仕様のサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

(5)　SOAP仕様

CosminexusのJAX-WS機能では，SOAP 1.1仕様およびSOAP 1.2仕様のSOAPメッセージをサポートしています。

(6)　Message Exchange Pattern（MEP）

CosminexusのJAX-WS機能では，MEPとしてrequest-responseパターンだけサポートしています。

(7)　非同期関連の機能

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の2.3.4項や，4章などに記載されているWebサービスクライアントでの非同期呼び出しを実現する機能はサポートしていません。

(8)　Dispatch／Providerインタフェース関連の機能

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の4章に記載されているDispatchインタフェース，JAX-WS 2.1仕様の5章に記載されているProviderインタフェース，およびDispatchインタフェースとProviderインタフェースに関連する機能をサポートしています。ただし，JAX-WS 2.1仕様の4章に記載されているオブジェクトのうち，次のオブジェクトはサポートしていません。

javax.activation.DataSource

javax.xml.transform.stax.StAXSource

(9)　Endpointクラスおよび発行関連の機能

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の5章に記載されているWebサービスのエンドポイントを動的に生成し，発行するための機能はサポートしていません。

(10)　ハンドラ関連の機能

CosminexusのJAX-WS機能では，Webサービスクライアントの実装で，APIによる動的なハンドラ設定をサポートしています。また，Webサービスの実装で，アノテーションによる動的なハンドラ設定をサポートしています。JSR-109仕様を前提とする静的な設定はサポートしていません。

(11)　添付ファイルの使用

CosminexusのJAX-WS機能では，SAAJ 1.3仕様，およびWSDLにwsi:swaRef型を記述する形式の添付ファイルおよびMTOM/XOP仕様形式の添付ファイルをサポートしています。WSDL 1.1仕様のMIME拡張要素を使用する記述（MIMEバインディング）はサポートしていません。wsi:swaRef形式の添付ファイルの使用方法については，「18.　添付ファイル機能（wsi:swaRef形式）」を参照してください。MTOM/XOP仕様形式の添付ファイルの使用方法については，「20.　添付ファイル機能（MTOM/XOP）」を参照してください。

(12)　メッセージコンテキスト

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の9章に記載されている標準のメッセージコンテキストプロパティは，読み取りだけサポートしています。Webサービスクライアントの実装でタイムアウトを設定するためのプロパティをサポートしています。メッセージコンテキストの使用方法および注意事項については，「15.5　メッセージコンテキストの使用」を参照してください。

(13)　API

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様のAPIをサポートしています。JAX-WS APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。

(14)　XML／HTTPバインディング

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の11章に記載されているXML／HTTPバインディングはサポートしていません。

(15)　関連する標準仕様

関連する標準仕様について説明します。

MTOM仕様に関連する機能
CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の2.4節や6.5節などに記載されたMTOM仕様に関連する機能をサポートしています。

WS-Addressing仕様
CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の5.2.8項などに記載されたWS-Addressing仕様に関連する機能をサポートしています。詳細については，「27.　アドレッシング機能」を参照してください。

XML Catalogs 1.1仕様
CosminexusのJAX-WS機能では，JAX-WS 2.1仕様の4.4節などに記載されたXML Catalogs 1.1仕様に関連する機能はサポートしていません。

WSEE（JSR-109）仕様
CosminexusのJAX-WS機能では，WSEE（JSR-109）仕様をサポートしています。WSEE（JSR-109）仕様の項目とサポートの対応を次の表に示します。

表1-1　WSEE（JSR-109）仕様の項目とサポートの対応

項番
項目
サポート

1
ステートレスセッションビーンおよびシングルトンセッションビーンの次の方法。

WSDLへのマッピングまたはバインディング方法。

SOAPへのマッピングまたはバインディング方法。

ステートレス
○

シングルトン
－

2
クライアントモデル。特に，JNDIを使用してサービスインタフェースを発見する方法と，JAX-WS仕様のWebServiceRefアノテーションを使用する方法。
－

3
デプロイメントモデル。EARファイルへのパッケージング方法とライフサイクル。
5.4節記載の内容
○

5.4節以外の内容
－

4
デプロイメントディスクリプタ。webservices.xmlの構文と記述する必要がある内容，およびJAX-WS仕様（Web Services Metadata （JSR-181）仕様）で定義されるアノテーションとのマッピング。
－

5
ロールなど既存のJava EEコンテナの機能とのマッピング。
－

（凡例）

○：サポートしていることを示します。

－：サポートしていないことを示します。

なお，web.xmlを省略した場合の動作はサポートしています。web.xmlを省略した場合の動作については，「3.4(3)　web.xmlをWARファイルに含めない場合の動作」を参照してください。

SAAJ 1.3仕様
CosminexusのJAX-WS機能では，SAAJ 1.3仕様をサポートしています。SAAJ 1.3仕様のAPIについては，「14.5　SAAJ 1.3仕様のサポート範囲」を参照してください。

1.4　WebサービスとWebサービスクライアントの形態

ここでは，CosminexusがサポートするWebサービスとWebサービスクライアントの形態について説明します。

＜この節の構成＞

1.4.1　Webサービスの形態

1.4.2　Webサービスクライアントの形態

1.4.1　Webサービスの形態

Cosminexusでは，次の二つの形態のWebサービスをサポートしています。

Webサービス実装クラスを使用したWebサービス

プロバイダ実装クラスを使用したWebサービス

それぞれの形態について説明します。

＜この項の構成＞

(1)　Webサービス実装クラスを使用したWebサービス

(2)　プロバイダ実装クラスを使用したWebサービス

(1)　Webサービス実装クラスを使用したWebサービス

Webサービス実装クラスを使用する場合の形態を次に示します。

図1-3　Webサービスの形態（Webサービス実装クラス）

Webサービス実装クラスを使用すると，WSDLのオペレーションに対応するJavaメソッドを実装するだけでWebサービスを実現できます。複雑な変換は自動生成されるスタブが実施するため，Webサービス開発時に，APIを利用してSOAPメッセージを構成するXMLを組み立てるような，複雑なプログラミングをする必要はありません。

ただし，WSDLに定義されていないSOAPメッセージを送受信することはできないので注意してください。また，スタブおよびWSDLは必須です。

(2)　プロバイダ実装クラスを使用したWebサービス

プロバイダ実装クラスを使用する場合の形態を次に示します。

図1-4　Webサービスの形態（プロバイダ実装クラス）

プロバイダ実装クラスを使用する場合はスタブもWSDLも必要ないため，任意のSOAPメッセージを動的に送受信したいときに適しています。プロバイダ実装クラスはJAX-WSエンジンがマーシャルしたオブジェクトをそのまま受け取るため，Webサービス開発時に，APIを利用してSOAPメッセージを構成するXMLから値を直接取得したり，APIを利用してSOAPメッセージを構成するXMLを組み立てたりする必要があります。

1.4.2　Webサービスクライアントの形態

Cosminexusでは，次の三つの形態のWebサービスクライアントをサポートしています。

スタブベースのWebサービスクライアント

ディスパッチベースのWebサービスクライアント

APIベースのWebサービスクライアント

それぞれの形態について説明します。

＜この項の構成＞

(1)　スタブベースのWebサービスクライアント

(2)　ディスパッチベースのWebサービスクライアント

(3)　APIベースのWebサービスクライアント

(1)　スタブベースのWebサービスクライアント

スタブベースのWebサービスクライアントを使用する場合の形態を次に示します。

図1-5　Webサービスクライアント（スタブベース）

スタブベースのWebサービスクライアントを使用すると，WSDLのオペレーションに対応するJavaメソッドを呼び出すだけで，Webサービスを呼び出せます。複雑な変換は自動生成されるスタブが実施するため，Webサービスクライアント開発時に，APIを利用してSOAPメッセージを構成するXMLを組み立てるような，複雑なプログラミングをする必要はありません。ただし，WSDLに定義されていないSOAPメッセージを送受信することはできないので注意してください。また，スタブおよびWSDLは必須です。WSDLは，対象のWebサービスから入手する必要があります。

(2)　ディスパッチベースのWebサービスクライアント

ディスパッチベースのWebサービスクライアントを使用する場合の形態を次に示します。

図1-6　Webサービスクライアント（ディスパッチベース）

ディスパッチベースのWebサービスクライアントを使用する場合は，スタブもWSDLも必要ないため，任意のSOAPメッセージを動的に送受信したいときに適しています。ディスパッチベースのWebサービスクライアントは，生成したオブジェクトをjavax.xml.ws.Dispatchインタフェース経由でJAX-WSエンジンに受け渡すため，Webサービスクライアント開発時に，APIを利用してSOAPメッセージを構成するXMLから値を直接取得したり，APIを利用してSOAPメッセージを構成するXMLを組み立てたりする必要があります。

注意

ディスパッチベースのWebサービスクライアントでは，javax.xml.ws.Dispatchインタフェースの代わりにjavax.xml.soap.SOAPConnectionクラスを使用してSOAPメッセージを送受信することもできます。ただし，javax.xml.soap.SOAPConnectionクラスを使用した場合，動作定義ファイルおよびメッセージコンテキストの設定は無効になり，ログも出力されないため，注意してください。

また，このマニュアルでは，javax.xml.soap.SOAPConnectionクラスを使用する場合の動作については説明しません。ほかのSAAJ 1.3仕様のAPIと同様に，JDKのドキュメントを参照してください。なお，特に問題のないかぎり，javax.xml.soap.SOAPConnectionクラスではなくjavax.xml.ws.Dispatchインタフェースを使用してください。

(3)　APIベースのWebサービスクライアント

CosminexusのJAX-WS機能のAPIのうち，javax.xml.ws.Dispatchインタフェース以外のAPIを使用するWebサービスクライアントをAPIベースのWebサービスクライアントと呼びます。APIベースのWebサービスクライアントは，JAX-WS機能がサポートしている任意のAPIを呼び出せます。

1.5　JAX-WSエンジンの設定

JAX-WSエンジンを利用するには，J2EEサーバ用オプション定義ファイルにJAX-WSエンジンを有効にするための定義をする必要があります。

JAX-WSエンジンを有効にするための定義については，「付録A.1(3)　動作環境の切り替え」のJAX-WSエンジンを利用する場合の説明を参照してください。

2.　開発の流れ

Webサービスは，WSDLを起点とした開発，SEIを起点とした開発，またはプロバイダを起点とした開発のどれかで開発します。Webサービスクライアントは，スタブベース，ディスパッチベース，またはAPIベースのWebサービスクライアントのどれかを開発します。

この章では，WebサービスおよびWebサービスクライアントの開発の流れについて説明します。

＜この章の構成＞

2.1　Webサービス開発の流れ

2.2　Webサービスクライアント開発の流れ

2.1　Webサービス開発の流れ

Webサービスには，次に示す開発方法があります。

WSDLを起点とした開発（2.1.1）

SEIを起点とした開発（2.1.2）

SEIを起点とした開発（cjwsgenコマンドを使用する場合）（2.1.3）

プロバイダを起点とした開発（2.1.4）

開発方法を選択する流れを次に示します。

図2-1　Webサービス開発方法の選択の流れ

＜この節の構成＞

2.1.1　WSDLを起点とした開発の流れ

2.1.2　SEIを起点とした開発の流れ

2.1.3　SEIを起点とした開発の流れ（cjwsgenコマンドを使用する場合）

2.1.4　プロバイダを起点とした開発の流れ

2.1.1　WSDLを起点とした開発の流れ

WSDLを起点としたWebサービスの開発の流れを次の図に示します。

図2-2　WSDLを起点としたWebサービスの開発の流れ

WSDLファイルを作成する
WSDLファイルは，手動またはコマンドで作成できます。

手動で作成する場合
Webサービスのメタ情報として，WSDL 1.1仕様，XML Schema仕様，およびWS-I Basic Profile 1.1に従ってWSDLファイルを作成します。なお，SOAP 1.1のメッセージを受信する場合はSOAP 1.1仕様の拡張要素を記述し，SOAP 1.2のメッセージを受信する場合はSOAP 1.2仕様の拡張要素を記述してください。
WSDL 1.1仕様のサポート範囲については，「14.1　WSDL1.1仕様のサポート範囲」を参照してください。

コマンドで生成する場合
コマンドでのWSDLの生成は，ユーザがWSDLやXML Schemaの構文ではなく，Java言語での開発に慣れている場合にお勧めします。
一時的にWebサービス実装クラスを作成・コンパイルしたあと，-wsdlオプションを指定してcjwsgenコマンドのWSDL生成機能を実行し，WSDLファイルを生成します。生成したWSDLは，必要に応じて変更してください。ここで作成するWebサービス実装クラスは，cjwsgenコマンドの入力だけに利用します。そのため，メソッドを実装する必要はありません。
SOAP 1.2仕様のメッセージを受信する場合は，Webサービス実装クラスの作成時，javax.xml.ws.BindingTypeアノテーションに"http://www.w3.org/2003/05/soap/bindings/HTTP/"を指定してください。
WSDL生成後，不要になったWebサービス実装クラスは削除してください。

cjwsimportコマンドを実行する（Javaソースの生成）
cjwsimportコマンドを実行して，作成したWSDLファイルから，SEI，Webサービス実装クラスのスケルトン，JavaBeansクラス（スタブ）など，Webサービスの開発・実行に必要なJavaソースを生成します。cjwsimportコマンドは，-generateServiceオプションを指定して実行します。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

Webサービスを実装する
手順2で生成されたスタブを利用して，Webサービス実装クラスのスケルトンに必要な処理を記述し，Webサービスを実装します。また，実装したWebサービス実装クラスをコンパイルします。なお，javax.xml.ws.BindingTypeアノテーションはWSDLの内容に応じて自動的に付加されます。

DDを作成する
web.xmlおよびapplication.xmlを作成します。web.xmlには，Webサービス固有の情報を記述します。web.xmlの作成については，「3.4　web.xmlの作成」を参照してください。

EARファイルを作成する
作成したファイルを含むEARファイルを作成します。EARファイルの作成については，「3.5.3　EARファイルの作成」を参照してください。

EARファイルをデプロイし，開始する
作成したEARファイルをデプロイし，J2EEアプリケーション（Webサービス）として開始します。cjimportappコマンドおよびcjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」および「cjstartapp（J2EEアプリケーションの開始）」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

WSDLを起点としたWebサービスの開発例については，次に示す個所を参照してください。

「4.3　Webサービスの開発例（WSDL起点）」

「25.3　Webサービスの開発例（WSDL起点・WS-RM 1.2）」

2.1.2　SEIを起点とした開発の流れ

SEIを起点としたWebサービスの開発の流れを次の図に示します。

図2-3　SEIを起点としたWebサービスの開発の流れ

WSDLはJAX-WSエンジンによって自動生成されますが，手順4に従いコマンドを実行することでWSDLを生成することもできます。WSDLをコマンドで生成しない場合，手順4は不要です。

Webサービス実装クラスを作成する
Webサービス実装クラスは，POJOとして作成する場合とEJBを基に作成する場合があります。どちらの場合も，JAX-WS 2.1仕様およびJAXB 2.1仕様に従って，Webサービス実装クラスを作成します。SOAP 1.2仕様のメッセージを受信する場合は，javax.xml.ws.BindingTypeアノテーションに"http://www.w3.org/2003/05/soap/bindings/HTTP/"を指定してください。
JAX-WS 2.1仕様のサポート範囲については，「14.3　JAX-WS 2.1仕様のサポート範囲」を参照してください。JAXB 2.1仕様のサポート範囲については，マニュアル「Cosminexus XML Processor ユーザーズガイド」の「付録B　JAXB仕様のサポート範囲」を参照してください。

aptコマンドを実行する（追加のJavaソースの生成）
aptコマンドを実行して，作成したWebサービス実装クラスをコンパイルし，JavaBeansクラス（スタブ）など，Webサービスの実行に必要な追加のJavaソースを生成します。aptコマンドについては，「11.2　aptコマンド」を参照してください。

DDを作成する
web.xmlおよびapplication.xmlを作成します。web.xmlには，Webサービス固有の情報を記述します。web.xmlの作成については，「3.4　web.xmlの作成」を参照してください。

cjwsgenコマンドのWSDL生成機能を実行する（任意）
-wsdlオプションを指定してcjwsgenコマンドを実行し，Webサービス実装クラスからWSDLを生成します。この手順は任意です。なお，ここで生成したWSDLは，変更しないでください。
cjwsgenコマンドのWSDL生成機能で生成したWSDLは，メールで送付するなど，メタデータの発行機能以外の任意の方法で展開できます。
cjwsgenコマンドについては，「11.3　cjwsgenコマンド」を参照してください。

EARファイルを作成する
作成したファイルを含むEARファイルを作成します。EARファイルの作成については，「3.5.3　EARファイルの作成」を参照してください。

EARファイルをデプロイし，開始する
作成したEARファイルをデプロイし，J2EEアプリケーション（Webサービス）として開始します。cjimportappコマンドおよびcjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」および「cjstartapp（J2EEアプリケーションの開始）」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

SEIを起点としたWebサービスの開発例については，次に示す個所を参照してください。

「5.3　Webサービスの開発例（SEI起点）」

「6.3　Webサービスの開発例（SEI起点・cjwsgenコマンド）」

「7.3　Webサービスの開発例（SEI起点・カスタマイズ）」

「8.3　Webサービスの開発例（SEI起点・EJBのWebサービス）」

「19.3　Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）」

「23.3　Webサービスの開発例（SEI起点・ストリーミング）」

「28.3　Webサービスの開発例（SEI起点・アドレッシング）」

2.1.3　SEIを起点とした開発の流れ（cjwsgenコマンドを使用する場合）

コンパイル済みのWebサービス実装クラスから，cjwsgenコマンドでJavaソースを生成する場合の，SEIを起点としたWebサービスの開発の流れを次の図に示します。

図2-4　SEIを起点としたWebサービスの開発の流れ（cjwsgenコマンドを使用する場合）

cjwsgenコマンドを実行する（追加のJavaソースの生成）
Webサービス実装クラスは，POJOとして作成する場合とEJBを基に作成する場合があります。どちらの場合も，cjwsgenコマンドを実行して，コンパイルが完了しているWebサービス実装クラスから，JavaBeansクラス（スタブ）など，Webサービスの実装に必要な追加のJavaソースを生成します。このとき，-wsdlオプションを指定すると，WSDLも生成できます。この場合，生成したWSDLは変更しないでください。
cjwsgenコマンドについては，「11.3　cjwsgenコマンド」を参照してください。

DDを作成する
web.xmlおよびapplication.xmlを作成します。web.xmlには，Webサービス固有の情報を記述します。web.xmlの作成については，「3.4　web.xmlの作成」を参照してください。

EARファイルを作成する
作成したファイルを含むEARファイルを作成します。EARファイルの作成については，「3.5.3　EARファイルの作成」を参照してください。

EARファイルをデプロイし，開始する
作成したEARファイルをデプロイし，J2EEアプリケーション（Webサービス）として開始します。cjimportappコマンドおよびcjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」および「cjstartapp（J2EEアプリケーションの開始）」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

SEIを起点としたWebサービスの開発例については，次に示す個所を参照してください。

「5.3　Webサービスの開発例（SEI起点）」

「6.3　Webサービスの開発例（SEI起点・cjwsgenコマンド）」

「7.3　Webサービスの開発例（SEI起点・カスタマイズ）」

「8.3　Webサービスの開発例（SEI起点・EJBのWebサービス）」

「19.3　Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）」

「23.3　Webサービスの開発例（SEI起点・ストリーミング）」

「28.3　Webサービスの開発例（SEI起点・アドレッシング）」

2.1.4　プロバイダを起点とした開発の流れ

プロバイダを起点としたWebサービスの開発の流れを次の図に示します。

図2-5　プロバイダを起点としたWebサービスの開発の流れ

プロバイダ実装クラスを作成する
Webサービス実装クラスは，POJOとして作成します。JAX-WS 2.1仕様およびJAXB 2.1仕様に従って，プロバイダ実装クラスを作成します。SOAP 1.2仕様のメッセージを受信する場合は，javax.xml.ws.BindingTypeアノテーションに"http://www.w3.org/2003/05/soap/bindings/HTTP/"を指定してください。
JAX-WS 2.1仕様のサポート範囲については，「14.3　JAX-WS 2.1仕様のサポート範囲」を参照してください。JAXB 2.1仕様のサポート範囲については，マニュアル「Cosminexus XML Processor ユーザーズガイド」の「付録B　JAXB仕様のサポート範囲」を参照してください。

aptコマンドを実行する（コンパイルとエラーチェック）
aptコマンドを実行し，作成したプロバイダ実装クラスのコンパイル，およびエラーチェックをします。

DDを作成する
web.xmlおよびapplication.xmlを作成します。web.xmlには，Webサービス固有の情報を記述します。web.xmlの作成については，「3.4　web.xmlの作成」を参照してください。

EARファイルを作成する
作成したファイルを含むEARファイルを作成します。EARファイルの作成については，「3.5.3　EARファイルの作成」を参照してください。

EARファイルをデプロイし，開始する
作成したEARファイルをデプロイし，J2EEアプリケーション（Webサービス）として開始します。cjimportappコマンドおよびcjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」および「cjstartapp（J2EEアプリケーションの開始）」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。
運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

プロバイダを起点としたWebサービスの開発例については，「9.3　Webサービスの開発例（プロバイダ起点・SAAJ）」を参照してください。

2.2　Webサービスクライアント開発の流れ

Webサービスクライアントには，次に示す開発方法があります。

スタブベースのWebサービスクライアントの開発（2.2.1）

ディスパッチベースのWebサービスクライアントの開発（2.2.2）

APIベースのWebサービスクライアントの開発（2.2.3）

＜この節の構成＞

2.2.1　スタブベースのWebサービスクライアントの開発の流れ

2.2.2　ディスパッチベースのWebサービスクライアントの開発の流れ

2.2.3　APIベースのWebサービスクライアントの開発の流れ

2.2.1　スタブベースのWebサービスクライアントの開発の流れ

スタブベースのWebサービスクライアントの開発の流れを次の図に示します。

図2-6　Webサービスクライアントの開発の流れ（スタブベース）

WSDLファイルを入手する（または，公開されているWSDLのURLを取得する）
呼び出そうとしているWebサービスのメタ情報が記述されたWSDLファイルを入手します。または，呼び出そうとしているWebサービスがWSDLファイルのURLを公開している場合，URLを取得します。

cjwsimportコマンドを実行する（Javaソースの生成）
cjwsimportコマンドを実行して，入手したWSDLファイル，または取得したWSDLファイルのURLから，サービスクラスやSEIなど，Webサービスクライアントの開発・実行に必要なJavaソースを生成します。cjwsimportコマンドは，-generateServiceオプションを指定しないで実行します。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

Webサービスクライアントを実装する
生成されたJavaソースを利用して，Webサービスクライアントを実装します。実装したWebサービスクライアントは，javacコマンドでコンパイルします。Webサービスクライアントの実装については，「3.6　Webサービスクライアントの実装」を参照してください。

Webサービスを呼び出す
作成したWebサービスクライアントを実行して，Webサービスを呼び出します。

WSDLを起点に開発する場合のスタブベースのWebサービスクライアントの開発例については，「4.5　Webサービスクライアントの開発例（WSDL起点）」を参照してください。

SEIを起点に開発する場合のスタブベースのWebサービスクライアントの開発例については，次に示す個所を参照してください。

「5.5　Webサービスクライアントの開発例（SEI起点）」

「6.5　Webサービスクライアントの開発例（SEI起点・cjwsgenコマンド）」

「7.5　Webサービスクライアントの開発例（SEI起点・カスタマイズ）」

「8.5　Webサービスクライアントの開発例（SEI起点・EJBのWebサービス）」

「19.5　Webサービスクライアントの開発例（SEI起点・wsi:swaRef形式の添付ファイル）」

「23.3　Webサービスの開発例（SEI起点・ストリーミング）」

「28.5　Webサービスクライアントの開発例（SEI起点・アドレッシング）」

2.2.2　ディスパッチベースのWebサービスクライアントの開発の流れ

ディスパッチベースのWebサービスクライアントを開発する場合は，JAX-WS 2.1仕様およびJAXB 2.1仕様に従って，Webサービスクライアントを実装してください。

ディスパッチベースのWebサービスクライアントの開発例については，「9.5　Webサービスクライアントの開発例（プロバイダ起点・SAAJ）」を参照してください。

2.2.3　APIベースのWebサービスクライアントの開発の流れ

APIベースのWebサービスクライアントを開発する場合は，JAX-WS 2.1仕様およびJAXB 2.1仕様に従って，APIを使用してWebサービスクライアントを実装してください。

3.　開発のポイント

この章では，Webサービス開発の作業ごとに，あらかじめ理解しておく必要がある点と注意事項について説明します。

＜この章の構成＞

3.1　WSDLの作成

3.2　WSDLとJavaソースのマッピング

3.3　Webサービス実装クラスおよびプロバイダ実装クラスの作成

3.4　web.xmlの作成

3.5　アーカイブの作成

3.6　Webサービスクライアントの実装

3.1　WSDLの作成

WSDLを起点とした開発では，WSDL 1.1仕様およびWS-I Basic Profile 1.1に従ってWSDLを作成します。WSDL 1.1仕様のサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

POJOのWebサービスの場合，作成したWSDLは，WARファイルを構成するwsdlディレクトリに格納します。WSDLの格納先については，「3.5.1　WARファイルの構成」を参照してください。

EJBのWebサービスの場合，作成したWSDLは，EJB JARファイルを構成するwsdlディレクトリに格納します。WSDLの格納先については，「3.5.2　EJB JARファイルの構成」を参照してください。

wsdlディレクトリにWSDLが含まれていない場合，Webサービスをデプロイするときに，Webサービス側のJAX-WSエンジンによってJAX-WS 2.1仕様に従ったWSDLが自動生成されます。

3.2　WSDLとJavaソースのマッピング

cjwsimportコマンドおよびaptコマンド実行時に，WSDLとJavaソース間でマッピングされます。ここでは，WSDLとJavaソース間のマッピング例（デフォルトマッピング）を示します。

＜この節の構成＞

3.2.1　WSDLからJavaソースへのマッピング例

3.2.2　JavaソースからWSDLへのマッピング例

3.2.1　WSDLからJavaソースへのマッピング例

cjwsimportコマンドを実行すると，WSDLからJavaソースへマッピングされます。WSDLからJavaソースへのマッピング例を次の図に示します。

図3-1　WSDLからJavaソースへのマッピング例

マッピングについては，「12.　WSDLからJavaへのマッピング」を参照してください。

3.2.2　JavaソースからWSDLへのマッピング例

aptコマンドを実行すると，JavaソースからWSDLへマッピングされます。JavaソースからWSDLへのマッピング例を次の図に示します。

図3-2　JavaソースからWSDLへのマッピング例

マッピングについては，「13.　JavaからWSDLへのマッピング」を参照してください。

3.3　Webサービス実装クラスおよびプロバイダ実装クラスの作成

Webサービス実装クラスまたはプロバイダ実装クラスは，コンパイルしたJavaクラスファイル（*.class）として作成します。

＜この節の構成＞

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

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

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

Webサービス実装クラスまたはプロバイダ実装クラスは，WARファイルを構成するディレクトリに含めます。次に示すどちらか，または両方に一つ以上含めてください。

classesディレクトリ以下

libディレクトリ以下に含まれるJARファイル内

Webサービス実装クラスまたはプロバイダ実装クラスの格納先については，「3.5.1　WARファイルの構成」を参照してください。

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

Webサービス実装クラスは，EJB JARファイルを構成するディレクトリに含めます。次に示すディレクトリに一つ以上含めてください。

classesディレクトリ以下

Webサービス実装クラスの格納先については，「3.5.2　EJB JARファイルの構成」を参照してください。

3.4　web.xmlの作成

ここでは，POJOのWebサービスで使用するWARファイルに含まれるweb.xmlについて説明します。

web.xmlを作成する場合，ファイル名称は"web.xml"とし，WARファイルを構成するWEB-INFディレクトリの直下に格納します。web.xmlの格納が必須かどうかは，J2EEサーバ用ユーザプロパティファイル（usrconf.properties）のwebserver.container.jaxws.webservice.no_webxml.enabledプロパティの設定値によって異なります。

"strict"または"true"（推奨は"strict"）を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合，Webサービスの実行に必要な定義が記述されていなければなりません。

"lax"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合，Webサービスの実行に必要な定義が記述されていなくてもかまいません。

"none"または"false"（推奨は"none"）を設定した場合
必ずWEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納してください。

次に，Webサービスの実行に必要な定義，web.xmlの例，およびweb.xmlをWARファイルに含めない場合の動作について説明します。

＜この節の構成＞

(1)　Webサービスの実行に必要な定義

(2)　web.xmlの例

(3)　web.xmlをWARファイルに含めない場合の動作

(1)　Webサービスの実行に必要な定義

webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"strict"を設定してweb.xmlをWARファイルに含める場合，または"none"を設定した場合，web.xmlは，次に示す条件を満たすように作成してください。

バージョン
web.xmlのバージョンは，2.5にしてください。

リスナ
web-app要素に，次に示すlistener要素を含めてください。

<listener>
 <listener-class>
   com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
 </listener-class>
</listener>

サーブレット
web-app要素に，次に示すservlet要素を含めてください。

<servlet>
 <description>Endpoint servlet for Cosminexus JAX-WS</description>
 <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
 <servlet-name>CosminexusJaxwsServlet</servlet-name>
 <servlet-class>
   com.cosminexus.xml.ws.transport.http.servlet.WSServlet
 </servlet-class>
</servlet>

サーブレットマッピング
web-app要素以下にservlet-mapping要素を記述し，Webサービス実装クラスまたはプロバイダ実装クラスと同じ数のurl-pattern要素を含めてください。
servlet-mapping要素の記述例を次に示します。

<servlet-mapping>
 <servlet-name>CosminexusJaxwsServlet</servlet-name>
 <url-pattern>" / "＋Webサービス1のサービス名</url-pattern>
 <url-pattern>" / "＋Webサービス2のサービス名</url-pattern>
   :
 <url-pattern>" / "＋Webサービスnのサービス名</url-pattern>
</servlet-mapping>

url-pattern要素の「" / "＋Webサービス1のサービス名」は，次の値にプレフィクスとして「/」（スラッシュ）を付けた文字列を記述します。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値

プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性の値

参考

WARファイルにcosminexus-jaxws.xmlを含める場合

cosminexus-jaxws.xmlのWebサービス実装クラス，またはプロバイダ実装クラスに対応するendpoint要素のurl-pattern属性の値を記述してください。cosminexus-jaxws.xmlについては，「10.3　cosminexus-jaxws.xmlによるカスタマイズ」を参照してください。

そのほかの要素
任意に記述できます。WARファイルに作成したサーブレット，リスナ，JSPなどを含める場合，適宜，web.xmlに定義してください。

(2)　web.xmlの例

web.xmlの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;fromwsdl&quot;</description>
 <display-name>Sample_web_service_fromwsdl</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/TestJaxWsService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

この例では，次の属性の値が「TestJaxWsService」であることを想定しています。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性

プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性

このとき，url-pattern要素の値は「/」（スラッシュ）を付けて「/TestJaxWsService」と記述します。

参考

WARファイルにcosminexus-jaxws.xmlを含める場合

Webサービス実装クラスまたはプロバイダ実装クラスに対応するendpoint要素のurl-pattern属性の値が「/TestJaxWsService」であれば，例と同じように記述します。

(3)　web.xmlをWARファイルに含めない場合の動作

CosminexusのJAX-WS機能では，webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"strict"，または"lax"を設定してweb.xmlをWARファイルに含めない場合，Webサービス呼び出し時に次に示す内容のweb.xmlがあるものとして処理されます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Cosminexus JAX-WS Default web.xml</description>
 <display-name>Cosminexus_JAX_WS_Default_web_xml</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>"/"＋Webサービス1のサービス名</url-pattern>
   <url-pattern>"/"＋Webサービス2のサービス名</url-pattern>
     :
   <url-pattern>"/"＋Webサービスnのサービス名</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

url-pattern要素の「" / "＋Webサービス1のサービス名」は，次の属性の値に，プレフィクスとして「/」（スラッシュ）を付けた文字列が定義されます。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値

プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性の値

WARファイル内に格納したすべてのWebサービス実装クラスまたはプロバイダ実装クラスについて，url-pattern要素があるかのように動作します。

webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定してweb.xmlをWARファイルに含める場合でも，「3.4(1)　Webサービスの実行に必要な定義」の内容が正しくweb.xmlに記述されていないときは，web.xmlが含まれない場合と同様に，上記に示す内容のweb.xmlがあるものと仮定してWebサービスを呼び出します。なお，このとき仮定されるweb.xmlは，上記の内容からsession-config要素以下を除いた内容です。

注意

JAX-WSエンジンが仮定したweb.xmlは，実際にWARファイル内に生成されるわけではありません。Webサービスが呼び出される場合を除いて，すべてこの仮定はないものとして扱われます。

（例）

cjgetapppropコマンドで取得できる属性ファイルには，web.xmlに関する情報は含まれません。また，webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlをWARファイルに含めた場合は，実際に含まれているweb.xmlに関する情報だけが取得できます。

webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlをWARファイルに含めた場合，JAX-WSエンジンがWebサービス呼び出し時に仮定するweb.xmlの内容が，実際のweb.xmlに記載されるわけではありません。

webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定する場合，「3.4(1)　Webサービスの実行に必要な定義」の内容をすべて定義したweb.xmlをWARファイルに含めてください。一部だけを定義したweb.xmlをWARファイルに含めた場合の動作は保証されません。

3.5　アーカイブの作成

WARファイルの構成，EJB JARファイルの構成およびEARファイルの作成について説明します。

＜この節の構成＞

3.5.1　WARファイルの構成

3.5.2　EJB JARファイルの構成

3.5.3　EARファイルの作成

3.5.4　EJBのWebサービスの設定用WARファイルの作成

3.5.1　WARファイルの構成

POJOのWebサービスで使用するWARファイルは，次の表に示す構成にする必要があります。

表3-1　WARファイルの構成

ディレクトリ
備考

/
－

┣
┃
META-INF/
－

┗
MANIFEST.MF
－

┗
WEB-INF/
－

┣
web.xml
作成したweb.xmlです。

┣
classes/
コンパイルしたJavaクラスを格納します。

┣
lib/
コンパイルしたJavaクラスを格納します。

┗
wsdl/
作成したWSDLを格納します。WSDLをWebサービスのメタデータとして公開するには，このディレクトリに含める必要があります。なお，別のWARファイルおよびEJB JARファイルに含まれるWSDLファイルをこのディレクトリに含めないでください。

（凡例）

－：説明や補足事項が特にないことを示します。

注

cosminexus-jaxws.xmlをWARファイルに含める場合は，WEB-INFディレクトリ直下に含めます。cosminexus-jaxws.xmlについては，「10.3　cosminexus-jaxws.xmlによるカスタマイズ」を参照してください。

CosminexusのJAX-WSエンジンでは，同一のWARファイルに，複数のWebサービスを含められます。複数のWebサービスを含める場合，異なる機能を持つクラスのクラス名は重複できません。異なる機能を持つクラスのクラス名が重複していると，Webサービスが正常に動作しないおそれがあります。ただし，複数のWebサービスで同じクラスを利用する場合は，クラス名が重複していてもかまいません。

3.5.2　EJB JARファイルの構成

EJBのWebサービスで使用するEJB JARファイルは，次の表に示す構成にする必要があります。

表3-2　EJB JARファイルの構成

ディレクトリ
備考

/
コンパイルしたJavaクラスを格納します。EJBのWebサービス実装クラスは，このディレクトリに含める必要があります。

┗
META-INF/
－

┣
┃
┃
┃
┃
wsdl/
作成したWSDLを格納します。WSDLをWebサービスのメタデータとして公開するには，このディレクトリに含める必要があります。なお，別のWARファイルおよびEJB JARファイルに含まれるWSDLファイルをこのディレクトリに含めないでください。

┗
MANIFEST.MF
－

（凡例）

－：説明や補足事項が特にないことを示します。

注

CosminexusのJAX-WSエンジンでは，同一のEJB JARファイルに，複数のWebサービスを含められます。複数のWebサービスを含める場合，異なる機能を持つクラスのクラス名は重複できません。異なる機能を持つクラスのクラス名が重複していると，Webサービスが正常に動作しないおそれがあります。ただし，複数のWebサービスで同じクラスを利用する場合は，クラス名が重複していてもかまいません。

3.5.3　EARファイルの作成

WebサービスをJ2EEサーバにデプロイするには，作成したWARファイルまたはEJB JARファイルを含めたEARファイルを作成します。EARファイルを作成するには，application.xmlが必要になります。

EARファイルの構成については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「1.3.2　アーカイブ形式のJ2EEアプリケーション」を参照してください。

3.5.4　EJBのWebサービスの設定用WARファイルの作成

EJBのWebサービス呼び出し機能は，EARファイルに設定用WARファイルを含めない構成で利用できます。ただし，WARファイルの指定が必要なアプリケーションサーバの機能を利用するために，EARファイルに設定用WARファイルを含めることができます。ここでは設定用WARファイルについて説明します。

＜この項の構成＞

(1)　EARファイルに設定用WARファイルを含めない場合

(2)　EARファイルに設定用WARファイルを含める場合

(3)　設定用WARファイル名

(4)　設定用WARファイルのweb.xml

(1)　EARファイルに設定用WARファイルを含めない場合

EARファイルにEJB JARファイルが含まれていて，さらにEJB JARファイルにEJBのWebサービス実装クラスが含まれるとき，JAX-WSエンジンは設定用WARファイルを含むと仮定して動作します。仮定される設定用WARファイルの構成を次の表に示します。

表3-3　仮定される設定用WARファイルの構成

ディレクトリ
備考

/
－

┣
┃
┃
WEB-INF/
－

┗
web.xml
3.5.4(4)を参照してください。

┗
META-INF/
－

（凡例）

－：説明や補足事項が特にないことを示します。

(2)　EARファイルに設定用WARファイルを含める場合

EJBのWebサービス実装クラスを呼び出す際に同時にサーブレットフィルタ機能を適用するなど，web.xmlに設定を加えたい場合，作成したweb.xmlを設定用WARファイルに格納し，EARファイルに含めます。設定用WARファイルの構成を次の表に示します。なお，設定用WARファイルには命名規則があります。設定用WARファイルのファイル名については，「3.5.4(3)　設定用WARファイル名」を参照してください。

表3-4　設定用WARファイルの構成

ディレクトリ
備考

/
－

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
WEB-INF/
－

┣
┃
┃
classes/
コンパイルしたJavaクラスを格納します。フィルタを使用する場合は，フィルタのJavaクラスをこのディレクトリに格納します。※

┣
┃
┃
lib/
コンパイルしたJavaクラスを含むJARファイルを格納します。フィルタを使用する場合は，フィルタのJavaクラスを含むJARファイルをこのディレクトリに格納します。※

┗
web.xml
3.5.4(4)を参照してください。

┗
META-INF/
－

（凡例）

－：説明や補足事項が特にないことを示します。

注※

設定用WARファイルのclassesにPOJOのWebサービスを含めないでください。POJOのWebサービスを含めた場合の動作は保証されません。

(3)　設定用WARファイル名

EARファイルに設定用WARファイルを含める場合，EJBのWebサービスの設定用WARファイル名は，J2EEサーバ用ユーザプロパティファイル（usrconf.properties）のwebserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名にする必要があります。

EARファイルに設定用WARファイルを含めない場合，webserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名の設定用WARファイルを含むと仮定して動作します。EARファイルに設定用WARファイルを含めない場合，メッセージがJ2EEサーバのログに出力されるので，JAX-WSエンジンが設定用WARファイルを含むと仮定したことを確認できます（KDJE42391-I）。このメッセージが出力されなかった場合は，プロパティで指定した設定用WARファイルがEARファイルに含まれることを確認できます。

なお，プロパティのデフォルト値は「CosminexusWSEE.war」です。

EJBのWebサービス呼び出しに対して，次に示す設定を使用できます。これらの設定を使用する場合は，設定用WARファイルをEARファイルに含めて，設定用WARファイル名を指定してください。

コンテキストルートの設定
「application.xmlの<web-uri>要素」に設定用WARファイル名を指定します。
EJBのWebサービスの設定用WARファイルに対してコンテキストルートを設定しなかった場合，コンテキストルートは「/」と仮定されます。

cosminexus.xmlの<war>要素で指定する設定
「cosminexus.xmlの<module-name>要素」に設定用WARファイル名を指定します。

注意

webserver.container.jaxws.webservice.wsee.warnameプロパティの値を変更するには，EJBのWebサービスを含むWebアプリケーションを停止してください。Webアプリケーションを開始した状態で，プロパティの値を変更した場合は動作を保証されません。ほかのアプリケーションが不正となって，予期しない例外が発生する場合があります。

(4)　設定用WARファイルのweb.xml

ここではEJBのWebサービスの設定用WARファイルに含まれるweb.xmlについて説明します。

web.xmlを作成する場合，ファイル名称は"web.xml"とし，WARファイルを構成するWEB-INFディレクトリの直下に格納します。web.xmlの格納が必須かどうかは，J2EEサーバ用ユーザプロパティファイル（usrconf.properties）のwebserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値によって異なります。

"strict"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合，Webサービスの実行に必要な定義が記述されていなければなりません。

"lax"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合，Webサービスの実行に必要な定義が記述されていなくてもかまいません。

"none"を設定した場合
必ずWEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納してください。

次に，設定用WARファイルにweb.xmlを含めない場合の動作および設定用WARファイルにweb.xmlを含める場合の動作について説明します。

(a)　設定用WARファイルにweb.xmlを含めない場合

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"strict"，または"lax"を設定して，EJBのWebサービスの設定用WARファイルにweb.xmlを含めない場合，Webサービス呼び出し時に次に示す内容のweb.xmlがあるものとして処理されます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Cosminexus JAX-WS Default web.xml</description>
 <display-name>Cosminexus_JAX_WS_Default_web_xml</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>EJB Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
   <url-pattern>"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名</url-pattern>
   <url-pattern>"/" + Webサービス2のサービス名+ "/" + Webサービス2のクラス名</url-pattern>
     :
   <url-pattern>"/" + Webサービスnのサービス名+ "/" + Webサービスnのクラス名</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

url-pattern要素の「"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名」は，Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性とname属性の値に，プレフィクスとして「/」（スラッシュ）を付けた文字列が定義されます。

設定用WARファイル内に格納したすべてのWebサービス実装クラスについて，url-pattern要素があるかのように動作します。

注意

JAX-WSエンジンが仮定したweb.xmlは，実際に設定用WARファイル内に生成されるわけではありません。Webサービスが呼び出される場合を除いて，すべてこの仮定はないものとして扱われます。

（例）

cjgetapppropコマンドで取得できる属性ファイルには，web.xmlに関する情報は含まれません。また，webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合は，実際に含まれているweb.xmlに関する情報だけが取得できます。

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合，JAX-WSエンジンがWebサービス呼び出し時に仮定するweb.xmlの内容が，実際のweb.xmlに記載されるわけではありません。

(b)　設定用WARファイルにweb.xmlを含める場合

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"strict"を設定してweb.xmlをWARファイルに含める場合，または"none"を設定した場合，web.xmlは，次に示す条件を満たすように作成してください。

バージョン
web.xmlのバージョンは，2.5にしてください。

リスナ
web-app要素に，次に示すlistener要素を含めてください。

<listener>
 <listener-class>
   com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener
 </listener-class>
</listener>

サーブレット
web-app要素に，次に示すservlet要素を含めてください。

<servlet>
 <description>EJB Endpoint servlet for Cosminexus JAX-WS</description>
 <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
 <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
 <servlet-class>
   com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet
 </servlet-class>
</servlet>

サーブレットマッピング
web-app要素以下にservlet-mapping要素を記述し，Webサービス実装クラスと同じ数のurl-pattern要素を含めてください。
servlet-mapping要素の記述例を次に示します。

<servlet-mapping>
 <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
 <url-pattern>"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名</url-pattern>
 <url-pattern>"/" + Webサービス2のサービス名+ "/" + Webサービス2のクラス名</url-pattern>
   :
 <url-pattern>"/" + Webサービスnのサービス名+ "/" + Webサービスnのクラス名</url-pattern>
</servlet-mapping>

url-pattern要素の「Webサービスnのサービス名」および「Webサービスnのクラス名」には，次の文字列を記述します。

「Webサービスnのサービス名」
Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値を記述します。serviceName属性が省略されている場合，Webサービス実装クラスのクラス名（単純名）にサフィックスとして"Service"を付けた文字列を記述します。

「Webサービスnのクラス名」
Webサービス実装クラスのjavax.jws.WebServiceアノテーションのname属性の値を記述します。name属性が省略されている場合，Webサービス実装クラスのクラス名（単純名）を記述します。

そのほかの要素
任意に記述できます。WARファイルに作成したサーブレットなどを含める場合，適宜，web.xmlに定義してください。

EJBのWebサービスの設定用WARファイルに含めるweb.xmlの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Cosminexus JAX-WS Default web.xml</description>
 <display-name>Cosminexus_JAX_WS_Default_web_xml</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>EJB Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/AddNumbersImplService/AddNumbersImpl</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

この例では，Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値が「AddNumbersImplService」で，さらにname属性が「AddNumbersImpl」であることを想定しています。

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"lax"を設定し，設定用WARファイルにweb.xmlを含める場合，リスナ，サーブレット，サーブレットマッピング，およびそのほかの要素が不完全に含まれるとき，動作は保証されません。

3.6　Webサービスクライアントの実装

Webサービスクライアントの形態に制限はありません。例えば，次に示すようなWebサービスを開発できます。

Javaアプリケーション

JSP（JSPからWebサービスを呼び出す）

サーブレット（サーブレットからWebサービスを呼び出す）

EJB（EJBからWebサービスを呼び出す）

Webサービス（Webサービス実装クラスから別のWebサービスをさらに呼び出す）

CosminexusのJAX-WS機能では，次のどれかの方法でWebサービスクライアントを実装できます。

サービスクラスとスタブを使用する（スタブベースのWebサービスクライアントの開発）

javax.xml.ws.Dispatchインタフェースを利用する（ディスパッチベースのWebサービスクライアントの開発）

その他のJAX-WS APIを利用する（APIベースのWebサービスクライアントの開発）

ここでは，Webサービスクライアントの実装例について説明します。また，サービスクラスやポートを使用する上での注意事項についても説明します。

＜この節の構成＞

3.6.1　スタブベースの実装例

3.6.2　ディスパッチベースの実装例

3.6.3　JAX-WS APIを使用する場合の実装例

3.6.4　注意事項

3.6.5　アドレッシング機能を使用したWebサービスにアクセスする場合の注意事項

3.6.1　スタブベースの実装例

スタブベースのWebサービスクライアントの実装例について説明します。

＜この項の構成＞

(1)　参照されるWSDL

(2)　参照されるエンドポイントアドレス

(3)　サービスクラスおよびポートの再利用

(4)　サービスの選択

(5)　基本的な実装例

(6)　JavaアプリケーションのWebサービスクライアントの実装例

(7)　サーブレットのWebサービスクライアントの実装例

(1)　参照されるWSDL

スタブベースのWebサービスクライアントを実行する場合，WSDLのパスまたはURLが必要になります。このとき，次の条件の組み合わせによって，参照されるWSDLが異なります。

サービスクラスのどちらのコンストラクタを利用するのか

cjwsimportコマンドに-wsdllocationオプションを指定して実行したかどうか

各条件の組み合わせと，参照されるWSDLの対応を次の表に示します。それぞれの条件の場合の例については，「3.6.1(5)(a)　サービスクラスをインスタンス化する」を参照してください。

表3-5　条件の組み合わせと参照されるWSDLの対応

項番
利用するコンストラクタ
-wsdllocation
オプション
参照されるWSDL

1
デフォルトコンストラクタ
×
cjwsimportコマンドの引数に指定したWSDL※1

2
デフォルトコンストラクタ
○
-wsdllocationオプションに指定したWSDL※2

3
java.net.URL オブジェクトおよびjavax.xml.namespace.QNameオブジェクトをパラメタに持つコンストラクタ
－
パラメタのURLに指定したWSDL※2

（凡例）

○：指定した場合。

×：指定しなかった場合。

－：指定の有無は参照されるWSDLに影響しません。

注※1

Webサービスクライアントを実行する場合，WSDLはcjwsimportコマンド実行時と同じ場所に存在している必要があります。cjwsimportコマンド実行時に相対パスを指定した場合も，WSDLはcjwsimportコマンド実行時と同じ場所に存在している必要があります。

注※2

絶対的なURLを指定した場合，Webサービスクライアントの実行時に，WSDLがそのURLが示す場所に存在している必要があります。

相対的なURLを指定した場合，Webサービスクライアントの実行時に，WSDLがカレントディレクトリを基準として相対的なURLを解決した場所に存在している必要があります。

(2)　参照されるエンドポイントアドレス

接続するWebサービスのURL（エンドポイントアドレス）は，デフォルトではWSDLのポート（wsdl:port要素）が持つアドレス情報（soap:address子要素のlocation属性）が利用されます。ただし，メッセージコンテキストのjavax.xml.ws.service.endpoint.addressプロパティを利用すると，エンドポイントアドレスを動的に変更できます。エンドポイントアドレスを動的に変更する例については，「3.6.1(5)(c)　ポートのメソッドを呼び出す」を参照してください。

(3)　サービスクラスおよびポートの再利用

サービスクラスの生成には処理コストが掛かるので，一度生成したサービスクラスは再利用することをお勧めします。ポートを取得するためにサービスクラスを複数回生成する必要はありません。同様に，ポートの取得にも処理コストが掛かるので，一度取得したポートは再利用することをお勧めします。ポートのWebメソッドを複数回呼び出すためにポートを複数回取得する必要はありません。ただし，複数スレッドでポートを共有する場合，共有するポートの要求コンテキストのプロパティに対する変更は，複数スレッドが動作する前に実行してください。複数スレッドの動作中に変更すると，通信が失敗したり，不正なSOAPメッセージが送信されたりすることがあります。

WebサービスクライアントをサーブレットやEJBなどで実装する場合は，それぞれの初期化メソッドでサービスクラスの生成，またはポートの取得を実施し，再利用してください。ポートの要求コンテキストのプロパティに対する変更も，それぞれの初期化メソッドで実行してください。

(4)　サービスの選択

呼び出すWebサービスのWSDLに複数のサービス（wsdl:service要素）が含まれる場合，サービスクラスを生成するときに，java.net.URLオブジェクトとjavax.xml.namespace.QNameオブジェクトをパラメタに持つコンストラクタを使用し，javax.xml.namespace.QNameオブジェクトでそのサービス（wsdl:service要素）を呼び出すのか明示的に指定してください。

(5)　基本的な実装例

スタブベースのWebサービスクライアントを開発する場合，cjwsimportコマンドを使用してWebサービスを呼び出すために必要なJavaソースを生成します。cjwsimportコマンドは，-generateServiceオプションを指定しないで実行してください。

スタブベースのWebサービスクライアントは，次のJavaソースを使用してWebサービスを呼び出します。

サービスクラス
サービスクラスは，JAX-WS 2.1仕様で規定されたWebサービスを呼び出すためのWSDLのサービス（wsdl:service要素）に対応するクラスです。wsdl:service要素がwsdl:port要素をまとめるように，複数のポートをまとめています。
Webサービスクライアントを実装する場合は，はじめにサービスクラスのインスタンスを生成します。

ポート
WSDLのポート（wsdl:port要素）に対応するインスタンスで，インタフェースはサービスエンドポイントインタフェース（SEI）です。リモートにある接続先Webサービスのプロキシのように動作するため，Webサービスクライアントがこのポートのメソッドを呼び出すことで，Webサービスのオペレーションを透過的に呼び出せます。

Webサービスクライアントの実装でWebサービスのオペレーションを呼び出す手順は，次のとおりです。

サービスクラスをインスタンス化する

ポートを取得する

ポートのメソッドを呼び出す

ここでは，「5.1　開発例の構成（SEI起点）」に構成を示すWebサービス（足し算をするWebサービス）を呼び出すWebサービスクライアントの実装例を示します。

Webサービスクライアントの実装に使用するクラスおよびメソッドを次の表に示します。必要に応じて，「5.5.1　サービスクラスを生成する」に記載されたサービスクラスの生成物の内容を参照してください。

表3-6　Webサービスクライアントの実装例で使用するクラスおよびメソッド

項番 | 種別 | クラスおよびメソッド
1 | サービスクラス | AddNumbersImplService
2 | SEI | AddNumbersImpl
3 | SEIのメソッド | int add(int, int)
4 | クライアントのメインクラス | TestClient

(a)　サービスクラスをインスタンス化する

デフォルトのコンストラクタを使用してサービスクラスのオブジェクトを生成する例を次に示します。

// サービスクラスをインスタンス化する
AddNumbersImplService service = new AddNumbersImplService();

この場合，cjwsimportコマンドの引数または-wsdllocationオプションに指定したWSDLが参照されます。

cjwsimportコマンドの実行時に-wsdllocationオプションを指定しなかった場合の三つの例を次に示します。

実行例1

> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" D:¥dev¥development.wsdl

D:¥dev¥development.wsdlは，Webサービスクライアント実行時にも存在し，参照できる状態である必要があります。

実行例2

> D:
> cd D:¥dev¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" relative¥development.wsdl

D:¥dev¥relative¥development.wsdlは，Webサービスクライアント実行時にも存在し，参照できる状態である必要があります。

実行例3

> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" http://sample.com/fromjava/AddNumbersImplService?wsdl

http://sample.com/fromjava/AddNumbersImplService?wsdlは，Webサービスクライアント実行時にも存在し，参照できる状態である必要があります。

次に，cjwsimportコマンドの実行時に-wsdllocationオプションを指定した場合の二つの例を示します。

実行例1

> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -wsdllocation file:/home/wsdl4runtime/master.wsdl D:¥dev¥development.wsdl

file:/home/wsdl4runtime/master.wsdlは，Webサービスクライアント実行時にも存在し，参照できる状態である必要があります。D:¥dev¥development.wsdlは，Webサービスクライアント開発時に実装に必要なJavaコードの生成に使用されるだけです。そのため，D:¥dev¥development.wsdlは実行時には存在しない，または参照できない状態でも問題ありません。

実行例2

> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -wsdllocation ./wsdl4runtime/master.wsdl D:¥dev¥development.wsdl

Webサービスクライアント実行時のカレントディレクトリを<実行時カレントディレクトリ>とした場合，<実行時カレントディレクトリ>/wsdl4runtime/master.wsdlが存在し，参照できる状態である必要があります。

なお，デフォルトのコンストラクタではなく，java.net.URLオブジェクトおよびjavax.xml.namespace.QNameオブジェクトをパラメタに持つコンストラクタを使用する場合は，次の例のようになります。

// サービスクラスをインスタンス化する
java.net.URL wsdlLocation = new java.io.File( "./wsdl4runtime/master.wsdl" ).toURL();
javax.xml.namespace.QName serviceName =
 new javax.xml.namespace.QName( "http:/sample.com/", "AddNumbersImplService");
AddNumbersImplService service =
 new AddNumbersImplService( wsdlLocation, serviceName );

java.net.URLオブジェクトで指定したURLのWSDLが参照されるため，cjwsimportコマンドの引数や-wsdllocationオプションで指定したWSDLは，Webサービスクライアント実行時には存在しない，または参照できない状態でも問題ありません。ただし，Webサービスクライアント実行時のカレントディレクトリを<実行時カレントディレクトリ>とした場合は，<実行時カレントディレクトリ>/wsdl4runtime/master.wsdlが存在し，参照できる状態である必要があります。

(b)　ポートを取得する

インスタンス化したサービスクラスからポートを取得する例を次に示します。

// ポートを取得する
AddNumbersImpl port = service.getAddNumbersImplPort();

(c)　ポートのメソッドを呼び出す

インスタンス化したサービスクラスから取得したポートのメソッドを呼び出す例を次に示します。

// ポートのメソッドを呼び出す
int returnValue = port.add(205, 103)

この例では，ポートのメソッドの引数に二つの値を渡すと，Webサービスで足し算の処理が行われます。戻り値として足し算の演算結果が返されます。

接続するWebサービスのURL（エンドポイントアドレス）は，デフォルトでは，WSDLのポート（wsdl:port要素）が持つアドレス情報（soap:address子要素のlocation属性）が利用されます。ただし，メッセージコンテキストのjavax.xml.ws.service.endpoint.addressプロパティを利用すると，エンドポイントアドレスを動的に変更できます。

エンドポイントアドレスを動的に変更しない場合，参照されるWSDLのsoap:address子要素のlocation属性に，WebサービスクライアントからアクセスできるURLが記述されているかどうか確認してください。

エンドポイントアドレスを動的に変更する場合，ポートのメソッドを呼び出す前に要求コンテキストを取得し，javax.xml.ws.service.endpoint.addressプロパティの値を変更します。例を次に示します。

// 要求コンテキストを取得する
java.util.Map<String, Object> context =
 ( ( javax.xml.ws.BindingProvider )port ).getRequestContext();

// エンドポイントアドレスを変更する
// (javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTYは
//  "javax.xml.ws.service.endpoint.address"を定義した定数)
context.put( javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
  "http://other.remote.org/fromjava/AddNumbersImplService" );

// ポートのメソッドを呼び出す
int returnValue = port.add(205, 103)

注意事項

サービスクラスの生成やポートの取得には処理コストが掛かるので，一度生成，取得したサービスクラスとポートは再利用することをお勧めします。ポートのWebメソッドを複数回呼び出す場合に，サービスクラスを複数回生成したり，ポートを複数回取得したりする必要はありません。ただし，複数スレッドでポートを共有する場合，共有するポートの要求コンテキストのプロパティに対する変更は，複数スレッドが動作する前に実行してください。複数スレッドの動作中に変更すると，通信が失敗したり，不正なSOAPメッセージが送信されたりすることがあります。

ポートのメソッドを複数回呼び出す例を次に示します。

// サービスクラスをインスタンス化する
AddNumbersImplService service = new AddNumbersImplService();
// ポートを取得する
AddNumbersImpl port = service.getAddNumbersImplPort();

// ポートのメソッドを複数回呼び出す
for (int i = 0; i < 10; i++) {
     int returnValue = port.add(i, i);
}

(6)　JavaアプリケーションのWebサービスクライアントの実装例

JavaアプリケーションのWebサービスクライアントから，サービスクラスを使用してWebサービスを呼び出す処理を実装します。

ここでは，「5.1　開発例の構成（SEI起点）」に構成を示すWebサービス（足し算をするWebサービス）を呼び出すWebサービスクライアントの実装例を示します。Webサービスクライアントの実装に使用するクラスおよびメソッドを次の表に示します。必要に応じて，「5.5.1　サービスクラスを生成する」に記載されたサービスクラスの生成物の内容を参照してください。

表3-7　Webサービスクライアントの実装例で使用するクラスおよびメソッド（JavaアプリケーションのWebサービスクライアントの場合）

項番 | 種別 | クラスおよびメソッド
1 | サービスクラス | AddNumbersImplService
2 | ポート | AddNumbersImpl
3 | ポートのメソッド | int add(int, int)
4 | Webサービスクライアントのクライアントのメインクラス | TestClient

Javaアプリケーションの実装例を次に示します。

package com.example.sample.client;

import com.example.sample.AddNumbersImplTestJaxWs;
import com.example.sample.AddNumbersImplTestJaxWsService;
import com.sample.AddNumbersFault_Exception;

// Sample implementation of web service's client
public class TestClient {
   public static void main( String[] args ) {
       try {
           // サービスクラスをインスタンス化する
           AddNumbersImplTestJaxWsService service = new AddNumbersImplTestJaxWsService();
           // ポートを取得する
           AddNumbersImplTestJaxWs port = service.getAddNumbersImplPortTestJaxWs();

           // ポートのメソッドを呼び出す
           port.jaxWsTest1( ... );
           int number1 = 205;
           int number2 = 103;
           int returnValue = port.add(number1, number2);

           // 結果を表示する
           System.out.println( "[RESULT] " + number1 + " + " + number2 + " = " + returnValue );
       }
       catch( Exception e ){
           // 例外処理(ここでは単にスタックトレースを出力)
           e.printStackTrace();
       }
   }
}

プログラムの実行結果を次に示します。

[RESULT] 205 + 103 = 308

(7)　サーブレットのWebサービスクライアントの実装例

サーブレット形態のWebサービスクライアントから，サービスクラスを使用してWebサービスを呼び出す処理を実装します。

ここでは，「5.1　開発例の構成（SEI起点）」に構成を示すWebサービス（足し算をするWebサービス）を呼び出すWebサービスクライアントの実装例を示します。Webサービスクライアントの実装に使用するクラスおよびメソッドを次の表に示します。必要に応じて，「5.5.1　サービスクラスを生成する」に記載されたサービスクラスの生成物の内容を参照してください。

表3-8　Webサービスクライアントの実装例で使用するクラスおよびメソッド（サーブレットから呼び出す場合）

項番 | 種別 | クラスおよびメソッド
1 | サービスクラス | AddNumbersImplService
2 | ポート | AddNumbersImpl
3 | ポートのメソッド | int add(int, int)
4 | Webサービスクライアントとなるサーブレット実装クラス | TestClient

(a)　サービスクラスのインスタンス化およびポートの初期化

サーブレットからWebサービスを呼び出す実装では，サービスクラスおよびポートをサーブレットのメンバ変数として保持し，初期化します。

サービスクラスのインスタンス化およびポートの初期化の例を次に示します。

...
public class TestClient extends HttpServlet {

   AddNumbersImplService service;
   AddNumbersImpl port;

   @Override
   public void init() {
       // サービスクラスをインスタンス化する
       service = new AddNumbersImplService();
       // ポートを取得する
       port = service.getAddNumbersImplPort();
   }
   ...
}

(b)　ポートのメソッド呼び出しによるWebサービスのオペレーション実行

サーブレットのメンバ変数として生成したポートを使って，メソッドを呼び出します。

メソッド呼び出しの例を次に示します。

...
public class TestClient extends HttpServlet {

   AddNumbersImplService service;
   AddNumbersImpl port;
   ...
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       ...
           int number1 = ...; // requestオブジェクトから取得した値を代入
           int number2 = ...; // requestオブジェクトから取得した値を代入
           // ポートのメソッドを呼び出す
           int returnValue = port.add(number1, number2);
           ...
   }
}

サーブレットからWebサービスを呼び出す場合の実装例の全体を次に示します。

package com.sample.client;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sample.AddNumbersFault_Exception;
import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;

public class TestClient extends HttpServlet {

   AddNumbersImplService service;
   AddNumbersImpl port;

   @Override
   public void init() {
       // サービスクラスを初期化する
       service = new AddNumbersImplService();
       // ポートを取得する
       port = service.getAddNumbersImplPort();
   }

   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       PrintWriter out = response.getWriter();

       try {
           // Invoke a method of the target web service.
           int number1 = ...; // requestオブジェクトから取得した値を代入
           int number2 = ...; // requestオブジェクトから取得した値を代入
           // ポートのメソッドを呼び出す
           int returnValue = port.add(number1, number2);
           // 結果を表示する
           out.println("<html><body>");
           out.println("<h1>RESULT</h1>");
           out.println(number1 + " + " + number2 + " = " + returnValue);
           out.println("</body></html>");
       } catch(AddNumbersFault_Exception e) {
           // 例外処理(ここでは単に例外の詳細メッセージを出力)
           out.println("<html><body>");
           out.println("<h1>" + e.getMessage() + "</h1>");
           out.println("</body></html>");
       }
   }
}

プログラムの実行結果を次に示します。ブラウザなどからサーブレットに接続すると実行結果が表示されます。

RESULT
205 + 103 = 308

注意事項

Webサービスクライアント（サーブレット）とWebサービスが，同じJ2EEサーバ上にデプロイされている環境で，Webサービスクライアントが含まれるWebアプリケーションのDD（web.xml）に<load-on-startup>タグを指定し，J2EEサーバ起動時にサーブレットを初期化する設定にすると，Webサービスクライアント（サーブレット）のinit()実行時に例外が発生します。そのため，DD（web.xml）には<load-on-startup>タグを指定しないでください。性能などの理由で<load-on-startup>タグを使用したい場合は，WebサービスクライアントとWebサービスを別々のJ2EEサーバ上にデプロイして実行してください。

3.6.2　ディスパッチベースの実装例

Cosminexusでサポートしているjavax.xml.ws.Dispatchインタフェース，JAX-WS 2.1仕様，JAXB 2.1仕様，およびSAAJ 1.3仕様などのAPIを使用して開発してください。

＜この項の構成＞

(1)　ディスパッチベースのWebサービスクライアントの実装例

(2)　参照されるエンドポイントアドレス

(3)　サービスクラスおよびディスパッチの再利用

(1)　ディスパッチベースのWebサービスクライアントの実装例

ディスパッチベースのWebサービスクライアントの実装例を次に示します。

package com.example.sample.client;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

public class TestClient {
   public static void main( String[] args ) {
       QName port = new QName( "http://sample.com", "AddNumbersImplPort" );
       SOAPBody soapBody = null;

       // サービスを生成する
       Service service = Service.create(
           new QName("http://sample.com", "UserInfoPort") );

       // サービスにポートを追加する
       service.addPort( port, SOAPBinding.SOAP11HTTP_BINDING,
           "http://localhost:80/dispatch_provider/UserInfoService" );

       // ディスパッチを生成する
       Dispatch<SOAPMessage> dispatch = service.createDispatch(
           port, SOAPMessage.class, Service.Mode.MESSAGE );

       SOAPMessage request = null;
       try{
           // 要求メッセージを SAAJ 1.3仕様のAPIを使用して生成していく
           request = MessageFactory.newInstance().createMessage();
           SOAPBody reqSoapBody = request.getSOAPBody();
           SOAPElement soapElement = null;
           // SOAPボディに要素を追加
           SOAPBodyElement requestRoot= reqSoapBody.addBodyElement(
               new QName( ... ) );
           soapElement = requestRoot.addChildElement(
               new QName( ... ) );
           soapElement.addTextNode( ... );
           // 添付ファイルを追加する
           File attachment = new File( ... );
           FileDataSource fds = new FileDataSource( attachment );
           AttachmentPart apPart = request.createAttachmentPart( new DataHandler( fds ) );
           request.addAttachmentPart(apPart);
       }
       catch( SOAPException e ){
           // 例外処理
       }
       // 作成した要求メッセージを指定し，ディスパッチを利用してWebサービスを呼び出す
       SOAPMessage response = dispatch.invoke( request );

       try{
           // 応答メッセージについて必要な処理を行う
           SOAPBody resSoapBody = response.getSOAPBody();
           ...
       }
       catch( SOAPException e ){
           // 例外処理
       }
   }
}

プロバイダ実装クラスから送信されたSOAPフォルトをWebサービスクライアントの実装で利用する場合は，try-catchブロック内でinvoke()メソッドを呼び出し，javax.xml.ws.soap.SOAPFaultException例外を取得します。SOAPフォルトも，javax.xml.ws.soap.SOAPFaultException例外から取得できます。実装例を次に示します。

package com.example.sample.client;

import javax.xml.namespace.QName;
...
import javax.xml.ws.soap.SOAPBinding;
import javax.xml.ws.soap.SOAPFaultException;

public class TestClient {
   public static void main( String[] args ) {
...
       try{
           // 要求メッセージを SAAJ 1.3仕様のAPIを使用して生成していく
           ...
       }
       catch( SOAPException e ){
           // 例外処理
       }

       SOAPMessage response = null;
       try{
           // 作成した要求メッセージを指定し，ディスパッチを利用してWebサービスを呼び出す
           response = dispatch.invoke( request );
       }
       catch( SOAPFaultException e ){
           // SOAPフォルトを取得する処理
           SOAPFault fault = e.getFault();
           // 取得した SOAPフォルトに対して必要な処理を行う
           String faultCode = fault.getFaultCode();
           ...
       }

       try{
           // 応答メッセージについて必要な処理を行う
           ...
       }
       catch( SOAPException e ){
           e.printStackTrace();
       }
   }
}

(2)　参照されるエンドポイントアドレス

接続するWebサービスのURL（エンドポイントアドレス）は，メッセージコンテキストのjavax.xml.ws.service.endpoint.addressプロパティで指定および変更できます。エンドポイントアドレスを指定・変更する例については，「3.6.1(5)(c)　ポートのメソッドを呼び出す」を参照してください。

(3)　サービスクラスおよびディスパッチの再利用

サービスクラスおよびディスパッチの生成には処理コストが掛かるので，一度生成したサービスクラスおよびディスパッチは再利用することをお勧めします。ポートを追加したりディスパッチを生成したりするためにサービスクラスを複数回生成する必要はありません。同様に，ディスパッチのinvokeメソッドを複数回呼び出すためにディスパッチを複数回取得する必要はありません。ただし，複数スレッドでディスパッチを共有する場合，共有するディスパッチの要求コンテキストのプロパティに対する変更は，複数スレッドが動作する前に実行してください。複数スレッドの動作中に変更すると，通信が失敗したり，不正なSOAPメッセージが送信されたりすることがあります。

WebサービスクライアントをサーブレットやEJBなどで実装する場合は，それぞれの初期化メソッドでサービスクラスおよびディスパッチを取得し，再利用することをお勧めします。ディスパッチの要求コンテキストのプロパティに対する変更も，それぞれの初期化メソッドで実行してください。

3.6.3　JAX-WS APIを使用する場合の実装例

CosminexusのJAX-WS機能がサポートしているJAX-WS APIを利用して，Webサービスクライアントを実装できます。JAX-WS APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。

＜この項の構成＞

(1)　JAX-WS APIを使用する場合のWebサービスクライアントの実装例

(2)　javax.xml.ws.Serviceオブジェクトおよびポートの再利用

(1)　JAX-WS APIを使用する場合のWebサービスクライアントの実装例

JAX-WS APIを使用したWebサービスクライアントの実装例を示します。

package com.example.sample.client;

import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;

import java.net.URL;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;

public class TestClient {
   public static void main( String[] args ) {

       // WSDLのURLとサービス名を設定
       URL url = null;
       try {
           url = new URL("http://localhost:8085/fromwsdl/test?wsdl");
       } catch (MalformedURLException e) {
           // 例外処理
       }
       QName serviceName =
           new QName("http://example.com/sample", "TestJaxWsService");

       // Serviceインスタンスの生成
       Service service = Service.create(url, serviceName);
       System.out.println(service.getWSDLDocumentLocation());

       QName portName = null;

       // ポート名のリストを表示
       Iterator it = service.getPorts();
       while(it.hasNext()) {
           portName = (QName)it.next();
           System.out.println(portName);
       }

       // ポートの取得
       TestJaxWs port = (TestJaxWs)service.getPort(TestJaxWs.class);

       // 送信コンテキストの取得
       Map<java.lang.String, java.lang.Object>context =
((BindingProvider)port).getRequestContext();
       System.out.println(context.entrySet());

       // サービスのメソッド呼び出し
       try {
           port.jaxWsTest1( "TEST", 123);
       } catch (WebServiceException e) {
           // 例外処理
       }
   }
}

(2)　javax.xml.ws.Serviceオブジェクトおよびポートの再利用

javax.xml.ws.Serviceオブジェクトの生成には処理コストが掛かるので，一度生成したjavax.xml.ws.Serviceオブジェクトは再利用することをお勧めします。ポートを取得するためにjavax.xml.ws.Serviceオブジェクトを複数回生成する必要はありません。

同様に，ポートの取得にも処理コストが掛かるので，一度取得したポートは再利用することをお勧めします。ポートのWebメソッドを複数回呼び出すためにポートを複数回取得する必要はありません。ただし，複数スレッドでポートを共有する場合，共有するポートの要求コンテキストのプロパティに対する変更は，複数スレッドが動作する前に実行してください。複数スレッドの動作中に変更すると，通信が失敗したり，不正なSOAPメッセージが送信されたりすることがあります。

WebサービスクライアントをサーブレットやEJBなどで実装する場合は，それぞれの初期化メソッドでjavax.xml.ws.Serviceオブジェクトの生成，またはポートの取得を実施し，再利用してください。ポートの要求コンテキストのプロパティに対する変更も，それぞれの初期化メソッドで実行してください。

3.6.4　注意事項

Webサービスクライアント実装時の注意事項について説明します。

＜この項の構成＞

(1)　オブジェクトの再利用

(2)　プロキシ・SSL接続・ベーシック認証の設定

(3)　Windows環境での注意事項

(1)　オブジェクトの再利用

サービスクラス，ポート，およびディスパッチの生成には処理コストが掛かるので，再利用することをお勧めします。オブジェクトの再利用については，それぞれ次の個所を参照してください。

スタブベースのWebサービスクライアントの場合
「3.6.1(3)　サービスクラスおよびポートの再利用」

ディスパッチベースのWebサービスクライアントの場合
「3.6.2(3)　サービスクラスおよびディスパッチの再利用」

APIベースのWebサービスクライアントの場合
「3.6.3(2)　javax.xml.ws.Serviceオブジェクトおよびポートの再利用」

(2)　プロキシ・SSL接続・ベーシック認証の設定

必要に応じて，Webサービスクライアントの実行環境に，プロキシ，SSL接続，およびベーシック認証の設定を行ってください。詳細については，それぞれ次の個所を参照してください。

プロキシの設定
「10.10　プロキシサーバ経由の接続」

SSL接続の設定
「10.11　SSLプロトコルによる接続」

ベーシック認証の設定
「10.12　ベーシック認証による接続」

(3)　Windows環境での注意事項

Webサービスクライアントから大量のリクエストを送信するような環境では，次の例外が記録されることがあります。

java.net.BindException: Address already in use: connect [errno=10048, syscall=select]

例えば，サーブレットとして実装したWebサービスクライアントに対して大量のリクエストが到着すると，例外が発生します。

このような場合は，次に示すどちらか，または両方の値を見直してください。

OSで使用できるポート番号の範囲を広げる

TIME_WAITの継続時間を短くする

例えば，レジストリのMaxUserPortやTcpTimedWaitDelayの設定を見直します。ただし，OSのバージョンやエディション，セキュリティ更新プログラムの適用状況によって，仕様が異なるため，詳細については各OSのドキュメントを参照してください。また，これら設定はOS全体に影響が及ぶため，注意が必要です。

3.6.5　アドレッシング機能を使用したWebサービスにアクセスする場合の注意事項

アドレッシング機能が有効なWebサービスにアクセスする場合は，スタブベースのWebサービスクライアントを使用します。ディスパッチベースのWebサービスクライアントは使用できないので，注意してください。

4.　WSDLを起点とした開発の例

この章では，WSDLを起点としたWebサービスを開発する場合の例を説明します。

＜この章の構成＞

4.1　開発例の構成（WSDL起点）

4.2　開発例の流れ（WSDL起点）

4.3　Webサービスの開発例（WSDL起点）

4.4　デプロイと開始の例（WSDL起点）

4.5　Webサービスクライアントの開発例（WSDL起点）

4.6　Webサービスの実行例（WSDL起点）

4.1　開発例の構成（WSDL起点）

この章で説明する開発例では，WSDLを起点としたWebサービスを開発します。

開発するWebサービスの構成を次の表に示します。

表4-1　Webサービスの構成（WSDL起点）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | fromwsdl
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://example.com/sample
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | TestJaxWs
9 | オペレーション | 個数 | 1
10 | ローカル名 | jaxWsTest1
11 | サービス | 個数 | 1
12 | ローカル名 | TestJaxWsService
13 | ポート | 個数 | 1
14 | ローカル名 | testJaxWs
15 | WSDLのファイル名 | input.wsdl

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表4-2　カレントディレクトリの構成（WSDL起点）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥fromwsdl
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「4.3.6　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「4.3.2　SEIを生成する」および「4.3.4　Webサービス実装クラスをコンパイルする」で使用します。

┣
┃
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「4.3.5　web.xmlを作成する」で作成します。

┣
classes¥
コンパイルしたクラスファイル（*.class）を格納します。

┗
wsdl¥
作成したwsdlを格納します。

┣
┃
┃
┃
temporary¥
Javaで記述，変換したものを基にWSDLを作成する場合に一時ファイルを格納します。このディレクトリの作成は任意です。

┣
src¥

┗
classes¥

┣
fromwsdl.ear
「4.3.7　EARファイルを作成する」で作成します。

┗
fromwsdl.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「4.5.1　サービスクラスを生成する」および「4.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「4.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
usrconf.cfg
「4.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「4.6.2　Java アプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

4.2　開発例の流れ（WSDL起点）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

WSDLファイルを作成する（4.3.1）

cjwsimportコマンドを実行し，SEIを生成する（4.3.2）

Webサービス実装クラスを作成する（4.3.3）

Webサービス実装クラスをコンパイルする（4.3.4）

web.xmlを作成する（4.3.5）

application.xmlを作成する（4.3.6）

EARファイルを作成する（4.3.7）

デプロイと開始

EARファイルをデプロイする（4.4.1）

Webサービスを開始する（4.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（4.5.1）

Webサービスクライアントの実装クラスを作成する（4.5.2）

Webサービスクライアントの実装クラスをコンパイルする（4.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（4.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（4.6.2）

Webサービスクライアントを実行する（4.6.3）

4.3　Webサービスの開発例（WSDL起点）

ここでは，WSDLを起点とした場合のWebサービスの開発例を説明します。

＜この節の構成＞

4.3.1　WSDLファイルを作成する

4.3.2　SEIを生成する

4.3.3　Webサービス実装クラスを作成する

4.3.4　Webサービス実装クラスをコンパイルする

4.3.5　web.xmlを作成する

4.3.6　application.xmlを作成する

4.3.7　EARファイルを作成する

4.3.1　WSDLファイルを作成する

WSDLファイルを作成し，Webサービスのメタ情報を定義します。WSDL定義は，次の仕様のサポート範囲内で定義してください。

WSDL 1.1仕様
サポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

XML Schema仕様
サポート範囲については，マニュアル「Cosminexus XML Processor ユーザーズガイド」を参照してください。

WS-I Basic Profile 1.1

WSDLファイルの作成方法には，新規に作成する方法と，Javaソースを変換したものを利用して作成する方法の2種類があります。

＜この項の構成＞

(1)　新規にWSDLファイルを作成する

(2)　Javaソースを変換したものを基にWSDLファイルを作成する

(1)　新規にWSDLファイルを作成する

ここでは，WSDLファイル（input.wsdl）を作成します。作成したWSDLファイルは，UTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥server¥WEB-INF¥wsdl¥ディレクトリに保存してください。

SOAP 1.1の場合の作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestJaxWsService"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://example.com/sample"
 targetNamespace="http://example.com/sample">

 <wsdl:types>
   <xsd:schema targetNamespace="http://example.com/sample">
     <!-- 要求メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1" type="tns:jaxWsTest1"/>

     <!-- 応答メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1Response" type="tns:jaxWsTest1Response"/>

     <!-- フォルトメッセージの wrapper要素 -->
     <xsd:element name="UserDefinedFault" type="tns:UserDefinedFault"/>

     <!-- 要求メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1">
       <xsd:sequence>
         <xsd:element name="information" type="xsd:string"/>
         <xsd:element name="count" type="xsd:int"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- 応答メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1Response">
       <xsd:sequence>
         <xsd:element name="return" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- フォルトメッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="UserDefinedFault">
       <xsd:sequence>
         <xsd:element name="additionalInfo" type="xsd:int"/>
         <xsd:element name="detail" type="xsd:string"/>
         <xsd:element name="message" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>
   </xsd:schema>
 </wsdl:types>

 <!-- 要求メッセージ -->
 <wsdl:message name="jaxWsTest1Request">
   <wsdl:part name="inputParameters" element="tns:jaxWsTest1"/>
 </wsdl:message>

 <!-- 応答メッセージ -->
 <wsdl:message name="jaxWsTest1Response">
   <wsdl:part name="outputParameters" element="tns:jaxWsTest1Response"/>
 </wsdl:message>

 <!-- フォルトメッセージ -->
 <wsdl:message name="UserDefinedException">
   <wsdl:part name="fault" element="tns:UserDefinedFault"/>
 </wsdl:message>

 <!-- ポートタイプ -->
 <wsdl:portType name="TestJaxWs">
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <wsdl:input message="tns:jaxWsTest1Request"/>
     <wsdl:output message="tns:jaxWsTest1Response"/>
     <wsdl:fault name="UserDefinedFault"
       message="tns:UserDefinedException"/>
   </wsdl:operation>
 </wsdl:portType>

 <!-- バインディング(SOAP 1.1/HTTPバインディング) -->
 <wsdl:binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <!-- document/literal/wrapped -->
   <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <soap:operation/>
     <wsdl:input>
       <soap:body use="literal"/>
     </wsdl:input>
     <wsdl:output>
       <soap:body use="literal"/>
     </wsdl:output>
     <wsdl:fault name="UserDefinedFault">
       <soap:fault name="UserDefinedFault" use="literal"/>
     </wsdl:fault>
   </wsdl:operation>
 </wsdl:binding>

 <!-- サービス -->
 <wsdl:service name="TestJaxWsService">
   <!-- ポート -->
   <wsdl:port name="testJaxWs" binding="tns:testJaxWsBinding">
     <soap:address location="http://webhost:8085/fromwsdl/TestJaxWsService"/>
   </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

SOAP 1.2の場合の作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestJaxWsService"
 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://example.com/sample"
 targetNamespace="http://example.com/sample">

 <wsdl:types>
   <xsd:schema targetNamespace="http://example.com/sample">
     <!-- 要求メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1" type="tns:jaxWsTest1"/>

     <!-- 応答メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1Response" type="tns:jaxWsTest1Response"/>

     <!-- フォルトメッセージの wrapper要素 -->
     <xsd:element name="UserDefinedFault" type="tns:UserDefinedFault"/>

     <!-- 要求メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1">
       <xsd:sequence>
         <xsd:element name="information" type="xsd:string"/>
         <xsd:element name="count" type="xsd:int"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- 応答メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1Response">
       <xsd:sequence>
         <xsd:element name="return" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- フォルトメッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="UserDefinedFault">
       <xsd:sequence>
         <xsd:element name="additionalInfo" type="xsd:int"/>
         <xsd:element name="detail" type="xsd:string"/>
         <xsd:element name="message" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>
   </xsd:schema>
 </wsdl:types>

 <!-- 要求メッセージ -->
 <wsdl:message name="jaxWsTest1Request">
   <wsdl:part name="inputParameters" element="tns:jaxWsTest1"/>
 </wsdl:message>

 <!-- 応答メッセージ -->
 <wsdl:message name="jaxWsTest1Response">
   <wsdl:part name="outputParameters" element="tns:jaxWsTest1Response"/>
 </wsdl:message>

 <!-- フォルトメッセージ -->
 <wsdl:message name="UserDefinedException">
   <wsdl:part name="fault" element="tns:UserDefinedFault"/>
 </wsdl:message>

 <!-- ポートタイプ -->
 <wsdl:portType name="TestJaxWs">
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <wsdl:input message="tns:jaxWsTest1Request"/>
     <wsdl:output message="tns:jaxWsTest1Response"/>
     <wsdl:fault name="UserDefinedFault"
       message="tns:UserDefinedException"/>
   </wsdl:operation>
 </wsdl:portType>

 <!-- バインディング(SOAP 1.2/HTTPバインディング) -->
 <wsdl:binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <!-- document/literal/wrapped -->
   <soap12:binding style="document" transport="http://www.w3.org/2003/05/soap/bindings/HTTP/"/>
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <soap12:operation/>
     <wsdl:input>
       <soap12:body use="literal"/>
     </wsdl:input>
     <wsdl:output>
       <soap12:body use="literal"/>
     </wsdl:output>
     <wsdl:fault name="UserDefinedFault">
       <soap12:fault name="UserDefinedFault" use="literal"/>
     </wsdl:fault>
   </wsdl:operation>
 </wsdl:binding>

 <!-- サービス -->
 <wsdl:service name="TestJaxWsService">
   <!-- ポート -->
   <wsdl:port name="testJaxWs" binding="tns:testJaxWsBinding">
     <soap12:address location="http://webhost:8085/fromwsdl/TestJaxWsService"/>
   </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

(2)　Javaソースを変換したものを基にWSDLファイルを作成する

ここでは，WSDL変換用に仮実装のWebサービス実装クラスと例外クラスを作成し，cjwsgenコマンドのWSDL生成機能を実行して，コンパイル済みのJavaソースからWSDLファイルを作成します。作成したクラスは，javax.jws.WebServiceアノテーションでアノテートしてください。メソッドを実装する必要はありません。

仮実装のWebサービス実装クラスの例を次に示します。

package com.example.sample;

@javax.jws.WebService
public class TestJaxWsImpl {

   public String jaxWsTest1(String information, int count)
       throws UserDefinedException
   {
       // 実装不要
       return null;
   }

}

仮実装の例外クラスの例を次に示します。

package com.example.sample;

public class UserDefinedFault extends Exception{
   // 実装不要
   public int additionalInfo;
   public String detail;
   public String message;
}

作成したTestJaxWsImpl.javaとUserDefinedFault.javaをUTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥server¥temporary¥src¥com¥example¥sample¥ディレクトリに保存し，コンパイルします。コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> mkdir .¥temporary
> mkdir .¥temporary¥classes
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar" -d .¥temporary¥classes .¥temporary¥src¥com¥example¥sample¥TestJaxWsImpl.java .¥temporary¥src¥com¥example¥sample¥UserDefinedFault.java

コンパイルが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥server¥temporary¥classes¥com¥example¥sample¥ディレクトリにTestJaxWsImpl.classとUserDefinedFault.classが生成されます。これらのクラスファイルを利用して，cjwsgenコマンドのWSDL生成機能でWSDLファイルを作成します。

cjwsgenコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> mkdir .¥WEB-INF¥wsdl¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsgen.bat" -r .¥WEB-INF¥wsdl -d .¥temporary¥classes -cp .¥temporary¥classes com.example.sample.TestJaxWsImpl

cjwsgenコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥WEB-INF¥wsdl¥ディレクトリにTestJaxWsService.wsdlとTestJaxWsService_schema1.xsdが生成されます。c:¥temp¥jaxws¥works¥fromwsdl¥temporary¥classes¥ディレクトリにあるクラスは削除してください。

生成されたTestJaxWsService.wsdlとTestJaxWsService_schema1.xsdは，一部修正する必要があります。

TestJaxWsService.wsdlの修正例を次に示します。イタリック体になっている個所が，修正した個所です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://example.com/sample" name="TestJaxWsImplService" xmlns:tns="http://example.com/sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">
 <types>
   <xsd:schema targetNamespace="http://example.com/sample">
     <xsd:include schemaLocation="TestJaxWsImplService_schema1.xsd"/>
   </xsd:schema>
 </types>
 <message name="jaxWsTest1">
   <part name="parameters" element="tns:jaxWsTest1"/>
 </message>
 <message name="jaxWsTest1Response">
   <part name="parameters" element="tns:jaxWsTest1Response"/>
 </message>
 <message name="UserDefinedFault">
   <part name="fault" element="tns:UserDefinedFault"/>
 </message>
 <portType name="TestJaxWs">
   <operation name="jaxWsTest1">
     <input message="tns:jaxWsTest1"/>
     <output message="tns:jaxWsTest1Response"/>
     <fault message="tns:UserDefinedFault" name="UserDefinedFault"/>
   </operation>
 </portType>
 <binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
   <operation name="jaxWsTest1">
     <soap:operation soapAction=""/>
     <input>
       <soap:body use="literal"/>
     </input>
     <output>
       <soap:body use="literal"/>
     </output>
     <fault name="UserDefinedFault">
       <soap:fault name="UserDefinedFault" use="literal"/>
     </fault>
   </operation>
 </binding>
 <service name="TestJaxWsService">
   <port name="testJaxWs" binding="tns:testJaxWsBinding">
     <soap:address location="http://webhost:8085/fromwsdl/TestJaxWsService"/>
   </port>
 </service>
</definitions>

TestJaxWsService_schema1.xsdの修正例を次に示します。イタリック体になっている個所が，修正した個所です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://example.com/sample" xmlns:tns="http://example.com/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:element name="UserDefinedFault" type="tns:UserDefinedFault"/>

 <xs:element name="jaxWsTest1" type="tns:jaxWsTest1"/>

 <xs:element name="jaxWsTest1Response" type="tns:jaxWsTest1Response"/>

 <xs:complexType name="jaxWsTest1">
   <xs:sequence>
     <xs:element name="arg0" type="xs:string" minOccurs="0"/>
     <xs:element name="arg1" type="xs:int"/>
   </xs:sequence>
 </xs:complexType>

 <xs:complexType name="jaxWsTest1Response">
   <xs:sequence>
     <xs:element name="return" type="xs:string" minOccurs="0"/>
   </xs:sequence>
 </xs:complexType>

 <xs:complexType name="UserDefinedFault">
   <xs:sequence>
     <xs:element name="message" type="xs:string" minOccurs="0"/>
   </xs:sequence>
 </xs:complexType>
</xs:schema>

修正したTestJaxWsService.wsdlは，名前をinput.wsdlに変更して，c:¥temp¥jaxws¥works¥fromwsdl¥server¥WEB-INF¥wsdl¥ディレクトリに保存してください。

4.3.2　SEIを生成する

cjwsimportコマンドを実行すると，SEIなど，Webサービスの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> mkdir src¥
> mkdir WEB-INF¥classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -generateService -s src -d WEB-INF¥classes WEB-INF¥wsdl¥input.wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥server¥src¥com¥example¥sample¥ディレクトリに，Javaソースが生成されます。com¥example¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表4-3　SEI生成時の生成物（WSDL起点）

ファイル名 | 説明
JaxWsTest1.java | WSDL定義の「要求メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
JaxWsTest1Response.java | WSDL定義の「応答メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
TestJaxWs.java | TestJaxWsポートタイプに対応するSEIです。
TestJaxWsImpl.java | TestJaxWsポートタイプに対応するスケルトンクラスです。
UserDefinedFault.java | WSDL定義の「フォルトメッセージのwrapper要素が参照する型」に対応するJavaBeanクラス（フォルトbean）です。
UserDefinedException.java | フォルトbeanのラッパ例外クラスです。

ファイル名のJaxWsTest1，TestJaxWs，およびTestJaxWsImplは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名とJavaソースとのマッピングについては，「12.　WSDLからJavaへのマッピング」を参照してください。

4.3.3　Webサービス実装クラスを作成する

スケルトンクラスにWebサービスの処理を追加し，Webサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を，日付情報とともに応答メッセージとして返す処理を追加します。

Webサービス実装クラスの作成例を次に示します。

package com.example.sample;

import java.util.Calendar;
import javax.jws.WebService;

@WebService(endpointInterface = "com.example.sample.TestJaxWs", targetNamespace = "http://example.com/sample", serviceName = "TestJaxWsService", portName = "testJaxWs")
public class TestJaxWsImpl {

   public String jaxWsTest1(String information, int count)
       throws UserDefinedException
   {
       Calendar today = Calendar.getInstance();
       StringBuffer result = new StringBuffer( 256 );
       result.append( "We've got your #" );
       result.append( new Integer( count ) );
       result.append( " message ¥"" );
       result.append( information );
       result.append( "¥"! It's " );
       result.append( String.format( "%04d.%02d.%02d %02d:%02d:%02d", new Object[]{
           new Integer( today.get( Calendar.YEAR ) ),
           new Integer( today.get( Calendar.MONTH ) + 1 ),
           new Integer( today.get( Calendar.DAY_OF_MONTH ) ),
           new Integer( today.get( Calendar.HOUR_OF_DAY ) ),
           new Integer( today.get( Calendar.MINUTE ) ),
           new Integer( today.get( Calendar.SECOND ) ) } ) );
       result.append( " now. See ya!" );

       return result.toString();
   }

}

イタリック体になっている個所が，スケルトンに対して追加した実装です。

4.3.4　Webサービス実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービス実装クラスをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;.¥WEB-INF¥classes" -d .¥WEB-INF¥classes src¥com¥example¥sample¥TestJaxWsImpl.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥server¥WEB-INF¥classes¥com¥example¥sample¥ディレクトリのTestJaxWsImpl.classが上書きされます。

javacコマンドについては，JDKのドキュメントを参照してください。

4.3.5　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;fromwsdl&quot;</description>
 <display-name>Sample_web_service_fromwsdl</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/TestJaxWsService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

4.3.6　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;fromwsdl&quot;</description>
 <display-name>Sample_application_fromwsdl</display-name>
 <module>
   <web>
     <web-uri>fromwsdl.war</web-uri>
     <context-root>fromwsdl</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

4.3.7　EARファイルを作成する

jarコマンドを使用して，EARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> jar cvf fromwsdl.war .¥WEB-INF
> jar cvf fromwsdl.ear .¥fromwsdl.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥server¥ディレクトリにfromwsdl.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

4.4　デプロイと開始の例（WSDL起点）

ここでは，WSDLを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

4.4.1　EARファイルをデプロイする

4.4.2　Webサービスを開始する

4.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f fromwsdl.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

4.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_fromwsdl

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

4.5　Webサービスクライアントの開発例（WSDL起点）

ここでは，WSDLを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

4.5.1　サービスクラスを生成する

4.5.2　Webサービスクライアントの実装クラスを作成する

4.5.3　Webサービスクライアントの実装クラスをコンパイルする

4.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

Webサービスの開発と同じ環境で，Webサービスクライアントを開発する場合の実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥client¥
> mkdir src/
> mkdir classes/
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes ..¥server¥WEB-INF¥wsdl¥input.wsdl

Webサービスの開発と異なる環境で，Webサービスクライアントを開発する場合の実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥client¥
> mkdir src/
> mkdir classes/
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/fromwsdl/TestJaxWsService?wsdl

正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥client¥src¥com¥example¥sample¥ディレクトリにJavaソースが生成されます。com¥example¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表4-4　サービスクラス生成時の生成物（WSDL起点）

ファイル名 | 説明
JaxWsTest1.java | WSDL定義の「要求メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
JaxWsTest1Response.java | WSDL定義の「応答メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
TestJaxWs.java | TestJaxWsポートタイプに対応するSEIです。
TestJaxWsService.java | サービスクラスです。
UserDefinedFault.java | WSDL定義の「フォルトメッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
UserDefinedException.java | フォルトbeanのラッパ例外クラスです。

ファイル名のJaxWsTest1，TestJaxWs，およびTestJaxWsServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名とJavaソースとのマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

4.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの実装クラスの作成例を次に示します。

package com.example.sample.client;

import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;
import com.example.sample.UserDefinedException;

public class TestClient {
   public static void main( String[] args ) {
       try {
           TestJaxWsService service = new TestJaxWsService();
           TestJaxWs port = service.getTestJaxWs();

           String returnValue = port.jaxWsTest1( "Invocation test.", 1003 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( UserDefinedException e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥client¥src¥com¥example¥sample¥client¥ディレクトリに保存します。com.example.sample，TestJaxWs，TestJaxWsService，TestJaxWs，およびjaxWsTest1は，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

4.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥example¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromwsdl¥client¥classes¥com¥example¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

4.6　Webサービスの実行例（WSDL起点）

ここでは，WSDLを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

4.6.1　Javaアプリケーション用オプション定義ファイルを作成する

4.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

4.6.3　Webサービスクライアントを実行する

4.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，UTF-8形式でc:¥temp¥jaxws¥works¥fromwsdl¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

4.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥fromwsdl¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

4.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.example.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥fromwsdl¥client, PID = 2636)
--------------------
[RESULT] We've got your #1003 message "Invocation test."! It's 2007.11.28 14:50:50 now. See ya!
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

5.　SEIを起点とした開発の例

この章では，SEIを起点としたWebサービスを開発する場合の例を説明します。

＜この章の構成＞

5.1　開発例の構成（SEI起点）

5.2　開発例の流れ（SEI起点）

5.3　Webサービスの開発例（SEI起点）

5.4　デプロイと開始の例（SEI起点）

5.5　Webサービスクライアントの開発例（SEI起点）

5.6　Webサービスの実行例（SEI起点）

5.1　開発例の構成（SEI起点）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。

開発するWebサービスの構成を次の表に示します。

表5-1　Webサービスの構成（SEI起点）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | fromjava
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://sample.com
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | AddNumbersImpl
9 | オペレーション | 個数 | 1
10 | ローカル名 | add
11 | サービス | 個数 | 1
12 | ローカル名 | AddNumbersImplService
13 | ポート | 個数 | 1
14 | ローカル名 | AddNumbersImplPort
15 | Webサービス実装クラス | com.sample.AddNumbersImpl
16 | Webサービス実装クラスで公開するメソッド | 個数 | 1
17 | メソッド名 | add
18 | Webサービス実装内のメソッドでスローする例外 | 個数 | 1
19 | クラス名 | com.sample.AddNumbersFault

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表5-2　カレントディレクトリの構成（SEI起点）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥fromjava
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「5.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「5.3.1　Webサービス実装クラスを作成する」および「5.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「5.3.3　web.xmlを作成する」で作成します。

┣
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「5.3.2　Javaソースを生成する」で使用します。

┗
wsdl¥
「5.3.5　WSDLファイルを作成する（任意）」で作成します。

┣
fromjava.ear
「5.3.6　EARファイルを作成する」で作成します。

┗
fromjava.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「5.5.1　サービスクラスを生成する」および「5.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「5.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
┃
usrconf.cfg
「5.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「5.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

5.2　開発例の流れ（SEI起点）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（5.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（5.3.2）

web.xmlを作成する（5.3.3）

application.xmlを作成する（5.3.4）

WSDLファイルを作成する（任意）（5.3.5）

EARファイルを作成する（5.3.6）

デプロイと開始

EARファイルをデプロイする（5.4.1）

Webサービスを開始する（5.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（5.5.1）

Webサービスクライアントの実装クラスを作成する（5.5.2）

Webサービスクライアントの実装クラスをコンパイルする（5.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（5.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（5.6.2）

Webサービスクライアントを実行する（5.6.3）

5.3　Webサービスの開発例（SEI起点）

ここでは，SEIを起点とした場合のWebサービスの開発例を説明します。

＜この節の構成＞

5.3.1　Webサービス実装クラスを作成する

5.3.2　Javaソースを生成する

5.3.3　web.xmlを作成する

5.3.4　application.xmlを作成する

5.3.5　WSDLファイルを作成する（任意）

5.3.6　EARファイルを作成する

5.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを新規に作成します。

ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

SOAP 1.1の場合のWebサービス実装クラスの作成例を次に示します。作成したAddNumbersImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥fromjava¥server¥src¥com¥sample¥ディレクトリに保存してください。

package com.sample;

@javax.jws.WebService
public class AddNumbersImpl{

   public int add( int number1, int number2 ) throws AddNumbersFault{

       if( ( number1 < 0 ) || ( number2 < 0 ) ){
           throw new AddNumbersFault( "Negative number cannot be added!",
               "Numbers: " + number1 + ", " + number2 );
       }
       return number1 + number2;
   }

}

また，com.sample.AddNumbersImplでスローしている例外クラスcom.sample.AddNumbersFaultを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。作成したAddNumbersFault.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥fromjava¥server¥src¥com¥sample¥ディレクトリに保存してください。

package com.sample;

public class AddNumbersFault extends Exception {

   String detail;

   public AddNumbersFault( String message, String detail ){
       super( message );
       this.detail = detail;
   }

   public String getDetail(){
       return detail;
   }
}

次に，SOAP 1.2の場合のWebサービス実装クラスの作成例を示します。

package com.sample;

@javax.jws.WebService
@javax.xml.ws.BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class AddNumbersImpl{

   public int add( int number1, int number2 ) throws AddNumbersFault{

       if( ( number1 < 0 ) || ( number2 < 0 ) ){
           throw new AddNumbersFault( "Negative number cannot be added!",
               "Numbers: " + number1 + ", " + number2 );
       }
       return number1 + number2;
   }

}

5.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

<HNTRLib2インストールディレクトリ>の部分には，次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

aptコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromjava¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。生成物の一覧を次の表に示します。

表5-3　Javaソース生成時の生成物（SEI起点）

ファイル名 | 説明
Add.java | addメソッドに対応するリクエストbeanです。
AddResponse.java | addメソッドに対応するレスポンスbeanです。
AddNumbersFaultBean.java | AddNumbersFaultに対応するフォルトbeanです。

ファイル名のAddおよびAddNumbersFaultは，Webサービス実装クラスで公開するメソッド名，ポートタイプのローカル名，およびWebサービス実装クラスでスローする例外のクラス名の記述によって変わります。

5.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;fromjava&quot;</description>
 <display-name>Sample_web_service_fromjava</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/AddNumbersImplService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥fromjava¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

5.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;fromjava&quot;</description>
 <display-name>Sample_application_fromjava</display-name>
 <module>
   <web>
     <web-uri>fromjava.war</web-uri>
     <context-root>fromjava</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥fromjava¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

5.3.5　WSDLファイルを作成する（任意）

SEI起点の開発ではWSDLファイルの作成は任意ですが，作成した場合はEARファイルに含めます。ここでは，cjwsgenコマンドのWSDL生成機能を実行することで，コンパイル済みのJavaソースからWSDLファイルを作成する例を説明します。cjwsgenコマンドについては，「11.3　cjwsgenコマンド」を参照してください。

cjwsgenコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromwsdl¥server¥
> mkdir .¥WEB-INF¥wsdl¥
> mkdir .¥temporary
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsgen.bat" -r .¥WEB-INF¥wsdl -d .¥temporary -cp .¥WEB-INF¥classes com.sample.AddNumbersImpl
> rmdir /S /Q .¥temporary

cjwsgenコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromjava¥WEB-INF¥wsdlディレクトリに，リソースファイルが生成されます。生成物の一覧を次の表に示します。

表5-4　cjwsgenコマンド実行時の生成物

ファイル名 | 説明
AddNumbersImplService.wsdl | 指定したJavaソースに対応するWSDLファイルです。
AddNumbersImplService_schema1.xsd | WSDLファイルから参照されるXML Schema定義です。

なお，c:¥temp¥jaxws¥works¥fromjava¥temporaryディレクトリに生成されるファイルは必要ないため削除してください。

5.3.6　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> jar cvf fromjava.war .¥WEB-INF
> jar cvf fromjava.ear .¥fromjava.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromjava¥server¥ディレクトリにfromjava.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

5.4　デプロイと開始の例（SEI起点）

ここでは，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

5.4.1　EARファイルをデプロイする

5.4.2　Webサービスを開始する

5.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f fromjava.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

5.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_fromjava

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

5.5　Webサービスクライアントの開発例（SEI起点）

ここでは，SEIを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

5.5.1　サービスクラスを生成する

5.5.2　Webサービスクライアントの実装クラスを作成する

5.5.3　Webサービスクライアントの実装クラスをコンパイルする

5.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなど，Webサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/fromjava/AddNumbersImplService?wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromjava¥client¥src¥com¥sample¥ディレクトリに，Javaソースが生成されます。なお，com¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表5-5　サービスクラス生成時の生成物（SEI起点）

ファイル名 | 説明
Add.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddResponse.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
AddNumbersImpl.java | WSDL定義の「サービス」に対応するSEIです。
AddNumbersImplService.java | サービスクラスです。
AddNumbersFault.java | AddNumbersFaultに対応するJavaBeanクラスです。
AddNumbersFault_Exception.java | フォルトbeanのラッパ例外クラスです。

ファイル名のAdd，AddNumbersImpl，およびAddNumbersImplServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名のマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

5.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
import com.sample.AddNumbersFault_Exception;

public class TestClient {
   public static void main( String[] args ) {
       try {
           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbersImpl port = service.getAddNumbersImplPort();

           int returnValue = port.add( 205, 103 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( AddNumbersFault_Exception e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥fromjava¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

なお，com.sample，AddNumbersImpl，AddNumbersImplService，AddNumbersImplPort，およびaddは，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

5.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥fromjava¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

5.6　Webサービスの実行例（SEI起点）

ここでは，SEIを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

5.6.1　Javaアプリケーション用オプション定義ファイルを作成する

5.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

5.6.3　Webサービスクライアントを実行する

5.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥fromjava¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

5.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥fromjava¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

5.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥fromjava¥client, PID = 2636)
[RESULT] 308
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

6.　SEIを起点とした開発の例（cjwsgenコマンドを使用する場合）

この章では，SEIを起点としてcjwsgenコマンドを使用してWebサービスを開発する場合の例を説明します。

＜この章の構成＞

6.1　開発例の構成（SEI起点・cjwsgenコマンド）

6.2　開発例の流れ（SEI起点・cjwsgenコマンド）

6.3　Webサービスの開発例（SEI起点・cjwsgenコマンド）

6.4　デプロイと開始の例（SEI起点・cjwsgenコマンド）

6.5　Webサービスクライアントの開発例（SEI起点・cjwsgenコマンド）

6.6　Webサービスの実行例（SEI起点・cjwsgenコマンド）

6.1　開発例の構成（SEI起点・cjwsgenコマンド）

この章で説明する開発例では，Cosminexusが提供するcjwsgenコマンドを使用して，SEIを起点としたWebサービスを開発します。cjwsgenコマンドの使用方法については，「11.3　cjwsgenコマンド」を参照してください。

開発するWebサービスの構成を次の表に示します。

表6-1　Webサービスの構成（SEI起点・cjwsgenコマンド）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | wsgen
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://sample.com
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | AddNumbersImpl
9 | オペレーション | 個数 | 1
10 | ローカル名 | add
11 | サービス | 個数 | 1
12 | ローカル名 | AddNumbersImplService
13 | ポート | 個数 | 1
14 | ローカル名 | AddNumbersImplPort
15 | Webサービス実装クラス | com.sample.AddNumbersImpl
16 | Webサービス実装クラスで公開するメソッド | 個数 | 1
17 | メソッド名 | add
18 | Webサービス実装内のメソッドでスローする例外 | 個数 | 1
19 | クラス名 | com.sample.AddNumbersFault

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表6-2　カレントディレクトリの構成（SEI起点・cjwsgenコマンド）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥wsgen
カレントディレクトリです。

├
│
│
│
│
│
│
│
│
│
│
│
│
│
│
│
│
server¥
Webサービスの開発で使用します。

├
│
│
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

└
application.xml
「6.3.4　application.xmlを作成する」で作成します。

├
│
│
│
│
│
│
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

├
web.xml
「6.3.3　web.xmlを作成する」で作成します。

├
│
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「6.3.2　Javaソースを生成する」で使用します。

└
wsdl¥
「6.3.2　Javaソースを生成する」で作成します。

├
wsgen.ear
「6.3.5　EARファイルを作成する」で作成します。

└
wsgen.war

└
client¥
Webサービスクライアントの開発で使用します。

├
│
│
│
│
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「6.5.1　サービスクラスを生成する」および「6.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

├
│
│
│
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「6.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

├
│
│
usrconf.cfg
「6.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

└
usrconf.properties
「6.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

6.2　開発例の流れ（SEI起点・cjwsgenコマンド）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

コンパイル済みのクラスファイルを保存する（6.3.1）

cjwsgenコマンドを実行して追加のJavaコードを生成し，任意でWSDLも生成する（6.3.2）

web.xmlを作成する（6.3.3）

application.xmlを作成する（6.3.4）

EARファイルを作成する（6.3.5）

デプロイと開始

EARファイルをデプロイする（6.4.1）

Webサービスを開始する（6.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（6.5.1）

Webサービスクライアントの実装クラスを作成する（6.5.2）

Webサービスクライアントの実装クラスをコンパイルする（6.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（6.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（6.6.2）

Webサービスクライアントを実行する（6.6.3）

6.3　Webサービスの開発例（SEI起点・cjwsgenコマンド）

ここでは，SEIを起点とし，cjwsgenコマンドを使用する場合のWebサービスの開発例を説明します。

＜この節の構成＞

6.3.1　コンパイル済みのクラスファイルを保存する

6.3.2　Javaソースを生成する

6.3.3　web.xmlを作成する

6.3.4　application.xmlを作成する

6.3.5　EARファイルを作成する

6.3.1　コンパイル済みのクラスファイルを保存する

コンパイル済みのWebサービス実装クラスAddNumbersImpl.classをc:¥temp¥jaxws¥works¥wsgen¥server¥WEB-INF¥classes¥com¥sample¥ディレクトリに保存します。また，コンパイル済みの例外クラスAddNumbersFault.classは，c:¥temp¥jaxws¥works¥wsgen¥server¥WEB-INF¥classes¥com¥sample¥ディレクトリに保存してください。

6.3.2　Javaソースを生成する

cjwsgenコマンドを実行して，Webサービスの開発に必要なJavaコードを追加し，任意でWebサービスのメタ情報を示すリソースファイル（WSDLおよびXML Schema定義）を生成します。

リソースファイルも生成する場合のcjwsgenコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥server¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsgen.bat" -r WEB-INF¥wsdl -d WEB-INF¥classes -cp WEB-INF¥classes com.sample.AddNumbersImpl

cjwsgenコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsgen¥server¥WEB-INF¥classes¥com¥sample¥ディレクトリに，Javaソースが生成されます。なお，com¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表6-3　Javaソース生成時の生成物（SEI起点・cjwsgenコマンド）

ファイル名 | 説明
Add.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddResponse.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddNumbersFaultBean.java | 例外クラスのAddNumbersFaultに対応するJavaBeanクラスです。

ファイル名のAddは，オペレーションのローカル名の記述によって変わります。オペレーションのローカル名のマッピングについては，「12.1.3　オペレーションからメソッド名へのマッピング」を参照してください。

なお，リソースファイルはc:¥temp¥jaxws¥works¥wsgen¥WEB-INF¥wsdl¥ディレクトリに生成されます。

6.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;wsgen &quot;</description>
 <display-name>Sample_web_service_wsgen</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/AddNumbersImplService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥wsgen¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

6.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;wsgen&quot;</description>
 <display-name>Sample_application_wsgen</display-name>
 <module>
   <web>
     <web-uri>wsgen.war</web-uri>
     <context-root>wsgen</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥ wsgen¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

6.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥fromjava¥server¥
> jar cvf wsgen.war .¥WEB-INF
> jar cvf wsgen.ear .¥wsgen.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsgen¥server¥ディレクトリにwsgen.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

6.4　デプロイと開始の例（SEI起点・cjwsgenコマンド）

ここでは，SEIを起点としてcjwsgenコマンドを使用した場合のデプロイと開始の例を説明します。

＜この節の構成＞

6.4.1　EARファイルをデプロイする

6.4.2　Webサービスを開始する

6.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f fromjava.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

6.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_fromjava

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

6.5　Webサービスクライアントの開発例（SEI起点・cjwsgenコマンド）

ここでは，SEIを起点とし，cjwsgenコマンドを使用した場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

6.5.1　サービスクラスを生成する

6.5.2　Webサービスクライアントの実装クラスを作成する

6.5.3　Webサービスクライアントの実装クラスをコンパイルする

6.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなど，Webサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/wsgen/AddNumbersImplService?wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsgen¥client¥src¥com¥sample¥ディレクトリに，Javaソースが生成されます。なお，com¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表6-4　サービスクラス生成時の生成物（SEI起点・cjwsgenコマンド）

ファイル名 | 説明
Add.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddResponse.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
AddNumbersImpl.java | WSDL定義の「サービス」に対応するSEIです。
AddNumbersImplService.java | サービスクラスです。
AddNumbersFault.java | AddNumbersFaultに対応するJavaBeanクラスです。
AddNumbersFault_Exception.java | フォルトbeanのラッパ例外クラスです。

ファイル名のAdd，AddNumbersImpl，およびAddNumbersImplServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名のマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

6.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
import com.sample.AddNumbersFault_Exception;

public class TestClient {
   public static void main( String[] args ) {
       try {
           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbersImpl port = service.getAddNumbersImplPort();

           int returnValue = port.add( 205, 103 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( AddNumbersFault_Exception e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥wsgen¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

なお，com.sample，AddNumbersImpl，AddNumbersImplService，AddNumbersImplPort，およびaddは，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

6.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsgen¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

6.6　Webサービスの実行例（SEI起点・cjwsgenコマンド）

ここでは，SEIを起点とし，cjwsgenコマンドを使用した場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

6.6.1　Javaアプリケーション用オプション定義ファイルを作成する

6.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

6.6.3　Webサービスクライアントを実行する

6.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥fromjava¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

6.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥wsgen¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

6.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsgen¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥wsgen¥client, PID = 2636)
[RESULT] 308
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

7.　SEIを起点とした開発の例（カスタマイズする場合）

この章では，SEIを起点としたWebサービスをカスタマイズする場合の例を説明します。

＜この章の構成＞

7.1　開発例の構成（SEI起点・カスタマイズ）

7.2　開発例の流れ（SEI起点・カスタマイズ）

7.3　Webサービスの開発例（SEI起点・カスタマイズ）

7.4　デプロイと開始の例（SEI起点・カスタマイズ）

7.5　Webサービスクライアントの開発例（SEI起点・カスタマイズ）

7.6　Webサービスの実行例（SEI起点・カスタマイズ）

7.1　開発例の構成（SEI起点・カスタマイズ）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。開発するWebサービスは，アノテーションを使用してカスタマイズします。

開発するWebサービスの構成を次の表に示します。

表7-1　Webサービスの構成（SEI起点・カスタマイズ）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | fromjava
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://example.org/sample
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | TestJaxWs
9 | オペレーション | 個数 | 1
10 | ローカル名 | jaxWsTest1
11 | サービス | 個数 | 1
12 | ローカル名 | TestJaxWsService
13 | ポート | 個数 | 1
14 | ローカル名 | testJaxWs
15 | Webサービス実装クラス | com.sample.AddNumbersImpl
16 | Webサービス実装クラスで公開するメソッド | 個数 | 1
17 | ローカル名 | add
18 | Webサービス実装内のメソッドでスローする例外 | 個数 | 1
19 | ローカル名 | com.sample.AddNumbersFault

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表7-2　カレントディレクトリの構成（SEI起点・カスタマイズ）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥annotations
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「7.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「7.3.1　Webサービス実装クラスを作成する」および「7.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「7.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「7.3.2　Javaソースを生成する」で使用します。

┣
annotations.ear
「7.3.5　EARファイルを作成する」で作成します。

┗
annotations.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「7.5.1　サービスクラスを生成する」および「7.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「7.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
┃
usrconf.cfg
「7.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「7.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

7.2　開発例の流れ（SEI起点・カスタマイズ）

この章で説明する開発例では，次の流れでカスタマイズおよび実行します。

Webサービスの開発

Webサービス実装クラスを作成する（7.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（7.3.2）

web.xmlを作成する（7.3.3）

application.xmlを作成する（7.3.4）

EARファイルを作成する（7.3.5）

デプロイと開始

EARファイルをデプロイする（7.4.1）

Webサービスを開始する（7.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（7.5.1）

Webサービスクライアントの実装クラスを作成する（7.5.2）

Webサービスクライアントの実装クラスをコンパイルする（7.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（7.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（7.6.2）

Webサービスクライアントを実行する（7.6.3）

7.3　Webサービスの開発例（SEI起点・カスタマイズ）

ここでは，SEIを起点とした場合のWebサービス（カスタマイズあり）の開発例を説明します。

＜この節の構成＞

7.3.1　Webサービス実装クラスを作成する

7.3.2　Javaソースを生成する

7.3.3　web.xmlを作成する

7.3.4　application.xmlを作成する

7.3.5　EARファイルを作成する

7.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

SOAP 1.1の場合のWebサービス実装クラスの作成例を次に示します。作成したAddNumbersImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥annotations¥server¥src¥com¥sample¥ディレクトリに保存します。

package com.sample;

@javax.jws.WebService(name = "TestJaxWs",
   targetNamespace = "http://example.org/sample",
   serviceName = "TestJaxWsService", portName = "testJaxWs")
@javax.xml.ws.BindingType(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)
@javax.jws.soap.SOAPBinding(style = javax.jws.soap.SOAPBinding.Style.DOCUMENT, use = javax.jws.soap.SOAPBinding.Use.LITERAL)
public class AddNumbersImpl{

   @javax.jws.WebMethod(operationName = "jaxWsTest1")
   @javax.jws.WebResult(name = "return")
   public int add( @javax.jws.WebParam(name="num1")int number1, @javax.jws.WebParam(name="num2")int number2 ) throws AddNumbersFault{

       if( ( number1 < 0 ) || ( number2 < 0 ) ){
           throw new AddNumbersFault( "Negative number cannot be added!",
               "Numbers: " + number1 + ", " + number2 );
       }
       return number1 + number2;
   }

}

また，com.sample.AddNumbersImplでスローしている例外クラスcom.sample.AddNumbersFaultを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。作成したAddNumbersFault.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥annotations¥server¥src¥com¥sample¥ディレクトリに保存します。

package com.sample;

public class AddNumbersFault extends Exception {

   String detail;

   public AddNumbersFault( String message, String detail ){
       super( message );
       this.detail = detail;
   }

   public String getDetail(){
       return detail;
   }
}

次に，SOAP 1.2の場合のWebサービス実装クラスの作成例を示します。

package com.sample;

@javax.jws.WebService(name = "TestJaxWs",
   targetNamespace = "http://example.org/sample",
   serviceName = "TestJaxWsService", portName = "testJaxWs")
@javax.xml.ws.BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
@javax.jws.soap.SOAPBinding(style = javax.jws.soap.SOAPBinding.Style.DOCUMENT, use = javax.jws.soap.SOAPBinding.Use.LITERAL)
public class AddNumbersImpl{

   @javax.jws.WebMethod(operationName = "jaxWsTest1")
   @javax.jws.WebResult(name = "return")
   public int add( @javax.jws.WebParam(name="num1")int number1, @javax.jws.WebParam(name="num2")int number2 ) throws AddNumbersFault{

       if( ( number1 < 0 ) || ( number2 < 0 ) ){
           throw new AddNumbersFault( "Negative number cannot be added!",
               "Numbers: " + number1 + ", " + number2 );
       }
       return number1 + number2;
   }

}

7.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥annotations¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥annotations¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

<HNTRLib2インストールディレクトリ>の部分には，次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

aptコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥annotations¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。生成物の一覧を次の表に示します。

表7-3　Javaソース生成時の生成物（SEI起点・カスタマイズ）

生成物 | 説明
Add.java | addメソッドに対応するリクエストbeanです。
AddResponse.java | addメソッドに対応するレスポンスbeanです。
AddNumbersFaultBean.java | AddNumbersFaultに対応するフォルトbeanです。

ファイル名のAddおよびAddNumbersFaultは，Webサービス実装クラスで公開するメソッド名，ポートタイプのローカル名，およびWebサービス実装クラスでスローする例外のクラス名の記述によって変わります。

7.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;annotations&quot;</description>
 <display-name>Sample_web_service_annotations</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/TestJaxWsService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥annotations¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

7.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;annotations&quot;</description>
 <display-name>Sample_application_annotations</display-name>
 <module>
   <web>
     <web-uri>annotations.war</web-uri>
     <context-root>annotations</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥annotations¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

7.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

> cd c:¥temp¥jaxws¥works¥annotations¥server¥
> jar cvf annotations.war .¥WEB-INF
> jar cvf annotations.ear .¥annotations.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥annotations¥server¥ディレクトリにannotations.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

7.4　デプロイと開始の例（SEI起点・カスタマイズ）

ここでは，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

7.4.1　EARファイルをデプロイする

7.4.2　Webサービスを開始する

7.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥annotations¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f annotations.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

7.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥annotations¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_annotations

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

7.5　Webサービスクライアントの開発例（SEI起点・カスタマイズ）

ここでは，SEIを起点とした場合のWebサービスクライアントをカスタマイズする例について説明します。

＜この節の構成＞

7.5.1　サービスクラスを生成する

7.5.2　Webサービスクライアントの実装クラスを作成する

7.5.3　Webサービスクライアントの実装クラスをコンパイルする

7.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなど，Webサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥annotations¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/annotations/TestJaxWsService?wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥annotations¥client¥src¥com¥example¥sample¥ディレクトリに，Javaソースが生成されます。なお，com¥example¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表7-4　サービスクラス生成時の生成物（SEI起点・カスタマイズ）

ファイル名 | 説明
JaxWsTest1.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
JaxWsTest1Response.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
TestJaxWs.java | WSDL定義の「サービス」に対応するSEIです。
TestJaxWsService.java | サービスクラスです。
AddNumbersFault.java | AddNumbersFaultに対応するJavaBeanクラスです。
AddNumbersFault_Exception.java | フォルトbeanのラッパ例外クラスです。

ファイル名のJaxWsTest1，TestJaxWs，およびTestJaxWsServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名のマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

7.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package org.example.sample.client;

import org.example.sample.TestJaxWs;
import org.example.sample.TestJaxWsService;
import org.example.sample.AddNumbersFault_Exception;

public class TestClient {
   public static void main( String[] args ) {
       try {
           TestJaxWsService service = new TestJaxWsService();
           TestJaxWs port = service.getTestJaxWs();

           int returnValue = port.jaxWsTest1( 205, 103 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( AddNumbersFault_Exception e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥annotations¥client¥src¥com¥example¥sample¥client¥ディレクトリに保存します。

なお，org.example.sample，TestJaxWs，TestJaxWsService，およびjaxWsTest1は，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

7.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥annotations¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥org¥example¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥annotations¥client¥classes¥org¥example¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

7.6　Webサービスの実行例（SEI起点・カスタマイズ）

ここでは，SEIを起点とした場合のWebサービスクライアントをカスタマイズする実行例について説明します。

＜この節の構成＞

7.6.1　Javaアプリケーション用オプション定義ファイルを作成する

7.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

7.6.3　Webサービスクライアントを実行する

7.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥annotations¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

7.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥annotations¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

7.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥annotations¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  org.example.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥annotations¥client, PID = 2636)
[RESULT] 308
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

8.　SEIを起点とした開発の例（EJBのWebサービスの場合）

この章では，SEIを起点としたEJBのWebサービスを開発する場合の例を説明します。

＜この章の構成＞

8.1　開発例の構成（SEI起点・EJBのWebサービス）

8.2　開発例の流れ（SEI起点・EJBのWebサービス）

8.3　Webサービスの開発例（SEI起点・EJBのWebサービス）

8.4　デプロイと開始の例（SEI起点・EJBのWebサービス）

8.5　Webサービスクライアントの開発例（SEI起点・EJBのWebサービス）

8.6　Webサービスの実行例（SEI起点・EJBのWebサービス）

8.1　開発例の構成（SEI起点・EJBのWebサービス）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。なお，ここではスタブベースでの開発例を説明しますが，ディスパッチベースやAPIベースでも開発できます。

開発するWebサービスの構成を次の表に示します。

表8-1　Webサービスの構成（SEI起点）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | fromjava
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://sample.com
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | AddNumbersImpl
9 | オペレーション | 個数 | 1
10 | ローカル名 | add
11 | サービス | 個数 | 1
12 | ローカル名 | AddNumbersImplService
13 | ポート | 個数 | 1
14 | ローカル名 | AddNumbersImplPort
15 | Webサービス実装クラス | com.sample.AddNumbersImpl
16 | Webサービス実装クラスで公開するメソッド | 個数 | 1
17 | メソッド名 | add
18 | Webサービス実装内のメソッドでスローする例外 | 個数 | 1
19 | クラス名 | com.sample.AddNumbersFault

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表8-2　カレントディレクトリの構成（SEI起点）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥statelessjava
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「8.3.3　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「8.3.1　Webサービス実装クラスを作成する」および「8.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
jar¥
コンパイルしたクラスファイル（*.class）を格納します。「8.3.1　Webサービス実装クラスを作成する」および「8.3.2　Javaソースを生成する」で使用します。

┗
WEB-INF¥
EJB JARファイルのWEB-INFディレクトリに対応します。

┗
wsdl¥
「8.3.4　WSDLファイルを作成する（任意）」で作成します。

┣
statelessjava.ear
「8.3.5　EARファイルを作成する」で作成します。

┗
statelessjava.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「8.5.1　サービスクラスを生成する」および「8.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「8.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
┃
usrconf.cfg
「8.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「8.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

8.2　開発例の流れ（SEI起点・EJBのWebサービス）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（8.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（8.3.2）

application.xmlを作成する（8.3.3）

WSDLファイルを作成する（任意）（8.3.4）

EARファイルを作成する（8.3.5）

デプロイと開始

EARファイルをデプロイする（8.4.1）

Webサービスを開始する（8.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（8.5.1）

Webサービスクライアントの実装クラスを作成する（8.5.2）

Webサービスクライアントの実装クラスをコンパイルする（8.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（8.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（8.6.2）

Webサービスクライアントを実行する（8.6.3）

8.3　Webサービスの開発例（SEI起点・EJBのWebサービス）

ここでは，SEIを起点とした場合のEJBのWebサービスの開発例を説明します。

＜この節の構成＞

8.3.1　Webサービス実装クラスを作成する

8.3.2　Javaソースを生成する

8.3.3　application.xmlを作成する

8.3.4　WSDLファイルを作成する（任意）

8.3.5　EARファイルを作成する

8.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを新規に作成します。

ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。作成したAddNumbersImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥statelessjava¥server¥src¥com¥sample¥ディレクトリに保存してください。

package com.sample;

@javax.ejb.Stateless
@javax.jws.WebService
public class AddNumbersImpl{

   public int add( int number1, int number2 ) throws AddNumbersFault{

       if( ( number1 < 0 ) || ( number2 < 0 ) ){
           throw new AddNumbersFault( "Negative number cannot be added!",
               "Numbers: " + number1 + ", " + number2 );
       }
       return number1 + number2;
   }

}

また，com.sample.AddNumbersImplでスローしている例外クラスcom.sample.AddNumbersFaultを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。作成したAddNumbersFault.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥statelessjava¥server¥src¥com¥sample¥ディレクトリに保存してください。

package com.sample;

public class AddNumbersFault extends Exception {

   String detail;

   public AddNumbersFault( String message, String detail ){
       super( message );
       this.detail = detail;
   }

   public String getDetail(){
       return detail;
   }
}

8.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> mkdir .¥jar¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME% -cp" "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d jar¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> mkdir .¥jar¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d .¥jar¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

aptコマンドを実行すると，Webサービス実装クラスにjavax.ejb.Statelessアノテーションが付いているため次のような警告が出力されます。

警告: プロセッサなしの注釈タイプです: [javax.ejb.Stateless]

<HNTRLib2インストールディレクトリ>の部分には，次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

aptコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥statelessjava¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。生成物の一覧を次の表に示します。

表8-3　Javaソース生成時の生成物（SEI起点）

ファイル名 | 説明
Add.java | addメソッドに対応するリクエストbeanです。
AddResponse.java | addメソッドに対応するレスポンスbeanです。
AddNumbersFaultBean.java | AddNumbersFaultに対応するフォルトbeanです。

ファイル名のAddおよびAddNumbersFaultは，Webサービス実装クラスで公開するメソッド名，ポートタイプのローカル名，およびWebサービス実装クラスでスローする例外のクラス名の記述によって変わります。

8.3.3　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;statelessjava&quot;</description>
 <display-name>Sample_application_statelessjava</display-name>
 <module>
   <ejb>statelessjava.jar</ejb>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥statelessjava¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

8.3.4　WSDLファイルを作成する（任意）

SEI起点の開発ではWSDLファイルの作成は任意ですが，作成した場合はEARファイルに含めます。ここでは，cjwsgenコマンドのWSDL生成機能を実行することで，コンパイル済みのJavaソースからWSDLファイルを作成する例を説明します。cjwsgenコマンドについては，「11.3　cjwsgenコマンド」を参照してください。

cjwsgenコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> mkdir .¥jar¥META-INF¥wsdl¥
> mkdir .¥temporary
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsgen.bat" -r .¥jar¥META-INF¥wsdl -d .¥temporary -cp .¥jar com.sample.AddNumbersImpl
> rmdir /S /Q .¥temporary

cjwsgenコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥statelessjava¥META-INF¥wsdl¥ディレクトリに，リソースファイルが生成されます。生成物の一覧を次の表に示します。

表8-4　cjwsgenコマンド実行時の生成物

ファイル名 | 説明
AddNumbersImplService.wsdl | 指定したJavaソースに対応するWSDLファイルです。
AddNumbersImplService_schema1.xsd | WSDLファイルから参照されるXML Schema定義です。

なお，c:¥temp¥jaxws¥works¥statelessjava¥temporary¥ディレクトリに生成されるファイルは必要ないため削除してください。

8.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> jar cvf statelessjava.jar -C jar com
> jar cvf statelessjava.ear .¥statelessjava.jar .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥statelessjava¥server¥ディレクトリにstatelessjava.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

8.4　デプロイと開始の例（SEI起点・EJBのWebサービス）

ここでは，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

8.4.1　EARファイルをデプロイする

8.4.2　Webサービスを開始する

8.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f statelessjava.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

8.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_statelessjava

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

8.5　Webサービスクライアントの開発例（SEI起点・EJBのWebサービス）

ここでは，SEIを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

8.5.1　サービスクラスを生成する

8.5.2　Webサービスクライアントの実装クラスを作成する

8.5.3　Webサービスクライアントの実装クラスをコンパイルする

8.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなど，Webサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/statelessjava/AddNumbersImplService?wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥statelessjava¥client¥src¥com¥sample¥ディレクトリに，Javaソースが生成されます。なお，com¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表8-5　サービスクラス生成時の生成物（SEI起点）

ファイル名 | 説明
Add.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddResponse.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
AddNumbersImpl.java | WSDL定義の「サービス」に対応するSEIです。
AddNumbersImplService.java | サービスクラスです。
AddNumbersFault.java | AddNumbersFaultに対応するJavaBeanクラスです。
AddNumbersFault_Exception.java | フォルトbeanのラッパ例外クラスです。

ファイル名のAdd，AddNumbersImpl，およびAddNumbersImplServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名のマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

8.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import com.sample.AddNumbersImpl;
import com.sample.AddNumbersImplService;
import com.sample.AddNumbersFault_Exception;

public class TestClient {
   public static void main( String[] args ) {
       try {
           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbersImpl port = service.getAddNumbersImplPort();

           int returnValue = port.add( 205, 103 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( AddNumbersFault_Exception e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥statelessjava¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

なお，com.sample，AddNumbersImpl，AddNumbersImplService，AddNumbersImplPort，およびaddは，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

8.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥statelessjava¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

8.6　Webサービスの実行例（SEI起点・EJBのWebサービス）

ここでは，SEIを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

8.6.1　Javaアプリケーション用オプション定義ファイルを作成する

8.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

8.6.3　Webサービスクライアントを実行する

8.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥statelessjava¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

8.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥statelessjava¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

8.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥statelessjava¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥statelessjava¥client, PID = 2636)
[RESULT] 308
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

9.　プロバイダを起点とした開発の例（SAAJを利用した場合）

この章では，プロバイダを起点としたWebサービスを，SAAJを利用して開発する場合の例を説明します。

＜この章の構成＞

9.1　開発例の構成（プロバイダ起点・SAAJ）

9.2　開発例の流れ（プロバイダ起点・SAAJ）

9.3　Webサービスの開発例（プロバイダ起点・SAAJ）

9.4　デプロイと開始の例（プロバイダ起点・SAAJ）

9.5　Webサービスクライアントの開発例（プロバイダ起点・SAAJ）

9.6　Webサービスの実行例（プロバイダ起点・SAAJ）

9.1　開発例の構成（プロバイダ起点・SAAJ）

この章で説明する開発例では，Dispatch／ProviderでSOAPメッセージを送受信するWebサービスを，SAAJを利用して開発します。

なお，ここでの例ではWebサービスクライアントから社員番号と社員の顔写真の情報が送信され，Webサービスが受信した情報を登録し，登録確認メッセージを返却するものとします。社員番号と登録確認メッセージのJavaデータ型はjava.lang.String，顔写真のJavaデータ型はjavax.activation.DataHandlerです。

開発するWebサービスの構成を次の表に示します。

表9-1　Webサービスの構成（プロバイダ起点・SAAJ）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | dispatch_provider
5 | 名前空間URI | http://sample.com
6 | サービス | 個数 | 1
7 | ローカル名 | UserInfoService
8 | ポート | 個数 | 1
9 | ローカル名 | UserInfoPort

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表9-2　カレントディレクトリの構成（プロバイダ起点・SAAJ）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥dispatch_provider
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「9.3.4　application.xmlを作成する」で作成します。

┣
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「9.3.1　プロバイダ実装クラスを作成する」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「9.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「9.3.2　Javaソースを生成する」で使用します。

┣
dispatch_provider.ear
「9.3.5　EARファイルを作成する」で作成します。

┗
dispatch_provider.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「9.5.1　Webサービスクライアントの実装クラスを作成する」で作成します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「9.5.2　Webサービスクライアントの実装クラスをコンパイルする」で作成します。

┣
┃
usrconf.cfg
「9.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「9.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

9.2　開発例の流れ（プロバイダ起点・SAAJ）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

プロバイダ実装クラスを作成する（9.3.1）

Javaソースを生成する（9.3.2）

web.xmlを作成する（9.3.3）

application.xmlを作成する（9.3.4）

EARファイルを作成する（9.3.5）

デプロイと開始

EARファイルをデプロイする（9.4.1）

Webサービスを開始する（9.4.2）

Webサービスクライアントの開発

Webサービスクライアントの実装クラスを作成する（9.5.1）

Webサービスクライアントの実装クラスをコンパイルする（9.5.2）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（9.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（9.6.2）

Webサービスクライアントを実行する（9.6.3）

9.3　Webサービスの開発例（プロバイダ起点・SAAJ）

ここでは，プロバイダを起点とし，SAAJを利用した場合のWebサービスの開発例を説明します。

＜この節の構成＞

9.3.1　プロバイダ実装クラスを作成する

9.3.2　Javaソースを生成する

9.3.3　web.xmlを作成する

9.3.4　application.xmlを作成する

9.3.5　EARファイルを作成する

9.3.1　プロバイダ実装クラスを作成する

プロバイダ実装クラスcom.sample.UserInfoImplを作成する例を次に示します。作成したcom.sample.UserInfoImplは，UTF-8形式でc:¥temp¥jaxws¥works¥dispatch_provider¥server¥src¥com¥sample¥ディレクトリに保存してください。

package com.sample;

import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Provider;

@javax.xml.ws.WebServiceProvider(serviceName="UserInfoService")
@javax.xml.ws.ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
public class UserInfoImpl implements Provider<SOAPMessage>{

   public SOAPMessage invoke( SOAPMessage request ){

       // 応答メッセージ
       SOAPMessage response = null;
       // 添付ファイル(顔写真)
       AttachmentPart attachment = null;

       try {
           // 要求メッセージからデータ取得
           // 社員番号を取得
           SOAPBody soapBody = request.getSOAPBody();
           SOAPBodyElement reqRoot =
               (SOAPBodyElement)soapBody.getChildElements().next();
           Iterator number_iterator = reqRoot.getChildElements();
           String number =

((SOAPElement)number_iterator.next()).getFirstChild().getNodeValue();

           // 顔写真を取得
           Iterator attachment_iterator = request.getAttachments();
           while(attachment_iterator.hasNext()){
               attachment = (AttachmentPart)attachment_iterator.next();
           }

           // 顔写真の登録処理など取得した添付ファイルに対して
           // ほかに必要な処理があれば実装する

           // 応答メッセージの生成
           response = MessageFactory.newInstance().createMessage();
           SOAPBody resSoapBody = response.getSOAPBody();
           SOAPBodyElement resRoot = resSoapBody.addBodyElement(
               new QName("http://sample.com", "result"));
           SOAPElement soapElement = resRoot.addChildElement(
               new QName("http://sample.com", "value"));

           // 登録確認メッセージを設定
           if(null ==  attachment){
               soapElement.addTextNode("Failure(no image).");
           } else {
               soapElement.addTextNode("Success.");
           }

       } catch (SOAPException e) {
           e.printStackTrace();
       }

       return response;
   }
}

SOAP 1.2の場合は，作成したプロバイダ実装クラスに対してjavax.xml.ws.BindingTypeアノテーションを付与してください。設定する値は，SOAP 1.2/HTTPバインディングを意味する"http://www.w3.org/2003/05/soap/bindings/HTTP/"にします。javax.xml.ws.BindingTypeアノテーションを付与する例を次に示します。

package com.sample;

import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Provider;

@javax.xml.ws.BindingType("http://www.w3.org/2003/05/soap/bindings/HTTP/")
@javax.xml.ws.WebServiceProvider
@javax.xml.ws.ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
public class UserInfoImpl mplements Provider<SOAPMessage>{

   public SOAPMessage invoke( SOAPMessage request ){

（以降はSOAP1.1の場合と同じ）

なお，javax.xml.ws.BindingTypeアノテーションの値には，"http://www.w3.org/2003/05/soap/bindings/HTTP/"の代わりに定数値フィールドjavax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDINGを設定することもできます。定数値フィールドを設定した場合の例については，「5.3.1　Webサービス実装クラスを作成する」を参照してください。

9.3.2　Javaソースを生成する

作成したプロバイダ実装クラスcom.sample.UserInfoImplをコンパイルする例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥dispatch_provider¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥dispatch_provider¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

<HNTRLib2インストールディレクトリ>の部分には，次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

コンパイルが正常に終了すると，c:¥temp¥jaxws¥works¥dispatch_provider¥server¥WEB-INF¥classes¥com¥sample¥ディレクトリに，UserInfoImpl.classが生成されます。

9.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;dispatch_provider&quot;</description>
 <display-name>Sample_web_service_dispatch_provider</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/UserInfoService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥dispatch_provider¥server¥WEB-INFディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

9.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。application.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;dispatch_provider&quot;</description>
 <display-name>Sample_application_dispatch_provider</display-name>
 <module>
   <web>
     <web-uri>dispatch_provider.war</web-uri>
     <context-root>dispatch_provider</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥dispatch_provider¥server¥META-INFディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

9.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥dispatch_provider¥server¥
> jar cvf dispatch_provider.war .¥WEB-INF
> jar cvf dispatch_provider.ear .¥dispatch_provider.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥dispatch_provider¥server¥ディレクトリにdispatch_provider.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

9.4　デプロイと開始の例（プロバイダ起点・SAAJ）

ここでは，プロバイダを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

9.4.1　EARファイルをデプロイする

9.4.2　Webサービスを開始する

9.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥dispatch_provider¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f dispatch_provider.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

9.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥dispatch_provider¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_dispatch_provider

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

9.5　Webサービスクライアントの開発例（プロバイダ起点・SAAJ）

ここでは，プロバイダを起点とし，SAAJを利用した場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

9.5.1　Webサービスクライアントの実装クラスを作成する

9.5.2　Webサービスクライアントの実装クラスをコンパイルする

9.5.1　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをする，ディスパッチベースのWebサービスクライアントcom.sample.client.TestClientの作成例を次に示します。

なお，ディスパッチベースのWebサービスクライアントでは，SOAPバインディングのバージョンを明示する必要があるため，例ではSOAP 1.1/HTTPバインディングを指定しています。SOAP 1.2の場合は，SOAPBinding.SOAP11HTTP_BINDINGの部分をSOAPBinding.SOAP12HTTP_BINDINGに読み替えてください。

package com.sample.client;

import java.io.File;
import java.util.Iterator;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.ws.soap.SOAPBinding;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;

public class TestClient {
   public static void main( String[] args ) {
       // サービス生成
       QName port = new QName( "http://sample.com", "UserInfoPort" );
       Service service = Service.create(
           new QName("http://sample.com", "UserInfoService"));
       String serviceURL = "http://webhost:8085/dispatch_provider/UserInfoService";

       // サービスにポートを追加
       service.addPort( port, SOAPBinding.SOAP11HTTP_BINDING, serviceURL );

       // Dispatchオブジェクト生成
       Dispatch<SOAPMessage> dispatch = service.createDispatch(
           port, SOAPMessage.class, Service.Mode.MESSAGE );

       // 要求メッセージ
       SOAPMessage request = null;

       try{
           // 要求メッセージの生成
           request = MessageFactory.newInstance().createMessage();
           SOAPBody reqSoapBody = request.getSOAPBody();

           // 社員番号を設定
           SOAPBodyElement requestRoot= soapBody.addBodyElement(
               new QName("http://sample.com", "number"));
           SOAPElement soapElement = requestRoot.addChildElement(
               new QName("http://sample.com", "value"));
           soapElement.addTextNode( "1234" );

           // 添付ファイル(顔写真)を設定
           String filePath = "C:¥¥attachment.jpg";
           FileDataSource fds = new FileDataSource(filePath);
           AttachmentPart apPart =
               request.createAttachmentPart(new DataHandler(fds));
           request.addAttachmentPart(apPart);

           // SOAPメッセージの送受信
           SOAPMessage response = dispatch.invoke( request );

           // 応答メッセージからデータを取得
           SOAPBody resSoapBody = response.getSOAPBody();
           SOAPBodyElement resRoot =
               (SOAPBodyElement)resSoapBody.getChildElements().next();
           Iterator iterator = resRoot.getChildElements();
           String result =
               ((SOAPElement)iterator.next()).getFirstChild().getNodeValue();

           // 登録確認メッセージの表示
           System.out.println( "[RESULT] " + result );
       } catch( SOAPException e ) {
           e.printStackTrace();
     }
  }
}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥dispatch_provider¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

9.5.2　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥dispatch_provider¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥dispatch_provider¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

9.6　Webサービスの実行例（プロバイダ起点・SAAJ）

ここでは，プロバイダを起点とし，SAAJを利用した場合のWebサービスの実行例を説明します。

＜この節の構成＞

9.6.1　Javaアプリケーション用オプション定義ファイルを作成する

9.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

9.6.3　Webサービスクライアントを実行する

9.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。<PRF ID>の部分は，PRFデーモンの識別子を指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥dispatch_provider¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

9.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥dispatch_provider¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

9.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥dispatch_provider¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥dispatch_provider¥client, PID = 2636)
[RESULT] Success.
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

10.　JAX-WS機能の設定と動作

この章では，Webサービスを開発，運用するときの各種設定と，運用に当たって理解が必要なJAX-WSエンジンの動作について説明します。

＜この章の構成＞

10.1　動作定義ファイル

10.2　JAX-WSエンジンの動作

10.3　cosminexus-jaxws.xmlによるカスタマイズ

10.4　フォルトと例外の処理

10.5　インタフェースの透過性

10.6　メタデータの発行

10.7　Webサービスの情報表示

10.8　使用できるHTTPメソッド

10.9　Webサービスの初期化と破棄

10.10　プロキシサーバ経由の接続

10.11　SSLプロトコルによる接続

10.12　ベーシック認証による接続

10.13　SOAPのバージョン選択

10.14　コマンドラインを利用したクライアントアプリケーションの実行

10.15　HTTPステータスコード

10.16　HTTPヘッダ

10.17　HTTPリクエストボディのgzip圧縮

10.18　HTTPレスポンス圧縮機能との連携

10.19　EJBのWebサービス呼び出し

10.1　動作定義ファイル

ログやタイムアウトの設定などは動作定義ファイルに記述します。動作定義ファイルは，次の2種類があります。

共通定義ファイル
システム共通の動作を設定するための定義ファイルです。一つだけあります。

プロセス別の定義ファイル
プロセス固有の動作を設定する場合に作成する定義ファイルです。固有の設定が必要なプロセスごとに作成します。例えば，J2EEサーバごとに設定を変更したい場合や，Webサービスクライアントに設定を変更したい場合に作成します。

また，一部の定義については，Webサービスクライアントにメッセージコンテキストを取得して定義できます。メッセージコンテキストとして指定できる定義については，「15.5.1　メッセージコンテキストのプロパティのサポート範囲」を参照してください。

ここでは，動作定義ファイルの記述規則，および各定義ファイルの設定について説明します。

＜この節の構成＞

10.1.1　動作定義ファイルの記述規則

10.1.2　共通定義ファイルの設定項目

10.1.3　プロセス別の定義ファイルの設定

10.1.1　動作定義ファイルの記述規則

動作定義ファイルの記述形式および記述規則について説明します。また，動作定義の優先度を示します。

＜この項の構成＞

(1)　記述形式

(2)　記述規則

(3)　動作定義の優先度

(1)　記述形式

動作定義ファイルは，次のようにキーを指定します。

<キー名称>=<値>

(2)　記述規則

動作定義ファイルは，次に示す規則に従って記述してください。

改行までが<値>になります。

#で始まる行はコメントと見なされます。

<値>の後ろにコメントは追加できません。追加した場合，コメントまでが値と解釈されます。

記載する文字はJavaの仕様に従って，ISO 8859-1文字エンコーディングを使用してください。2バイト文字などは不正な文字列に解釈されるので，native2asciiコマンドで変換してください。native2asciiコマンドについては，JDKのドキュメントを参照してください。

<値>にはスペースも指定できます。

<キー名称>と=の間，および=と<値>の間にスペースを入れた場合，スペースが取り除かれて解釈されます。

設定できる<キー名称>以外の<キー名称>を設定した場合，その<キー名称>は使用されません（警告やエラーは出力されません）。

値がない行を指定した場合，デフォルト値が仮定されます。

キー名称は大文字／小文字を区別します。

(3)　動作定義の優先度

動作定義の優先順位は次のとおりです。

Webサービスクライアント（メッセージコンテキスト）に定義

プロセス別の定義ファイル

共通定義ファイル

Webサービスクライアントに定義する場合の例として，Webサービスクライアントに接続タイムアウト値を設定するコードを示します。

// setConnectTimeout()
int timeout = 60000;
Map<String, Object> ctxt = ((BindingProvider)port).getRequestContext();
ctxt.put("com.cosminexus.jaxws.connect.timeout", timeout);

10.1.2　共通定義ファイルの設定項目

共通定義ファイルを使用して，システム共通の動作定義を設定します。共通定義ファイルのファイル名，保存ディレクトリ名，および設定項目について説明します。

＜この項の構成＞

(1)　ファイル名

(2)　保存先ディレクトリ

(3)　設定項目

(4)　設定を変更する場合

(1)　ファイル名

共通定義ファイルのファイル名を示します。

cjwconf.properties

(2)　保存先ディレクトリ

共通定義ファイルの保存先ディレクトリを示します。保存先ディレクトリは固定です。

<Cosminexusのインストールディレクトリ>¥jaxws¥conf

(3)　設定項目

設定するキー名称と指定内容の一覧を次の表に示します。

表10-1　共通定義ファイルの設定項目

項番
設定項目
キー名称
指定内容
デフォルト値
コンテキスト

1
稼働ログのログ出力レベル
com.cosminexus.jaxws.logger.runtime.message.level
稼働ログのログ出力レベルを指定します。
ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

2
稼働ログの面数
com.cosminexus.jaxws.logger.runtime.message.file_num
稼働ログの面数を指定します。
数字（1～16）を指定します。
2
－

3
稼働ログの容量
com.cosminexus.jaxws.logger.runtime.message.file_size
稼働ログの容量を指定します。
4096～16777216の数字（単位：バイト）を指定します。
2097152
－

4
保守ログの出力
com.cosminexus.jaxws.logger.runtime.maintenance.level
保守ログを出力するかどうかを指定します。

ALLを指定した場合

保守ログが出力されます。

NONEを指定した場合

保守ログが出力されません。

ALL
－

5
保守ログの面数
com.cosminexus.jaxws.logger.runtime.maintenance.file_num
保守ログの面数を指定します。
1～16の数字を指定します。
2
－

6
保守ログの容量
com.cosminexus.jaxws.logger.runtime.maintenance.file_size
保守ログの容量を指定します。
4096～16777216の数字（単位：バイト）で指定します。
16777216
－

7
例外ログのログ出力レベル
com.cosminexus.jaxws.logger.runtime.exception.level
例外ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

8
例外ログの面数
com.cosminexus.jaxws.logger.runtime.exception.file_num
例外ログの面数を指定します。1～16の数字で指定します。
2
－

9
例外ログの容量
com.cosminexus.jaxws.logger.runtime.exception.file_size
例外ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

10
通信ログの出力
（Webサービスクライアント側）
com.cosminexus.jaxws.logger.runtime.transport.client_dump
Webサービスクライアント側で通信ログを出力するかどうかを指定します。

NONEを指定した場合

Webサービスクライアントでは通信ログが出力されません。

ALLを指定した場合

Webサービスクライアントで送受信したメッセージが常に通信ログに出力されます。

HEADERを指定した場合

Webサービスクライアントで受信したメッセージのHTTPヘッダが常に通信ログに出力されます。

ERROR_HEADERを指定した場合

SOAPFaultを受信した場合に，受信したメッセージのHTTPヘッダが通信ログに出力されます。

注意事項

ALLを指定した場合，送受信するメッセージの長さによってはjava.lang.OutOfMemoryError例外が発生することがあります。その場合はJVMのヒープサイズを調整してください。

ERROR_HEADER
－

11
通信ログの出力
（Webサービス側）
com.cosminexus.jaxws.logger.runtime.transport.server_dump
Webサービス側で通信ログを出力するかどうかを指定します。

NONEを指定した場合

Webサービス側では通信ログが出力されません。

ALLを指定した場合

Webサービス側で送受信したメッセージが常に通信ログに出力されます。

HEADERを指定した場合

Webサービス側で受信したメッセージのHTTPヘッダが常に通信ログに出力されます。

ERROR_HEADER

SOAPFaultを送信する場合に，受信したメッセージのHTTPヘッダが通信ログに出力されます。

なお，受信時のメッセージを出力する場合は，HTTPのリクエスト情報も出力されます。

注意事項

ALLを指定した場合，送受信するメッセージの長さによってはjava.lang.OutOfMemoryError例外が発生することがあります。その場合はJavaVMのヒープサイズを調整してください。

ERROR_HEADER
－

12
通信ログの面数
com.cosminexus.jaxws.logger.runtime.transport.file_num
通信ログの面数を指定します。1～16の数字で指定します。
2
－

13
通信ログの容量
com.cosminexus.jaxws.logger.runtime.transport.file_size
通信ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

14
通信ログの文字エンコーディング
com.cosminexus.jaxws.logger.runtime.transport.encoding
通信ログの文字エンコーディングを指定します。J2SE 5.0でサポートされている文字エンコーディングについては，J2SE 5.0のドキュメントを参照してください。
"DEFAULT"を指定した場合，通信ログの文字エンコーディングはデフォルトのプラットフォームエンコーディングとなります。
DEFAULT
－

15
稼働ログのログ出力レベル（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.message.level
cjwsimportコマンドの稼働ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

16
稼働ログの面数（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.message.file_num
cjwsimportコマンドの稼働ログの面数を指定します。1～16の数字で指定します。
2
－

17
稼働ログの容量（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.message.file_size
cjwsimportコマンドの稼働ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
2097152
－

18
例外ログのログ出力レベル（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.exception.level
cjwsimportコマンドの例外ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

19
例外ログの面数（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.exception.file_num
cjwsimportコマンドの例外ログの面数を指定します。1～16の数字で指定します。
2
－

20
例外ログの容量（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.exception.file_size
cjwsimportコマンドの例外ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

21
保守ログの出力（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.maintenance.level
cjwsimportコマンドの保守ログを出力するかどうかを指定します。

ALLを指定した場合

保守ログが出力されます。

NONEを指定した場合

保守ログが出力されません。

ALL
－

22
保守ログの面数（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.maintenance.file_num
cjwsimportコマンドの保守ログの面数を指定します。1～16の数字で指定します。
2
－

23
保守ログの容量（cjwsimport）
com.cosminexus.jaxws.logger.cjwsimport.maintenance.file_size
cjwsimportコマンドの保守ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

24
稼働ログのログ出力レベル（apt）
com.cosminexus.jaxws.logger.apt.message.level
aptコマンドの稼働ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

25
稼働ログの面数（apt）
com.cosminexus.jaxws.logger.apt.message.file_num
aptコマンドの稼働ログの面数を指定します。1～16の数字で指定します。
2
－

26
稼働ログの容量（apt）
com.cosminexus.jaxws.logger.apt.message.file_size
aptコマンドの稼働ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
2097152
－

27
例外ログのログ出力レベル（apt）
com.cosminexus.jaxws.logger.apt.exception.level
aptコマンドの例外ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

28
例外ログの面数（apt）
com.cosminexus.jaxws.logger.apt.exception.file_num
aptコマンドの例外ログの面数を指定します。1～16の数字で指定します。
2
－

29
例外ログの容量（apt）
com.cosminexus.jaxws.logger.apt.exception.file_size
aptコマンドの例外ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

30
保守ログの出力（apt）
com.cosminexus.jaxws.logger.apt.maintenance.level
aptコマンドの保守ログを出力するかどうかを指定します。

ALLを指定した場合

保守ログが出力されます。

NONEを指定した場合

保守ログが出力されません。

ALL
－

31
保守ログの面数（apt）
com.cosminexus.jaxws.logger.apt.maintenance.file_num
aptコマンドの保守ログの面数を指定します。1～16の数字で指定します。
2
－

32
保守ログの容量（apt）
com.cosminexus.jaxws.logger.apt.maintenance.file_size
aptコマンドの保守ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

33
SOAPActionがない場合の動作オプション
com.cosminexus.jaxws.fault_omit_soapaction
SOAPActionがない場合の動作オプションを指定します。

trueを指定した場合

SOAPActionヘッダがない場合，SOAPフォルトメッセージを返します。

falseを指定した場合

SOAPActionヘッダがない場合，SOAPActionヘッダの値が空文字として動作します。

true
－

34
クライアントソケットの接続タイムアウト値
com.cosminexus.jaxws.connect.timeout
クライアントソケットの接続タイムアウト値を指定します。
このプロパティで指定したタイムアウト値は，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
0～2147483647の数字（単位：ミリ秒）で指定します。0を指定した場合，タイムアウトされません。
OSのTCP接続に関連する設定を変更している場合，OSの設定値が優先されることがあります。
60000
○※

35
クライアントソケットの読み込みタイムアウト値
com.cosminexus.jaxws.request.timeout
クライアントソケットの読み込みタイムアウト値を指定します。
このプロパティで指定したタイムアウト値は，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
0～2147483647の数字（単位：ミリ秒）で指定します。0を指定した場合，タイムアウトされません。
OSのTCP接続に関連する設定を変更している場合，OSの設定値が優先されることがあります。
300000
○※

36
ベーシック認証のユーザID
javax.xml.ws.security.auth.username
HTTP接続で使用するベーシック認証のユーザIDを指定します。
このプロパティで指定したユーザIDは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
なし
○※

37
ベーシック認証のパスワード
javax.xml.ws.security.auth.password
HTTP接続で使用するベーシック認証のパスワードを指定します。
このプロパティで指定したパスワードは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
javax.xml.ws.security.auth.usernameを指定していない場合，有効になりません。
なし
○※

38
HTTPセッションの維持の有無
javax.xml.ws.session.maintain
HTTPセッションの維持の有無を指定します。

trueの場合

セッションが維持されます。

falseの場合

セッションが維持されません。

false
○※

39
ハンドラチェイン設定ファイルの厳密な検証
com.cosminexus.jaxws.validation.handlerchain.strict
ハンドラチェイン設定ファイルの検証を厳密に行うかどうかを指定します。ハンドラチェイン設定ファイルのjavaee:handler要素の子要素としてjavaee:handler-name要素が記述されていないとエラーになります。
false
－

40
HTTPリクエストに対するWSDLの発行
com.cosminexus.jaxws.security.publish_wsdl
WebサービスのURLに対して，クエリストリングが?wsdl，または?WSDLであるHTTP GETリクエストが送信された場合，そのWebサービスのWSDLを発行するかどうかを指定します。

trueを指定した場合

WSDLが発行されます。

falseを指定した場合

WSDLが発行されないで，405 Method Not Allowedが返されます。

true
－

41
HTTPリクエストに対するWebサービスの情報表示
com.cosminexus.jaxws.security.display_webservice_info
Webサービスに対して，GETによるHTTPリクエストが到着したとき，レスポンスとして，Webサービスの情報を表示するかどうかを指定します。

trueを指定した場合

そのリクエストURLに対応するWebサービスの情報が表示されます。

falseを指定した場合

405 Method Not Allowedが返されます。

false
－

42
Webサービスで発生したJava例外の伝搬
com.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTrace
Webサービスで発生したJava例外をWebサービスクライアントに伝搬するかどうかを指定します。

trueを指定した場合

例外が伝搬されます。

falseを指定した場合

例外が伝搬されません。

false
－

43
ログの出力先ディレクトリ
com.cosminexus.jaxws.tool.log.directory
cjwsimportコマンド，aptコマンド，およびcjwsgenコマンドが出力するログの出力先ディレクトリを指定します。
<Cosminexusのインストール先>/jaxws/logs
－

44
プロキシサーバの認証ユーザID
com.cosminexus.jaxws.http.proxyUser
プロキシサーバの認証ユーザIDを指定します。Webサービスクライアントが，プロキシサーバを使用して外部のネットワークにあるWebサービスを呼び出す場合に，必要に応じて指定してください。
このプロパティで指定したユーザIDは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
なし
－

45
プロキシサーバの認証ユーザIDに対応するパスワード
com.cosminexus.jaxws.http.proxyPassword
プロキシサーバの認証ユーザIDに対応するパスワードを指定します。Webサービスクライアントが，プロキシサーバを使用して外部のネットワークにあるWebサービスを呼び出す場合に，必要に応じて指定してください。
このプロパティで指定したパスワードは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
なし
－

46
SSLプロトコルによる接続で使用するプロキシサーバの認証ユーザID
com.cosminexus.jaxws.https.proxyUser
SSLプロトコルによる接続で使用する，プロキシサーバの認証ユーザIDを指定します。Webサービスクライアントが，プロキシサーバを使用して外部のネットワークにあるWebサービスを呼び出す場合で，SSLプロトコルによる接続のときに，必要に応じて指定してください。
このプロパティで指定したユーザIDは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
なし
－

47
SSLプロトコルによる接続で使用するプロキシサーバの認証ユーザIDに対応するパスワード
com.cosminexus.jaxws.https.proxyPassword
SSLプロトコルによる接続で使用する，プロキシサーバの認証ユーザIDに対応するパスワードを指定します。Webサービスクライアントが，プロキシサーバを使用して外部のネットワークにあるWebサービスを呼び出す場合で，SSLプロトコルによる接続のときに，必要に応じて指定してください。このプロパティで指定したユーザIDは，Webサービス呼び出し時と，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時に適用されます。
なし
－

48
稼働ログのログ出力レベル（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.message.level
cjwsgenコマンドの稼働ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

49
稼働ログの面数（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.message.file_num
cjwsgenコマンドの稼働ログの面数を指定します。1～16の数字で指定します。
2
－

50
稼働ログの容量（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.message.file_size
cjwsgenコマンドの稼働ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
2097152
－

51
例外ログのログ出力レベル（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.exception.level
cjwsgenコマンドの例外ログのログ出力レベルを指定します。ERROR，WARN，INFO，DEBUG，NONEを指定します。各指定値に対応した出力内容については，「29.3.3　ログの重要度と出力条件」を参照してください。
INFO
－

52
例外ログの面数（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.exception.file_num
cjwsgenコマンドの例外ログの面数を指定します。1～16の数字で指定します。
2
－

53
例外ログの容量（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.exception.file_size
cjwsgenコマンドの例外ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

54
保守ログの出力（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.maintenance.level
cjwsgenコマンドの保守ログを出力するかどうか指定します。

ALLを指定した場合

保守ログが出力されます。

NONEを指定した場合

保守ログが出力されません。

ALL
－

55
保守ログの面数（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.maintenance.file_num
cjwsgenコマンドの保守ログの面数を指定します。1～16の数字で指定します。
2
－

56
保守ログの容量（cjwsgen）
com.cosminexus.jaxws.logger.cjwsgen.maintenance.file_size
cjwsgenコマンドの保守ログの容量を指定します。4096～16777216の数字（単位：バイト）で指定します。
16777216
－

57
soap12:binding要素のtransport属性の指定
com.cosminexus.jaxws.publish_wsdl.soap12binding
SOAP1.2の場合に，クエリストリングが?wsdlまたは?WSDLであるHTTP GETリクエストで発行されたWSDLで，wsdl:binding要素の子要素であるsoap12:binding要素のtransport属性に，http://schemas.xmlsoap.org/soap/httpを設定するかどうかを指定します。

DEFAULT

soap12:binding/@transport属性値を

"http://www.w3.org/2003/05/soap/bindings/HTTP/"にします。

WSI_BP20_TRANSPORT

soap12:binding/@transport属性値を

"http://schemas.xmlsoap.org/soap/http"にします。

DEFAULT
－

（凡例）

○：メッセージコンテキストとして設定できることを示します。

－：メッセージコンテキストとして設定できないことを示します。

注※

メッセージコンテキストへの指定が有効になるのはWebサービス呼び出し時だけで，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時には適用されません。

メタデータ取得時にベーシック認証の情報を設定する場合は，共通定義ファイルまたはプロセス別の定義ファイルに記述するか，別途WSDLをローカルマシンにダウンロードして使用してください（ローカルマシンにあるWSDLを使用する場合は，メタデータ取得時にリモートマシンへの接続が発生しません）。WSDLから別途インポートされるWSDLがある場合は，インポートされるWSDLもローカルマシン上にダウンロードしてください。

(4)　設定を変更する場合

Webサービス側の設定を変更する場合

プロセス別の定義ファイルを使用していないすべてのJ2EEサーバを停止してから，共通定義ファイルの設定を変更してください。プロセス別の定義ファイルについては，「10.1.3　プロセス別の定義ファイルの設定」を参照してください。

ログ関連の設定を変更する場合，必要に応じてログを退避してから設定を変更してください。

Webサービスクライアント側の設定を変更する場合

すべてのJ2EEサーバ（WebサービスクライアントをJ2EEアプリケーションとした場合），またはすべてのJavaアプリケーションを停止してから，共通定義ファイルの設定を変更してください。

ログ関連の設定を変更する場合，必要に応じてログを退避してから設定を変更してください。

10.1.3　プロセス別の定義ファイルの設定

プロセス別に固有の定義をする場合に，プロセス別の定義ファイルを作成します。

プロセス別の定義ファイルのファイル名，および保存先のディレクトリ名は任意です。システムプロパティで保存先のパスを指定することで，プロセス別の定義が有効になります。プロセス別の定義ファイルの指定例を次に示します。

com.cosminexus.jaxws.confpath=d:/tmp/example.properties

プロセス別の定義を変更する場合，対象としているプロセス（J2EEアプリケーションまたはJavaアプリケーション）を停止してから，プロセス別の定義ファイルの定義を変更してください。

ログ関連の定義を変更する場合，必要に応じてログを退避してから，定義を変更してください。

10.2　JAX-WSエンジンの動作

CosminexusのJAX-WSエンジンの動作，およびCosminexusのJAX-WSエンジンのサポート範囲について説明します。

＜この節の構成＞

10.2.1　JAX-WSエンジンの動作とサポート範囲

10.2.2　ディスカバリとディスパッチ

10.2.1　JAX-WSエンジンの動作とサポート範囲

Webサービス側とWebサービスクライアント側でやり取りされるSOAPメッセージは，JAX-WSエンジンの動作によってマーシャル／アンマーシャルされます。

ここでは，Webサービス側およびWebサービスクライアント側のJAX-WSエンジンとサポート範囲について説明します。

＜この項の構成＞

(1)　Webサービス側のJAX-WSエンジンの動作とサポート範囲

(2)　Webサービスクライアント側のJAX-WSエンジンの動作とサポート範囲

(3)　配列またはjava.util.Listを利用する場合の注意事項

(1)　Webサービス側のJAX-WSエンジンの動作とサポート範囲

Webサービス側のJAX-WSエンジンの動作について説明し，Webサービスを利用するWebサービスクライアントのサポート範囲について示します。

(a)　Webサービス側のJAX-WSエンジンの動作

Webサービス側のJAX-WSエンジンは，次に示すような流れで動作します。

Webサービスクライアント側からPOST HTTPメソッドによってSOAP要求メッセージを受け付け，アンマーシャルしてJavaオブジェクトに変換する。

対象となるWebサービス実装クラスまたはプロバイダ実装クラスを見つけ出し（ディスカバリ），オペレーションに対応するメソッドを呼び出す（ディスパッチ）。

対象となるWebサービス実装クラスまたはプロバイダ実装クラスからSOAP応答メッセージやフォルトメッセージを表現するJavaオブジェクトを受け取り，マーシャルしてSOAP応答メッセージまたはフォルトメッセージとして呼び出し元に返す。

ディスカバリとディスパッチについては，「10.2.2　ディスカバリとディスパッチ」を参照してください。

また，Webサービス側のJAX-WSエンジンは，GET HTTPメソッドによってWebサービスのメタデータであるWSDLを要求された場合，WARファイルにWSDLがなければ自動的に生成して返します。メタデータの発行については，「10.6　メタデータの発行」を参照してください。

なお，POSTでもGETでもないHTTPメソッドでWebサービス側のJAX-WSエンジンが呼び出された場合，HTTPステータスコード 405 Method Not Allowedを返します。

(b)　Webサービス側のJAX-WSエンジンのサポート範囲

Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係について説明します。

Webサービス実装クラスの場合

Webサービス実装クラスの場合の，Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係を次に示します。

図10-1　Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係（Webサービス実装クラスの場合）

Webサービス側のJAX-WSエンジンが受信できるメッセージ，および接続元のWebサービスクライアントの条件を次に示します。

CosminexusのJAX-WS機能で動作するWebサービスクライアント
CosminexusのJAX-WS機能が提供しているコマンドで開発し，CosminexusのJAX-WS機能で動作するWebサービスクライアントを利用できます。接続先のCosminexusのJAX-WS機能が以前のバージョンの場合，そのバージョンでサポートしている機能だけを使用できます。

SOAP通信基盤で動作する，RPC形態のSOAPアプリケーションのクライアントSOAPアプリケーション開発支援機能で開発し，SOAP通信基盤で動作するRPC形態のSOAPアプリケーションのクライアントを利用できます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは，07-10以降である必要があります。また，この場合のWebサービスは，SOAP通信基盤のJava2WSDLコマンドで生成した，document/literal形式のWSDLを起点として開発している必要があります。

そのほかのWebサービスクライアント
CosminexusのJAX-WS機能で動作するWebサービスが発行するメタデータ（WSDL）をサポートし，WS-I Basic Profile 1.1，およびAttachments Profile 1.0を適用した次のどれかの仕様に従ったSOAPメッセージ※を送受信できるWebサービスクライアントを利用できます。

SOAP 1.1仕様

SOAP 1.2仕様

SwA仕様（wsi:swaRef形式の添付ファイルを利用する場合）

MTOM/XOP仕様（MTOM/XOP仕様形式の添付ファイルを利用する場合）

WSDLのサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

注※

標準仕様の性質から，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用したSOAP 1.1仕様，SOAP 1.2仕様，SwA仕様，またはMTOM/XOP仕様でもまだあいまいな部分が残ります。したがって，相互接続性について十分に検証してから運用してください。

プロバイダ実装クラスの場合

プロバイダ実装クラスの場合の，Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係を次に示します。

図10-2　Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係（プロバイダ実装クラスの場合）

Webサービス側のJAX-WSエンジンが受信できるメッセージ，および接続元のWebサービスクライアントの条件を次に示します。

CosminexusのJAX-WS機能で動作するWebサービスクライアント
CosminexusのJAX-WS機能が提供しているAPIで開発し，CosminexusのJAX-WS機能で動作するWebサービスクライアントを利用できます。接続先のCosminexusのJAX-WS機能が以前のバージョンの場合，そのバージョンでサポートしている機能だけを使用できます。

CosminexusのJAX-WS機能で動作するディスパッチベースのWebサービスクライアント

SAAJ 1.2仕様を利用したSOAPアプリケーションのクライアント
SOAPアプリケーション開発支援機能で開発し，SOAP通信基盤で動作するSAAJ 1.2仕様を利用したSOAPアプリケーションのクライアントを利用できます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは，07-10以降である必要があります。また，SOAPアプリケーション開発支援機能とCosminexusのJAX-WS機能の両方でサポートする範囲のSOAPメッセージを送受信するSOAPアプリケーションである必要があります。

そのほかのWebサービスクライアント
WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用した，次のどれかの仕様に従ったSOAPメッセージ※を送受信できるWebサービスクライアントを利用できます。

SOAP 1.1仕様

SOAP 1.2仕様

SwA仕様（wsi:swaRef形式の添付ファイルを利用する場合）

注※

標準仕様の性質から，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用したSOAP 1.1仕様，SOAP 1.2仕様，またはSwA仕様でもまだあいまいな部分が残ります。したがって，相互接続性について十分に検証してから運用してください。プロバイダ実装クラスの場合，送受信できるSOAPメッセージの自由度が大きくなるため，特に注意してください。

(2)　Webサービスクライアント側のJAX-WSエンジンの動作とサポート範囲

Webサービスクライアント側のJAX-WSエンジンの動作について説明し，Webサービスクライアントから利用できるWebサービスのサポート範囲について示します。

(a)　Webサービスクライアント側のJAX-WSエンジンの動作

Webサービスクライアント側のJAX-WSエンジンは，次に示すような流れで動作します。

Webサービスクライアントから，JAX-WS APIを介してSOAP要求メッセージを表現するJavaオブジェクトを受け取る。

受け取ったJavaオブジェクトをマーシャルして，SOAP要求メッセージとして送信する。

呼び出し先からSOAP応答メッセージやフォルトメッセージを受信し，アンマーシャルしてWebサービスクライアントに返す。

Webサービスクライアントは，生成されたクラスまたはJAX-WS APIを介してJAX-WSエンジンにアクセスするため，JAX-WSエンジンを意識する必要はありません。

また，生成されたクラスおよびJAX-WS APIは，JAX-WS 2.1仕様に基づくため，Webサービスクライアントの実装者は，標準仕様以外のインタフェースを考慮する必要はありません。Webサービスの呼び出し（SOAP要求メッセージの送信），およびSOAP応答メッセージおよびフォルトメッセージの受信は，標準仕様のインタフェースのサポート範囲内で行われます。

(b)　Webサービスクライアント側のJAX-WSエンジンのサポート範囲

Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係について説明します。

スタブベースのWebサービスクライアントの場合

スタブベースのWebサービスクライアントの場合の，Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係を次に示します。

図10-3　Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係（スタブベースの場合）

Webサービスクライアント側のJAX-WSエンジンが呼び出せるWebサービスの条件を次に示します。

CosminexusのJAX-WS機能が提供しているコマンドで開発したWebサービス実装クラス
CosminexusのJAX-WS機能が提供しているコマンドで開発し，JAX-WSエンジン上にデプロイされたWebサービス実装クラスを呼び出せます。接続先のCosminexusのJAX-WS機能が以前のバージョンの場合，そのバージョンでサポートしている機能だけを使用できます。

SOAP通信基盤で動作するRPC形態のSOAPアプリケーション
SOAPアプリケーション開発支援機能で開発し，SOAP通信基盤にデプロイされたRPC形態のSOAPアプリケーションを呼び出せます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは，07-10以降である必要があります。また，SOAP通信基盤のJava2WSDLコマンドで生成したdocument/literal形式のSOAPアプリケーションである必要があります。

そのほかのWebサービス
CosminexusのJAX-WS機能がサポートする範囲で記述されたWSDLをメタデータとして公開し，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用した次のどれかの仕様に従ったSOAPメッセージ※を送受信できるWebサービスクライアントを利用できます。

SOAP 1.1仕様

SOAP 1.2仕様

SwA仕様（wsi:swaRef形式の添付ファイルを利用する場合）

MTOM/XOP仕様（MTOM/XOP仕様形式の添付ファイルを利用する場合）

WSDLのサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

注※

標準仕様の性質から，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用したSOAP 1.1仕様，SOAP 1.2仕様，SwA仕様，またはMTOM/XOP仕様でもまだあいまいな部分が残ります。したがって，相互接続性について十分に検証してから運用してください。

ディスパッチベースのWebサービスクライアントの場合

ディスパッチベースのWebサービスクライアントの場合の，Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係を次に示します。

図10-4　Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係（ディスパッチベースの場合）

Webサービスクライアント側のJAX-WSエンジンが呼び出せるWebサービスの条件を次に示します。

CosminexusのJAX-WS機能が提供しているコマンドで開発したWebサービス実装クラス
CosminexusのJAX-WS機能が提供しているコマンドで開発し，JAX-WSエンジン上にデプロイされたWebサービス実装クラスを呼び出せます。CosminexusのJAX-WS機能が以前のバージョンの場合，そのバージョンでサポートしている機能だけを使用できます。

CosminexusのJAX-WS機能が提供しているコマンドで開発したプロバイダ実装クラス
CosminexusのJAX-WS機能が提供しているコマンドで開発し，JAX-WSエンジン上にデプロイされたプロバイダ実装クラスを呼び出せます。

SOAP通信基盤で動作するRPC形態のSOAPアプリケーション
SOAPアプリケーション開発支援機能で開発し，SOAP通信基盤にデプロイされたRPC形態のSOAPアプリケーションを呼び出せます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは，07-10以降である必要があります。また，SOAP通信基盤のJava2WSDLコマンドで生成したdocument/literal形式のSOAPアプリケーションである必要があります。

SOAP通信基盤で動作するメッセージング形態のSOAPアプリケーション
SOAPアプリケーション開発支援機能で開発し，バージョン07-10以降のSOAP通信基盤でデプロイしたメッセージング形態のSOAPアプリケーションのクライアントを利用できます。
SOAPアプリケーション開発支援機能とCosminexusのJAX-WS機能の両方でサポートする範囲のSOAPメッセージを送受信するSOAPアプリケーションである必要があります。

そのほかのWebサービス
CosminexusのJAX-WS機能がサポートする範囲で記述されたWSDLをメタデータとして公開し，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用した次のどれかの仕様に従ったSOAPメッセージ※を送受信できるWebサービスクライアントを利用できます。

SOAP 1.1仕様

SOAP 1.2仕様

SwA仕様（wsi:swaRef形式の添付ファイルを利用する場合）

WSDLのサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

注※

標準仕様の性質から，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用したSOAP 1.1仕様，SOAP 1.2仕様，またはSwA仕様でもまだあいまいな部分が残ります。したがって，相互接続性について十分に検証してから運用してください。WSDLをメタデータとして公開していない場合，送受信できるSOAPメッセージの自由度が大きくなるので，特に注意してください。

(3)　配列またはjava.util.Listを利用する場合の注意事項

SOAPメッセージを送信する場合，配列やjava.util.Listオブジェクトの要素数が0で空の状態と，nullである状態は区別されないので，注意してください。

「10.2.1(3)(a)　SOAPメッセージを送信する場合」および「10.2.1(3)(b)　SOAPメッセージを受信する場合」では，JAX-WSエンジンの動作について説明します。また，特にWeb サービス側もWeb サービスクライアント側もCosminexusのJAX-WS 機能を使用する場合の動作について「10.2.1(3)(c)　Webサービス側もWebサービスクライアント側もCosminexusのJAX-WS機能を使用する場合」で説明します。

説明は次のメソッドを例にします。

@WebMethod
public List<String> test( List<Integer> param )

(a)　SOAPメッセージを送信する場合

Webサービスクライアントの実装クラスが上記のメソッドを次のように呼び出した場合のリクエストメッセージについて説明します。

第1引数にnullを与えてメソッドを呼び出した

第1引数に要素数が0であるjava.util.Listの具象クラスのオブジェクトを与えてメソッドを呼び出した

この場合に，Webサービスクライアント側のJAX-WSエンジンが送信するリクエストメッセージの抜粋を次に示します。

<test/>

どちらの条件でメソッドを呼び出した場合も，paramパラメタに対応する要素はリクエストメッセージには出現しません。Webサービスの実装クラスが戻り値を返す場合のレスポンスメッセージについても同様です。

(b)　SOAPメッセージを受信する場合

次の表に示す条件のどれかが満たされている場合，「10.2.1(3)(a)　SOAPメッセージを送信する場合」で説明したメッセージを受信したWebサービスクライアントやWebサービスの実装クラスは，要素数が0で空の状態である，配列やjava.util.Listの具象クラスのオブジェクトを受け取ります。

表10-2　空の配列またはjava.util.Listの具象クラスのオブジェクトを受け取る条件

項番 | 条件
1 | Webサービスクライアントの実装クラスでjava.util.Listオブジェクトを操作する場合
2 | WSDLを起点として開発したWebサービスの実装クラスでjava.util.Listオブジェクトを操作する場合
3 | SEIを起点として開発したWebサービスの実装クラスで，WSDLのオペレーションに対応するメソッド（WebMethodアノテーションでアノテートされたメソッド）の引数に直接出現する配列やjava.util.Listを操作する場合

なお，SEIを起点として開発したWebサービス実装クラスで，WSDLのオペレーションに対応するメソッドの引数に出現するJavaBeansクラスが持つ配列やjava.util.Listのプロパティは，そのJavaBeansクラスの実装に依存します。プロパティに対応する要素がリクエストメッセージにない場合，JavaBeansクラスは，nullである配列やjava.util.Listの具象クラスのオブジェクトを受け取ります。

(c)　Webサービス側もWebサービスクライアント側もCosminexusのJAX-WS機能を使用する場合

CosminexusのJAX-WSエンジンの動作は，「10.2.1(3)(a)　SOAPメッセージを送信する場合」および「10.2.1(3)(b)　SOAPメッセージを受信する場合」で説明したとおりです。特にWebサービスクライアントおよびWebサービスの両方がCosminexus上にある場合，表10-2に示す条件を満たすWebサービスクライアントの実装クラスやWebサービスの実装クラスで，WebサービスクライアントおよびWebサービスのどちらか一方が配列やjava.util.Listオブジェクトとしてnullを送信しても，もう一方は要素数が0である配列やjava.util.Listの具象クラスを受信するので，注意してください。

10.2.2　ディスカバリとディスパッチ

JAX-WSエンジン上では，SOAPメッセージの送受信を実現するために，Webサービス実装クラスのディスカバリ，およびSOAPメッセージのディスパッチが行われます。

ここでは，Webサービス実装クラスのディスカバリ，SOAPメッセージのディスパッチ，およびフォルトと例外クラスのマッピングについて説明します。

また，インタフェースの透過性についても説明します。

＜この項の構成＞

(1)　ディスカバリ

(2)　SOAPメッセージのディスパッチ

(1)　ディスカバリ

Webサービス側のJAX-WSエンジンによって，Webサービスクライアントから要求されたWebサービス実装クラスまたはプロバイダ実装クラスが見つけ出されます。このことをディスカバリといいます。

ディスカバリでは，SOAP要求メッセージで要求されたURLから，適切なWebサービス実装クラスをマッピングする処理が行われます。ここでは，次のURLが要求された場合のマッピングについて説明します。

http://example.org/fromwsdl/TestJaxWsService

コンテキストルートを"fromwsdl"とした場合，コンテキストルートの後ろの"/TestJaxWsService"（下線部）はパス情報を表します。このパス情報を基に，Webサービス実装クラスまたはプロバイダ実装クラスがマッピングされます。

パス情報とのマッピングについて，Webサービス実装クラスの場合の例を次に示します。

図10-5　Webサービス実装クラスのディスカバリ（POJOのWebサービス）

図10-6　Webサービス実装クラスのディスカバリ（EJBのWebサービス）

Webサービス側のJAX-WSエンジンは，デプロイされているWebサービス実装クラスまたはプロバイダ実装クラスのうち，パス情報に対応するクラスを呼び出します。

POJOのWebサービスの場合，javax.jws.WebServiceアノテーションまたはjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性が，パス情報から先頭のスラッシュ（/）を取り除いた文字列に等しいものを呼び出します。

EJBのWebサービスの場合，javax.jws.WebServiceアノテーションのserviceName属性が，パス情報の先頭のスラッシュ（/）と2番目のスラッシュ（/）の間の文字列に等しく，javax.jws.WebServiceアノテーションのname属性の値が，パス情報の2番目のスラッシュ（/）より後ろの文字列に等しいものを呼び出します。

javax.jws.WebServiceアノテーションのserviceName属性は省略できるので，省略されている場合は，Webサービス実装クラスまたはプロバイダ実装クラスのクラス名（単純名）にサフィックスとして"Service"を付加した文字列が，serviceName属性の値と見なされます。また，javax.jws.WebServiceアノテーションおよびjavax.xml.ws.WebServiceProviderアノテーションのname属性は省略できるので，省略されている場合は，JSR-181仕様に基づき，Webサービス実装クラスのクラス名（単純名）がname属性の値と見なされます。

POJOのWebサービスの例でのパス情報と，呼び出されるWebサービス実装クラスの対応を示します。

パス情報がSample1Serviceの場合
Webサービス実装クラスA（org.foo.Test1.java）が呼び出されます。

パス情報がSample2Serviceの場合
Webサービス実装クラスB（org.foo.Test2.java）が呼び出されます。

パス情報がTest3Serviceの場合
Webサービス実装クラスC（org.foo.Test3.java）が呼び出されます。

EJBのWebサービスの例でのパス情報と，呼び出されるWebサービス実装クラスの対応を示します。

パス情報が/Sample1Service/Sample1の場合
EJB 1（org.foo.Test1.java）が呼び出されます。

パス情報が/Sample2Service/Test2の場合
EJB 2（org.foo.Test2.java）が呼び出されます。

パス情報が/Test3Service/Test3の場合
EJB 3（org.foo.Test3.java）が呼び出されます。

このマッピングは，cosminexus-jaxws.xmlを記述することでカスタマイズできます。次に示すcosminexus-jaxws.xmlの記述例を基に，マッピングのカスタマイズについて説明します。

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'>
   <endpoint
       name="test1"
       implementation="org.foo.Test1"
       url-pattern="/test1"
   />
   <endpoint
       name="test2"
       implementation="org.foo.Test2"
       url-pattern="/test2"
   />
   <endpoint
       name="test3"
       implementation="org.foo.Test3"
       url-pattern="/test3"
   />
</endpoints>

この例でのパス情報と，呼び出されるWebサービス実装クラスの対応を示します。

パス情報がtest1の場合
Webサービス実装クラスA（org.foo.Test1.java）が呼び出されます。

パス情報がtest2の場合
Webサービス実装クラスB（org.foo.Test2.java）が呼び出されます。

パス情報がtest3の場合
Webサービス実装クラスC（org.foo.Test3.java）が呼び出されます。

ただし，cosminexus-jaxws.xmlのurl-pattern属性と，web.xmlのurl-pattern要素は，1対1で対応している必要があります。したがって，この例のマッピングをカスタマイズした場合は，web.xmlでも記述を変更する必要があります。web.xmlの記述例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
 ...
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/test1</url-pattern>
   <url-pattern>/test2</url-pattern>
   <url-pattern>/test3</url-pattern>
 </servlet-mapping>
 ...
</web-app>

cosminexus-jaxws.xmlのカスタマイズ方法については，「10.3　cosminexus-jaxws.xmlによるカスタマイズ」を参照してください。

(2)　SOAPメッセージのディスパッチ

Webサービス側のJAX-WSエンジンでは，発見した対象がWebサービス実装クラスの場合，受信したSOAPメッセージの内容に応じてオペレーションに対応するメソッドが呼び出され，実行されます。発見した対象がプロバイダ実装クラスの場合，アンマーシャルしたSOAPメッセージはプロバイダ実装クラスが指定するオブジェクトに変換され，invoke()メソッドが呼び出さます。

このことをSOAPメッセージのディスパッチといいます。

SOAPメッセージは，WS-I Basic Profile 1.1およびAttachments Profile 1.0を適用した，次のどれかの仕様に準拠していなければなりません。

SOAP 1.1仕様

SOAP 1.2仕様

SwA仕様（wsi:swaRef形式の添付ファイルを利用する場合）

MTOM/XOP仕様（MTOM/XOP仕様形式の添付ファイルを利用する場合）

SOAP 1.1仕様の場合のSOAPメッセージの例を次に示します。なお，添付ファイルを付けないSOAPメッセージの例を示します。添付ファイル付きSOAPメッセージについては，「18.4　添付ファイル付きSOAPメッセージ（wsi:swaRef形式）」を参照してください。

POST http://sample.org/fromjava/AddNumbersImplService HTTP/1.1
SOAPAction: ""
Content-Type: text/xml;charset="utf-8"
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:add xmlns:ns2="http://sample.com/">
     <arg0>256</arg0>
     <arg1>103</arg1>
   </ns2:add>
 </S:Body>
</S:Envelope>

メッセージ先頭にHTTPリクエストライン（POSTの行）およびHTTPリクエストのヘッダフィールド（SOAPAction，Content-Type，およびAcceptの行）が続きます。そのあとに空白行が入り，SOAPメッセージが続きます。このSOAPメッセージの内容を基に，適切なSEIが呼び出されて処理されます。

HTTPリクエストのヘッダフィールドには，空文字（""）が設定されたSOAPActionヘッダが必要です。SOAPActionヘッダに値が設定されていたとしても，JAX-WSエンジンによって無視されます。また，SOAPActionヘッダがHTTPリクエストに含まれていない場合の動作については，動作定義ファイルの設定によって異なります。動作定義ファイル設定については，「10.1　動作定義ファイル」を参照してください。

SOAP 1.2仕様の場合のSOAPメッセージの例を次に示します。なお，添付ファイルを付けないSOAPメッセージの例を示します。添付ファイル付きSOAPメッセージについては，「18.4　添付ファイル付きSOAPメッセージ（wsi:swaRef形式）」を参照してください。

POST http://sample.org/fromjava/AddNumbersImplService HTTP/1.1
Content-Type: application/soap+xml;charset="utf-8";action=""
Accept: application/soap+xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns2:add xmlns:ns2="http://sample.com/">
     <arg0>256</arg0>
     <arg1>103</arg1>
   </ns2:add>
 </S:Body>
</S:Envelope>

SOAP 1.2仕様の場合，SOAPActionヘッダは，HTTPリクエストのヘッダフィールドに出現しても無視されます。また，actionパラメタは省略できます。

10.3　cosminexus-jaxws.xmlによるカスタマイズ

cosminexus-jaxws.xmlは，POJOのWebサービスのURLとWebサービス実装クラスまたはプロバイダ実装クラスのマッピングをカスタマイズするためのDDです。Webサービス実装クラスまたはプロバイダ実装クラスを見つけ出す処理（ディスカバリ）をカスタマイズしたい場合，または複数のURLに対して単一のWebサービス実装クラスおよびプロバイダ実装クラスを割り当てたい場合に作成します。

マッピングをカスタマイズしない場合，cosminexus-jaxws.xmlは不要です。また，cosminexus-jaxws.xmlをEJB JARファイルに含めても，EJBのWebサービスには適用されません。

マッピングのカスタマイズについては，「10.2.2(1)　ディスカバリ」を参照してください。

マッピングをカスタマイズする場合，cosminexus-jaxws.xmlが正しく記述されているか注意してください。cosminexus-jaxws.xmlはWebサービスの初期化時に読み込まれます。したがって，cosminexus-jaxws.xmlの読み込みでエラーが発生した場合，Webサービスの初期化に失敗します。Webサービスの初期化については，「10.9(1)　Webサービスの初期化」を参照してください。

ここでは，cosminexus-jaxws.xmlのファイル名と格納先，および書式について説明します。

＜この節の構成＞

10.3.1　cosminexus-jaxws.xmlのファイル名と格納先

10.3.2　cosminexus-jaxws.xmlの書式

10.3.1　cosminexus-jaxws.xmlのファイル名と格納先

cosminexus-jaxws.xmlは，WARファイルに含めます。cosminexus-jaxws.xmlを含める場合は，WEB-INFディレクトリ直下に，cosminexus-jaxws.xmlという名称で含めてください。ファイル名と格納先を次に示します。

<WARのルート>/WEB-INF/cosminexus-jaxws.xml

10.3.2　cosminexus-jaxws.xmlの書式

cosminexus-jaxws.xmlのフォーマットとエンコーディングを次に示します。このフォーマットとエンコーディング以外で記述した場合の動作は保証されません。

フォーマット：XML バージョン 1.0

エンコーディング：UTF-8

cosminexus-jaxws.xmlで指定できる要素を次の表に示します。

表10-3　cosminexus-jaxws.xmlの要素一覧

要素名 | 指定個数 | 説明
jaxwsdd:endpoints要素 | 1個 | ルート要素です。
┗ | jaxwsdd:endpoint要素 | 1個以上 | URLと，Webサービス実装クラスまたはプロバイダ実装クラスのマッピングを指定します。

各要素および属性について説明します。

＜この項の構成＞

(1)　jaxwsdd:endpoints要素（cosminexus-jaxws.xml）

(2)　jaxwsdd:endpoint要素（cosminexus-jaxws.xml）

(3)　cosminexus-jaxws.xml使用時の設定例

(1)　jaxwsdd:endpoints要素（cosminexus-jaxws.xml）

jaxwsdd:endpoints要素は，cosminexus-jaxws.xmlのルート要素です。属性は持ちません。

(2)　jaxwsdd:endpoint要素（cosminexus-jaxws.xml）

jaxwsdd:endpoint要素には，URLと，Webサービス実装クラスまたはプロバイダ実装クラスのマッピングを記述します。1個のjaxwsdd:endpoint要素に1個のマッピングを記述します。Webサービスが複数のポートを持つような場合（一つのWebサービスが複数のURLで提供される場合）や，同じWARファイル内に複数のWebサービスがある場合は，ポートやWebサービスに対応した数のjaxwsdd:endpoint要素を記述する必要があります。

jaxwsdd:endpoint要素の属性の一覧を次の表に示します。

表10-4　jaxwsdd:endpoint要素の属性一覧

項番 | 属性名 | 必須 | 説明
1 | name | ○ | jaxwsdd:endpoint要素を区別するための名前を指定します。
2 | implementation | ○ | Webサービス実装クラスまたはプロバイダ実装クラスを指定します。
3 | port | × | Webサービス実装クラスまたはプロバイダ実装クラスと対応づけるポートを指定します。javax.jws.WebServiceアノテーション，またはjavax.xml.ws.WebServiceProviderアノテーションの設定よりも優先されます。一つのWebサービス実装クラスまたはプロバイダ実装クラスを複数のURLにマッピングする場合に指定します。
4 | url-pattern | ○ | Webサービス実装クラスまたはプロバイダ実装クラスと対応づけるURLを指定します。web.xmlのurl-pattern要素と対応しています。

（凡例）

○：指定が必須であることを示します。

×：指定が必須でないことを示します。

(a)　name属性（cosminexus-jaxws.xml）

jaxwsdd:endpoint要素を区別するための名前を空文字列以外の文字列（Javaで扱える文字列）で指定します。

空文字列を指定した場合，デプロイ時にKDJW20031-Eのメッセージが出力されます。同じcosminexus-jaxws.xml内では一意の値にする必要があります。同じname属性値を持つjaxwsdd:endpoint要素が複数ある場合，KDJW40007-Wのメッセージが出力されます。

(b)　implementation属性（cosminexus-jaxws.xml）

javax.jws.WebServiceアノテーションを持つクラスのクラス名を指定します。

空文字列を指定した場合，デプロイ時にKDJW20031-Eのメッセージが出力されます。また，存在しないクラスを指定した場合，デプロイ時にKDJW20014-Eのメッセージが出力されます。

複数のURLに対して同じWebサービス実装クラスまたはプロバイダ実装クラスをマッピングする場合は，port属性が一意になるように記述してください。特にWebサービス実装クラスの場合，port属性の記述がないときやport属性値が一意でないとき，メタデータとして不正なWSDLが発行されます。

(c)　port属性（cosminexus-jaxws.xml）

メタデータとして発行するWSDLのポート名（wsdl:port要素のname属性の値）のQNameを指定します。メタデータの発行については，「10.6　メタデータの発行」を参照してください。

この属性は省略できます。属性を省略した場合や空文字列が指定された場合，implementation属性で指定したクラスのjavax.jws.WebServiceアノテーション，またはjavax.xml.ws.WebServiceProviderアノテーションのportName属性の値が使用されます。portName属性が省略されている場合は，JSR-181仕様に従って，Webサービス実装クラスまたはプロバイダ実装クラスの単純名にサフィックスとして"Port"を付加した文字列が使用されます。

複数のURLに対して同じWebサービス実装クラスをマッピングする場合，port属性を指定しないとメタデータが正常に発行されません。

(d)　url-pattern属性（cosminexus-jaxws.xml）

implementation属性で指定したWebサービス実装クラスまたはプロバイダ実装クラスと対応づけるパス情報を指定します。url-pattern属性で指定した値に基づいて，ディスカバリが行われます。ディスカバリについては，「10.2.2(1)　ディスカバリ」を参照してください。

パス情報は，明確な値でなければなりません（アスタリスクなどのワイルドカードは使用できません）。また，web.xmlのurl-pattern要素の値と1対1になるように指定する必要があります。

例えば，url-pattern属性に"/path1"を指定した場合，"/path1"へのリクエストに対して，implementation属性で指定したクラスがマッピングされます。

同じcosminexus-jaxws.xml内では一意の値にする必要があります。同じurl-pattern属性値を持つjaxwsdd:endpoint要素が複数ある場合，KDJW40009-Wのメッセージが出力されます。この場合，同じurl-pattern属性値を持つjaxwsdd:endpoint要素の中で，最初のjaxwsdd:endpoint要素に記述されたマッピングだけが有効になります。

(3)　cosminexus-jaxws.xml使用時の設定例

次のWebサービスに対応したDDの記述例を示します。

表10-5　Webサービス実装クラスと対応するURLの例

項番 | Webサービス実装クラス | URL
1 | com.sample.AddNumbersImplA | /test1
2 | com.sample.AddNumbersImplB | /test2，/test3

web.xmlの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;fromwsdl&quot;</description>
 <display-name>Sample_web_service_fromwsdl</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/test1</url-pattern>
   <url-pattern>/test2</url-pattern>
   <url-pattern>/test3</url-pattern>
 </servlet-mapping>
</web-app>

cosminexus-jaxws.xmlの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'>
   <endpoint
       name="test1"
       implementation="com.sample.AddNumbersImplA"
       url-pattern="/test1"
   />
   <endpoint
       name="test2"
       implementation="com.sample.AddNumbersImplB"
       url-pattern="/test2"
       port="{http://sample.com}port1"
   />
   <endpoint
       name="test3"
       implementation="com.sample.AddNumbersImplB"
       url-pattern="/test3"
       port="{http://sample.com}port2"
   />
</endpoints>

10.4　フォルトと例外の処理

JAX-WSエンジンは，Webサービス側およびWebサービスクライアント側とも，JAX-WS 2.1仕様に基づいてフォルトと例外をバインディングします。POJOとEJBの両方のWebサービスで動作します。

JAX-WSエンジンでのフォルトおよび例外の処理について説明します。

＜この節の構成＞

10.4.1　Webサービス側のフォルトおよび例外の処理

10.4.2　Webサービスクライアント側のフォルトの処理

10.4.3　Java例外の伝搬

10.4.4　例外をフォルトにバインディングする場合のHTTPステータスコード

10.4.5　エラーページをカスタマイズする場合の注意事項

10.4.1　Webサービス側のフォルトおよび例外の処理

Webサービス側のJAX-WSエンジンでのフォルトおよび例外の処理について説明します。なお，Webサービスがプロバイダ実装クラスで実装されている場合，この処理は実行されません。

＜この項の構成＞

(1)　サービス固有例外の処理

(2)　ランタイム例外のバインディング

(3)　javax.xml.ws.WebServiceExceptionのバインディング

(4)　javax.xml.ws.soap.SOAPFaultExceptionのバインディング

(1)　サービス固有例外の処理

WSDLのフォルトとJavaの例外は，JAX-WS 2.1仕様に従ってマッピングされます。WSDLのフォルトとJavaの例外クラスのマッピング例を次の図に示します。

図10-7　WSDLのフォルトとJavaの例外クラスのマッピング例

マッピング例では，UserDefinedFaultフォルトがフォルトbean（com.example.sample.UserDefinedFault）と，ラッパ例外クラス（com.example.sample.UserDefinedException）にマッピングされていることがわかります。

フォルトと例外クラスのマッピングについては，「12.1.7　フォルトから例外クラスへのマッピング」，および「13.1.7　Javaのラッパ例外クラスからフォルトへのマッピング」を参照してください。

Webサービス側のJAX-WSエンジンによって，ラッパ例外クラスは次の表のようにSOAPフォルトにバインディングされます。

表10-6　ラッパ例外クラスのバインディング

項番
SOAPフォルトの子要素
内容

SOAP 1.1仕様
SOAP 1.2仕様

1
faultcode
soapenv12:Code

SOAP 1.1仕様

QName soapenv:serverで固定です。

SOAP 1.2仕様

soapenv12:Receiverです。

2
faultstring
soapenv12:Reason
ラッパ例外クラスに対してgetMessageメソッドを実行した結果になります。

3
faultactor
soapenv12:Role
ありません。

4
detail
soapenv12:Detail
フォルトbeanをマーシャルした結果になります。

ラッパ例外クラスをWebサービス実装クラスでスローする例を示します。

//フォルトbeanを生成し，マーシャルすべき情報を設定する
UserDefinedFault fault = new UserDefinedFault();
fault.additionalInfo = 257;
fault.detail = "Failed by some reason.";
fault.message = "Contact your administrator.";

//ラッパ例外クラスをスロー
throw new UserDefinedException(
 "Something happens.", fault );

送信されるSOAP 1.1仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S= "http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <faultcode>ns2:Server</faultcode>
     <faultstring>Something happens.</faultstring>
     <detail>
       <ns2:UserDefinedFault xmlns:ns2="http://example.com/sample">
         <additionalInfo>257</additionalInfo>
         <detail>Failed by some reason.</detail>
         <message>Contact your administrator.</message>
       </ns2:UserDefinedFault>
     </detail>
   </ns2:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

送信されるSOAP 1.2仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns3:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <ns3:Code>
       <ns3:Value>ns3:Receiver</ns3:Value>
     </ns3:Code>
     <ns3:Reason>
       <ns3:Text xml:lang="ja">Something happens.</ns3:Text>
     </ns3:Reason>
     <ns3:Detail>
       <env:UserDefinedFault xmlns:env="http://example.com/sample">
         <additionalInfo>257</additionalInfo>
         <detail>Failed by some reason.</detail>
         <message>Contact your administrator.</message>
       </env:UserDefinedFault>
     </ns3:Detail>
   </ns3:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

(2)　ランタイム例外のバインディング

Webサービス実装クラス内でjavax.xml.ws.WebServiceException以外のランタイム例外がスローされた場合，Webサービス側のJAX-WSエンジンによって，ランタイム例外がSOAPフォルトにバインディングされます（JAX-WS 2.1仕様に基づいてバインディング）。

ランタイム例外のバインディングの例を次の表に示します。

表10-7　ランタイム例外のバインディング

項番
SOAPフォルトの子要素
内容

SOAP 1.1仕様
SOAP 1.2仕様

1
faultcode
soapenv12:Code

SOAP 1.1仕様

QName soapenv:serverで固定です。

SOAP 1.2仕様

soapenv12:Receiverです。

2
faultstring
soapenv12:Reason
ランタイム例外に対してgetMessageメソッドを実行した結果になります。

3
faultactor
soapenv12:Role
ありません。

4
detail
soapenv12:Detail
ありません。

ランタイム例外のスローの例を示します。

//ランタイム例外をスロー
throw new IllegalArgumentException( "Something illegal." );

送信されるSOAP 1.1仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S= "http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <faultcode>ns2:Server</faultcode>
     <faultstring>Something illegal.</faultstring>
   </ns2:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

送信されるSOAP 1.2仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns3:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <ns3:Code>
       <ns3:Value>ns3:Receiver</ns3:Value>
     </ns3:Code>
     <ns3:Reason>
       <ns3:Text xml:lang="ja">Something illegal.</ns3:Text>
     </ns3:Reason>
   </ns3:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

(3)　javax.xml.ws.WebServiceExceptionのバインディング

Webサービス実装クラスまたはプロバイダ実装クラス内でjavax.xml.ws.soap.SOAPFaultException以外のjavax.xml.ws.WebServiceExceptionがスローされた場合，Webサービス側のJAX-WSエンジンによって，javax.xml.ws.WebServiceExceptionがSOAPフォルトにバインディングされます（JAX-WS 2.1仕様に基づいてバインディング）。

javax.xml.ws.WebServiceExceptionのバインディングの例を次の表に示します。

表10-8　javax.xml.ws.WebServiceExceptionのバインディング

項番
SOAPフォルトの子要素
内容

SOAP 1.1仕様
SOAP 1.2仕様

1
faultcode
soapenv12:Code

SOAP 1.1仕様

QName soapenv:serverで固定です。

SOAP 1.2仕様

soapenv12:Receiverです。

2
faultstring
soapenv12:Reason
javax.xml.ws.soap.SOAPFaultExceptionに対してgetMessageメソッドを実行した結果になります。

3
faultactor
soapenv12:Role
ありません。

4
detail
soapenv12:Detail
ありません。

javax.xml.ws.WebServiceExceptionのスローの例を示します。

//javax.xml.ws.WebServiceExceptionをスロー
throw new javax.xml.ws.WebServiceException( "Web Service Exception." );

送信されるSOAP 1.1仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <faultcode>ns2:Server</faultcode>
     <faultstring>Web Service Exception.</faultstring>
   </ns2:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

送信されるSOAP 1.2仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns3:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <ns3:Code>
       <ns3:Value>ns3:Receiver</ns3:Value>
     </ns3:Code>
     <ns3:Reason>
       <ns3:Text xml:lang="ja">Something illegal.</ns3:Text>
     </ns3:Reason>
   </ns3:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

(4)　javax.xml.ws.soap.SOAPFaultExceptionのバインディング

Webサービス実装クラスまたはプロバイダ実装クラス内で，javax.xml.ws.soap.SOAPFaultExceptionがスローされた場合，Webサービス側のJAX-WSエンジンによって，javax.xml.ws.soap.SOAPFaultExceptionがSOAPフォルトにバインディングされます（JAX-WS 2.1仕様に基づいてバインディング）。

javax.xml.ws.soap.SOAPFaultExceptionのバインディングの例を次の表に示します。

表10-9　javax.xml.ws.soap.SOAPFaultExceptionのバインディング

項番
SOAPフォルトの子要素
内容

SOAP 1.1仕様
SOAP 1.2仕様

1
faultcode
soapenv12:Code

SOAP 1.1仕様

getFault().getFaultCodeAsQNameメソッドの結果になります。

ただし，nullの場合はQName soapenv:serverで固定です。

SOAP 1.2仕様

soapenv12:Sender固定です。soapenv12:Codeの子要素のsoapenv12:Subcodeが結果を持ちます。

2
faultstring
soapenv12:Reason
getFaultReasonTextメソッドの結果になります。
ただし，nullの場合はgetMessageメソッドを実行した結果になります。

3
faultactor
soapenv12:Role
getFault().getFaultRoleメソッドの結果になります。
ただし，nullの場合はありません。

4
detail
soapenv12:Detail
getFault().getDetailメソッドを実行した結果をマーシャルした結果になります。
ただし，nullの場合はありません。

SOAP 1.1仕様の場合の，javax.xml.ws.soap.SOAPFaultExceptionのスローの例を示します。

SOAPFault soapFault = ...;
soapFault.setFaultCode( new QName( "http://sample.org", "UserDefined" ) );
soapFault.setFaultActor( "http://example.com/sample" );
soapFault.setFaultString( "SOAPFaultException happens." );
Detail detail = soapFault.addDetail();
SOAPElement soapElement = detail.addChildElement( new QName( "", "detailTest" ) );
soapElement.addTextNode( "TEST." );

//javax.xml.ws.soap.SOAPFaultExceptionをスロー
throw new SOAPFaultException( soapFault );

SOAP 1.2仕様の場合の，javax.xml.ws.soap.SOAPFaultExceptionのスローの例を示します。

SOAPFactory soapFactory = SOAPFactory.newInstance( SOAPConstants.SOAP_1_2_PROTOCOL );
SOAPFault soapFault = soapFactory.createFault();
soapFault.appendFaultSubcode( new QName( "http://sample.org", "UserDefined" ) );
soapFault.setFaultRole( "http://example.com/sample" );
soapFault.addFaultReasonText( "SOAPFaultException happens.", Locale.getDefault() );
Detail detail = soapFault.addDetail();
SOAPElement soapElement = detail.addChildElement( new QName( "", "detailTest" ) );
soapElement.addTextNode( "TEST." );

//javax.xml.ws.soap.SOAPFaultExceptionをスロー
throw new SOAPFaultException( soapFault );

送信されるSOAP 1.1仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
    <faultcode xmlns:ns0="http://sample.org">ns0:UserDefined</faultcode>
    <faultstring>SOAPFaultException happens.</faultstring>
    <faultactor>http://example.com/sample</faultactor>
    <detail><detailTest>TEST.</detailTest></detail>
   </ns2:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

送信されるSOAP 1.2仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S= "http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns3:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <ns3:Code>
       <ns3:Value>ns3:Sender</ns3:Value>
       <ns3:Subcode>
         <ns3:Value xmlns:ns0="http://sample.org">ns0:UserDefined</ns3:Value>
       </ns3:Subcode>
     </ns3:Code>
     <ns3:Reason>
       <ns3:Text xml:lang="ja">SOAPFaultException happens.</ns3:Text>
     </ns3:Reason>
     <ns3:Role>http://example.com/sample</ns3:Role>
     <ns3:Detail>
       <env:Detail xmlns:env="http://www.w3.org/2003/05/soap-envelope">
         <detailTest>TEST.</detailTest>
       </env:Detail>
     </ns3:Detail>
   </ns3:Fault>
 </S:Body>
</S:Envelope>

注

SOAPフォルトメッセージには，SOAP 1.1仕様とSOAP 1.2仕様の名前空間定義が必ず含まれます。

10.4.2　Webサービスクライアント側のフォルトの処理

wsdl:fault要素に対応するSOAPフォルト，およびwsdl:fault要素に対応しないSOAPフォルトについてそれぞれ説明します。

wsdl:fault要素に対応するSOAPフォルト
Webサービスクライアント側のJAX-WSエンジンが，「10.4.1(1)　サービス固有例外の処理」に従ってマーシャルされたSOAPフォルトメッセージを受け取った場合，元のフォルトbeanとラッパ例外にアンマーシャルされ，Webサービスクライアントにスローされます。つまり，Webサービスでスローされたサービス固有例外は，透過的にWebサービスクライアントへ送信されます（この動作は，JAX-WS 2.1仕様に従っています）。

wsdl:fault要素に対応しないSOAPフォルト
Webサービスクライアント側のJAX-WSエンジンが，wsdl:fault要素に対応しないSOAPフォルトメッセージを受け取った場合，javax.xml.ws.soap.SOAPFaultExceptionにアンマーシャルされ，Webサービスクライアントにスローされます（この動作は，JAX-WS 2.1仕様に従っています）。

10.4.3　Java例外の伝搬

WebサービスおよびWebサービスクライアントの両方が，CosminexusのJAX-WSエンジン上にデプロイされている場合，Webサービスで発生したJava例外をWebサービスクライアントに伝搬できます。POJOとEJBの両方のWebサービスで動作します。ここでは，Java例外の伝搬方法と動作について説明します。

注意事項

Java例外の伝搬は，SOAP 1.1仕様や，JAX-WS 2.1仕様で定められた機能ではないため，CosminexusのJAX-WS機能以外のWebサービス基盤製品と接続した場合に，意図しない動作をしたり，通信が失敗したりするおそれがあります。また，スタックトレースには，Webサービスの実装の内部情報（システムの設定情報や個人情報を扱っているのであればそのような情報など）も含まれる可能性があります。したがって，実運用でこの機能を使用することを想定して，Webサービスを実装することはお勧めしません。開発時に必要に応じて使用してください。

＜この項の構成＞

(1)　Java例外の伝搬方法

(2)　Java例外の伝搬時の動作（Webサービス側）

(3)　Java例外の伝搬時の動作（Webサービスクライアント側）

(1)　Java例外の伝搬方法

Webサービスで発生したJava例外を伝搬するには，動作定義ファイルでcom.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTraceプロパティにtrueを設定します。

com.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTraceプロパティについては，「10.1.2　共通定義ファイルの設定項目」を参照してください。

(2)　Java例外の伝搬時の動作（Webサービス側）

Webサービス側でのJava例外の伝搬時に，detail要素，またはsoapenv12:Detail要素の子要素として，CosminexusのJAX-WS機能独自の{http://jax-ws.dev.java.net/}exception要素が追加され，発生したJava例外の情報がマーシャルされます。

ランタイム例外のスローの例を示します。

//ランタイム例外をスロー
catch( NullPointerException ){
 throw new IllegalArgumentException( "Something illegal.", e );
}

このようにスローされた場合に，送信されるSOAP 1.1仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S= "http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <faultcode>ns2:Server</faultcode>
     <faultstring>Something illegal.</faultstring>
     <detail>
       <ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/"
           class="java.lang.IllegalArgumentException"
           note="To disable this feature, set com.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTrace property to false">
         <message>Something illegal</message>
         <ns2:stackTrace>
           <ns2:frame class="com.example.sample.TestJaxWsImpl" file="TestJaxWsImpl.java" line="32" method="jaxWsTest1"/>
           <ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="native" method="invoke0"/>
           <ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="39" method="invoke"/>
 ...
           <ns2:frame class="java.lang.Thread" file="Thread.java" line="595" method="run"/>
         </ns2:stackTrace>
         <ns2:cause class="java.lang.NullPointerException"
             note="To disable this feature, set com.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTrace property to false">
           <message>Something null.</message>
           <ns2:stackTrace>
             <ns2:frame class="com.example.sample.TestJaxWsImpl" file="TestJaxWsImpl.java" line="32" method="jaxWsTest1"/>
             <ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="native" method="invoke0"/>
 ...
             <ns2:frame class="sun.reflect.DelegatingMethodAccessorImpl" file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/><ns2:frame class="java.lang.reflect.Method" file="Method.java" line="585" method="invoke"/>
             <ns2:frame class="org.apache.tomcat.util.threads.ThreadPool$ControlRunnable" file="ThreadPool.java" line="1510" method="run"/>
             <ns2:frame class="java.lang.Thread" file="Thread.java" line="595" method="run"/>
           </ns2:stackTrace>
         </ns2:cause>
       </ns2:exception>
     </detail>
   </ns2:Fault>
 </S:Body>
</S:Envelope>

送信されるSOAP 1.2仕様のSOAPフォルトメッセージの例を示します（実際は，改行およびインデントはありません）。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
 <S:Body>
   <ns3:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
     <ns3:Code>
       <ns3:Value>ns3:Receiver</ns3:Value>
     </ns3:Code>
     <ns3:Reason>
       <ns3:Text xml:lang="ja">Something illegal.</ns3:Text>
     </ns3:Reason>
     <ns3:Detail>
       <env:Detail xmlns:env="http://www.w3.org/2003/05/soap-envelope">
         <detailTest>TEST.</detailTest>
       </env:Detail>
       <ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/"
           class="javax.xml.ws.soap.SOAPFaultException"
           note="To disable this feature, set com.cosminexus.jaxws.fault.SOAPFaultBuilder.captureStackTrace property to false">
         ...
         （SOAP 1.1仕様のSOAPフォルトと同じ）
         ...
       </ns2:exception>
     </ns3:Detail>
   </ns3:Fault>
 </S:Body>
</S:Envelope>

(3)　Java例外の伝搬時の動作（Webサービスクライアント側）

Webサービスクライアント側でのJava例外の伝搬時に，Webサービスクライアントにスローするラッパ例外クラス，またはjavax.xml.ws.soap.SOAPFaultExceptionのcauseに，{http://jax-ws.dev.java.net/}exception要素の情報からアンマーシャルした例外（Webサービス側で発生した例外）が設定されます。

Webサービスクライアントは，getCauseメソッドを実行することで，Webサービス側で発生した例外を取得できます。

10.4.4　例外をフォルトにバインディングする場合のHTTPステータスコード

Webサービス側のJAX-WSエンジンが例外をフォルトにバインディングしてWebサービスクライアントへ返す場合，HTTPレスポンスのステータスコードに"500 Internal Server Error"が設定されます。POJOとEJBの両方のWebサービスで動作します。

10.4.5　エラーページをカスタマイズする場合の注意事項

Webサービス側のJAX-WSエンジンが動作するJ2EEサーバや，Webサービスを含むWARファイルでエラーページをカスタマイズしている場合，HTTPステータスコード500はカスタマイズしないでください。Webサービス側のJAX-WSエンジンは，フォルトをWebサービスクライアントに返す場合，HTTPステータスコードに「500 Internal Server Error」を設定します。このため，HTTPステータスコード500をカスタマイズすると，SOAPフォルトではない不正なSOAPメッセージがWebサービスクライアントに送信されてしまいます。

10.5　インタフェースの透過性

WebサービスとWebサービスクライアントは，疎な関係にあり，相互のインタフェースはWSDLの定義内容だけです。Webサービス側は，WSDLを通じてWebサービスのインタフェース情報（メタデータ）を公開し，Webサービスクライアント側はそのメタデータを使用してSOAPメッセージを生成し，送受信します。

WebサービスおよびWebサービスクライアントの両方がCosminexusのJAX-WSエンジンで動作する場合も，WSDL以外のインタフェース情報は交換されません。

Javaインタフェースの透過性はないため，SEIを起点としてWebサービスを開発した場合，Webサービス側とWebサービスクライアント側でメソッドシグネチャが異なることがあります。

ここでは，生成前のJavaメソッドと生成後のJavaメソッドの例を基に，メソッドシグネチャの違いについて説明します。

＜この節の構成＞

(1)　配列のパラメタを持つ場合

(2)　OUTパラメタを一つだけ持つ場合

(3)　non-wrapperスタイルの配列

(1)　配列のパラメタを持つ場合

次に示すJavaメソッドを持つSEIを起点に，Webサービスを開発することを想定します。このJavaメソッドは，配列（int型）のパラメタを持ちます。

@WebMethod
public void test1( int[] param1 );

この場合にマッピングされるWSDLの一部を次に示します。

...
<types>
 <xsd:schema targetNamespace="http://cosminexus.com/jaxws">

   <xs:element name="test1" type="tns:test1"/>

   <xs:element name="test1Response" type="tns:test1Response"/>

   <xs:complexType name="test1">
     <xs:element name="arg0" type="xs:int" nillable="true"
       minOccurs="0" maxOccurs="unbounded" />
   </xs:complexType>

   <xs:complexType name="test1Response">
     <xs:sequence/>
   </xs:complexType>
 </xs:element>
</types>

<message name="test1">
 <part name="parameters" element="tns:test1"/>
</message>

<message name="test1Response">
 <part name="parameters" element="tns:test1Response"/>
</message>

<portType ...>
 <operation name="test1">
   <input message="tns:test1"/>
   <output message="tns:test1Response"/>
 </operation>
 ...
</portType>
...

パラメタは，maxOccurs="unbounded"のwrapper子要素にマッピングされます。

このWSDLを指定してcjwsimportコマンドを実行すると，生成されるサービスクラスのJavaメソッドは次のようになります。

@WebMethod
public String test1( java.util.List<Integer> arg0 );

maxOccurs="unbounded"のwrapper子要素は，java.util.Listクラスにマッピングされます。また，この場合，xsd:int型は，java.lang.Integerクラスにマッピングされます。

(2)　OUTパラメタを一つだけ持つ場合

次に示すJavaメソッドを持つSEIを起点に，Webサービスを開発することを想定します。このJavaメソッドは，OUTパラメタを一つだけ持ち，戻り値は持ちません。

@WebMethod
public void test1( @WebParam(mode=WebParam.Mode.OUT) Holder<String> param1 );

この場合にマッピングされるWSDLの一部を次に示します。

...
<types>
 <xsd:schema targetNamespace="http://cosminexus.com/jaxws">

   <xs:element name="test1" type="tns:test1"/>

   <xs:element name="test1Response" type="tns:test1Response"/>

   <xs:complexType name="test1">
     <xs:sequence/>
   </xs:complexType>

   <xs:complexType name="test1Response">
     <xs:sequence>
       <xs:element name="arg0" type="xs:string" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
 </xs:element>
</types>

<message name="test1">
 <part name="parameters" element="tns:test1"/>
</message>

<message name="test1Response">
 <part name="parameters" element="tns:test1Response"/>
</message>

<portType ...>
 <operation name="test1">
   <input message="tns:test1"/>
   <output message="tns:test1Response"/>
 </operation>
 ...
</portType>
...

OUTパラメタは，wsdl:output要素から参照されるwrapper子要素にマッピングされます。

このWSDLを指定してcjwsimportコマンドを実行すると，生成されるサービスクラスのJavaメソッドは次のようになります。

@WebMethod
public String test1();

wsdl:output要素から参照されるwrapper子要素が1個だけなので，そのwrapper子要素は戻り値にマッピングされます。

(3)　non-wrapperスタイルの配列

次に示すJavaメソッドを持つSEIを起点に，Webサービスを開発することを想定します。このJavaメソッドは，non-wrapperスタイルで，java.lang.Stringクラスの配列のパラメタを持ちます。

@WebMethod
@javax.jws.soap.SOAPBinding(
 parameterStyle=javax.jws.soap.SOAPBinding.ParameterStyle.BARE)
public String test1( String[] param1 );

この場合にマッピングされるWSDLの一部を次に示します。

...
<types>
 <xsd:schema targetNamespace="http://jaxb.dev.java.net/array">
   <xsd:complexType name="stringArray" final="#all">
     <xsd:sequence>
       <xsd:element name="item" type="xsd:string" minOccurs="0"
         maxOccurs="unbounded" nillable="true" />
     </xsd:sequence>
   </xsd:complexType>
 </xsd:schema>

 <xsd:schema targetNamespace="http://cosminexus.com/jaxws"
   xmlns:ns1="http://jaxb.dev.java.net/array">
   <xsd:element name="test1" nillable="true" type="ns1:stringArray"/>
   <xsd:element name="test1Response" nillable="true" type="xsd:string"/>
 </xsd:schema>
</types>

<message name="test1">
 <part name="test1" element="tns:test1" />
</message>

<message name="test1Response">
 <part name="test1Response" element="tns:test1Response" />
</message>

<portType ...>
 <operation name="test1">
   <input message="tns:test1" />
   <output message="tns:test1Response" />
 </operation>
 ...
</portType>
...

パラメタは，{http://jaxb.dev.java.net/array}stringArray型のwrapper子要素にマッピングされます。

このWSDLを指定してcjwsimportコマンドを実行すると，生成されるサービスクラスのJavaメソッドは次のようになります。

@WebMethod
@javax.jws.soap.SOAPBinding(
 parameterStyle=javax.jws.soap.SOAPBinding.ParameterStyle.BARE)
public String test1(net.java.dev.jaxb.array.StringArray test1);

{http://jaxb.dev.java.net/array}stringArray型のwrapper子要素は，net.java.dev.jaxb.array.StringArrayクラスにマッピングされます。

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をインポート／インクルードしている場合の注意

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

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

(a)　POJOの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

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

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

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

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

表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が新たに生成されて返されます。
対象がプロバイダ実装クラスの場合は，メタデータは発行されません。
○
○

（凡例）

○：適用されます。

－：適用されません。

注※

EJBのWebサービスの場合，Webサービス実装クラスだけに適用されます。

メタデータが発行される前提条件は，Webサービスのアプリケーションがエラーもなく，正常にデプロイされ実行が開始されている状態です。

メタデータの発行に関する注意事項を示します。

wsdlLocation属性には，「WEB-INF/wsdl」または「META-INF/wsdl」から始まるWSDLファイルへの相対パスを指定してください。wsdlLocation属性に指定されたWSDLファイルが，WEB-INF/wsdlディレクトリまたはMETA-INF/wsdlディレクトリにない場合，またはWSDLの構文として不正な場合は，Webサービスのデプロイ時にエラーとなります。

wsdlLocation属性に指定されたWSDLファイルにwsdl:service要素が含まれていない場合は，Webサービスのデプロイ時にエラーとなります。

項番1，項番2の場合であっても，WEB-INF/wsdlディレクトリまたはMETA-INF/wsdlディレクトリ以下にあるWSDLファイルが次のどちらかに該当すると，Webサービスのデプロイ時にエラーとなります。

wsdl:service要素を持つファイルが複数ある。

wsdl:portType要素を持つファイルが複数ある（Webサービス実装クラスの場合）。

項番1，項番2の場合であっても，そのWSDLファイルを基に，要求されたWebアプリケーションのWSDLとして内容を更新したものを返します。

プロバイダ実装クラスの場合，基本的に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を返します。

ヘッダ情報
WSDLファイルが公開されたバージョン，および日時をヘッダ情報として追加します。追加されるヘッダ情報の例を次に示します。

<!-- Published by Cosminexus JAX-WS 0850 (2010.01.01 00:00). -->

ロケーション情報
soap:address要素のlocation属性や，xsd:include要素のschemaLocation属性などを更新します。
例えば，soap:address要素のlocation属性の値が"REPLACE_WITH_ACTUAL_URL"のようなWSDLでも，WARファイルに含めることで，soap:address要素のlocation属性の値は適切なURLに更新されます。
更新後のロケーション情報の例を次に示します。

ホスト名：sample.com

コンテキストルート：/fromjava

Webサービス呼び出しURL：/AddNumbersImplService

このような場合，更新後のURLは，"http://sample.com/fromjava/AddNumbersImplService"となります。

(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に含まれるパス情報を確認し，次に示す方法でパス情報を適切に修正する必要があります。

相対パスの記述を含むWSDL定義やXML SchemaをWARファイルに含める場合
インポート，インクルード対象のファイルをWARファイルのWEB-INF/wsdlディレクトリ以下に含め，インポート元およびインクルード元のWSDL定義やXML Schemaのlocation属性，schemaLocation属性に指定したパス情報を，環境に合わせて適切な相対パスに修正します。

リモートのURLの記述を含むWSDL定義やXML SchemaをWARファイルに含める場合
WSDL定義を取得するWebサービスクライアントからアクセスできるURLの場合，修正は不要です。アクセスできないURLの場合，インポート，インクルード対象のファイルをWARファイルのWEB-INF/wsdlディレクトリ以下に含め，インポート元およびインクルード元のWSDL定義やXML Schemaのlocation属性，schemaLocation属性に指定したパス情報を，環境に合わせて適切な相対パスに修正します。

ローカルのURLの記述を含むWSDL定義やXML SchemaをWARファイルに含める場合
インポート，インクルード対象のファイルをWARファイルのWEB-INF/wsdlディレクトリ以下に含め，インポート元およびインクルード元のWSDL定義のlocation属性，schemaLocation属性に指定したパス情報を，環境に合わせて適切な相対パスに修正します。

10.7　Webサービスの情報表示

Webサービス実装クラス，またはプロバイダ実装クラスを呼び出すURLをブラウザ上で実行すると，Webサービスの情報を表示できます。

＜この節の構成＞

(1)　表示されるWebサービスの情報

(2)　Webサービスの情報を表示する方法

(1)　表示されるWebサービスの情報

Webサービスの情報を表示する場合，GETメソッドでURLを指定します。HTTPのGETメソッドを使用して，表示されるWebサービスの情報を次の表に示します。

表10-13　表示されるWebサービスの情報

EndPoint
Information

Service Name：

サービスのQName

Port Name：

ポートのQName

Address：

Webサービスを呼び出すためのURL

WSDL：

WebサービスのWSDLを取得するためのURL

メタデータの発行については，「10.6　メタデータの発行」を参照してください。

Implementation Class：

Webサービス実装クラス名，またはプロバイダ実装クラス名

(2)　Webサービスの情報を表示する方法

Webサービスの情報を表示する場合，次の例に示すようなURLを含むHTTPリクエストをGETメソッドでWebサービス側のJAX-WSエンジンに送信します。

http://sample.com/fromjava/AddNumbersImplService

このURLでは，次の情報を指定しています。

sample.com：ホスト名

/fromjava：コンテキストルート

/AddNumbersImplService：Webサービスの呼び出し

また，この機能は，com.cosminexus.jaxws.security.display_webservice_infoプロパティで，有効／無効を指定できます。com.cosminexus.jaxws.security.display_webservice_infoプロパティについては，「10.1.2　共通定義ファイルの設定項目」を参照してください。

10.8　使用できるHTTPメソッド

HTTPメソッドとしてPOSTが使用できます。また，メタデータの発行およびWebサービスの情報表示ではGETが使用できます。POJOとEJBの両方のWebサービスで使用できます。

次に示すHTTPリクエストメソッドがWebサービス側のJAX-WSエンジンに到着した場合，HTTPステータスコード"405 Method Not Allowed"が返されます。

GET（メタデータの発行およびWebサービスの情報表示の場合を除く）

DELETE

HEAD

OPTION

PUT

TRACE

10.9　Webサービスの初期化と破棄

Webサービスの初期化と破棄について説明します。POJOとEJBの両方のWebサービスで動作します。

＜この節の構成＞

(1)　Webサービスの初期化

(2)　Webサービスの破棄

(1)　Webサービスの初期化

Webサービス側のJAX-WSエンジンでは，J2EEアプリケーションがJ2EEサーバによって開始されるときに，Webサービスを初期化します。具体的には次の処理が実行されます。

Webサービスのディスカバリをするための，URLと，Webサービス実装クラスまたはプロバイダ実装クラスとのマッピング情報の生成処理

メタデータを発行するためのWSDLの確認処理（Webサービス実装クラスの場合）

Webサービス実装クラスまたはプロバイダ実装クラスにハンドラが関連づけられている場合のハンドラチェイン設定ファイルの読み込みと，ハンドラの初期化処理
（javax.annotation.PostConstructアノテーションでアノテートされたメソッドがある場合はそのメソッドの呼び出しも含む）

Webサービスの初期化の開始時に，ログおよび標準出力にKDJW40001-Iのメッセージが出力されます。Webサービスの初期化が正常に終了した場合，ログおよび標準出力にKDJW40003-Iのメッセージが出力されます。Webサービスの初期化でエラーが発生し，初期化に失敗した場合，ログおよび標準エラー出力にKDJW40002-Eのメッセージとエラーの原因となったエラーメッセージが出力されます。

Webサービスの初期化でエラーが発生した場合，ログにエラーが出力されますが，J2EEアプリケーションの開始自体は継続され，正常終了します。ただし，初期化に失敗しているので，デプロイされたWebサービスは動作しません。この場合，KDJW40002-Eのメッセージが出力されたかどうかを確認し，エラーが出力された場合には問題を修正し，再度Webサービスをデプロイしてください。

J2EEサーバの開始時に，デプロイされているJ2EEアプリケーションが自動的に開始される場合など，どのJ2EEアプリケーションに含まれるWebサービスの初期化に失敗したのか，調査が困難なことがあります。そのようなときは，「29.3.1　ログの種類」で示すログ，およびJ2EEサーバの稼働ログを確認することで，J2EEアプリケーション名とコンテキストルート名を特定できます。

"com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener"を含む，KDJE39103-Eメッセージの出力内容を確認する例を次に示します。

0095 2009/12/18 13:48:36.471     HEJB             0125FEFA 004413EE KDJE39103-E           An exception javax.xml.ws.WebServiceException was raised in notification of the listener class com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener. (J2EE application = Sample_application_fromwsdl, context root = /fromjava)

上記のようなログが出力されている場合，J2EEアプリケーション"Sample_application_fromwsdl"に含まれる，コンテキストルート名"fromjava"に関連づけられたWARファイル内のWebサービスの初期化が失敗しています。

ユーザプログラムに問題がある場合，基本的にKDJE39103-Eのメッセージのエラーが発生します。ただし，必要に応じて次のエラーメッセージについても確認してください。

KDJE39100-E

KDJE39101-E

KDJE39102-E

J2EEサーバの稼働ログについては，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「5.2　アプリケーションサーバのログの内容」を参照してください。また，上記のメッセージについては，マニュアル「Cosminexus アプリケーションサーバ メッセージ 2」の「3.　KDJE30000からKDJE39999までのメッセージ」を参照してください。

(2)　Webサービスの破棄

Webサービス側のJAX-WSエンジンでは，J2EEアプリケーションがJ2EEサーバによって終了されるときに，Webサービスを破棄します。具体的には次の処理が実行されます。

Webサービスのディスカバリをするための，URLと，Webサービス実装クラスまたはプロバイダ実装クラスとのマッピング情報の削除処理

Webサービス実装クラスまたはプロバイダ実装クラスにハンドラが関連づけられている場合のハンドラの破棄処理
（javax.annotation.PreDestoryアノテーションでアノテートされたメソッドがある場合はそのメソッドの呼び出しも含む）

Webサービスの破棄の開始時に，ログおよび標準出力にKDJW40004-Iのメッセージが出力されます。Webサービスの破棄が正常に終了した場合，ログおよび標準出力にKDJW40006-Iのメッセージが出力されます。Webサービスの破棄でエラーが発生し，破棄に失敗した場合，ログおよび標準エラー出力にKDJW40015-Eのメッセージとエラーの原因となったエラーメッセージが出力されます。

Webサービスの破棄でエラーが発生した場合，ログにエラーが出力されますが，J2EEアプリケーションの終了処理自体は継続され，正常終了します。この場合，KDJW40015-Eのメッセージが出力されたかどうかを確認し，エラーが出力された場合には問題を修正してください。

10.10　プロキシサーバ経由の接続

Webサービスクライアントからプロキシサーバを経由して，外部のネットワークにあるWebサービスを利用できます。

ここでは，プロキシサーバを経由して外部に接続する場合に必要なプロパティの設定について説明します。

＜この節の構成＞

(1)　プロパティ値の指定

(2)　プロパティの設定方法

(3)　JAX-WS機能固有のプロパティを利用しない場合

(4)　JAX-WS機能固有のプロパティを利用する場合の注意事項

(1)　プロパティ値の指定

プロキシサーバを経由してWebサービスにアクセスするには，JavaVMのプロパティ，またはCosminexusのJAX-WS機能固有のプロパティを指定して，プロキシサーバの情報を設定します。プロキシサーバ経由で接続するためのプロパティと指定内容を次の表に示します。

表10-14　プロキシサーバ経由で接続するためのプロパティ

項番
プロパティ
指定内容
非SSLの場合
SSLの場合

1
http.proxyHost※1
プロキシサーバのホスト名またはIPアドレスを指定します。
空文字を指定した場合は，プロキシサーバに接続されません。
○
×

2
http.proxyPort※1
プロキシサーバのポート番号を設定します。
http.proxyHostが適切に設定されていた場合に，http.proxyPortに空文字を指定したときは，http.proxyHostに指定されているホストの80番ポートにアクセスされます。
http.proxyHostを指定していない場合は，http.proxyPortを指定しても，プロキシサーバに接続されません。
△
×

3
com.cosminexus.jaxws.http.proxyUser※2
プロキシサーバの認証ユーザIDを設定します。
http.proxyHostプロパティ，およびhttp.proxyPortプロパティが適切に設定されていた場合に，com.cosminexus.jaxws.http.proxyUserプロパティに空文字を指定したときは，匿名でプロキシサーバに接続します。
△
×

4
com.cosminexus.jaxws.http.proxyPassword※2
プロキシサーバの認証ユーザIDに対応するパスワードを設定します。
次のプロパティが適切に設定されていた場合に，com.cosminexus.jaxws.http.proxyPasswordプロパティに空文字を指定したときは，パスワードを設定しないでプロキシサーバに接続します。

http.proxyHost

http.proxyPort

com.cosminexus.jaxws.http.proxyUser

△
×

5
https.proxyHost※1
SSLプロトコルによる接続※3で使用するプロキシサーバのホスト名かIPアドレスを設定します。
SSLプロトコルによる接続でプロキシサーバを使用する場合は，必ず設定してください。なお，空文字を指定した場合は，プロキシサーバに接続されません。
×
○

6
https.proxyPort※1
SSLプロトコルによる接続※3で使用するプロキシサーバのポート番号を設定します。なお，https.proxyHostが適切に設定されていた場合に，https.proxyPortに空文字を指定したときは，https.proxyHostに指定されているホストの443番ポートにアクセスされます。
https.proxyHostを指定していない場合は，https.proxyPortを設定しても，プロキシサーバに接続されません。
×
△

7
com.cosminexus.jaxws.https.proxyUser※2
SSLプロトコルによる接続※3で使用するプロキシサーバの認証ユーザIDを設定します。
https.proxyHostプロパティ，およびhttps.proxyPortプロパティが適切に設定されていた場合に，com.cosminexus.jaxws.https.proxyUserプロパティに空文字を指定したときは，匿名でプロキシサーバに接続します。
×
△

8
com.cosminexus.jaxws.https.proxyPassword※2
SSLプロトコルによる接続※3で使用するプロキシサーバの認証ユーザIDに対応するパスワードを設定します。
次のプロパティが適切に設定されていた場合に，com.cosminexus.jaxws.https.proxyPasswordプロパティに空文字を指定したときは，パスワードを設定しないでプロキシサーバに接続します。

https.proxyHost

https.proxyPort

com.cosminexus.jaxws.https.proxyUser

×
△

9
http.nonProxyHosts※1
プロキシサーバを利用しないホスト名群を必要に応じて指定します。
このプロパティで指定したホストに接続する場合は，http.proxyHostまたはhttps.proxyHostに指定したプロキシサーバは経由されません。ホストを複数指定する場合は，「|」で区切って設定します。ホスト名とホスト名の間には，「|」以外の文字（空白など）は指定できません。
△
△

（凡例）

○：プロパティの指定が必須であることを示します。

△：必要に応じてプロパティを指定することを示します。

×：プロパティの指定が不要であることを示します。

注※1

JavaVMで標準でサポートされているシステムプロパティです。JavaVMのシステムプロパティについては，JavaVMのドキュメントを参照してください。

注※2

CosminexusのJAX-WS機能固有のプロパティです。このプロパティは簡易的なプロパティです。細かな制御をしたい場合，WebサービスクライアントでJ2SE 5.0標準のjava.net.Authenticatorクラスを利用した実装をすることをお勧めします。詳細については，「10.10(3)　JAX-WS機能固有のプロパティを利用しない場合」を参照してください。

注※3

SSLプロトコルによる接続については，「10.11　SSLプロトコルによる接続」を参照してください。

(2)　プロパティの設定方法

CosminexusのJAX-WS機能固有のプロパティは，動作定義ファイルに設定します。動作定義ファイルの設定方法については「10.1　動作定義ファイル」を参照してください。JAX-WS機能固有のプロパティを利用する場合，「10.10(4)　JAX-WS機能固有のプロパティを利用する場合の注意事項」の内容に注意してください。

JavaVMのシステムプロパティの設定方法は，Webサービスクライアントの実行形態によって異なります。

Webサービスクライアントをコマンドで実行する場合
Webサービスクライアントをコマンド（cjclstartap）で実行する場合は，Javaアプリケーション用ユーザプロパティファイル（usrconf.properties）に，JavaVMのプロパティを設定します。

WebサービスクライアントをJ2EEサーバ上で実行する場合
WebサービスクライアントをJ2EEサーバ上で実行する場合は，J2EEサーバ用ユーザプロパティファイル（usrconf.properties）に，JavaVMのプロパティを設定します。

プロパティの設定例を示します。

http.proxyHost=10.209.15.79
http.proxyPort=3128
https.proxyHost=10.209.15.79
https.proxyPort=3128
http.nonProxyHosts=10.209.15.80|www.hitachi.co.jp

プロパティの設定を追加する位置についての決まりはありません。

(3)　JAX-WS機能固有のプロパティを利用しない場合

JAX-WS機能固有のプロパティは簡易的なプロパティです。そのため，細かな制御をしたい場合，WebサービスクライアントでJ2SE 5.0標準のjava.net.Authenticatorクラスを利用した実装をすることをお勧めします。詳細についてはJ2SE 5のドキュメントを参照してください。java.net.Authenticatorクラスを利用した実装例を次に示します。

java.net.Authenticator.setDefault( new java.net.Authenticator(){

 // getPasswordAuthenticationメソッドをオーバーライドする
 public java.net.PasswordAuthentication getPasswordAuthentication() {

   // ユーザ名を設定する
   String userName = ...

   // パスワードを設定する
   char[] password = ...

   // PasswordAuthenticationを生成する。
   java.net.PasswordAuthentication auth =
       new java.net.PasswordAuthentication( userName, password );

   return auth;
 }
} );

(4)　JAX-WS機能固有のプロパティを利用する場合の注意事項

Cosminexusは，Java SE標準のjava.net.AuthenticatorクラスのsetDefault()メソッドを利用して，JAX-WS機能固有のプロパティの値をJavaVMに設定します。そのため，次の点に注意してください。

有効範囲
Webサービスクライアントが動作するプロセス全体（WebサービスクライアントがJ2EEサーバ上で動作する場合は，J2EEサーバ全体）で有効となり，Cosminexus以外のHTTP接続にも影響します。Cosminexus以外のHTTP接続にJAX-WS機能固有のプロパティによるプロキシの設定を適用したくない場合，JAX-WS機能固有のプロパティではなく，ユーザプログラム（Webサービスクライアント）で，java.net.AuthenticatorクラスのsetDefault()メソッドを利用した実装をする必要があります。詳細については，「10.10(3)　JAX-WS機能固有のプロパティを利用しない場合」を参照してください。

競合
JAX-WS機能固有のプロパティを利用する場合，Webサービスクライアントが動作するプロセスでは，Cosminexus以外がjava.net.AuthenticatorクラスのsetDefault()メソッドを呼び出さないようにしてください。ライブラリなどでほかの製品を利用している場合は，特に注意してください。java.net.AuthenticatorクラスのsetDefault()メソッドを呼び出すタイミングによっては設定が競合し，動作が不正になるおそれがあります。ユーザプログラムやライブラリなど，ほかの製品がjava.net.AuthenticatorクラスのsetDefault()メソッドを呼び出す場合，JAX-WS機能固有のプロパティを利用しないでください。

セキュリティ例外
java.net.AuthenticatorクラスのsetDefault()メソッドがjava.lang.SecurityExceptionをスローする場合，KDJW10025-Wのメッセージがログに出力され，処理が続行されます。必要に応じて，詳細メッセージを確認し，エラーの要因を取り除いてください。

10.11　SSLプロトコルによる接続

Webサービスクライアントから，SSLプロトコルに対応したWebサービスに接続できます。

ここでは，SSLプロトコルによる接続に必要なプロパティの設定について説明します。

＜この節の構成＞

(1)　プロパティ値の指定

(2)　プロパティの設定方法

(1)　プロパティ値の指定

SSLプロトコルでWebサービスにアクセスするには，JDKにサポートされているプロパティに値を指定して，SSLプロトコルの情報を設定します。SSLプロトコルによる接続をするためのプロパティ，および指定内容を次の表に示します。

表10-15　SSLプロトコルによる接続をするためのプロパティ

項番 | プロパティ | 指定内容 | 必須
1 | javax.net.ssl.trustStore | トラストストアを指定します。 | △※
2 | javax.net.ssl.trustStorePassword | トラストストアのパスワードを指定します。 | △※

（凡例）

△：プロパティの指定が任意であることを示します。

注※

トラストストアを指定しない場合は，<JDKインストールディレクトリ>/lib/security/jssecacertsなどのデフォルト値が使用されます。

JDKのプロパティについては，JDKのドキュメントを参照してください。

(2)　プロパティの設定方法

プロパティの指定値を有効にするために，プロパティをシステムプロパティに設定します。プロパティの設定方法は，Webサービスクライアントの実行形態によって異なります。

Webサービスクライアントをコマンドで実行する場合
Webサービスクライアントをコマンド（cjclstartap）で実行する場合は，Javaアプリケーション用ユーザプロパティファイル（usrconf.properties）に，JavaVMのプロパティを設定します。

WebサービスクライアントをJ2EEサーバ上で実行する場合
WebサービスクライアントをJ2EEサーバ上で実行する場合は，J2EEサーバ用ユーザプロパティファイル（usrconf.properties）に，JavaVMのプロパティを設定します。

プロパティの設定例を示します。

javax.net.ssl.trustStore=<トラストストア>
javax.net.ssl.trustStorePassword=<トラストストアのパスワード>

プロパティの設定を追加する位置についての決まりはありません。

10.12　ベーシック認証による接続

Webサービスクライアントから，ベーシック認証に対応したWebサービスに接続できます。

ここでは，ベーシック認証による接続に必要なプロパティの設定について説明します。

＜この節の構成＞

(1)　プロパティ値の指定

(2)　プロパティの設定方法

(1)　プロパティ値の指定

ベーシック認証でWebサービスにアクセスするには，動作定義ファイル，またはメッセージコンテキストに値を指定します。ベーシック認証による接続をするためのプロパティ，および指定内容を次の表に示します。

表10-16　ベーシック認証による接続をするためのプロパティ

項番 | プロパティ | 指定内容 | 必須
1 | javax.xml.ws.security.auth.username | ユーザIDを設定します。 | ○
2 | javax.xml.ws.security.auth.password | パスワードを設定します。 | ○

（凡例）

○：プロパティの指定が必須であることを示します。

ベーシック認証による接続をする場合の注意事項

メッセージコンテキストへの指定が有効になるのはWebサービス呼び出し時だけで，Webサービス呼び出し前のjavax.xml.ws.Serviceクラス生成で発生するメタデータ（WSDL）取得時には適用されません。
メタデータ取得時にベーシック認証の情報を設定する場合は，共通定義ファイルまたはプロセス別の定義ファイルに記述するか，別途WSDLをローカルマシンにダウンロードして使用してください（ローカルマシンにあるWSDLを使用する場合は，メタデータ取得時にリモートマシンへの接続が発生しません）。WSDLから別途インポートされるWSDLが存在する場合は，インポートされるWSDLもローカルマシン上にダウンロードしてください。

同じプロセスで動作する複数のWebサービスクライアントによって，ベーシック認証を行うか，行わないかが異なる場合は，プロセス別の定義ファイルや共通定義ファイルにこれらのプロパティを含めないで，メッセージコンテキストだけに含めるようにしてください。
同様に，同じシステムで動作する複数のプロセスによって，ベーシック認証を行うか，行わないかが異なる場合は，共通定義ファイルにこれらのプロパティを含めないで，プロセス別の定義ファイルかメッセージコンテキストだけに含めるようにしてください。

(2)　プロパティの設定方法

プロパティを動作定義ファイルに設定する方法については，「10.1.2　共通定義ファイルの設定項目」を参照してください。メッセージコンテキストに設定する方法については，「15.5　メッセージコンテキストの使用」を参照してください。

10.13　SOAPのバージョン選択

ここでは，Webサービス，およびWebサービスアプリケーションの開発時に必要となる，SOAPのバージョン選択について説明します。

＜この節の構成＞

10.13.1　SOAPのバージョン選択（Webサービス開発時）

10.13.2　SOAPのバージョン選択（Webサービスクライアント開発時）

10.13.3　SOAPのバージョン選択（実行時）

10.13.1　SOAPのバージョン選択（Webサービス開発時）

WSDL起点，SEI起点，およびプロバイダ起点のWebサービス開発時のバージョン選択方法について説明します。

＜この項の構成＞

(1)　WSDL起点の場合

(2)　SEI起点の場合

(3)　プロバイダ起点の場合

(1)　WSDL起点の場合

SOAP 1.1仕様またはSOAP 1.2仕様のどちらのメッセージを送受信するのかを，WSDLに記述するバインディングで決定します。

cjwsimportコマンドで生成したWebサービス実装クラスのスケルトンはバインディング単位のため，SOAP 1.1仕様またはSOAP 1.2仕様のどちらか専用となります。実行時に動的に変更することはできません。

一方，WSDLには複数のバインディングを記述できるので，一つのWSDLに，SOAP 1.1仕様およびSOAP 1.2仕様のポートを混在させることができます。

SOAP 1.1仕様およびSOAP 1.2仕様のポートを混在させる例を次に示します。

図10-8　ポートを混在させる例

これは，一つのポートタイプをSOAP 1.1用とSOAP 1.2用にそれぞれバインドする例です。一つのポートタイプで，SOAP 1.1仕様およびSOAP 1.2仕様のどちらの形式のメッセージも受け付けられます。

(2)　SEI起点の場合

SOAP 1.1仕様またはSOAP 1.2仕様のどちらにバインドするのかを，アノテーションで指定します。Webサービス実装クラスの単位で指定してください。実行時に動的に変更することはできません。

アノテーションは省略できます。省略した場合は，SOAP 1.1仕様になります。

(3)　プロバイダ起点の場合

SOAP 1.1仕様またはSOAP 1.2仕様のどちらにバインドするのかを，アノテーションで指定します。プロバイダ実装クラスの単位で指定してください。実行時に動的に変更することはできません。

10.13.2　SOAPのバージョン選択（Webサービスクライアント開発時）

Webサービスクライアントは，Webサービスのメタデータ（WSDL，または接続しようとしているWebサービスに依存する情報など）に基づいて開発します。メタデータで定義される情報に基づき，適切なバージョンのSOAPで通信するWebサービスクライアントを実装してください。

スタブベース，ディスパッチベース，およびAPIベースのWebサービスクライアント開発時の，SOAPのバージョン選択方法について説明します。

＜この項の構成＞

(1)　スタブベースの場合

(2)　ディスパッチベースの場合

(3)　APIベースの場合

(1)　スタブベースの場合

cjwsimportコマンドを実行すると，WSDLの定義に基づいて適切なスタブを自動生成します。そのため，SOAP 1.1仕様またはSOAP 1.2仕様のどちらで通信するのかを指定する必要はありません。

なお，ポートは必ず一つのバインディングにバインドされます。そのため，サービスクラスに含まれるポート取得メソッドは，SOAP 1.1仕様またはSOAP 1.2仕様のどちらか専用となります。

(2)　ディスパッチベースの場合

Webサービスのメタデータに基づいて適切なバージョンのSOAPを選択し，APIで指定してください。

(3)　APIベースの場合

Webサービスのメタデータに基づいて適切なバージョンのSOAPを選択し，APIで指定してください。

10.13.3　SOAPのバージョン選択（実行時）

Webサービス，およびWebサービスクライアント実行時のSOAPのバージョン選択方法について説明します。

＜この項の構成＞

(1)　Webサービスの場合

(2)　Webサービスクライアントの場合

(1)　Webサービスの場合

Webサービス実装クラスおよびプロバイダ実装クラスは，開発時の選択に基づいて，SOAP 1.1仕様またはSOAP 1.2仕様のどちらか専用となります。そのため，受信できるメッセージは，SOAP 1.1仕様またはSOAP 1.2仕様のどちらかです。両方のバージョンのSOAPに対応するメッセージを受信したい場合は，複数のWebサービス実装クラスまたはプロバイダ実装クラスを定義・実装する必要があります。

(2)　Webサービスクライアントの場合

スタブベースのWebサービスクライアントは，SOAP 1.1仕様またはSOAP 1.2仕様のどちらかのメッセージを送信します。開発時の誤りで次のどちらかの状態になった場合，SOAPのバージョンが一致しないSOAPメッセージを送信することになり，Webサービス側でエラーが発生します。

WebサービスがSOAP 1.2仕様のバインディングの場合にSOAP 1.1仕様用のスタブを生成している

WebサービスがSOAP 1.1仕様のバインディングの場合にSOAP 1.2仕様用のスタブを生成している

ディスパッチベースやAPIベースのWebサービスクライアントでは，SOAPのバージョンをAPIで指定します。指定値を設定ファイルで変更できるようにするなど，実装方法によってはどちらのSOAPのバージョンのメッセージを送信するかを動的に変更できます。

10.14　コマンドラインを利用したクライアントアプリケーションの実行

Webサービスでは，コマンドラインで動作するJavaアプリケーションを，クライアントアプリケーションとして利用できます。

ここでは，コマンドラインによるクライアントアプリケーションを利用するときに必要な設定，コマンドラインの指定例，および注意事項について説明します。

＜この節の構成＞

10.14.1　コマンドライン利用時の設定

10.14.2　コマンドラインの実行

10.14.3　コマンドライン利用時の注意事項

10.14.1　コマンドライン利用時の設定

コマンドラインによるクライアントアプリケーションを利用するために必要な設定について説明します。

＜この項の構成＞

(1)　Javaアプリケーション用オプション定義ファイルの設定

(2)　Javaアプリケーション用ユーザプロパティファイルの設定

(3)　パスの追加

(1)　Javaアプリケーション用オプション定義ファイルの設定

クライアントアプリケーションを実行するカレントディレクトリに，Javaアプリケーション用オプション定義ファイルを作成し，次に示すキーと値を追加してください。

add.class.path=<クライアントWebサービスのクラスファイルが格納されたJARまたはディレクトリのパス>

add.class.path=<Cosminexusのインストールディレクトリ>/jaxws/lib/cjjaxws.jar

add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>

add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF識別子>※

ejb.client.log.directory=<ログファイルを出力するディレクトリパス>

注※

cprfstartコマンドで指定したPRF識別子と同じ識別子を指定してください。指定しない場合のデフォルト値は，PRF_IDです。

(2)　Javaアプリケーション用ユーザプロパティファイルの設定

クライアントアプリケーションを実行するカレントディレクトリに，Javaアプリケーション用ユーザプロパティファイルを作成し，必要に応じて設定してください。

(3)　パスの追加

環境変数PATHに，次に示すパスを追加してください。

<Cosminexusのインストールディレクトリ>/PRF/bin

10.14.2　コマンドラインの実行

Webサービスクライアントをコマンドラインから実行する場合の指定例を示します。

＜この項の構成＞

(1)　PRFデーモンの起動

(2)　アプリケーションのクライアントの実行

(1)　PRFデーモンの起動

PRF識別子として，デフォルト値を使用する場合の指定例を次に示します。

<Cosminexusのインストールディレクトリ>/PRF/bin/cprfstart

PRF識別子として，デフォルト値以外を使用する場合の指定例を次に示します。

<Cosminexusのインストールディレクトリ>/PRF/bin/cprfstart <prfid>※

注※

<prfid>はPRF識別子を示します。PRF識別子は，Javaアプリケーション用オプション定義ファイルに指定したPRF識別子と同じ識別子を指定してください。

(2)　アプリケーションのクライアントの実行

Javaアプリケーションの開始コマンド（cjclstartap）で実行します。実行例を次に示します。

cjclstartap localhost.testMain

10.14.3　コマンドライン利用時の注意事項

コマンドラインを利用するときの注意事項について説明します。

ログは，Javaアプリケーション用オプション定義ファイルのejb.client.log.directoryプロパティに指定したファイルパスに出力されます。ログの出力については，「29.3.2(2)　コマンドラインインタフェースでWebサービスクライアントを利用する場合」を参照してください。

コマンドラインを利用している場合で，PRFトレースを取得するときは，アプリケーションを実行する前にPRFデーモンを起動しておく必要があります。PRFデーモンを起動していない場合は，PRFトレースが取得されないまま処理が続行されます。

10.15　HTTPステータスコード

サービス側JAX-WSエンジンが返す HTTPステータスコードの一覧を次の表に示します。

表10-17　HTTPステータスコード一覧

項番
HTTPステータスコード
HTTPステータスコードを返す条件

1
200 OK
Webサービスの呼び出しが正常終了した場合。

2
202 Accepted
アドレッシング機能を利用している場合に，非同期呼び出しに対応したWebサービスの呼び出しが正常終了したとき。

3
404 Not Found
メタデータの発行が有効な場合に，クエリストリングの形式が不正であるとき。この場合，HTTPステータスコードが「405 Method Not Allowed」となることがあります。
メタデータの発行については，「10.6　メタデータの発行」を参照してください。

4
405 Method Not Allowed
次のどれかの場合。

使用できないHTTPメソッドが到着した場合
使用できるHTTPメソッドについては，「10.8　使用できるHTTPメソッド」を参照してください。

メタデータの発行が無効な場合に，メタデータの発行を要求するHTTPリクエストを受け取ったとき
メタデータの発行については，「10.6　メタデータの発行」を参照してください。

Webサービスの情報表示が無効な場合に，Webサービスの情報表示を要求するHTTPリクエストを受け取ったとき
Webサービスの情報表示については，「10.7　Webサービスの情報表示」を参照してください。

5
415 Unsupported Media Type
Content-Type HTTPヘッダが存在しないか，または不正な場合。
この場合，HTTPステータスコードが「500 Internal Server Error」となることがあります。

6
500 Internal Server Error
上記を除くエラーが発生した場合。Webサービスの実行結果がSOAPフォルトとなる場合もこのHTTPステータスコードが返ります。

10.16　HTTPヘッダ

JAX-WSエンジンのHTTPヘッダについて説明します。

＜この節の構成＞

(1)　Content-Typeヘッダのactionパラメタについて

(1)　Content-Typeヘッダのactionパラメタについて

JAX-WSエンジンは，Content-Typeヘッダのactionパラメタの値を引用符「"」で囲んで，HTTPリクエストおよびHTTPレスポンスのContent-Typeヘッダのactionパラメタの値として設定します。すでに引用符「"」で囲まれている値は，そのままContent-Typeヘッダのactionパラメタの値として設定します。

Webサービス側でもWebサービスクライアント側でも同様に動作します。

10.17　HTTPリクエストボディのgzip圧縮

HTTPリクエストボディをgzip圧縮すると，WebサービスクライアントとWebコンテナ間のHTTPリクエスト通信に掛かる時間を削減できます。HTTPリクエストボディを圧縮するには，Webサービスクライアントからリクエストメッセージを送信する際に，gzip形式で圧縮されたHTTPリクエストボディを送信することを示すHTTPヘッダを付ける必要があります。クライアントアプリケーションでHTTPヘッダを付ける処理を実装してください。

クライアントアプリケーションでの実装例を次に示します。

 Map<String, List<String>> httpHeaders =
   ( Map<String, List<String>> )context.get( MessageContext.HTTP_REQUEST_HEADERS );
 if( null == httpHeaders ){
   httpHeaders = new HashMap<String, List<String>>();
 }
 List<String> contentEncondings = httpHeaders.get( "Content-Encoding" );
 if( null == contentEncondings ){
   contentEncondings = new ArrayList<String>();
 }
 contentEncondings.add( "gzip" );
 httpHeaders.put( "Content-Encoding", contentEncondings );
 context.put( MessageContext.HTTP_REQUEST_HEADERS, httpHeaders );

10.18　HTTPレスポンス圧縮機能との連携

HTTPレスポンスボディをgzip圧縮してWebコンテナとWebサービスクライアント間のHTTPレスポンス通信に掛かる時間を削減するCosminexusの機能をHTTPレスポンス圧縮機能といいます。

JAX-WSエンジンは，HTTPレスポンス圧縮機能と連携できます。HTTPレスポンス圧縮機能と連携するには，Webサービスクライアントからリクエストメッセージを送信する際に，gzip形式で圧縮されたHTTPレスポンスを受信できることを示すHTTPヘッダを付ける必要があります。クライアントアプリケーションでHTTPヘッダを付ける処理を実装してください。

クライアントアプリケーションでの実装例を次に示します。

 Map<String, List<String>> httpHeaders =
   ( Map<String, List<String>> )context.get( MessageContext.HTTP_REQUEST_HEADERS );
 if( null == httpHeaders ){
   httpHeaders = new HashMap<String, List<String>>();
 }
 List<String> acceptEncondings = httpHeaders.get( "Accept-Encoding" );
 if( null == acceptEncondings ){
   acceptEncondings = new ArrayList<String>();
 }
 acceptEncondings.add( "gzip" );
 httpHeaders.put( "Accept-Encoding", acceptEncondings );
 context.put( MessageContext.HTTP_REQUEST_HEADERS, httpHeaders );

10.19　EJBのWebサービス呼び出し

EJBをWebサービスとして呼び出せる条件と使用できる機能について説明します。

EJBの条件を次に示します。

EJBのバージョン
EJB 3.0以降でWebサービスとして呼び出せます。

EJBの種類
ステートレスセッションBeanのEJBをWebサービスとして呼び出せます。

インタフェース
EJB Webサービスでは，ビジネスインタフェースを用意する必要はありません。ホームインタフェースを併用できます。
EJB Webサービスが，ビジネスインタフェース，ホームインタフェース，およびコンポーネントインタフェースを持つ場合，Webサービス経由ではこれらのインタフェースを介してメソッドを呼び出すことはできません。
EJB Webサービスがビジネスインタフェースを持つ場合，EJB WebサービスはEJBのローカル呼び出しができます。EJB Webサービスがビジネスインタフェースを持たない場合，EJB WebサービスはWebサービスとして呼び出せますが，EJBとして呼び出すことはできません。
ホームインタフェースはjavax.ejb.RemoteHomeアノテーションまたはjavax.ejb.LocalHomeアノテーションによって指定される場合だけWebサービスとして呼び出せます。DDによって指定される場合はWebサービスとして呼び出せません。

＜この節の構成＞

(1)　EJBのWebサービス呼び出しでのEJB機能

(2)　EJBのWebサービス呼び出しで使用できるアプリケーションサーバ機能

(1)　EJBのWebサービス呼び出しでのEJB機能

EJBをWebサービスとして呼び出す際に，同時に使用できるEJBの機能を次に示します。ただし，EJBのWebサービス実装クラスだけで使用でき，ハンドラチェインでは使用できません。

インターセプタの使用

CMTおよびBMTのトランザクション管理

javax.annotation.security.PermitAllアノテーションおよびjavax.annotation.security.DenyAllアノテーションによるアクセス管理

リソース接続

Timer Service

EJBをWebサービスとして呼び出す際に，同時に使用できないEJBの機能を次に示します。

クライアントからのトランザクションコンテキストの引き継ぎ

クライアントからのセキュリティコンテキストの引き継ぎ

(2)　EJBのWebサービス呼び出しで使用できるアプリケーションサーバ機能

JAX-WSは，EJBをWebサービスとして呼び出す際に，cosminexus.xmlで設定できるアプリケーションサーバの機能を同時に使用できます。使用できるアプリケーションサーバの機能を次に示します。

同時実行スレッド数の設定

実行待ちキューサイズの設定

セキュリティロールの設定

これらの機能を使用するには，WARファイル名を設定します。WARファイル名の設定については「3.5.4(3)　設定用WARファイル名」を参照してください。なお，これらのcosminexus.xmlの設定項目以外でも，EJB Webサービス以外のWebアプリケーションでは利用できます。

11.　コマンド

Webサービスに必要なSEIやJavaBeanクラスは，cjwsimportコマンドおよびaptコマンドで生成できます。また，cjwsgenコマンドを使用すると，コンパイル済みのJavaソースからWSDLを生成できます。

この章では，cjwsimportコマンド，aptコマンド，およびcjwsgenコマンドの使用方法について説明します。

＜この章の構成＞

11.1　cjwsimportコマンド

11.2　aptコマンド

11.3　cjwsgenコマンド

11.4　UACが有効なWindowsでコマンドラインインタフェースを使用する場合の注意事項

11.1　cjwsimportコマンド

cjwsimportコマンドは，JAX-WS 2.1仕様で規定されているマッピング規則に従い，WSDLファイルからJavaにマッピングするコマンドです。cjwsimportコマンドを実行すると，WSDLファイルからWebサービスおよびWebサービスクライアントの実装に必要なJavaソースが生成され，コンパイルされます。

ここでは，cjwsimportコマンドを実行するときの形式や指定内容について説明します。

＜この節の構成＞

(1)　形式

(2)　オプション一覧

(3)　WSIMPORT_OPTS環境変数の指定

(4)　生成されるファイル

(5)　処理中の動作

(6)　終了コード

(7)　異常終了時の対処

(1)　形式

cjwsimportコマンドの指定形式を次に示します。

cjwsimport [オプション群] <WSDLファイルのURLまたはファイルパス>

指定例

ローカルにあるWSDLファイルを相対パス（wsdl/input.wsdl）で指定
cjwsimport -d generated wsdl/input.wsdl

ローカルにあるWSDLファイルを絶対パス（/tmp/wsdl/input.wsdl）で指定
cjwsimport -d generated /tmp/wsdl/input.wsdl

ローカルにあるWSDLファイルをURL（file:///tmp/wsdl/input.wsdl）で指定
cjwsimport -d generated file:///tmp/wsdl/input.wsdl

リモートにあるWSDLファイルをURL（http://example.com:8080/fromjava/test?wsdl）で指定
cjwsimport -d generated http://example.com:8080/fromjava/test?wsdl

cjwsimportコマンド実行時の注意

cjwsimportコマンドは，「%」，「&」および「^」の文字を含んだディレクトリをカレントディレクトリとして実行することはできません。「%」，「&」および「^」の文字を含んだディレクトリをカレントディレクトリとして実行した場合の動作は保証されません。

WSDLファイル指定時の注意

引数にはWSDLファイルのファイルパス（相対パスまたは絶対パス）またはWSDLへのURLを一つ指定します。WSDLファイル以外のファイルを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51200-E）。

WSDLをファイルパスで指定する場合，「&」および「^」を含んだ文字をファイルパスに使用しないでください。使用した場合の動作は保証されません。また，空白を含むファイルパスを指定する場合，ファイルパス全体を引用符「"」で囲んでください。ファイルパス全体を引用符で囲まない場合の動作は保証されません。

WSDLをURLで指定する場合は，RFC2396仕様で規定されている文字，およびRFC2396仕様の規則に従った文字列を使用してください。さらに，文字列はRFC2396仕様の規則に従って，UTF-8でパーセントエンコーディングする必要があります。RFC2396仕様の規則に従わない，またはエンコードしない文字や文字列を指定した場合の動作は保証されません。

WSDLファイルをファイルパスまたはWSDLへのURLで指定する場合は，正しいファイルパスまたはURLを指定してください。WSDLのファイルパスまたはWSDLへのURLの指定を誤り，WSDLファイルが見つからない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51180-EまたはKDJW51189-E）。

引数に指定するWSDLファイルの拡張子は任意です（.wsdl以外の拡張子を指定してもかまいません）。

大文字，小文字は区別されません。

指定する文字列の長さに制限はありません。ただし，OSの制限を超えた場合はエラーになります。

アクセス権限がないWSDLファイルを指定した場合，JDKのエラーとなり処理が終了されます。

(2)　オプション一覧

cjwsimportコマンドのオプション群には，次の表に示すオプションを指定できます。

表11-1　cjwsimportコマンドのオプション一覧

オプション
設定項目
指定内容

-d <ディレクトリ>
クラスファイルの出力先ディレクトリ
コンパイル済みクラスファイル（*.class）の出力先ディレクトリを指定します。
指定できる値については，表外の「-dオプション／-sオプション指定時の注意事項」を参照してください。
このオプションを指定しない場合は，カレントディレクトリに出力されます。

-keep
なし
ソースファイル（*.java）を生成する場合に指定します。

-s <ディレクトリ>
ソースファイルの出力先ディレクトリ
ソースファイル（*.java）を出力する場合の出力先ディレクトリを指定します。
指定できる値については，表外の「-dオプション／-sオプション指定時の注意事項」を参照してください。
出力先ディレクトリは，-dオプションおよび-sオプションの指定によって変わります。オプションの指定と出力先については，表11-3を参照してください。

-verbose
なし
コマンド実行時の詳細な処理経過を出力する場合に指定します。

-b <パス>
外部バインディングファイルのパス
外部バインディングファイルを使用する場合に，外部バインディングファイルのパスを指定します。
指定できる値については，表外の「-bオプション指定時の注意事項」を参照してください。

-p <パッケージ>
Javaコードのパッケージ名
Javaソースのパッケージ名を指定します。
このオプションを指定した場合，バインディング宣言で指定したパッケージ名のカスタマイズや，標準仕様で定義されたデフォルトのパッケージ名の生成アルゴリズムは上書きされます。

-generateService
Webサービス実装クラスの生成
Webサービス実装クラス（スケルトンクラス）を生成する場合に指定します。
生成されるファイルについては，「11.1(4)　生成されるファイル」を参照してください。

-help
なし
ヘルプを表示する場合に指定します。
このオプションを指定した場合，-versionを除くすべてのオプションの指定が無視され，ヘルプが表示されて終了します。

-version
なし
バージョン情報を表示する場合に指定します。
このオプションを指定した場合，ほかのオプションの指定が無視され，バージョン情報が表示されて終了します。

-wsdllocation
javax.xml.ws.WebServiceClientアノテーションの，wsdlLocation要素に設定する値
javax.xml.ws.WebServiceClientアノテーションの，wsdlLocation要素に設定する値を指定します。

ファイル生成時のディレクトリの作成

cjwsimportコマンドを実行すると，指定した出力先ディレクトリに，生成されるファイルのパッケージ名に対応するディレクトリが作成され，そのディレクトリにファイルが出力されます。

WSDLファイル（test.wsdl）の「要求メッセージのwrapper要素が参照する型」の名前空間URIに，「http://example.com/sample」が記述されている場合のコマンド指定例および出力先（リクエストbeanの場合）を示します。

コマンド指定例
cjwsimport -d ./output -keep input/test.wsdl

出力先（リクエストbean）
リクエストbeanのコンパイル済みクラスファイルとソースファイルは，次のディレクトリに出力されます。
./output/com/example/sample/

次に，オプションに指定できる値や，指定を省略した場合の動作など，オプションの指定値についての注意事項を示します。

オプション共通の注意事項

全オプション共通の注意事項を示します。

オプション群と引数の指定順序は任意です。また，各オプションの指定順序も任意です。

引数を持つオプションは，必ず引数を指定してください。引数を指定しない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51001-E）。

同じオプションを重複して指定した場合は，最後に指定したオプションが有効になります。

大文字，小文字を区別します。

指定する文字列の長さに制限はありません。ただし，OSの制限を超えた場合はエラーになります。

パスを指定するオプションには，「&」および「^」を含んだ文字列を使用しないでください。使用した場合の動作は保証されません。また，空白を含むパスを指定する場合，パス全体を引用符「"」で囲んでください。パス全体を引用符で囲まない場合の動作は保証されません。

指定できないオプションを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51001-E）。

-dオプション／-sオプション指定時の注意事項

-dオプションおよび-sオプションの指定値についての注意事項を示します。

指定値の大文字，小文字は区別されません。

指定した出力先ディレクトリがない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51181-E）。

出力先ディレクトリに誤ってファイルを指定した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51182-E）。

アクセス権限がないWSDLファイルを指定した場合，JDKのエラーとなり処理が終了されます。

-d／-s／-keepオプションの指定有無とファイルの出力先

-dオプション，-sオプション，および-keepオプションの指定によって，コンパイル済みクラスファイルと，ソースファイルの出力先ディレクトリが異なります。

オプションの指定有無とコンパイル済みクラスファイルの出力先ディレクトリを次の表に示します。

表11-2　オプションの指定有無とコンパイル済みクラスファイルの出力先ディレクトリ

オプションの指定有無 | ソースファイルの出力有無と出力先ディレクトリ
-d | -s | -keep
○ | － | － | -dオプションで指定したディレクトリに出力されます。
× | － | － | カレントディレクトリに出力されます。

（凡例）

○：オプションが指定されていることを示します。

×：オプションが指定されていないことを示します。

－：オプションの指定有無は，出力先ディレクトリに影響しないことを示します。

オプションの指定有無とソースファイルの出力先ディレクトリを次の表に示します。

表11-3　オプションの指定有無とソースファイルの出力先ディレクトリ

オプションの指定有無 | ソースファイルの出力有無と出力先ディレクトリ
-d | -s | -keep
○ | ○ | － | -sオプションで指定したディレクトリに出力されます。
○ | × | ○ | -dオプションで指定したディレクトリに出力されます。
○ | × | × | 出力されません。
× | ○ | － | -sオプションで指定したディレクトリに出力されます。
× | × | ○ | カレントディレクトリに出力されます。
× | × | × | 出力されません。

（凡例）

○：オプションが指定されていることを示します。

×：オプションが指定されていないことを示します。

－：オプションの指定有無は，出力先ディレクトリに影響しないことを示します。

-bオプション指定時の注意事項

-bオプションの指定値についての注意事項を示します。

指定値の大文字，小文字は区別されません。

外部バインディングファイルはファイルパスで指定してください。URL形式で指定した場合の動作は保証されません。

指定した外部バインディングファイルがない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51184-E）。

外部バインディングファイル以外のファイルを指定した場合，動作は保証されません。

誤ってディレクトリを指定した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51185-E）。

アクセス権限がないWSDLファイルを指定した場合，JDKのエラーとなり処理が終了されます。

指定した外部バインディングファイルがカスタマイズ対象とするWSDLファイルと，cjwsimportコマンドの引数に指定したカスタマイズ対象のWSDLファイルは同じファイルを指定してください。同じでない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51190-E）。

外部バインディングファイルの拡張子（.wsdl）の指定は任意です。

-pオプション指定時の注意事項

-pオプションの指定値についての注意事項を示します。

パッケージ名は，半角英数字（0～9，A～Z，a～z），アンダースコア（_），およびピリオド（.）で指定します。それ以外の文字を指定した場合，動作は保証されません。

"xxx.yyy.zzz"のようにピリオド（.）で区切られた各ラベル（"xxx"，"yyy"，"zzz"）は，Javaの識別子に使用できる文字列を指定してください。使用できない文字を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます。

-wsdllocationオプション指定時の注意事項

-wsdllocationオプションは，URI形式で指定してください。それ以外の形式で指定した場合の動作は保証されません。

無視される値に指定した場合の動作について

コマンドの指定値のうち，指定しても無視されるとしているものに値を指定した場合，あとの処理でエラーになる可能性があります。

(3)　WSIMPORT_OPTS環境変数の指定

WSIMPORT_OPTS環境変数にオプション文字列を指定すると，cjwsimportコマンドを起動するjavaコマンドにオプションを追加できます。デフォルトの設定では，WSIMPORT_OPTS環境変数には何も指定されていないので，必要に応じて任意の文字列を指定してください。

例えば，WSIMPORT_OPTS環境変数を利用して，SSL通信に必要なJDKのシステムプロパティを指定し，従来HTTPSを利用しないとWSDLにアクセスできないWSDLに対しても，cjwsimportコマンドを実行できます。例を次に示します。

> set WSIMPORT_OPTS=-Djavax.net.ssl.trustStore=<トラストストア> -Djavax.net.ssl.trustStorePassword=<トラストストアのパスワード>
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" https://securehost:443/fromwsdl/TestJaxWsService?wsdl

(4)　生成されるファイル

cjwsimportコマンドの実行時に生成されるファイルを次の表に示します。

表11-4　cjwsimportコマンドの生成ファイル一覧

項番
Javaコード
内容
-generateServiceオプションによる出力

指定あり
指定なし

1
リクエストbeanクラス
要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
指定したWSDLファイルがwrapperスタイルでない場合は出力されません。
○
○

2
レスポンスbeanクラス
応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
指定したWSDLファイルがwrapperスタイルでない場合は出力されません。
○
○

3
フォルトbeanクラス
フォルトメッセージが参照する型に対応するJavaBeanクラスです。
指定したWSDLファイルでフォルトが定義されていない場合は出力されません。
○
○

4
ラッパ例外クラス
フォルトbeanクラスのラッパ例外クラスです。
○
○

5
ObjectFactoryクラス
JAXB 2.1仕様のファクトリクラスです。
○
○

6
JAXB 2.1仕様のそのほかのクラス
JAXB 2.1仕様のそのほかのクラスです。XML Schema仕様の構文で記述した各種要素，型に対応するJavaインタフェースおよびJavaクラスです。
○
○

7
package-infoクラス
パッケージ情報です。
○
○

8
SEI
サービスエンドポイントインタフェースです。
○
○

9
スケルトンクラス
SEIを実装（implements）したスケルトンクラスです。このクラスに実装を追加します。
○
×

10
サービスクラス
Webサービスにアクセスするためのクラスです。
×
○

（凡例）

○：ファイルが出力されることを示します。

×：ファイルが出力されないことを示します。

ファイル生成時の注意事項

生成されるファイルの出力先ディレクトリにスケルトンクラスと同名のファイルがある場合は，標準エラー出力とログに警告メッセージが出力されます（KDJW51203-W）。このとき，スケルトンクラスは出力されないで，処理は続行されます。

また，生成されるファイルの出力先ディレクトリにWebサービス実装クラス以外の同名のファイルがある場合，ファイルが上書きされます。

Javadocのヘッダ情報の出力

生成されるファイルでは，Cosminexusに関する情報が，Javadocとしてヘッダ情報に出力されます。

(5)　処理中の動作

cjwsimportコマンドを実行すると，標準出力とログにコマンド実行を示すメッセージ（KDJW50001-I）が出力され，Javaソースの生成処理およびJavaソースのコンパイル処理が行われます。それぞれの処理について，次に示します。

Javaソースの生成処理

Javaソースの生成開始時には，標準出力とログに生成開始を示すメッセージが出力されます（KDJW50004-I）。Javaソースの生成に失敗した場合，エラーの原因となったエラーメッセージが標準エラー出力とログに出力されます（KDJW50005-E）。

Javaソースのコンパイル処理

Javaソースのコンパイル開始時には，標準出力とログにコンパイル開始を示すメッセージが出力されます（KDJW50006-I）。Javaソースのコンパイルに失敗した場合は，エラーの原因となったエラーメッセージが標準エラー出力とログに出力されます（KDJW50007-E）。

(6)　終了コード

cjwsimportコマンドの終了コードを示します。

0：正常終了

処理の途中で続行できないエラーが検出されなければ，標準出力とログに終了したことを示すメッセージが表示され，処理が終了されます（KDJW50002-I）。

1：異常終了

処理の途中で続行できないエラーが一つでも検出された場合は，標準出力とログにエラーメッセージが表示され，処理が終了されます（KDJW50003-E）。異常終了時の対処については，「11.1(7)　異常終了時の対処」を参照してください。

処理の途中で続行できる軽微なエラーが検出された場合は，警告メッセージが出力され，処理が続行されます。

なお，設定したログ出力レベル（重要度）によって，ログが出力されない場合があります。ログ出力レベルの設定については，「10.1.2　共通定義ファイルの設定項目」を参照してください。

(7)　異常終了時の対処

cjwsimportコマンドの実行時に異常終了した場合，エラーメッセージが出力され，処理が終了されます。この場合，出力されたエラーの要因を取り除き，cjwsimportコマンドを再実行します。

複数のエラーがある場合でも，最初に検出されたエラーが表示されます。この場合，cjwsimportコマンドを繰り返し実行して，表示されたエラーの要因を一つずつ取り除いてください。

11.2　aptコマンド

aptコマンドは，アノテーションを解釈して，追加のJavaコードを生成し，基のJavaコードを含めてコンパイルするJDKのコマンドです。Webサービスの開発では，SEIを起点とした開発をする場合に使用します。Webサービス実装クラスに記述されたアノテーション（JAX-WS 2.1仕様に従って記述）を解釈し，必要なJavaBeanクラスを追加して生成します。

aptコマンドの形式，引数，およびオプションについては，JDKのドキュメントを参照してください。ここでは，JDKのドキュメントで規定されていない内容や，コマンド実行時の注意事項について説明します。

＜この節の構成＞

(1)　引数に指定するWebサービス実装クラスおよびSEI

(2)　必須オプション

(3)　生成されるファイル

(4)　続行できる軽微なエラーが検出された場合の動作

(5)　異常終了時の対処

(1)　引数に指定するWebサービス実装クラスおよびSEI

aptコマンドの引数には，Webサービス実装クラスおよびSEI（SEIを参照している場合）をそれぞれ1個指定します。Webサービス実装クラスを2個以上指定した場合は，ログにエラーメッセージが出力され，エラーメッセージがaptコマンドに返されます（KDJW61002-E）。ただし，SEIだけ指定した場合などWebサービス実装クラスがない場合は，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61001-W）。この場合，JavaBeanクラスは生成されません。

上記以外のSEIおよびWebサービス実装クラスに関する注意事項は，「13.1　JavaからWSDLへのデフォルトマッピング」および「13.2　JavaからWSDLへのマッピングのカスタマイズ」を参照してください。

aptコマンドでは，javax.ejb.Statelessアノテーションの付いたEJBのWebサービス実装クラスを引数に指定した場合，次の警告が出力されます。

警告: プロセッサなしの注釈タイプです: [javax.ejb.Stateless]

(2)　必須オプション

aptコマンドを実行するときは，-classpathオプションおよび-J-Dcosminexus.homeオプションの指定が必須です。それぞれの指定値を次に示します。

-classpathオプション

<Cosminexusのインストールディレクトリ>/jaxws/lib/cjjaxws.jar

<Cosminexusのインストールディレクトリ>/jaxp/lib/csmjaxb.jar

<Cosminexusのインストールディレクトリ>/jaxp/lib/csmjaxp.jar

<Cosminexusのインストールディレクトリ>/jaxp/lib/csmstax.jar

<Cosminexusのインストールディレクトリ>/CC/client/lib/j2ee-javax.jar

<Cosminexusのインストールディレクトリ>/CC/client/lib/HiEJBClientStatic.jar

Windows(x86)の場合

< HNTRLib2インストールディレクトリ>※/classes/hntrlib2j.jar

< HNTRLib2インストールディレクトリ>※/classes/hntrlibMj.jar

Windows(x64)の場合

< HNTRLib2インストールディレクトリ>※/classes/hntrlib2j64.jar

< HNTRLib2インストールディレクトリ>※/classes/hntrlibMj64.jar

-J-Dcosminexus.home

<Cosminexusのインストールディレクトリ>

注※

<HNTRLib2インストールディレクトリ>の部分は次に示すコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

(3)　生成されるファイル

aptコマンドの実行時に生成されるファイルを次の表に示します。

表11-5　aptコマンドの生成ファイル一覧

項番 | Javaコード | 内容
1 | リクエストbeanクラス | 要求メッセージのJavaBeanクラスです。wrapperスタイルの場合に出力されます。
2 | レスポンスbeanクラス | 応答メッセージのJavaBeanクラスです。wrapperスタイルの場合に出力されます。
3 | フォルトbeanクラス | フォルトに対応するJavaBeanクラスです。指定したJavaコードでラッパ例外クラスが定義されている場合で，かつフォルトbeanがない場合に出力されます。

ファイル生成時のディレクトリの作成

aptコマンドを実行すると，指定した出力先ディレクトリに，生成されるファイルのパッケージ名に対応するディレクトリが作成され，そのディレクトリにファイルが出力されます。

指定例および出力先を次に示します。

コマンド指定例
apt -d ./output -s ./output/ -sourcepath . com/example/test.java

出力先
JavaBeanクラス以外のソースファイル，およびコンパイル済みクラスファイルは次のディレクトリに出力されます。
./output/com/example/
ただし，コマンドに指定したJavaコードにJavaBeanクラスがある場合は，JavaBeanクラスのソースファイルおよびそのコンパイル済みクラスファイルはSEIのパッケージのjaxwsサブパッケージに出力されます（パッケージ名をアノテーションでカスタマイズしている場合を除く）。
./output/com/example/jaxws/

CosminexusのJAX-WS機能が提供するアノテーションプロセッサでは，Javaコードの出力先ディレクトリがない場合やディレクトリではない場合などで不正な場合，ログにエラーメッセージが出力され，aptコマンドにエラーが通知されます（KDJW61003-E）。

Javaコードの出力先は，aptコマンドの引数に指定した-sオプションの値となります。-sオプションが指定されていない場合は，-dオプションに指定された値となります。-sオプション，-dオプションのどちらも指定されていない場合，カレントディレクトリが出力先となります。

Javadocのヘッダ情報の出力

生成されるファイルでは，Cosminexusに関する情報が，Javadocとしてヘッダ情報に出力されます。

(4)　続行できる軽微なエラーが検出された場合の動作

処理の途中で続行できる軽微なエラーが検出された場合は，警告メッセージが出力され，処理が続行されます。

なお，設定したログ出力レベル（重要度）によって，ログが出力されない場合があります。ログ出力レベルの設定については，「10.1.2　共通定義ファイルの設定項目」を参照してください。

(5)　異常終了時の対処

aptコマンドの実行時にエラーが発生した場合，エラーメッセージが出力され，処理が終了されます。

エラーメッセージが出力された場合，出力されたエラーの要因を取り除き，aptコマンドを再実行してください。表示されたエラーの要因を一つずつ取り除き，正常終了するまで，aptコマンドを繰り返し実行してください。すでにファイルが生成されている場合は，aptコマンドを実行する前に生成されたファイルを削除してください。

なお，設定したログ出力レベル（重要度）によって，ログが出力されない場合があります。ログ出力レベルの設定については，「10.1.2　共通定義ファイルの設定項目」を参照してください。

11.3　cjwsgenコマンド

cjwsgenコマンドは，サービス実装クラスのクラスファイルを基に，Webサービスのデプロイに必要なJavaコード（JavaBeanクラス）と，リソースファイル（WSDLおよびXSD）を生成するコマンドです。なお，サービス実装クラスには，サービス実装クラスが参照しているクラスやSEIも含むものとします。

ここでは，cjwsgenコマンドを実行するときの形式や指定内容について説明します。

＜この節の構成＞

(1)　形式

(2)　オプション一覧

(3)　生成されるファイル

(4)　入力サービス実装クラスと出力リソースファイルの関係

(5)　処理中の動作

(6)　終了コード

(7)　異常終了時の対処

(1)　形式

cjwsgenコマンドの指定形式を次に示します。

cjwsgen [オプション群] サービス実装クラスの完全修飾名

指定例

デプロイ前にWSDLを確認する場合
cjwsgen -wsdl -cp . com.example.UserInfoImpl

既存のWebサービス（SOAP1.1）からWebサービス（SOAP1.2）のJavaコードおよびリソースファイルを生成する場合
cjwsgen -soap 1.2 -cp . com.example.UserInfoImpl

既存のWebサービスからWebサービス（サービス名がMyService）のJavaコードおよびリソースファイルを生成する場合
cjwsgen -servicename {http://example.com/}MyService -cp . com.example.UserInfoImpl

既存のWebサービスからWebサービス（ポート名がMyServicePort）のJavaコードおよびリソースファイルを生成する場合
cjwsgen -portname {http://example.com/}MyServicePort -cp . com.example.UserInfoImpl

cjwsgenコマンド実行時の注意

cjwsgenコマンドは，「&」および「^」の文字を含んだディレクトリをカレントディレクトリとして実行することはできません。「&」および「^」の文字を含んだディレクトリをカレントディレクトリとして実行した場合の動作は保証されません。

サービス実装クラス指定時の注意

サービス実装クラスのソースファイルは，クラスファイルとは別のディレクトリに配置してください。ソースファイルがクラスファイルと同じディレクトリに配置されていると，エラーが発生するおそれがあります。

引数には，サービス実装クラスのクラスファイルを完全修飾名で指定します。

引数が指定されていない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71023-E）。

引数にクラスファイル以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71026-E）。

引数にサービス実装クラス以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71025-E）。

指定されたサービス実装クラスが見つからない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71026-E）。

指定されたサービス実装クラスに対するアクセス権がない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71026-E）。

javax.jws.WebServiceアノテーションが指定されていないサービス実装クラスを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71029-E）。

引数にサービス実装クラスを含む複数のクラスを指定した場合は，警告メッセージが出力され，処理が続行されます（KDJW71027-W）。どのサービス実装クラスが有効に扱われたのかは，警告メッセージで確認してください。

インナークラスであるサービス実装クラスは，引数に指定しないでください。指定した場合の動作は保証されません。

上記以外のSEIおよびWebサービス実装クラスに関する注意事項は，「13.1　JavaからWSDLへのデフォルトマッピング」および「13.2　JavaからWSDLへのマッピングのカスタマイズ」を参照してください。

(2)　オプション一覧

cjwsgenコマンドのオプション群には，次の表に示すオプションを指定できます。

表11-6　 cjwsgenコマンドのオプション一覧

オプション
設定項目
指定内容

-d <ディレクトリ>
コンパイル済みクラスファイルの出力先ディレクトリのパス
コンパイル済みクラスファイル（*.class）の出力先ディレクトリを指定します。
指定できる値については，表外の「-d/-s/-rオプション指定時の注意事項」を参照してください。
ほかのオプションが指定されている場合，このオプションで指定したディレクトリにコンパイル済みクラスファイル以外のファイルが出力されることがあります。詳細は，表外の「-d／-s／-keepオプションの組み合わせと出力先ディレクトリ」および「-d／-r／-soap／-servicename／-portname／-soap12binding／-wsdlオプションの組み合わせと出力先ディレクトリ」を参照してください。

-s <ディレクトリ>
ソースファイルの出力先ディレクトリのパス
ソースファイル（*.java）を出力する場合の出力先ディレクトリを指定します。

-r <ディレクトリ>
リソースファイルの出力先ディレクトリのパス
リソースファイル（*.wsdlおよび*.xsd）を出力する場合の出力先ディレクトリを指定します。

-keep
なし
ソースファイル（*.java）を保持するかどうかを指定します。

-wsdl
なし
リソースファイル（*.wsdlおよび*.xsd）を出力するかどうかを指定します。

-soap <バージョン>
SOAPバインディングのバージョン
Webサービスが通信時に使用するSOAPバインディングのバージョンを指定します。

-servicename <サービス名>
サービス名
変更後のサービス名を指定します。

-portname <ポート名>
ポート名
変更後のポート名を指定します。

-soap12binding < soap spec >
soap12:binding要素のtransport属性に設定するURLを示す値
SOAP1.2の場合に，wsdl:binding要素の子要素であるsoap12:binding要素のtransport属性に，どのURLを設定するかを指定します。

-classpath <クラスパス>
サービス実装クラスが含まれるクラスパス
引数に指定するサービス実装クラスが含まれるクラスパスを指定します。

-cp <クラスパス>

-verbose
なし
コマンド実行時の詳細な処理経過を出力する場合に指定します。

-help
なし
ヘルプを表示する場合に指定します。
このオプションを指定した場合，-versionを除くすべてのオプションの指定が無視され，ヘルプが表示されて終了します。

-version
なし
バージョン情報を表示する場合に指定します。
このオプションを指定した場合，ほかのオプションの指定が無視され，バージョン情報が表示されて終了します。

次に，オプションに指定できる値や，指定を省略した場合の動作など，オプションの指定値についての注意事項を示します。

オプション共通の注意事項

全オプション共通の注意事項を示します。

オプション群と引数の指定順序は任意です。また，各オプションの指定順序も任意です。

引数を持つオプションは，必ず引数を指定してください。引数を指定しない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71001-E）。

同じオプションを重複して指定した場合は，最後に指定したオプションが有効になります。ただし，不正な値を指定したオプションがある場合は，エラーが発生することがあります。

大文字，小文字は区別されます。

指定する文字列の長さに制限はありません。ただし，OSの制限を超えた場合はエラーになります。

オプションに空白を含むパスを指定する場合，パス全体を引用符「"」で囲んでください。パス全体を引用符で囲まない場合の動作は保証されません。

指定できないオプションを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71001-E）。

-d／-s／-rオプション指定時の注意事項

-dオプション，-sオプション，および-rオプションの指定値についての注意事項を示します。

指定値の大文字，小文字は区別されません。

指定した出力先ディレクトリがない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71002-E）。

出力先ディレクトリに誤ってファイルを指定した場合，標準エラー出力とログにエラーメッセージが，標準出力にヘルプが出力され，処理が終了されます（KDJW71003-E）。

-dオプションに指定する出力先ディレクトリのパスには，次の文字は使用しないでください。使用した場合の動作は保証されません。
#　%　&　^　;　`　{　}　[　]

-rオプションに指定する出力先ディレクトリのパスには，次の文字は使用しないでください。使用した場合の動作は保証されません。
%　&　^　`　{　}　[　]

-sオプションに指定する出力先ディレクトリのパスには，次の文字は使用しないでください。使用した場合の動作は保証されません。
&　^

アクセス権限がないディレクトリを指定した場合，JDKのエラーとなり処理が終了されます。

-soapオプション指定時の注意事項

-soapオプションの指定値についての注意事項を示します。

SOAPバインディングのバージョンは，1.1または1.2だけが指定できます。それ以外の値を指定した場合，標準エラー出力とログにエラーメッセージが，標準出力にヘルプが出力され，処理が終了されます（KDJW71004-E）。

soapオプションとjavax.xml.ws.BindingTypeアノテーションの両方に値が指定されている場合は，-soapオプションの値が優先されます。

-soapオプションを省略した場合は，javax.xml.ws.BindingTypeアノテーションの指定値が有効になります。

javax.xml.ws.BindingTypeの指定値がSOAP 1.2 over HTTPバインディングの場合，-soapオプションに1.1を指定すると，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71007-E）。

-servicenameオプション指定時の注意事項

-servicenameオプションは，QName形式で記述します。-servicenameオプションの記述例を次に示します。

{名前空間URI}サービス名

名前空間

名前空間URIは，括弧（{ }）で囲んでください。名前空間を省略，または括弧（{ }）で囲んでいない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71009-E）。

括弧が閉じられていない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71008-E）。

括弧（{ }）の中に値がない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71008-E）。

名前空間URIは，半角英数字で指定してください。半角英数字以外を指定した場合の動作は保証されません。

プロトコル

-servicenameオプションに記述する名前空間URIとして有効なのは，http://またはurn:で始まるドメイン名だけです。https://やfile://などで始まる名前空間URIは，不正と見なされます。http://またはurn:以外で始まる名前空間URIを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71011-E）。

-servicenameオプションに記述する名前空間URIを相対パスで指定することはできません。相対パスで名前空間URIを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71012-E）。

指定できない情報

-servicenameオプションに記述する名前空間URIには，クエリストリング，アンカー，ポート番号，ユーザ名，およびパスワードは記述できません。これらの情報を名前空間URIに記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71013-E）。

記述できる文字列

区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表11-7　名前空間に記述できる文字列の条件（-servicenameオプション指定時）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com/
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

サービス名

サービス名を省略した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71014-E）。

サービス名は，半角英数字およびアンダースコアで指定してください。半角英数字またはアンダースコア以外の文字を指定した場合の動作は保証されません。

サービス名は，Javaで規定された識別子の命名規則に従って指定することをお勧めします。指定したサービス名がJavaで規定された識別子の命名規則に従っていない場合，cjwsimportコマンドを実行してWebサービスクライアントを開発するときにコンパイルエラーが発生します。

-portnameオプション指定時の注意事項

-portnameオプションは，QName形式で記述します。-portnameオプションの記述例を次に示します。

{名前空間URI}ポート名

名前空間

名前空間URIは，括弧（{ }）で囲んでください。名前空間を省略，または括弧（{ }）で囲んでいない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71016-E）。

括弧が閉じられていない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71015-E）。

括弧（{ }）の中に値がない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71015-E）。

名前空間URIは，WSDLファイルのservice要素と同じ名前空間URIを指定してください。WSDLファイルのservice要素と異なる名前空間URIを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71022-E）。

名前空間URIは，半角英数字で指定してください。半角英数字以外を指定した場合の動作は保証されません。

プロトコル

-portnameオプションに記述する名前空間URIとして有効なのは，http://またはurn:で始まるドメイン名だけです。https://やfile://などで始まる名前空間URIは，不正と見なされます。http://またはurn:以外で始まる名前空間URIを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71018-E）。

-portnameオプションに記述する名前空間URIを相対パスで指定することはできません。相対パスで名前空間URIを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71019-E）。

指定できない情報

-portnameオプションに記述する名前空間URIには，クエリストリング，アンカー，ポート番号，ユーザ名，およびパスワードは記述できません。これらの情報を名前空間URIに記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71020-E）。

記述できる文字列

区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表11-8　名前空間に記述できる文字列の条件（-portnameオプション指定時）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com/
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

ポート名

ポート名を省略した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71021-E）。

ポート名は，半角英数字およびアンダースコアで指定してください。半角英数字またはアンダースコア以外の文字を指定した場合の動作は保証されません。

-soap12bindingの指定値の注意事項

-soap12bindingオプションは"DEFAULT"または"WSI_BP20_TRANSPORT"だけを指定できます。ほかの値を指定すると，標準エラー出力とログにエラーメッセージが出力され，さらに標準出力にヘルプが出力されて，処理が終了されます（KDJW71030-E）。

-soap12bindingオプションと，cjwsgenコマンドが生成するWSDLのsoap12:binding要素のtransport属性値の関係を次の表に示します。

表11-9　-soap12bindingオプションとtransport属性値の関係

項番 | オプション指定有無 | オプション指定値 | 設定されるtransport属性値
1 | 指定なし | なし | http://www.w3.org/2003/05/soap/bindings/HTTP/
2 | 指定あり | DEFAULT
3 | WSI_BP20_TRANSPORT | http://schemas.xmlsoap.org/soap/http

-classpath／-cpオプション指定時の注意事項

-classpathオプションおよび-cpオプションの指定値についての注意事項を示します。

オプションを省略した場合は，環境変数CLASSPATHがクラスパスとして使用されます。オプションを指定した場合は，環境変数CLASSPATHは無視されます。

環境変数CLASSPATHで指定した値はそのまま適用されるため，空白を含む場合でも，引用符「"」で囲む必要はありません。引用符で囲む形式で指定した場合の動作は保証されません。

オプションを省略し，環境変数CLASSPATHも指定していない場合は，カレントディレクトリがクラスパスとして使用されます。

クラスパスは，相対パス，絶対パスのどちらでも指定できます。

クラスパスとしてJARファイルを指定することもできます。

複数のクラスパスを指定する場合は，クラスパスの間にセミコロンを記述してください。

指定するクラスパスには，次の文字は使用しないでください。使用した場合の動作は保証されません。
#　%　&　^

指定したクラスパスが不正な場合は標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW71026-E）。

-d／-s／-keepオプションの組み合わせと出力先ディレクトリ

コンパイル済みクラスファイル（*.class）は，-dオプションが指定されている場合は-dオプションで指定したディレクトリに，-dオプションが指定されていない場合はカレントディレクトリに出力されます。

ソースファイル（.java）が出力されるかどうか，また，出力される場合の出力先ディレクトリは，オプションの組み合わせによって次の表のとおり異なります。なお，リソースファイルだけを利用したい場合は，ソースファイルを出力しなくてもかまいません。

表11-10　ソースファイルの出力有無と出力先ディレクトリ

オプションと指定有無
出力有無
出力先

-d
オプション
-s
オプション
-keep
オプション

指定あり
指定あり
指定あり
○
-sオプションで指定したディレクトリ

指定なし

指定なし
指定あり
○
-dオプションで指定したディレクトリ

指定なし
×
－

指定なし
指定あり
指定あり
○
-sオプションで指定したディレクトリ

指定なし

指定なし
指定あり
○
カレントディレクトリ

指定なし
×
－

（凡例）

－：ソースファイルの出力がないため，該当しないことを示します。

○：ソースファイルが出力されることを示します。

×：ソースファイルが出力されないことを示します。

-d／-r／-soap／-servicename／-portname／-soap12binding／-wsdlオプションの組み合わせと出力先ディレクトリ

リソースファイル（*.wsdlおよび*.xsd）が出力されるかどうか，また，出力される場合の出力先ディレクトリは，オプションの組み合わせによって次の表のとおり異なります。

表11-11　リソースファイルの出力有無と出力先ディレクトリ

オプションと指定有無
出力有無
出力先

-d
オプション
-r
オプション
-soap，-servicename，
-portname，-soap12binding
オプション
-wsdl
オプション

指定あり
指定あり
指定あり
指定あり
○
-rオプションで指定したディレクトリ

指定なし

指定なし
指定あり

指定なし

指定なし
指定あり
指定あり
○
-dオプションで指定したディレクトリ

指定なし

指定なし
指定あり
○
-dオプションで指定したディレクトリ

指定なし
×
－

指定なし
指定あり
指定あり
指定あり
○
-rオプションで指定したディレクトリ

指定なし

指定なし
指定あり

指定なし

指定なし
指定あり
指定あり
○
カレントディレクトリ

指定なし

指定なし
指定あり
○
カレントディレクトリ

指定なし
×
－

（凡例）

－：リソースファイルの出力がないため，該当しないことを示します。

○：リソースファイルが出力されることを示します。

×：リソースファイルが出力されないことを示します。

(3)　生成されるファイル

cjwsgenコマンドの実行時に生成されるファイルを次の表に示します。

表11-12　cjwsgenコマンドの生成ファイル一覧

項番 | 生成ファイル | 内容
1 | リクエストbeanクラス | 要求メッセージのJavaBeansクラスです。生成されるサービス実装クラスがwrapper形式の場合に出力されます。
2 | レスポンスbeanクラス | 応答メッセージのJavaBeansクラスです。生成されるサービス実装クラスがwrapper形式の場合に出力されます。
3 | フォルトbeanクラス | フォルトに対応するJavaBeansクラスです。指定されたJavaコードにラッパ例外クラスが定義されていて，フォルトbeanが存在しない場合に出力されます。
4 | WSDL | WSDLファイルです。
5 | XSD | XMLスキーマ定義ファイルです。

ファイル生成時のディレクトリの作成

cjwsgenコマンドを実行すると，指定した出力先ディレクトリに，生成されるファイルのパッケージ名に対応するディレクトリが作成され，そのディレクトリにファイルが出力されます。

指定例および出力先を次に示します。

コマンド指定例
cjwsgen -d ./output -s ./output -keep -cp . com.example.UserInfoImpl

出力先
cjwsgenコマンドに指定したサービス実装クラスのクラスファイルにJavaBeanクラスがある場合は，JavaBeanクラスのソースファイルおよびコンパイル済みクラスファイルが次のjaxwsサブパッケージに出力されます（パッケージ名をアノテーションでカスタマイズしている場合を除く）。
./output/com/example/jaxws/

また，リソースファイルの生成物は，cjwsgenコマンドの引数で指定したディレクトリに出力されます。指定例および出力先を次に示します。

コマンド指定例
cjwsgen -r ./output -cp . com.example.UserInfoImpl

出力先
./output/

ファイル生成時の注意事項

生成されるファイルの出力先ディレクトリに同名のファイルがある場合，ファイルが上書きされます。

Javadocのヘッダ情報の出力

生成されるファイルでは，Cosminexusに関する情報が，Javadocとしてヘッダ情報に出力されます。

(4)　入力サービス実装クラスと出力リソースファイルの関係

入力サービス実装クラスと出力リソースファイルの関係を次の表に示します。

表11-13　入力サービス実装クラスと出力リソースファイルの関係

入力サービス実装クラス
出力リソース

WSDL
XSD

ファイル数
ファイル名
ファイル数※1
ファイル名

SEIなし
1
wsdl:service要素のname属性値
1～N※2
wsdl:service要素のname属性値＋接尾辞（_schemaN）※2

SEIあり（サービス実装クラスと同じ名前空間）
1
wsdl:service要素のname属性値
1～N※2
wsdl:service要素のname属性値＋接尾辞（_schemaN）※2

SEIあり（サービス実装クラスと異なる名前空間）
2

抽象WSDLファイルの場合※3
wsdl:portType要素のname属性値

実装WSDLファイルの場合※4
wsdl:service要素のname属性値

1～N※2
wsdl:portType要素のname属性値＋接尾辞（_schemaN）※2

注※1

スキーマの名前空間が異なると，そのたびにファイルが生成されます。

注※2

Nはスキーマの名前空間の数です。生成できるファイルの上限数は，OSに依存します。

注※3

抽象WSDLとは，「wsdl:types要素, wsdl:message要素, wsdl:portType要素」のWSDLを指します。

注※4

実装WSDLとは，「wsdl:binding要素，wsdl:service要素」のWSDLを指します。

(5)　処理中の動作

cjwsgenコマンドを実行すると，標準出力とログにコマンド実行を示すメッセージ（KDJW70001-I）が出力され，JavaBeansの生成と削除，WSDLおよびXSDの生成が実行されます。それぞれの処理について，次に示します。

JavaBeansの生成処理

JavaBeansの生成開始時には，標準出力とログに生成開始を示すメッセージが出力されます（KDJW70004-I）。JavaBeansの生成に失敗した場合，エラーの原因となったエラーメッセージが標準エラー出力とログに出力されます（KDJW70005-E）。

WSDLおよびXSDの生成処理

生成されたJavaBeansの内容に対応したリソースファイル（WSDLおよびXSD）の生成開始時には，標準出力とログに生成開始を示すメッセージが出力されます（KDJW70006-I）。リソースファイルの生成に失敗した場合，エラーの原因となったエラーメッセージが標準エラー出力とログに出力されます（KDJW70007-E）。

JavaBeansの削除処理

生成したJavaBeansのソースファイルを削除します。ただし，オプションの指定内容によっては，ソースファイルが削除されない場合もあります。オプションについては，「11.3(2)　オプション一覧」を参照してください。

(6)　終了コード

cjwsgenコマンドの終了コードを示します。

0：正常終了

処理の途中で続行できないエラーが検出されなければ，標準出力とログに終了したことを示すメッセージが表示され，処理が終了されます（KDJW70002-I）。

1：異常終了

処理の途中で続行できる軽微なエラーが検出された場合は，警告メッセージが出力され，処理が続行されます。

処理の途中で続行できないエラーが検出された場合は，標準出力とログに終了したことを示すメッセージが表示され，処理が終了されます（KDJW70003-E）。異常終了時の対処については，「11.3(7)　異常終了時の対処」を参照してください。

複数のエラーが検出された場合は，最初に検出されたエラーが標準出力とログに終了したことを示すメッセージが表示され，処理が終了されます。

cjwsgenコマンドを実行すると，aptコマンドが呼び出されるため，aptコマンドのエラーメッセージが出力される場合があります。

エラーが検出される前に生成されたディレクトリやファイルは，コマンドが異常終了しても削除されずに残ります。

なお，設定したログ出力レベル（重要度）によって，ログが出力されない場合があります。ログ出力レベルの設定については，「10.1.2　共通定義ファイルの設定項目」を参照してください。

(7)　異常終了時の対処

cjwsgenコマンドの実行時に異常終了した場合，エラーメッセージが出力され，処理が終了されます。この場合，出力されたエラーの要因を取り除き，cjwsgenコマンドを再実行します。

複数のエラーがある場合でも，最初に検出されたエラーが表示されます。この場合，cjwsgenコマンドを繰り返し実行して，表示されたエラーの要因を一つずつ取り除いてください。

なお，サービス実装クラスのクラスファイルの不正が原因で異常終了した場合は，クラスファイルの生成元であるJavaソースを修正し，コンパイルし直す必要があります。

11.4　UACが有効なWindowsでコマンドラインインタフェースを使用する場合の注意事項

OSがWindowsでUAC（ユーザアカウント制御）が有効な場合に，CosminexusのJAX-WS機能のコマンドラインインタフェースを実行するときの注意事項を説明します。

＜この節の構成＞

11.4.1　管理者がコマンドラインインタフェースを使用する場合

11.4.2　管理者以外がコマンドラインインタフェースを使用する場合

11.4.1　管理者がコマンドラインインタフェースを使用する場合

管理者がコマンドラインインタフェースを使用する場合，インストール時の注意事項はありません。

インストール後にコマンドラインインタフェースを実行するときには，管理者としてコマンドプロンプトを起動する必要があります。権限を管理者に昇格させてコマンドプロンプトを起動する方法については，OSのドキュメントを参照してください。

11.4.2　管理者以外がコマンドラインインタフェースを使用する場合

管理者以外がコマンドラインインタフェースを使用する場合の注意事項を説明します。

＜この項の構成＞

(1)　インストール時の注意事項

(2)　コマンド実行時の注意事項

(1)　インストール時の注意事項

管理者以外がコマンドラインインタフェースを使用する場合は，Cosminexusをデフォルトのインストールディレクトリにインストールしてください。デフォルトのインストールディレクトリ以外のディレクトリにインストールした場合，コマンドラインインタフェースのすべてのログ出力先ディレクトリに対して，コマンドラインインタフェースを実行する管理者以外のユーザも書き込みできるようにアクセス権を設定する必要があります。アクセス権の設定は，管理者が実行します。設定方法については，OSのドキュメントを参照してください。

(2)　コマンド実行時の注意事項

管理者以外のユーザがコマンドラインインタフェースを実行する場合の注意事項を示します。

カレントディレクトリは，UACの保護対象外のディレクトリを指定します。

オプション設定で生成するファイルの出力先には，UACの保護対象外のディレクトリを指定します。

Cosminexusがデフォルトのインストールディレクトリにインストールされている場合，コマンドラインインタフェースのログは，次のディレクトリにリダイレクトされます。
%LoadlAppData%¥VirtualStore¥Program Filesディレクトリ以下の対応するディレクトリ
リダイレクトについては，OSのドキュメントを参照してください。

12.　WSDLからJavaへのマッピング

cjwsimportコマンドを実行すると，JAX-WS 2.1仕様に従ってWSDLからJavaソースへマッピングされます。

この章では，WSDLからJavaへのデフォルトマッピング，およびマッピングのカスタマイズについて説明します。

＜この章の構成＞

12.1　WSDLからJavaへのデフォルトマッピング

12.2　WSDLからJavaへのマッピングのカスタマイズ

12.1　WSDLからJavaへのデフォルトマッピング

cjwsimportコマンドの実行時に，WSDLからJavaソースへマッピングされます。このときの対応関係を次の表に示します。

表12-1　WSDLからJavaソースへのマッピング一覧

項番 | WSDL | Java ソース | 参照先
1 | 名前空間 | パッケージ名 | 12.1.1
2 | ポートタイプ | SEI名 | 12.1.2
3 | オペレーション | メソッド名 | 12.1.3
4 | パート | パラメタおよび戻り値 | 12.1.4，12.1.5
5 | 型 | パラメタおよび戻り値 | 12.1.6
6 | フォルト | 例外クラス | 12.1.7
7 | バインディング | javax.jws.soap.SOAPBindingアノテーション | 12.1.8
8 | サービス | javax.jws.WebServiceアノテーションのserviceName属性 | 12.1.9

＜この節の構成＞

12.1.1　名前空間からパッケージ名へのマッピング

12.1.2　ポートタイプからSEI名へのマッピング

12.1.3　オペレーションからメソッド名へのマッピング

12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）

12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）

12.1.6　スキーマ型からJava型へのマッピング

12.1.7　フォルトから例外クラスへのマッピング

12.1.8　バインディング拡張要素からパラメタへのマッピング

12.1.9　サービスおよびポートからサービスクラスへのマッピング

12.1.10　WSDLからJavaへのマッピングに関する注意事項

12.1.1　名前空間からパッケージ名へのマッピング

WSDLの名前空間（wsdl:definitions要素のtargetNamespace属性）からパッケージ名へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　名前空間の条件

(1)　マッピング

WSDLの名前空間とパッケージ名は，JAX-WS 2.1仕様に従ってマッピングされます。詳細は，JAX-WS 2.1仕様を参照してください。

マッピング例を次の図に示します。

図12-1　名前空間とパッケージ名のマッピング例

(2)　名前空間の条件

WSDLに記述する名前空間の条件について説明します。

プロトコル
名前空間は，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51002-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51003-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51004-E）。

空文字列

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，RFC2396仕様の規則に従った文字列を記述できます。

表12-2　名前空間に記述できる文字列の条件

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
Javaのパッケージ名にマッピングするときに，Java予約語の先頭にアンダースコア（_）が付きます。
（例）com.hitachi._abstract

3
先頭が数字でない文字列
http://1hitachi.com
Javaのパッケージ名にマッピングするときに，先頭が数字である文字列の先頭にアンダースコア（_）が付きます。
（例）com._1hitachi

12.1.2　ポートタイプからSEI名へのマッピング

WSDLのポートタイプ名（wsdl:portType要素のname属性）からSEI名へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　ポートタイプ名の条件

(3)　ポートタイプの記述個数

(1)　マッピング

WSDLのポートタイプとSEI名は，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図12-2　ポートタイプとSEI名のマッピング例

マッピングするときに，WSDLのポートタイプ名の先頭文字は大文字に変換されます。変換例を次に示します。

（変換前）portTypeName　　　（変換後）PortTypeName

(2)　ポートタイプ名の条件

WSDLのポートタイプ名と名前空間を指定する場合は，パッケージ名も含めてSEI名が"javax.xml.ws.Provider"にならないようにする必要があります。そのため，ポートタイプ名には"Provider"または"provider"を指定しないでください。また，名前空間には"http://ws.xml.javax"を指定しないでください。

ポートタイプには，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-3　ポートタイプに記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_portType | 動作は保証されません（エラーメッセージは表示されません）。
2 | 先頭が数字でない文字列 | 1User_portType | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

(3)　ポートタイプの記述個数

WSDLに記述できるポートタイプは，1～255個です。ポートタイプの記述数と動作の対応を次の表に示します。

表12-4　ポートタイプの記述数と動作の対応

項番 | 要素 | 記述数 | 不正な文字列を指定した場合の動作
1 | wsdl:portType | 0個 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51008-E）。
2 | 1～255個 | 正常終了します。
3 | 256個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51008-E）。

12.1.3　オペレーションからメソッド名へのマッピング

WSDLのオペレーション（wsdl:operation要素のname属性）からJavaのメソッド名へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　オペレーション名の条件

(3)　オペレーションとその子要素の記述個数

(1)　マッピング

WSDLのオペレーションとJavaのメソッド名は，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図12-3　オペレーションとメソッド名のマッピング例

マッピングするときに，WSDLのオペレーション名の先頭文字は小文字に変換されます。getやsetのプレフィクスは付加されません。変換例を次に示します。

（変換前）OperationName　　　（変換後）operationName

(2)　オペレーション名の条件

オペレーション名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-5　オペレーション名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_operation | 動作は保証されません（エラーメッセージは表示されません）。
2 | Javaの予約語以外の文字列※ | abstract | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51007-E）。
3 | 先頭が数字以外の文字列 | 1User_operation | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

注※

「Abstract」のように，Java予約語の先頭文字を大文字にした文字列も記述できません（マッピングによって先頭文字が小文字に変換されるため）。

(3)　オペレーションとその子要素の記述個数

WSDLに記述できるオペレーションは，ポートタイプ1個につき1～255個です。また，オペレーションの子要素には，wsdl:input要素を1個，wsdl:output要素を1個，およびwsdl:fault要素を0～255個記述できます。

オペレーションの記述数と，動作の対応を次の表に示します。

表12-6　オペレーションの記述数と動作の対応

項番 | 要素 | 記述数 | 不正な文字列を指定した場合の動作
1 | wsdl:operation | 0個 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。
2 | 1～255個 | 正常終了します。
3 | 256個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

オペレーションの子要素の記述数と，動作の対応を次の表に示します。

表12-7　オペレーションの子要素の記述数と動作の対応

項番 | 要素 | 記述数 | 不正な文字列を指定した場合の動作
1 | wsdl:input | 0個 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。
2 | 1個 | 正常終了します。
3 | 2個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。
4 | wsdl:output | 0個 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。
5 | 1個 | 正常終了します。
6 | 2個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。
7 | wsdl:fault | 0～255個 | 正常終了します。
8 | 256個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）

WSDLのメッセージのパート（wsdl:message要素のwsdl:part子要素）からJavaのメソッドのパラメタおよび戻り値へのマッピングについて説明します。

ここでは，wrapperスタイルの場合について説明します。

wrapperスタイルの条件について
wrapperスタイルは次に示す条件をすべて満たす場合に，wrapperスタイルとして扱われます。条件を満たさない場合は，non-wrapperスタイルとして扱われます。

WSDLのオペレーションのsoap:body要素から参照するinputメッセージは，パートを1個だけ含んでいる。
パートを2個以上含んでいる場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51019-E）。

WSDLのオペレーションから参照するoutputメッセージ（存在する場合）は，パートを1個だけ含んでいる。
パートを2個以上含んでいる場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51020-E）。

inputメッセージのパートは，ローカル名がオペレーション名と等しいグローバル要素を参照している。

outputメッセージ（存在する場合）のパートは，グローバル要素を参照している。

inputメッセージとoutputメッセージ（存在する場合）のパートから参照されている要素の型は，xsd:sequenceで定義したxsd:complexTypeである。

wrapper要素は子要素を含むだけであり，xsd:any要素，xsd:anyAttribute属性，xsd:choise要素，substitutionGroup属性，またはattribute要素のようなほかの構成要素を含まない。

wrapper要素はnillableでない。

＜この項の構成＞

(1)　マッピング

(2)　wrapper子要素名の条件

(3)　複数のwrapper子要素が同一のwrapper子要素となる条件

(4)　複数のwrapper 子要素を記述した場合の注意事項

(5)　パラメタへのマッピングの注意事項

(6)　戻り値へのマッピングの注意事項

(1)　マッピング

wrapperスタイルの場合，WSDLのメッセージのパートから参照するwrapper子要素と，Javaメソッドのパラメタおよび戻り値がマッピングされます。マッピング例を次の図に示します。

図12-4　メッセージのパートとパラメタおよび戻り値のマッピング例（wrapperスタイル）

マッピングするときに，WSDLのwrapper子要素名の先頭文字は小文字に変換されます。

（変換前）WrapperName　　　（変換後）wrapperName

パートの種類とJavaソースへのマッピングの関係
パートの種類（in，inout，out）と，Javaソースへのマッピングの関係を次の表に示します。

表12-8　パートの種類とJavaソースへのマッピングの関係（wrapperスタイル）

項番 | WSDLパートの種類 | Javaへのマッピング
マッピング先 | マッピング方法
1 | in | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。
2 | inout | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。※
3 | out | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。※
4 | 戻り値 | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。

注※

wrapper子要素の型がxsd:intなど，JAXB仕様でJavaのプリミティブ型にマッピングされる型の場合，プリミティブに対応するため，送信時のHolderのインスタンスにnullでない値を設定してください。

(2)　wrapper子要素名の条件

wrapper子要素名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-9　wrapper子要素名に記述できる文字列の条件（wrapperスタイル）

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_wrapper | 動作は保証されません（エラーメッセージは表示されません）。
2 | Javaの予約語以外の文字列※ | abstract | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51018-E）。
3 | 先頭が数字以外の文字列 | 1User_wrapper | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます。

注※

「Abstract」のように，Java予約語の先頭文字を大文字にした文字列も記述できません（マッピングによって先頭文字が小文字に変換されるため）。

(3)　複数のwrapper子要素が同一のwrapper子要素となる条件

inputメッセージまたはoutputメッセージに出現するwrapper子要素をWSDL内に複数記述した場合，wrapper子要素のローカル名とXML Schemaの型が同じか異なるかによって，wrapper子要素の扱いは次の表のとおり異なります。

表12-10　wrapper子要素のローカル名とXML Schemaの型によって異なるwrapper子要素の扱い

項番 | wrapper子要素のローカル名 | wrapper子要素のXML Schema型 | wrapper子要素の扱い
1 | ローカル名が同じ場合 | XML Schema型が同じ場合 | 同じwrapper子要素として扱われます。それぞれのwrapper子要素が，xsd:element要素のref属性で間接的に同じグローバル要素を参照している場合も，同じwrapper子要素として扱われます。
2 | XML Schema型が異なる場合 | 別のwrapper子要素として扱われます。
3 | ローカル名が異なる場合 | XML Schema型が同じ場合 | 別のwrapper子要素として扱われます。
4 | XML Schema型が異なる場合

(4)　複数のwrapper 子要素を記述した場合の注意事項

複数の同じwrapper子要素と，異なるwrapper子要素を複合型の子要素として同時にWSDLファイルに定義している場合，そのWSDLファイルを指定してcjwsimportコマンドに実行したときに，SEIがnon-wrapperスタイルでマッピングされます。

SEIがnon-wrapperスタイルでマッピングされるWSDLファイルの例を次に示します。

<wsdl:definitions name="TestJaxWsService"
                 xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                 xmlns:tns="http://example.com/example"
                 targetNamespace="http://example.com/example">

  <xsd:element name="getUserData" type="tns:getUserData"/>
   ...
  <xsd:complexType name="getUserData">
    <xsd:sequence>
      <xsd:element name="in0"  type="xsd:string"/>
      <xsd:element name="in0"  type="xsd:string"/>
      <xsd:element name="hoge" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  ...
 </xsd:schema>
</wsdl:types>

...
<wsdl:message name="getUserDataRequest">
 <wsdl:part name="inputParameters" element="tns:getUserData"/>
</wsdl:message>
...
</wsdl:definitions>

(5)　パラメタへのマッピングの注意事項

wrapper子要素をJavaへマッピングするときに，メソッドのパラメタの型は異なっていてもパラメタ名が同じになると，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます。

inおよびinoutのwrapper子要素からマッピングされたパラメタは，wrapper要素内の対応するwrapper子要素の出現順序でマッピングされます。outのwrapper子要素からマッピングされたパラメタは，wrapper要素内の対応するwrapper子要素の出現順序でマッピングされます。

in，inout，outのwrapper子要素が混在している場合，inとinoutのwrapper子要素が，wrapper要素内の対応するwrapper子要素の出現順序でマッピングされます。そのあとにoutのwrapper子要素が，wrapper要素内の対応するwrapper子要素の出現順序でマッピングされます。

Javaプリミティブ型，Java配列型，ユーザ定義型であるout（戻り値にマッピングされるものは除く），およびinoutのパラメタは，JavaソースではHolder型（javax.xml.ws.Holder<T>）にマッピングされます。その例を次に示します。

（例）

outおよびinoutのパートのデータ型：java.lang.String

Javaへのマッピング後のデータ型：javax.xml.ws.Holder<java.lang.String>

Javaへマッピング後のパラメタの数は，0～254個で指定してください。255個以上指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51016-E）。

(6)　戻り値へのマッピングの注意事項

outのwrapper子要素が1個の場合，またはoutのwrapper子要素のローカル名が"return"の場合，その値がメソッドの戻り値へマッピングされます。ただし，型は異なっていてもローカル名が"return"であるwrapper子要素を複数記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます。

12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）

WSDLのメッセージのパート（wsdl:message要素のwsdl:part子要素）からJavaのメソッドのパラメタおよび戻り値へのマッピングについて説明します。

ここでは，non-wrapperスタイルの場合について説明します。

＜この項の構成＞

(1)　マッピング

(2)　パート名の条件

(3)　複数のパートから同じグローバル要素を参照している場合の扱い

(4)　パラメタへのマッピングの注意事項

(5)　戻り値へのマッピングの注意事項

(1)　マッピング

non-wrapperスタイルの場合，WSDLのメッセージのパートと，Javaメソッドのパラメタおよび戻り値がマッピングされます。マッピング例を次の図に示します。

図12-5　メッセージのパートとパラメタおよび戻り値のマッピング例（non-wrapperスタイル）

マッピングするときに，メッセージのパート名（wsdl:part要素のname属性）の先頭文字は小文字に変換されます。

（変換前）PartName　　　（変換後）partName

パートの種類とJavaソースへのマッピングの関係
パートの種類（in／inout／out）と，Javaソースへのマッピングの関係を次の表に示します。

表12-11　パートの種類とJavaソースへのマッピングの関係（non-wrapperスタイル）

項番 | WSDLパートの種類 | Javaへのマッピング
マッピング先 | マッピング方法
1 | in | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。
2 | inout | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。
3 | out | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。
4 | 戻り値 | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。

(2)　パート名の条件

パート名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-12　パート名に記述できる文字列の条件（non-wrapperスタイル）

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_part | 動作は保証されません（エラーメッセージは表示されません）。
2 | Javaの予約語以外の文字列※ | abstract | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51017-E）。
3 | 先頭が数字以外の文字列 | 1User_part | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

注※

「Abstract」のように，Java予約語の先頭文字を大文字にした文字列も記述できません（マッピングによって先頭文字が小文字に変換されるため）。

(3)　複数のパートから同じグローバル要素を参照している場合の扱い

WSDL内でinputメッセージまたはoutputメッセージに出現するパートを複数記述した場合，パート名が同じで，かつ参照先のグローバル要素が同じときにだけ，同じパートとして扱われます。

パート名，参照先のグローバル要素のどちらかが異なる場合は，別のパートとして扱われます。

(4)　パラメタへのマッピングの注意事項

inおよびinoutのパートは，inputメッセージ内の対応するパートの出現順序でマッピングされます。outのパートは，outputメッセージ内の対応するパートの出現順序でマッピングされます。

in，inout，outのパートが混在している場合，inとinoutのパートはinputメッセージ内の対応するパートの出現順序でマッピングされ，そのあとに，outのパートがoutputメッセージ内の対応するパートの出現順序でマッピングされます。

Javaプリミティブ型やJava配列型，ユーザ定義型であるout（戻り値にマッピングされるものは除く）およびinoutのパートは，JavaソースではHolder型（javax.xml.ws.Holder<T>）にマッピングされます。その例を次に示します。

（例）

outおよびinoutのパートのデータ型：java.lang.String

Javaへマッピング後のデータ型：javax.xml.ws.Holder<java.lang.String>

(5)　戻り値へのマッピングの注意事項

outputメッセージでoutのパートが1個だけの場合，メソッドの戻り値へマッピングされます。outのパートが2個以上の場合，戻り値にマッピングされません。

12.1.6　スキーマ型からJava型へのマッピング

WSDLのスキーマ（wsdl:types要素のxsd:schema子要素）で定義した型からJava型へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(1)　マッピング

WSDLのスキーマの型とJava型は，JAXB 2.1仕様に従ってマッピングされます。

スキーマの型とJava型のマッピングでは，クラスベースのマッピングが行われます。クラスベースのマッピングの動作を次に示します。

ユーザ定義型に対応するJavaBeansクラスが生成されます。

ユーザ定義要素に対応するクラスは生成されません。

ObjectFactoryクラスが出力されます。また，ユーザ定義要素に対するcreateメソッドでは，対応するJAXBElement<型に対するJavaBeansクラス>が返されます。

マッピング例を次の図に示します。

図12-6　スキーマ型とJava型のマッピング例

参考

クラスベースのマッピングとは

JAXBのglobalBindings要素のgenerateValueClass属性がtrueで，かつgenerateElementClass属性がfalseの状態（指定なしのデフォルトの状態）と同等のマッピングを指します。

12.1.7　フォルトから例外クラスへのマッピング

WSDLのフォルト（wsdl:fault要素から参照されるwsdl:message要素のname属性）から例外クラスへのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　フォルト名の条件

(3)　フォルトから参照されるメッセージのパートの個数

(4)　同じオペレーションのフォルトから同じメッセージを参照している場合の扱い

(1)　マッピング

cjwsimportコマンドを実行すると，WSDLのフォルトは，JAX-WS 2.1仕様に従ってJava型にマッピングされます。マッピング例を次の図に示します。

図12-7　フォルトと例外クラスのマッピング例

フォルトbeanへのマッピング
JAX-WS 2.1仕様に従ったフォルトbeanが生成されます。フォルトのパートから参照されるグローバル要素宣言が，フォルトbeanにマッピングされます。

生成されるラッパ例外クラス
JAX-WS 2.1仕様に従ったラッパ例外クラスが生成されます。生成されたラッパ例外クラスは，java.lang.Exceptionクラスを継承し，javax.xml.ws.WebFaultアノテーションを持ちます。また，生成されたラッパ例外クラスは，次のメソッドを持ちます。

FaultMessageName(String message, FaultBean faultInfo)※のコンストラクタ
引数として，メッセージ文字列とフォルトbeanクラスを持ちます。また，このコンストラクタ中で親クラスjavax.xml.ws.WebFaultのコンストラクタが呼び出されます。

FaultMessageName(String message, FaultBean faultInfo, Throwable cause)※のコンストラクタ
引数として，メッセージ文字列とフォルトbeanクラス，およびプロトコル固有の例外情報を持ちます。また，このコンストラクタ中で親クラスjavax.xml.ws.WebFaultのコンストラクタが呼び出されます。

getFaultInfo()メソッド
引数はありません。戻り値はフォルトbeanクラスです。

注※

"FaultMessageName"は，フォルトから参照されるメッセージ名（wsdl:message要素のname属性）を表します。また，引数の"FaultBean"は，フォルトbeanクラスの名前を表します。

(2)　フォルト名の条件

フォルト名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-13　フォルト名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_fault | 動作は保証されません（エラーメッセージは表示されません）。
2 | 先頭が数字以外の文字列 | 1User_fault | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

(3)　フォルトから参照されるメッセージのパートの個数

フォルトは，パートが1個だけ記述されているメッセージを参照できます。フォルトから参照されるメッセージのパートの個数と動作を次の表に示します。

表12-14　フォルトから参照されるメッセージのパートの個数と動作

項番 | 記述数 | 動作
1 | 0個 | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51025-E）。
2 | 1個 | 正常終了します。
3 | 2個以上 | 標準エラー出力とログにエラーメッセージが出力され，処理が続行されます（KDJW51025-E）。

(4)　同じオペレーションのフォルトから同じメッセージを参照している場合の扱い

異なる複数のオペレーションのフォルトから同じメッセージを参照している場合，すべて同じフォルトとして扱われます。したがって，Javaへマッピングするときに，共通のラッパ例外クラスとしてマッピングされます。その例を次の図に示します。

図12-8　同じオペレーションのフォルトから同じメッセージを参照している場合のマッピング例

フォルトを記述しているオペレーションと，フォルトから参照されるメッセージの関係を次の表に示します。

表12-15　フォルトを記述しているオペレーションと参照先のメッセージの関係

項番 | フォルトを記述しているオペレーション | フォルトから参照されるメッセージ | フォルトの扱い
1 | 異なる | 同じ | 同じフォルトとして扱われます。
2 | 異なる | 別のフォルトとして扱われます。
3 | 同じ | 同じ | 標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51026-E）。
4 | 異なる | 別のフォルトとして扱われます。

12.1.8　バインディング拡張要素からパラメタへのマッピング

WSDLのバインディングのバインディング拡張要素（wsdl:binding要素）からメソッドのパラメタへのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(1)　マッピング

WSDLのバインディングのバインディング拡張要素とJavaメソッドのパラメタは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図12-9　バインディング拡張要素とパラメタのマッピング例

SOAPバインディング
バインディング拡張要素に，SOAPバインディングを記述できます。

注意

soap:header要素を複数記述している場合，それぞれのsoap:header要素に対応するメッセージから参照されるグローバル要素のローカル名は，すべてユニークにしてください。ローカル名が同じ場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51205-E）。

soap:bindingまたはsoap12:binding要素のtransport属性値からjavax.xml.ws.BindingTypeアノテーションへのマッピング
WSDLのwsdl:binding要素の子要素であるsoap:binding要素またはsoap12:binding要素のtransport属性値から，javax.xml.ws.BindingTypeアノテーションへのマッピングを次の表に示します。

表12-16　transport属性値から，javax.xml.ws.BindingTypeアノテーションへのマッピング

項番 | SOAPバージョン | transport属性値 | BindingTypeアノテーションの値
1 | SOAP 1.1 | http://schemas.xmlsoap.org/soap/http | http://schemas.xmlsoap.org/soap/http※1
2 | http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true | －※2
3 | SOAP 1.2 | http://schemas.xmlsoap.org/soap/http※3 | http://www.w3.org/2003/05/soap/bindings/HTTP/
4 | http://www.w3.org/2003/05/soap/bindings/HTTP/ | http://www.w3.org/2003/05/soap/bindings/HTTP/
5 | http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true | －※2

（凡例）

－：なし。

注※1

デフォルト値と同じ値なので，実際にはjavax.xml.ws.BindingTypeアノテーションが省略されます。

注※2

cjwsimportコマンド実行時にエラーになります（KDJW51147-E）。

注※3

transport属性値については標準仕様であいまいなため，JAX-WSではこのURLを使用できます。

MIMEバインディング
MIMEバインディングはサポートしていません。

12.1.9　サービスおよびポートからサービスクラスへのマッピング

WSDLのサービス（wsdl:service要素のname属性）およびポート（wsdl:port要素のname属性）から，サービスクラスへのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　サービス名およびポート名の条件

(1)　マッピング

WSDLのサービスおよびポートと，サービスクラスは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図12-10　サービスおよびポートとサービスクラスのマッピング例

また，WSDLのサービスおよびポートは，スケルトンクラスにもマッピングされます。マッピング例を次の図に示します。

図12-11　サービスおよびポートとスケルトンクラスのマッピング例

生成されるサービスクラス
生成されるサービスクラスは，javax.xml.ws.Serviceクラスを継承し，javax.xml.ws.WebServiceClientアノテーションを持ちます。また，生成されるサービスクラスは，次のメソッドを持ちます。

ServiceName()のコンストラクタ※1
引数はありません。このコンストラクタ中で親クラスjavax.xml.ws.Serviceのコンストラクタが呼び出されます。

ServiceName(URL wsdlLocation, QName serviceName)のコンストラクタ※1
引数として，WSDLロケーションを示すURLとサービスのQNameを持ちます。また，このコンストラクタ中で親クラスjavax.xml.ws.Serviceのコンストラクタが呼び出されます。

getPortName()メソッド※2
引数はありません。戻り値はSEIを実装するプロキシです。このメソッド中で，親クラスjavax.xml.ws.ServiceのgetPortメソッドが呼び出されます。このメソッドにはjavax.xml.ws.WebEndpointアノテーションが付与されます。このメソッドでエラーが発生した場合，javax.xml.ws.WebServiceExceptionがスローされます。

getPortName(WebServiceFeature ･･･ features)メソッド※2
引数として可変長のjavax.xml.ws.WebServiceFeature型を持ちます。戻り値はSEIを実装するプロキシです。また，このメソッド中で，親クラスjavax.xml.ws.ServiceのgetPortメソッドが呼び出されます。このメソッドにはjavax.xml.ws.WebEndpointアノテーションが付与されます。このメソッドでエラーが発生した場合，javax.xml.ws.WebServiceExceptionがスローされます。
また，JAX-WS 2.1仕様に従ってこのメソッドはJavaソースに出力されますが，javax.xml.ws.WebServiceFeature型は使用できません。

注※1

"ServiceName"は，サービスクラス名（wsdl:service要素のname属性）を表します。

注※2

"PortName"は，ポート名（wsdl:port要素のname属性）の先頭文字を大文字にした名前を表します。

(2)　サービス名およびポート名の条件

サービス名およびポート名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表12-17　サービス名およびポート名に記述できる文字列の条件

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列
日立_service
日立_port
動作は保証されません（エラーメッセージは表示されません）。

2
先頭が数字以外の文字列
1User_service
1User_port
標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

12.1.10　WSDLからJavaへのマッピングに関する注意事項

WSDLからJavaへのマッピングでの注意事項について説明します。

＜この項の構成＞

(1)　Javaメソッドのオーバーロード

(2)　名前衝突時のマッピング

(3)　JAXBアノテーションのサポートについて

(1)　Javaメソッドのオーバーロード

1個のポートタイプに複数のオペレーションを記述する場合，オペレーション名はすべてユニークでなければなりません。したがって，WSDLからJavaへのマッピングでは，Javaメソッドのオーバーロードはできません。オペレーション名が重複している場合はカスタマイズして，それぞれユニークな名称にしてください。

(2)　名前衝突時のマッピング

cjwsimportコマンドを実行するときに，SEI名，クラス名，メソッド名，およびパラメタ名で名前衝突が発生することがあります。ここでは，名前衝突時のマッピングについて説明します。

(a)　SEI名およびクラス名の衝突時のマッピング

WSDLからJavaソースへのマッピングで，SEI名およびクラス名（非例外Javaクラス名，例外クラス名，サービスクラス名，スケルトンクラス名）で名前が衝突した場合，優先順位に従って名前衝突が解決されます。

名前衝突時の優先順位と解決方法を次の表に示します。項番は優先順位を表します（項番1がいちばん高い）。

表12-18　名前衝突の優先順位と解決方法

項番 | 種別 | 名前衝突時の解決方法
1 | SEI名 | 優先順位がいちばん高いため，名前は変更されません。
2 | 非例外Javaクラス名 | クラス名に"_Type"サフィックスが付加されます。
3 | 例外クラス名 | クラス名に"_Exception"サフィックスが付加されます。
4 | サービスクラス名 | クラス名に"_Service"サフィックスが付加されます。
5 | スケルトンクラス名 | クラス名に"_Impl"サフィックスが付加されます。

SEI名と非例外Javaクラス名が衝突した場合の名前解決の例を示します。

図12-12　SEI名と非例外Javaクラス名の衝突時の名前解決例

名前解決によってサフィックスが付加されたクラス名と，同名のクラス名が定義されていた場合は，再度，名前衝突が発生します。この場合，定義済みのクラス名からアンダースコアを削除することで解決します。

サフィックスが付加されたあとに，名前衝突する場合の名前解決例を示します。

図12-13　サフィックス付加後に名前衝突する場合の名前解決例

さらに，アンダースコアの削除によって変更されたクラス名と，同名のクラス名が定義されていた場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51030-E※）。

注※

非例外Javaクラスの場合は，異なるメッセージが出力されます。

(b)　メソッド名およびパラメタ名の衝突時のマッピング

WSDLからJavaソースへのマッピングで，メソッド同士およびメソッドのパラメタ同士で名前が衝突した場合は，名前衝突は解決されないでエラーになります。

(3)　JAXBアノテーションのサポートについて

cjwsimportコマンドは，JAX-WS 2.1仕様のComformance 2.17に対応しています。cjwsimportコマンド実行時に，必要に応じて次に示すJAXBアノテーションがSEIに付与されます。

javax.xml.bind.annotation.XmlAttachmentRef

javax.xml.bind.annotation.XmlList

javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter

javax.xml.bind.annotation.XmlMimeType

なお，CosminexusのJAX-WS機能ではMIMEバインディングはサポートしていないため，javax.xml.bind.annotation.XmlMimeTypeアノテーションは付与されません。MIMEバインディングを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51188-E）。

12.2　WSDLからJavaへのマッピングのカスタマイズ

バインディング宣言を使用することで，WSDLからJavaソースへのマッピングをカスタマイズできます。バインディング宣言によるカスタマイズ方法には，次の方法があります。

埋め込みによるバインディング宣言でのカスタマイズ

外部バインディングファイルによるカスタマイズ

それぞれの方法について，カスタマイズ方法と注意事項について説明します。

＜この節の構成＞

12.2.1　埋め込みによるバインディング宣言でのカスタマイズ

12.2.2　外部バインディングファイルによるカスタマイズ

12.2.3　埋め込みによるバインディング宣言と外部バインディングファイルの同時指定

12.2.4　jaxws:bindings要素に指定できる値

12.2.5　カスタマイズ対象となった要素の値

12.2.6　名前衝突時の対応

12.2.7　jaxws:provider要素を記述した場合の動作

12.2.8　SEI名をカスタマイズする場合の注意事項

12.2.9　jaxws:parameter要素でinoutパラメタ名をカスタマイズする場合の注意事項

12.2.1　埋め込みによるバインディング宣言でのカスタマイズ

埋め込みによるバインディング宣言でのカスタマイズは，jaxws:bindings要素を使用して，直接バインディング宣言をWSDL文書に記述し，カスタマイズします。

埋め込みによるバインディング宣言を使用して，パッケージ名をカスタマイズする例を次の図に示します。

図12-14　パッケージ名のカスタマイズ例（埋め込みによるバインディング宣言）

埋め込みによるバインディング宣言でカスタマイズする場合の留意点について説明します。

＜この項の構成＞

(1)　jaxws:bindings要素の指定

(2)　使用できるバインディング宣言

(3)　要素および属性の重複

(4)　jaxws:enableWrapperStyle要素の優先順位

(1)　jaxws:bindings要素の指定

jaxws:bindings要素は，埋め込みによるバインディング宣言のコンテナとして使用します。

ただし，jaxws:bindings要素はjaxws:bindings要素の子要素に記述できません。jaxws:bindings要素の子要素に記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51034-E）。

jaxws:bindings要素の属性と，属性の指定有無による動作を次の表に示します。

表12-19　jaxws:bindings要素の属性と指定有無による動作の対応（埋め込みによるバインディング宣言）

項番 | 要素 | 属性の指定 | 動作
1 | wsdlLocation | あり | 属性は指定できません。指定しても無視されます。
2 | なし | 正常終了します。
3 | node | あり | 属性は指定できません。指定しても無視されます。
4 | なし | 正常終了します。
5 | version | あり | 属性には"2.0"だけ指定できます。"2.0"以外を指定した場合は値が無視され，"2.0"が指定されていると見なされます。
6 | なし | 正常終了します。

(2)　使用できるバインディング宣言

埋め込みによるバインディング宣言を使用する場合に，CosminexusのJAX-WS機能で使用できるバインディング宣言の一覧を次の表に示します。各バインディング宣言については，JAX-WS 2.1仕様を参照してください。

表12-20　使用できるバインディング宣言（埋め込みによるバインディング宣言）

要素名
属性名
説明

wsdl:definitions/jaxws:bindings要素
version
version属性には，WSDLのカスタマイズのバージョンを記述します。

jaxws:bindings要素の子要素
┃
－
jaxws:bindings要素の子要素です。

┣
┃
┃
┃
┃
┃
┃
jaxws:package
┃
┃
┃
name
name属性には，wsdl:definitions要素のtargetNamespace属性に対応するJavaパッケージ名を記述します。

┗
jaxws:javadoc
－
Javaパッケージに付加するJavadoc文字列です。

┣
┃
┃
jaxws:enableWrapperStyle
－
WSDLのすべてのオペレーションに対するwrapperスタイルの有効／無効を表します。

┗
jaxws:enableAsyncMapping
－
WSDLのすべてのオペレーションに対する非同期マッピングの有効／無効を表します。

wsdl:definitions/wsdl:portType
/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:portType要素に含まれるjaxws:bindings要素の子要素です。

┣
┃
┃
┃
┃
┃
jaxws:class
┃
┃
name
name属性には，wsdl:portType要素に対応するSEI名を記述します。

┗
jaxws:javadoc
－
SEIに付加するJavadoc文字列を記述します。

┣
┃
┃
jaxws:enableWrapperStyle
－
wsdl:portType要素に対するwrapperスタイルの有効／無効を表します。

┗
jaxws:enableAsyncMapping
－
wsdl:portType要素に対する非同期マッピングの有効／無効を表します。

wsdl:definitions/wsdl:portType/wsdl:operation
/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:portType/wsdl:operation要素に含まれるjaxws:bindings要素の子要素です。

┣
┃
┃
┃
┃
┃
jaxws:method
┃
┃
name
name属性には，wsdl:operation要素に対応するJavaメソッド名を記述します。

┗
jaxws:javadoc
－
メソッドに付加するJavadoc文字列です。

┣
┃
┃
jaxws:enableWrapperStyle
－
wsdl:operation要素に対するwrapperスタイルの有効／無効を表します。

┣
┃
┃
jaxws:enableAsyncMapping
－
wsdl:operation要素に対する非同期マッピングの有効／無効を表します。

┗
jaxws:parameter
part
part属性には，wsdl:message要素のwsdl:part子要素を識別するXPath表現を記述します。

childElementName
childElementName属性には，wsdl:part要素によって参照されるグローバル型定義またはグローバル要素宣言の子要素名を記述します。

name
name属性には，part属性およびchildElementName属性によって識別される要素のパラメタ名を記述します。

wsdl:definitions/wsdl:portType/wsdl:operation/wsdl:fault
/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:portType/wsdl:operation/wsdl:fault要素に含まれるjaxws:bindings要素の子要素です。

┗
jaxws:class
┃
name
name属性には，wsdl:fault要素に対応する例外クラス名を記述します。

┗
jaxws:javadoc
－
例外クラスに付加するJavadoc文字列です。

wsdl:definitions/wsdl:binding/wsdl:operation要素/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:binding/wsdl:operation要素に含まれるjaxws:bindings要素の子要素です。

┗
jaxws:parameter
part
part属性には，wsdl:message要素のwsdl:part子要素を識別するXPath表現を記述します。

childElementName
childElementName属性には，wsdl:part要素によって参照されるグローバル型定義またはグローバル要素宣言の子要素名を記述します。

name
name属性には，part属性およびchildElementName属性によって識別される要素のパラメタ名を記述します。

wsdl:definitions/wsdl:service
/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:service/要素に含まれるjaxws:bindings要素の子要素です。

┗
jaxws:class
┃
┃
name
name属性には，wsdl:service要素に対応するサービスインタフェース名を記述します。

┗
jaxws:javadoc
－
サービスインタフェースに付加するJavadoc文字列です。

wsdl:definitions/wsdl:service/wsdl:port
/jaxws:bindings要素の子要素
－
wsdl:definitions/wsdl:service/wsdl:port要素に含まれるjaxws:bindings要素の子要素です。

┗
jaxws:method
┃
┃
name
name属性には，wsdl:port要素に対応するgetterメソッド名を記述します。

┣
┃
jaxws:javadoc
－
getterメソッドに付加するJavadoc文字列です。

┗
jaxws:provider
－
"true"を指定した場合，SEIは生成されません。生成されたサービスインタフェースでポートのgetterメソッドが省略されます。
jaxws:provider要素については，「12.2.7　jaxws:provider要素を記述した場合の動作」を参照してください。

（凡例）

－：バインディング宣言に使用できる属性がないことを示します。

この表に示すように，WSDLでjaxws:bindings要素およびその子要素を記述できる位置は，JAX-WS 2.1仕様で規定されています。規定されていない位置にそれらの要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-W）。

各jaxws:bindings要素の子要素として記述できない要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51040-E）。

また，jaxws:bindings要素の属性およびその子要素に記述できない属性を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

(3)　要素および属性の重複

jaxws:bindings要素およびその子要素内で属性を重複して記述した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW51036-W）。

jaxws:bindings要素およびその子要素内で属性が重複して記述されている場合，標準エラー出力とログにCosminexus XML Processorのエラーメッセージが出力され，処理が終了されます。

埋め込みによるバインディング宣言を使用して，同じカスタマイズ対象へのカスタマイズを重複して指定できません。また，jaxws:bindings要素の子要素も重複して指定できません。指定した場合の動作は保証されません。

(4)　jaxws:enableWrapperStyle要素の優先順位

jaxws:enableWrapperStyle要素は，WSDLの次の個所に記述できます。複数の個所に同時に記述した場合の優先順位を示します。

wsdl:portType/wsdl:operation/jaxws:bindings/jaxws:enableWrapperStyle

wsdl:portType/jaxws:bindings/jaxws:enableWrapperStyle

wsdl:definitions/jaxws:bindings/jaxws:enableWrapperStyle

番号は優先順位を表します。項番1がいちばん高く，優先順位の高い要素値が有効になります。

12.2.2　外部バインディングファイルによるカスタマイズ

外部バインディングファイルによるカスタマイズは，WSDLとは別にバインディング宣言をまとめて記述したファイルを用意し，そのファイルをWSDL文書と同時に読み込み，カスタマイズする方法です。外部バインディングファイルは，複数読み込むことができます。

外部バインディングファイルを使用して，パッケージ名をカスタマイズする例を次の図に示します。

図12-15　パッケージ名のカスタマイズ例（外部バインディングファイル）

外部バインディングファイルでカスタマイズする場合の留意点について説明します。

＜この項の構成＞

(1)　jaxws:bindings要素の指定

(2)　使用できるバインディング宣言

(3)　要素および属性の重複

(4)　wsdl:import要素で読み込むWSDLに対するカスタマイズ

(1)　jaxws:bindings要素の指定

外部バインディングファイルの場合も埋め込みによるバインディング宣言と同様に，jaxws:bindings要素をコンテナとして使用します。

ただし，埋め込みによるバインディング宣言とは異なり，jaxws:bindings要素をjaxws:bindings要素の子要素として記述できます。

jaxws:bindings要素の属性と，属性の指定有無による動作を次の表に示します。

表12-21　jaxws:bindings要素の属性と指定有無による動作の対応（外部バインディングファイル）

項番 | 記述位置 | 要素 | 属性の指定 | 動作
1 | ルートのjaxws:bindings※1 | wsdlLocation | あり | 属性は必ず指定してください。指定したロケーションのWSDLをカスタマイズ対象のWSDLファイルとします。指定方法については，「12.2.2(1)(a)　wsdlLocation属性の記述形式」を参照してください。
2 | なし | 属性を指定していない場合，外部バインディングファイルは無視されます（カスタマイズされないで正常終了します）。
3 | node | あり | XPath 1.0形式で属性を指定できます。指定した要素をカスタマイズ対象とします。指定方法については，「12.2.2(1)(b)　node属性の記述形式」を参照してください。
4 | なし | カスタマイズ対象の要素をWSDLのルート（wsdl:definitions要素）とします。
5 | version | あり | "2.0"を指定できます。指定方法については，「12.2.2(1)(c)　version属性の記述形式」を参照してください。
6 | なし | "2.0"が指定されていると見なされます。
7 | 非ルートのjaxws:bindings※2 | wsdlLocation | あり | 属性は指定できません。指定しても無視されます。
8 | なし | 正常終了します。
9 | node | あり | 属性は必ず指定してください。指定した要素をカスタマイズ対象とします。指定方法については，「12.2.2(1)(b)　node属性の記述形式」を参照してください。
10 | なし | カスタマイズ対象がないため，カスタマイズされないで正常終了します。
11 | version | あり | 属性は指定できません。指定しても無視されます。
12 | なし | 正常終了します。

注※1

「ルートのjaxws:bindings」とは，外部バインディングファイルの最上位に記述されたjaxws:bindings要素を表します。

注※2

「非ルートのjaxws:bindings」とは，ルートのjaxws:bindingsの子要素以下に記述されたjaxws:bindings要素を表します。

(a)　wsdlLocation属性の記述形式

jaxws:bindings要素のwsdlLocation属性に指定する値は，URLで指定します。URLによって指定するファイルは，リモートファイルでもローカルファイルでも，どちらでもかまいません。ローカルファイルの場合は，相対パスで指定することもできます。

誤った形式で記述した場合，またはファイルがない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51043-E）。

URLは，RFC2396仕様の規則に従った文字列を使用してください。RFC2396仕様の規則に従っていない文字列を使用する場合は，RFC2396仕様の規則に従ってUTF-8でパーセントエンコーディングする必要があります。ただし，"&"はパーセントエンコーディングをしても使用できません。RFC2396 仕様の規則に従わず，エンコードもしていない文字や文字列を指定した場合の動作は保証されません。また，wsdlLocation属性に，WSDLファイル以外のファイルを指定した場合の動作は保証されません。

wsdlLocation属性の正しい記述例を示します。

<jaxws:bindings xmlns:jaxws=http://java.sun.com/xml/ns/jaxws
 wsdlLocation="file:///D:/tmp/example.wsdl" version="2.0">
...
</jaxws:bindings>

(b)　node属性の記述形式

jaxws:bindings要素のnode属性に指定する値は，XPath 1.0形式で指定します。

誤った形式で記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51038-E）。

node属性の記述例を次に示します。この例では，wsdl:definitions/wsdl:portType要素のname属性が，AddNumbersImplの要素に対するバインディング宣言であることを示しています。

<jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='AddNumbersImpl']">
...
</jaxws:bindings>

非ルートのjaxws:bindings要素のnode属性では，ルートのjaxws:bindings要素のnode属性で指定しているカスタマイズ対象要素からの相対パス（XPath 1.0形式）を指定できます。この場合の記述例を示します。

<jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='UserInfoPortType']"
...
 <jaxws:bindings node="../wsdl:service[@name='UserInfoService']">
   ...
 </jaxws:bindings>
</jaxws:bindings>

(c)　version属性の記述形式

jaxws:bindings要素のversion属性の値は，"2.0"を指定します。

"2.0"以外の値を記述した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51039-E）。

version属性の正しい記述例を示します。

<jaxws:bindings xmlns:jaxws=http://java.sun.com/xml/ns/jaxws
 wsdlLocation="file:///D:/tmp/example.wsdl" version="2.0">
 ...
</jaxws:bindings>

(2)　使用できるバインディング宣言

外部バインディングファイルを使用する場合に，CosminexusのJAX-WS機能で使用できるバインディング宣言の一覧を次の表に示します。各バインディング宣言については，JAX-WS 2.1仕様を参照してください。

表12-22　使用できるバインディング宣言（外部バインディングファイル）

要素名
属性名
説明

jaxws:bindings要素
wsdlLocation
wsdlLocation属性には，外部バインディングファイルのファイルパス（URL）を記述します。

node
node属性には，WSDL内のカスタマイズ対象の要素を記述します。

version
version属性には，WSDLのカスタマイズのバージョンを記述します。

jaxws:bindings要素の子要素
┃
－
jaxws:bindings要素の子要素です。

┣
┃
┃
┃
┃
┃
jaxws:package
┃
┃
name
name属性には，wsdl:definitions要素のtargetNamespace属性に対応するJavaパッケージ名を記述します。

┗
jaxws:javadoc
－
Javaパッケージに付加するJavadoc文字列です。

┣
┃
jaxws:enableWrapperStyle
－
各要素に対するwrapperスタイルの有効／無効を表します。

┣
┃
jaxws:enableAsyncMapping
－
各要素に対する非同期マッピングの有効／無効を表します。

┣
┃
┃
┃
jaxws:class
┃
name
name属性には，各要素に対応するクラス名を記述します。

┗
jaxws:javadoc
－
クラスに付加するJavadoc文字列です。

┣
┃
┃
┃
jaxws:method
┃
name
name属性には，各要素に対応するJavaメソッド名を記述します。

┗
jaxws:javadoc
－
メソッドに付加するJavadoc文字列です。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
jaxws:parameter
part
part属性には，wsdl:message要素のwsdl:part子要素を識別するXPath表現を記述します。

childElementName
childElementName属性には，wsdl:part要素によって参照するグローバル型定義，またはグローバル要素宣言の子要素名を記述します。

name
name属性には，part属性およびchildElementName属性によって識別される要素のパラメタ名を記述します。

┗
jaxws:provider
－
"true"を指定した場合，SEIは生成されません。生成されたサービスインタフェースでポートのgetterメソッドが省略されます。
jaxws:provider要素については，「12.2.7　jaxws:provider要素を記述した場合の動作」を参照してください。

（凡例）

－：バインディング宣言に使用できる属性がないことを示します。

この表に示すように，WSDLでjaxws:bindings要素およびその子要素を記述できる位置は，JAX-WS 2.1仕様で規定されています。規定されていない位置にそれらの要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-W）。

各jaxws:bindings要素の子要素として記述できない要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51040-E）。

また，jaxws:bindings要素の属性およびその子要素に記述できない属性を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51029-E）。

なお，JAXB仕様のバインディング宣言は記述できません。記述した場合の動作は保証されません。

(3)　要素および属性の重複

jaxws:bindings要素およびその子要素内で属性が重複して記述されている場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW51036-W）。

jaxws:bindings要素およびその子要素内で属性が重複して記述されている場合，標準エラー出力とログにCosminexus XML Processorのエラーメッセージが出力され，処理が終了されます。

外部バインディングファイルを使用して，同じカスタマイズ対象へのカスタマイズを重複して指定することはできません。指定した場合の動作は保証されません。

(4)　wsdl:import要素で読み込むWSDLに対するカスタマイズ

wsdl:import要素でインポートするWSDLに対して外部バインディングファイルでカスタマイズする場合，jaxws:bindings要素のwsdlLocation属性でwsdl:import要素でインポートするWSDLを指定してください。

wsdl:import要素でインポートするWSDLをカスタマイズするときに，誤ってwsdl:import元のWSDLを指定すると，jaxws:bindings要素のnode属性で示したカスタマイズ対象が見つかりません。このときに，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51187-E）。

12.2.3　埋め込みによるバインディング宣言と外部バインディングファイルの同時指定

埋め込みによるバインディング宣言と外部バインディングファイルは，カスタマイズ対象が異なる場合は，それぞれのカスタマイズ内容が有効になります。

埋め込みによるバインディング宣言と外部バインディングファイルのカスタマイズ対象が同じ場合，埋め込みによるバインディング宣言は無効となります。

12.2.4　jaxws:bindings要素に指定できる値

jaxws:bindings要素に指定できる要素および属性の一覧を次の表に示します。

表12-23　jaxws:bindings要素の属性の指定可否

要素名
属性名
指定可否

wsdl:definitions/jaxws:bindings要素の子要素

┣
┃
jaxws:package
name
○

┗
jaxws:javadoc
－
○

┣
jaxws:enableWrapperStyle
－
○

┣
jaxws:enableAsyncMapping
－
○

┗
jaxws:enableMIMEContent
－
×

wsdl:portType/jaxws:bindings要素の子要素

┣
┃
┃
jaxws:class
name
○

┗
jaxws:javadoc
－
○

┣
jaxws:enableWrapperStyle
－
○

┗
jaxws:enableAsyncMapping
－
○

wsdl:portType/wsdl:operation/jaxws:bindings要素の子要素

┣
┃
┃
┃
jaxws:method
name
○

┗
jaxws:javadoc
－
○

┣
jaxws:enableWrapperStyle
－
○

┣
jaxws:enableAsyncMapping
－
○

┗
jaxws:parameter
part
○

childElementName
○

name
○

wsdl:portType/wsdl:operation/wsdl:fault/jaxws:bindings要素の子要素

┗
jaxws:class
name※
○

┗
jaxws:javadoc
－
○

wsdl:binding/jaxws:bindings要素の子要素

┗
jaxws:enableMIMEContent
－
×

wsdl:binding/wsdl:operation/jaxws:bindings要素の子要素

┣
jaxws:enableMIMEContent
－
×

┗
jaxws:parameter
part
○

childElementName
○

name
○

wsdl:service/jaxws:bindings要素の子要素

┗
jaxws:class
name
○

┗
jaxws:javadoc
－
○

wsdl:service/wsdl:port/jaxws:bindings要素の子要素

┣
┃
jaxws:method
name
○

┗
jaxws:javadoc
－
○

┗
jaxws:provider
－
○

（凡例）

－：バインディング宣言に使用できる属性がないことを示します。

○：要素および属性が指定できることを示します。

×：要素および属性が指定できないことを示します（非サポート）。

注※

フォルト名をカスタマイズする場合，カスタマイズ後のフォルト名がほかのフォルト名と重複しないようにしてください。重複した場合，動作は保証されません。

指定できないバインディング要素を指定した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51188-E）。

要素および属性に指定できる値について説明します。

＜この項の構成＞

(1)　name属性に指定できる値

(2)　jaxws:javadoc要素に指定できる値

(3)　jaxws:enableWrapperStyle要素に指定できる値

(4)　jaxws:enableAsyncMapping要素に指定できる値

(5)　part属性に指定できる値

(6)　childElementName属性に指定できる値

(7)　jaxws:provider要素に指定できる値

(8)　非サポートの要素

(1)　name属性に指定できる値

name属性には，次に示す値だけ指定できます。これ以外の値を指定した場合の動作は保証されません。

Java識別子として使用できる値

半角英数字（0～9，A～Z，a～z）

アンダースコア（_），ドルマーク（$）

クラス名やメソッド名をname属性でカスタマイズする場合，カスタマイズした名称がほかの名称と重複するとエラーとなるため，重複しないように注意してください。

(2)　jaxws:javadoc要素に指定できる値

jaxws:javadoc要素には，次に示す値だけ指定できます。これ以外の値を指定した場合の動作は保証されません。

半角英数字（0～9，A～Z，a～z）

半角記号（"/*"，"//"，"¥"，"¥n¥r"）※1

半角カタカナ

全角ひらがな，全角カタカナ，全角英数字

第一水準の全角漢字

Java予約語

空白および空文字※2

注※1

半角記号（"*/"）は，Javadocの終端として扱われるため使用できません。

注※2

空白および空文字の行は，ソースコード生成時に削除されます。

(3)　jaxws:enableWrapperStyle要素に指定できる値

jaxws:enableWrapperStyle要素には，boolean値（"true"または"false"）を指定できます。これ以外の値を指定した場合の動作は保証されません。

なお，WSDLをwrapperスタイルで記述し，かつこの要素の値を"true"に指定した場合にだけ，wrapperスタイルが有効になります。

(4)　jaxws:enableAsyncMapping要素に指定できる値

jaxws:enableAsyncMapping要素には，boolean値（"false"）だけ指定できます。これ以外の値を指定した場合の動作は保証されません。

(5)　part属性に指定できる値

part属性には，次に示す値だけ指定できます。これ以外の値を指定した場合の動作は保証されません。

存在するwsdl:message要素のwsdl:part子要素のXPath表現

存在するsoap:headerから参照するwsdl:messageのwsdl:part子要素のXPath表現

wsdl:operation要素内で使用されていないwsdl:message要素のwsdl:part子要素のXPath表現

(6)　childElementName属性に指定できる値

存在する型定義の修飾名のQNameだけ指定できます。存在しない型定義の修飾名のQNameを指定した場合，エラーにならないで正常終了します。このとき，カスタマイズ対象は無視されます。

(7)　jaxws:provider要素に指定できる値

boolean値（"true"または"false"）を指定できます。これ以外の値を指定した場合の動作は保証されません。

(8)　非サポートの要素

CosminexusのJAX-WS機能で非サポートのバインディング要素は指定できません。指定した場合の動作は保証されません。

12.2.5　カスタマイズ対象となった要素の値

埋め込みによるバインディング宣言または外部バインディングファイルによってカスタマイズ対象となったWSDL文書の要素の値は，Javaにマッピングされません。したがって，WSDL 1.1仕様としてカスタマイズ対象に記述できる文字であればどのような文字を記述してもかまいません。

12.2.6　名前衝突時の対応

カスタマイズすることでSEI名，クラス名，メソッド名，およびパラメタ名で名前衝突が発生するおそれがあります。名前衝突の解決方法（優先順位など）は，デフォルトマッピングの場合と同様です。名前衝突の解決方法については，「12.1.10(2)　名前衝突時のマッピング」を参照してください。

ただし，SEI名およびクラス名に関しては，優先順位が低い方をカスタマイズした場合は名前衝突したときに名前解決されますが，優先順位が高い方をカスタマイズした場合は名前衝突したときに名前衝突は解決されません。このとき，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51030-E※）。

注※

非例外Javaクラスの場合は，異なるメッセージが出力されます。

12.2.7　jaxws:provider要素を記述した場合の動作

wsdl:port要素にjaxws:provider要素を記述してcjwsimportコマンドを実行した場合，wsdl:port要素用のSEIは生成されません。警告メッセージが出力され，処理が続行されます（KDJW51206-W）。この場合，javax.xml.ws.Providerインタフェースを使用してプロバイダ実装クラスを生成してください。

また，生成したサービスクラスでwsdl:port要素のgetterメソッドが省略されます。

cjwsimportコマンドに-generateServiceオプションを指定し，wsdl:port要素にjaxws:provider要素を記述した場合，スケルトンクラスは生成されません。警告メッセージが出力され，処理が続行されます（KDJW51207-W）。

12.2.8　SEI名をカスタマイズする場合の注意事項

次の条件でカスタマイズする場合，SEI名には"Provider"以外を指定し，パッケージ名には"http://ws.xml.javax"以外を指定して，SEI名がパッケージ名を含めて"javax.xml.ws.Provider"にならないようにしてください。

パッケージ名：jaxws:package要素

SEI名：jaxws:class要素

"javax.xml.ws.Provider"は，wsdl:port要素にjaxws:provider要素を記述した場合の予約語として利用しており，サービス実装クラスでjavax.xml.ws.Providerインタフェースを利用するときに指定します。

12.2.9　jaxws:parameter要素でinoutパラメタ名をカスタマイズする場合の注意事項

jaxws:parameter要素でinoutパラメタ名をカスタマイズする場合は，inputメッセージとoutputメッセージの両方のパラメタ名をカスタマイズしてください。どちらか片方だけをカスタマイズした場合の動作は保証されません。

13.　JavaからWSDLへのマッピング

aptコマンドまたはcjwsgenコマンドを実行すると，JAX-WS 2.1仕様に従ってJavaソースからWSDLへマッピングされます。

この章では，JavaからWSDLへのデフォルトマッピング，およびマッピングのカスタマイズについて説明します。

＜この章の構成＞

13.1　JavaからWSDLへのデフォルトマッピング

13.2　JavaからWSDLへのマッピングのカスタマイズ

13.1　JavaからWSDLへのデフォルトマッピング

JavaソースからWSDLへマッピングする場合の対応関係を次の表に示します。

表13-1　JavaソースからWSDLへのマッピング一覧

項番 | Javaソース | WSDL | 参照先
1 | パッケージ名 | WSDLの名前空間 | 13.1.1
2 | SEI名 | ポートタイプ | 13.1.3
3 | SEIのメソッド名 | オペレーション | 13.1.4
4 | SEIのメソッドのパラメタおよび戻り値 | パート | 13.1.5，13.1.6
5 | SEIのラッパ例外クラス | フォルト | 13.1.7
6 | SEIおよびWebサービス実装クラス | バインディング | 13.1.8
7 | Webサービス実装クラス | サービスとポート | 13.1.9

＜この節の構成＞

13.1.1　パッケージ名から名前空間へのマッピング

13.1.2　Webサービス実装クラスからSEIへのマッピング

13.1.3　SEI名からポートタイプへのマッピング

13.1.4　SEIのメソッド名からオペレーションへのマッピング

13.1.5　パラメタおよび戻り値からメッセージのパートへのマッピング（wrapperスタイルの場合）

13.1.6　パラメタおよび戻り値からメッセージのパートへのマッピング（non-wrapperスタイルの場合）

13.1.7　Javaのラッパ例外クラスからフォルトへのマッピング

13.1.8　SEIからバインディングへのマッピング

13.1.9　Webサービス実装クラスからサービスおよびポートへのマッピング

13.1.10　JavaからWSDLへのマッピングに関する注意事項

13.1.1　パッケージ名から名前空間へのマッピング

Javaのパッケージ名からWSDLの名前空間（wsdl:definitions要素のtargetNamespace属性）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　パッケージ名の条件

(3)　javax.jws.WebServiceアノテーションのtargetNamespace要素の利用

(1)　マッピング

SEIおよびWebサービス実装クラスのパッケージ名と，WSDLの名前空間は，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図13-1　Javaのパッケージ名と名前空間のマッピング例

(2)　パッケージ名の条件

Javaのパッケージ名のピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。ただし，javax.jws.WebServiceアノテーションのtargetNamespace要素を使用する場合，Java言語仕様で定められているJava識別子の命名規則に従った文字列を記述できます。

表13-2　Javaのパッケージ名の各セグメントに記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z）だけを使用した文字列 | package com.日立 | 動作は保証されません（エラーメッセージは表示されません）。
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | package com.abstract; | aptコマンド実行時にコンパイルエラーとなり，終了します。詳細は，JDKのドキュメントを参照してください。

(3)　javax.jws.WebServiceアノテーションのtargetNamespace要素の利用

入力となるSEIまたはWebサービス実装クラスがデフォルトパッケージの場合，javax.jws.WebServiceアノテーションのtargetNamespace要素で名前空間名を記述してください。

javax.jws.WebServiceアノテーションのtargetNamespace要素で記述していない場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61004-E）。

javax.jws.WebServiceアノテーションのtargetNamespace要素については，「13.2.8　javax.jws.WebServiceアノテーション」を参照してください。

13.1.2　Webサービス実装クラスからSEIへのマッピング

Webサービス実装クラスからSEIへのマッピングに当たり，前提となる条件および留意点について説明します。

＜この項の構成＞

(1)　Webサービス実装クラスの条件

(2)　javax.jws.WebServiceアノテーションのendpointInterface要素の利用

(1)　Webサービス実装クラスの条件

Webサービス実装クラスの条件を示します。

SEIのすべてのメソッドを実装する必要があります。すべてのメソッドを実装していない場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61011-E）。

Webサービスのオペレーションとして，Objectクラスのfinalizeメソッドをオーバーライドするようなfinalizeメソッドは定義できません。定義した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61012-E）。

publicなデフォルトコンストラクタを定義する必要があります。定義していない場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61013-E）。

javax.jws.WebServiceアノテーションを記述する必要があります。javax.jws.WebServiceアノテーションを記述していない場合は，Webサービス実装クラスではないと判断されます。Webサービス実装クラスが一つもないと判断された場合，警告メッセージが出力されます（KDJW61001-W）。

javax.jws.WebServiceアノテーションをstaticなインナークラスで定義できます。staticでないインナークラスの場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61015-E）。

Webサービス実装クラスのアクセス修飾子はpublicにしてください。finalやabstractは指定できません。public以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61016-E）。

Webサービス実装クラスは，SEIをimplementsしてもかまいません。implementsしなかった場合，aptコマンド実行時に-sourcepathオプションを指定しても，引数にSEIとWebサービス実装クラスの両方を指定する必要があります。implementsしないでSEIをaptコマンドの引数に指定しなかった場合，javax.jws.WebServiceアノテーションのendpointInterface要素によってSEIの情報だけは参照しているが，コンパイル対象には含んでいないため，SEIのクラスファイルは生成されません。

(2)　javax.jws.WebServiceアノテーションのendpointInterface要素の利用

Webサービス実装クラスからSEIへのマッピングでは，javax.jws.WebServiceアノテーションのendpointInterface要素を利用して，Webサービス実装クラスとSEIを関連づけることができます。

Webサービス実装クラスだけ定義する場合，endpointInterface要素は使用しません。この場合，Webサービス実装クラスが持つ情報から，SEIに定義する抽象的な情報が抽出され，仮想のSEIがあるものと見なされます（暗黙のSEI）。

javax.jws.WebServiceアノテーションのendpointInterface要素については，「13.2.8　javax.jws.WebServiceアノテーション」を参照してください。

13.1.3　SEI名からポートタイプへのマッピング

JavaのSEI名からWSDLのポートタイプ名（wsdl:portType要素のname属性）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　SEIの条件

(3)　SEI名の条件

(1)　マッピング

JavaのSEI名とWSDLのポートタイプは，JAX-WS 2.1仕様に従ってマッピングされます。

サービス実装クラスのjavax.jws.WebServiceアノテーションでendpointInterface要素を使用していない場合，Webサービス実装クラス名と同じ名称の暗黙のSEIが存在するものと見なされ，WSDLのポートタイプにマッピングされます。マッピング例を次の図に示します。

図13-2　SEI名とポートタイプのマッピング例

(2)　SEIの条件

Webサービス実装クラスの条件を示します。

javax.jws.WebServiceアノテーションを記述する必要があります。記述していない場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61020-E）。

java.rmi.Remoteインタフェースを継承してもかまいません。

(3)　SEI名の条件

SEI名には，次の表に示すすべての条件を満たす文字列を記述できます。ただし，javax.jws.WebServiceアノテーションのname要素を使用する場合，Java言語仕様で定められているJava識別子の命名規則に従った文字列を記述できます。

表13-3　SEI名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_sei | 動作は保証されません（エラーメッセージは表示されません）。
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | abstract | aptコマンド実行時にコンパイルエラーとなり，終了します。詳細は，JDKのドキュメントを参照してください。

13.1.4　SEIのメソッド名からオペレーションへのマッピング

SEIのメソッド名からWSDLのオペレーション（wsdl:operation要素のname属性）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　メソッド名の条件

(3)　オーバーロードによる名前衝突

(1)　マッピング

SEIのメソッド名とWSDLのオペレーションは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図13-3　SEIのメソッド名とオペレーションのマッピング例

SEIのメソッド名からオペレーションへのマッピング規則を次に示します。

javax.jws.WebMethodアノテーションの有無に関係なく，SEIのすべてのpublicなメソッドがWSDLのオペレーションにマッピングされます。

javax.jws.WebServiceアノテーションのendpointInterface要素を使用していない場合，Webサービス実装クラスのpublicメソッドを暗黙のSEIが持っているものと見なされ，WSDLのオペレーションにマッピングされます。暗黙のSEIにマッピングされるメソッドについては，「13.2.5　javax.jws.WebMethodアノテーション」を参照してください。

Webサービス実装クラスが別のWebサービス実装クラスを継承している場合，次の条件に合うすべてのメソッドがWSDLのオペレーションにマッピングされます。
（条件）
Webサービス実装クラスおよび親のWebサービス実装クラスが持つjavax.jws.WebMethodアノテーションのexclude要素が，trueではないpublicなメソッド。

SEIのpublicなメソッドだけWSDLのオペレーションへマッピングされます。それ以外のアクセス修飾子の場合は，WSDLへマッピングされません。publicメソッドが一つもない場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW61093-E）。

Webサービス実装クラスが別のWebサービス実装クラスを継承し，親クラスのメソッドをオーバーライドしている場合，Webサービス実装クラスでオーバーライドしたpublicなメソッドがWSDLのオペレーションにマッピングされます。親クラスでオーバーライドされたメソッドはマッピングされません。

SEIに定義できるメソッドおよびWebサービス実装クラスで，exclude要素がtrueであるjavax.jws.WebMethodアノテーションでアノテートされていないpublicメソッドは，255個まで定義できます。256個以上定義した場合は，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61026-W）。

SEIのメソッド名からマッピングされるwsdl:operation要素のname属性の値は，WSDL内でユニークである必要があります。名前衝突が発生した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61060-E）。

(2)　メソッド名の条件

メソッド名には，次の表に示すすべての条件を満たす文字列を記述できます。

表13-4　メソッド名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_sei | 動作は保証されません（エラーメッセージは表示されません）。
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | abstract | aptコマンド実行時にコンパイルエラーとなり，終了します。詳細は，JDKのドキュメントを参照してください。

ただし，次に示すアノテーションをすべて使用する場合，Java言語仕様で定められているJava識別子の命名規則に従った文字列を記述できます。

javax.jws.WebMethodアノテーションのoperationName要素

javax.xml.ws.RequestWrapperアノテーションのlocalName要素およびclassName要素（wrapperスタイルの場合）

javax.xml.ws.ResponseWrapperアノテーションのlocalName要素およびclassName要素（wrapperスタイルの場合）

javax.jws.WebParamアノテーションのname要素（non-wrapperスタイルの場合）

javax.jws.WebResultアノテーションのname要素（non-wrapperスタイルの場合）

(3)　オーバーロードによる名前衝突

メソッドのオーバーロードを使用している場合，デフォルトマッピングでは名前衝突が発生するため，名前がユニークになるようにアノテーションでカスタマイズする必要があります。

オーバーロードによる名前衝突が発生する個所と，参照先を次の表に示します。

表13-5　オーバーロードによる名前衝突の発生個所と参照先

項番 | 名前衝突の発生個所 | アノテーションの参照先
wrapperスタイル | non-wrapperスタイル
1 | オペレーション名 | 13.2.5(2)
2 | inputのグローバル要素※ | 13.2.13(1)，13.2.13(2) | 13.2.6(2)，13.2.6(5)
3 | outputのグローバル要素※ | 13.2.14(1)，13.2.14(2) | 13.2.7(2)，13.2.7(4)
4 | リクエストbeanクラス名 | 13.2.13(3)
5 | レスポンスbeanクラス名 | 13.2.14(3)

注※

ローカル名または名前空間のどちらかをカスタマイズすれば，名前衝突は発生しません。

13.1.5　パラメタおよび戻り値からメッセージのパートへのマッピング（wrapperスタイルの場合）

SEIのメソッドのパラメタからWSDL（wsdl:part要素のname属性）へのマッピングについて説明します。

ここでは，wrapperスタイルの場合について説明します。

＜この項の構成＞

(1)　マッピング

(2)　パラメタに指定できるJava型

(3)　Javaメソッドのパラメタの条件

(4)　パラメタと戻り値の組み合わせ

(5)　名前衝突時の動作

(6)　java.util.Mapクラスの使用

(1)　マッピング

wrapperスタイルの場合，SEIのメソッド名およびSEIのメソッド名と同じ名称のリクエストbeanが生成されます。また，接尾辞"Response"を付加したレスポンスbeanが生成されます。

メソッドのパラメタとメッセージのパートのマッピング例を次の図に示します。

図13-4　メソッドのパラメタとメッセージのパートのマッピング例（wrapperスタイル）

メソッドの戻り値とメッセージのパートのマッピング例を次の図に示します。

図13-5　メソッドの戻り値とメッセージのパートのマッピング例（wrapperスタイル）

メソッドのパラメタおよび戻り値からメッセージのパートへのマッピング規則を次に示します。

パラメタおよび戻り値は，wrapper要素の子要素として空の名前空間（""）でマッピングされます。wrapper要素は，SEIと同じ名前空間でマッピングされます。

wrapper要素は，"parameters"という固定値でinputメッセージおよびoutputメッセージのパート名にマッピングされます。

inパラメタおよびinoutパラメタは，argN※という名称でリクエストbeanのプロパティとしてマッピングされます。

outパラメタおよびinoutパラメタは，argN※という名称でレスポンスbeanのプロパティとしてマッピングされます。
また，戻り値は，returnという名称で，レスポンスbeanのプロパティとしてマッピングされます。このとき，予約語にならないように，フィールド名の接頭辞にはアンダースコア（_）が付加されます。

注※

argNのNは，パラメタの順番に依存した0以上の整数を表します。

(2)　パラメタに指定できるJava型

Holder（javax.xml.ws.Holder）型以外のJava型と，Holder型を指定するときの条件および注意事項について説明します。

(a)　Holder型以外のJava型

Holder型以外のJava型は，JAXB 2.1仕様に従ってWSDLのスキーマの型にマッピングされます。Holder型以外のJava型を指定するときの注意事項について説明します。

Javaプリミティブ型は，outおよびinoutパラメタに指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61035-E）。

Javaプリミティブ型は，javax.xml.ws.Holderクラスの型パラメタとしても指定できません。指定した場合，aptコマンドの実行時にエラーとなり終了します。

Java型をoutおよびinoutパラメタに指定する場合，javax.xml.ws.Holderクラスの型パラメタとして指定できます。それ以外の方法で指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61035-E）。

(b)　javax.xml.ws.Holder型

javax.xml.ws.Holder型を指定するときの注意事項について説明します。

javax.xml.ws.Holderクラスの型パラメタに，javax.jws.WebParamアノテーションを指定する場合，mode要素でMode.OUTまたはMode.INOUTを指定する必要があります。mode要素を指定していない場合，またはmode要素にMode.INを指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61031-E）。また，javax.jws.WebParamアノテーションを指定していない場合，javax.xml.ws.Holderの型パラメタはinoutパラメタとして解釈されます。

次の場合の動作は保証されません。

javax.xml.ws.Holderクラスをメソッドの引数以外に指定した場合

javax.xml.ws.Holderクラスの配列を使用した場合

javax.xml.ws.Holderクラスの型パラメタに型を指定していない場合

javax.xml.ws.Holderクラスの型パラメタに，javax.xml.ws.Holderクラスやそれを継承したクラスを指定した場合

(c)　Java型のマッピング

Java型をマッピングするときの注意事項について説明します。

javax.jws.WebParamアノテーションのmode要素でカスタマイズしていない場合，javax.xml.ws.Holderクラスの型パラメタ以外の引数は，inパラメタとしてマッピングされ，javax.xml.ws.Holderクラスの型パラメタは，inoutパラメタとしてマッピングされます。outパラメタとしてマッピングする方法については，「13.2.6(4)　mode要素（javax.jws.WebParam）」を参照してください。

inputメッセージ名は，オペレーション名でマッピングされます。outputメッセージ名は，オペレーション名に接尾辞"Response"を付加した値でマッピングされます。

SEIのメソッドのパラメタは，Javaの仕様に従って254個まで定義できます。255個以上定義した場合は，aptコマンドの実行時にコンパイルエラーとなり終了します。

(3)　Javaメソッドのパラメタの条件

Javaメソッドのパラメタ名は，WSDLにマッピングされないため，Java言語仕様で定めるJava識別子の命名規則に従って記述してください。

(4)　パラメタと戻り値の組み合わせ

inパラメタ，inoutパラメタ，outパラメタ，および戻り値は，自由に組み合わせて記述できます。

(5)　名前衝突時の動作

wrapper beanクラス名とグローバル要素の名前についての規則，および名前衝突したときの動作について説明します。

wrapper beanクラス名
生成されるwrapper beanクラス名は，パッケージ内でユニークな名前である必要があります。ただし，大文字／小文字の違いは無視されます。リクエストbeanまたはレスポンスbeanが，パッケージ内で同時に生成されるほかのJavaBeanクラスと名前衝突した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61083-E）。
すでに存在するクラスと名前が重複していた場合は，上書きされます。ただし，そのクラスがaptコマンドの引数に含まれていた場合は，aptコマンド実行時にエラーチェックされます。

グローバル要素（ローカル名および名前空間）
グローバル要素（ローカル名および名前空間）は，WSDL内でユニークである必要があります。ユニークでない場合の動作は保証されません。

(6)　java.util.Mapクラスの使用

SEIの引数または戻り値にjava.util.Mapクラスを使用する場合，SEIのjava.util.Map型の引数または戻り値に対して，次の作業をする必要があります。

value typeを作成します。
JAXB 2.1仕様に従い，java.util.Map（bound type）に対応するvalue type（マーシャル／アンマーシャルできるJavaBeanクラス）を作成します。

アダプタを作成します。
javax.xml.bind.annotation.adapters.XmlAdapterを継承するjava.util.Map(bound type)およびvalue typeを相互変換するアダプタを作成し，unmarshalメソッドおよびmarshalメソッドを実装します。

javax.xml.bind.annotation.adapters.XmlJavaTypeAdapterアノテーションでアノテートします。
java.util.Map型の引数または戻り値を，2.のアダプタを値に持つXmlJavaTypeAdapterアノテーションでアノテートします。

aptコマンドを実行します。
アノテート済みのSEIをaptコマンドで解釈します。
value type，アダプタ，およびaptコマンドによってxmlJavaTypeAdapterアノテーションが適用されたリクエストbeanクラス／レスポンスbeanクラスの関係と実装例を次に示します。

図13-6　java.util.Mapの使用例

13.1.6　パラメタおよび戻り値からメッセージのパートへのマッピング（non-wrapperスタイルの場合）

SEIのメソッドのパラメタからWSDL（wsdl:part要素のname属性）へのマッピングについて説明します。

ここでは，non-wrapperスタイルの場合について説明します。

＜この項の構成＞

(1)　マッピング

(2)　パラメタに指定できるJava型

(3)　パラメタ名の条件

(4)　パラメタと戻り値の組み合わせ

(5)　アノテーションの指定とパート名へのマッピングの関係

(6)　名前衝突時の動作

(7)　java.util.Mapクラスの使用

(1)　マッピング

non-wrapperスタイルの場合，パラメタはオペレーション名と同じ値の名称で，WSDLのパートおよびグローバル要素にマッピングされます。戻り値は，オペレーション名に接尾辞"Response"を付加した名称で，WSDLのパートおよびグローバル要素にマッピングされます。マッピング例を次の図に示します。

図13-7　メソッドのパラメタおよび戻り値とメッセージのパートのマッピング例（non-wrapperスタイル）

(2)　パラメタに指定できるJava型

パラメタに指定できるJava型については，wrapper型の場合と同様です。「13.1.5(2)　パラメタに指定できるJava型」を参照してください。

(3)　パラメタ名の条件

Javaメソッドのパラメタ名は，WSDLにマッピングされないため，Java言語仕様で定めるJava識別子の命名規則に従って記述してください。

(4)　パラメタと戻り値の組み合わせ

SOAPヘッダであるメソッドのパラメタは，幾つでも指定できます。ただし，SOAPボディであるメソッドのパラメタは，戻り値との関係で指定可否および指定個数が決まります。メソッドの戻り値の条件と，パラメタの指定方法を次の表に示します。

表13-6　メソッドの戻り値の条件とパラメタの指定方法

項番
戻り値の条件
パラメタの指定方法

戻り値の有無
指定位置

1
なし
－

inパラメタおよびinoutパラメタはどちらか1個指定できます。※1

outパラメタおよびinoutパラメタはどちらか1個指定できます。※2

2
あり
SOAPヘッダ

inパラメタおよびinoutパラメタはどちらか1個指定できます。※1

outパラメタおよびinoutパラメタはどちらか1個指定できます。※2

3
あり
SOAPボディ

inパラメタを1個指定できます。※1

outパラメタおよびinoutパラメタは指定できません。※3

注※1

合計で0個または2個以上指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61056-E）。

注※2

合計で0個または2個以上指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61057-E）。

注※3

outパラメタまたはinoutパラメタを指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61059-E）。

non-wrapperスタイルでoutパラメタまたはinoutパラメタを使用する場合，javax.jws.WebParamアノテーションのname要素を指定する必要があります。javax.jws.WebParamアノテーションのname要素を指定していない場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61085-E）。

(5)　アノテーションの指定とパート名へのマッピングの関係

メソッドのパラメタからWSDLのパート（wsdl:part要素のname属性）へのマッピングは，javax.jws.WebParamアノテーションおよびjavax.jws.WebMethodアノテーションの要素値の指定によって異なります。

アノテーションの指定内容と，マッピング方法の関係を次の表に示します。

表13-7　アノテーションの指定とWSDLのパート名へのマッピングの関係

項番
アノテーションの要素指定の有無
WSDLのパート名へのマッピング方法

javax.jws.WebParam
@partName
javax.jws.WebParam
@name
javax.jws.WebMethod
@operationName

1
指定あり
－
－
指定ありのアノテーションの要素値がwsdl:part要素のname属性にマッピングされます。

2
指定なし
指定あり
－

3
指定なし
指定あり
Javaのメソッド名がwsdl:part要素のname属性にマッピングされます。

4
指定なし

（凡例）

－：要素の指定有無がマッピングに影響しないことを示します（指定しても指定しなくてもマッピング方法は同じです）。

(6)　名前衝突時の動作

パート名およびグローバル要素の名前衝突時の動作について説明します。

パート名の衝突
non-wrapperスタイルでは，JavaソースからマッピングされるWSDLのwsdl:part要素の名前をWSDL内でユニークにする必要があります。ユニークではない場合の動作は保証されません。

グローバル要素（ローカル名および名前空間）の衝突
グローバル要素（ローカル名および名前空間）はWSDL内でユニークにする必要があります。ユニークではない場合の動作は保証されません。

(7)　java.util.Mapクラスの使用

java.util.Mapクラスを使用する方法については，「13.1.5(6)　java.util.Mapクラスの使用」を参照してください。

13.1.7　Javaのラッパ例外クラスからフォルトへのマッピング

Javaのラッパ例外クラスからWSDLのフォルト（wsdl:fault要素，一つのwsdl:part子要素を持つwsdl:message要素，およびXML Schemaのグローバル要素宣言）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　ラッパ例外クラスの条件

(3)　ラッパ例外クラス名の条件

(4)　名前衝突時の動作

(1)　マッピング

Javaのラッパ例外クラスとフォルトは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図13-8　例外クラスとフォルトのマッピング例

ラッパ例外クラスからフォルトへのマッピング規則を次に示します。

ラッパ例外クラスがjavax.xml.ws.WebFaultアノテーションを持つ場合で，かつフォルトbeanを返すgetFaultInfoメソッドを持つ場合，すでにフォルトbeanがあるため，コマンド実行時にフォルトbeanは生成されません。

ラッパ例外クラスがjavax.xml.ws.WebFaultアノテーションもgetFaultInfoメソッドも持たない場合，ラッパ例外クラスの名前の接尾辞に"Bean"を付加した名前のフォルトbeanが生成されます。

生成されるフォルトbeanは，ラッパ例外クラスとその親クラスが持つ，Throwableから継承されるgetCause，getLocalizedMessage，およびgetStackTraceというgetterと，java.lang.Objectから継承されるgetClassというgetter以外のすべてのgetterと同じ型／名称のプロパティを持ちます。

フォルトメッセージ名には，ラッパ例外クラス名と同じ値でマッピングされます。また，フォルトメッセージのパート名には，faultという固定値でマッピングされます。

一つのメソッドでスローする例外は，255個まで定義できます。256個以上定義した場合は，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61027-W）。

メソッドがスローする例外クラスが見つからない場合は，コンパイルエラーが発生します。

(2)　ラッパ例外クラスの条件

ラッパ例外クラスの条件を示します。

ラッパ例外クラスは，java.lang.Exception，java.lang.RuntimeException，java.rmi.RemoteExceptionの例外クラスを継承してもかまいません。ただし，java.lang.RuntimeExceptionとjava.rmi.RemoteException，およびそのサブクラスはラッパ例外クラスとして扱われません。

同じSEI内の複数のメソッドで，同じラッパ例外クラスをスローしてもかまいません。

(3)　ラッパ例外クラス名の条件

ラッパ例外クラス名には，次の表に示すすべての条件を満たす文字列を記述できます。ラッパ例外クラス名は，アノテーションを指定してもWSDL内で使用されるため，次の表の条件に従う必要があります。

表13-8　ラッパ例外クラス名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_exception | 動作は保証されません（エラーメッセージは表示されません）。
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | abstract | aptコマンド実行時にコンパイルエラーとなり，終了します。詳細は，JDKのドキュメントを参照してください。

(4)　名前衝突時の動作

フォルトbeanの名前は，パッケージ内でユニークにする必要があります。ただし，大文字／小文字の違いは無視されます。フォルトbeanが，パッケージ内で同時に生成されるJavaBeanと名前衝突した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61065-E）。

すでに存在するクラスと名前が重複していた場合，上書きされます。ただし，そのクラスがaptコマンドの引数に含まれている場合は，aptコマンドでエラーチェックされます。

フォルトbeanからマッピングするグローバル要素（ローカル名および名前空間）は，WSDL内でユニークにする必要があります。ユニークでない場合の動作は保証されません。

13.1.8　SEIからバインディングへのマッピング

JavaのSEIからWSDLのバインディング（wsdl:binding要素のname属性）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　SOAPトランスポートと転送バインディング

(1)　マッピング

JavaのSEIおよびWebサービス実装クラスと，WSDLのバインディングは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図13-9　SEIとバインディングのマッピング例

SEIからバインディングへのマッピング規則を次に示します。

JavaのSEIおよびWebサービス実装クラスは，WSDLの一つのwsdl:binding要素と，0個以上のwsdl:port拡張要素にマッピングされます。

WSDLのバインディング名は，ポートタイプ名の接頭辞に"Binding"を付加した名前になります。ポートタイプ名の形式については，「13.1.3　SEI名からポートタイプへのマッピング」を参照してください。

(2)　SOAPトランスポートと転送バインディング

javax.xml.ws.BindingTypeアノテーションでカスタマイズしていない場合，デフォルトマッピングでは，SOAP 1.1overHTTPでバインディングされます。

これは，wsdl:binding要素の子要素であるsoap:binding要素のtransport属性に，http://schemas.xmlsoap.org/soap/httpが指定されることを意味します。

13.1.9　Webサービス実装クラスからサービスおよびポートへのマッピング

Webサービス実装クラスからWSDLのサービス（wsdl:service要素のname属性）およびポート（wsdl:port要素のname属性）へのマッピングについて説明します。

＜この項の構成＞

(1)　マッピング

(2)　Webサービス実装クラス名の条件

(1)　マッピング

Webサービス実装クラスと，WSDLのサービスおよびポートは，JAX-WS 2.1仕様に従ってマッピングされます。マッピング例を次の図に示します。

図13-10　Webサービス実装クラスと，サービスおよびポートのマッピング例

Webサービス実装クラスからサービスおよびポートへのマッピング規則を次に示します。

WSDLのサービス名をjavax.jws.WebServiceアノテーションのserviceName要素でカスタマイズしていない場合，Webサービス実装クラスの名前の接尾辞に，"Service"を付加したものをwsdl:service要素のname属性の値とします。

WSDLのポート名をjavax.jws.WebServiceアノテーションのportName要素でカスタマイズしていない場合，javax.jws.WebServiceアノテーションのname要素値の接尾辞に，"Port"を付加したものをwsdl:port要素のname属性の値とします。

javax.jws.WebServiceアノテーションのportName属性およびname属性でカスタマイズしていない場合，Webサービス実装クラスの名前の接尾辞に，"Port"を付加したものをwsdl:port要素のname属性の値とします。

(2)　Webサービス実装クラス名の条件

Webサービス実装クラス名には，次の表に示すすべての条件を満たす文字列を記述できます。

表13-9　Webサービス実装クラス名に記述できる文字列の条件

項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作
1 | 半角英数字（0～9，A～Z，a～z），およびアンダースコア（_）だけを使用した文字列 | 日立_service | 動作は保証されません（エラーメッセージは表示されません）。
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | abstract | aptコマンド実行時にコンパイルエラーとなり，終了します。詳細は，JDKのドキュメントを参照してください。

13.1.10　JavaからWSDLへのマッピングに関する注意事項

JavaからWSDLへのマッピングでの注意事項について説明します。

＜この項の構成＞

(1)　ジェネリクスの型削除

(2)　JAXBアノテーションのサポートについて

(3)　ジェネリクス型の制限

(1)　ジェネリクスの型削除

JavaBean（リクエストbean，レスポンスbean，フォルトbean）生成時には，ジェネリクスの型が削除されます。ジェネリクスの型削除の例を次の表に示します。

表13-10　ジェネリクスの型削除の例

型削除前 | 型削除後
T※ | NumbersData
List<E> | List<java.lang.Object>
List<? extends NumbersData> | List<NumbersData>
List<? super NumbersData> | List< java.lang.Object >
Map<K, V> | Map< java.lang.Object, java.lang.Object >
Map<? extends NumbersKey, ? extends NumbersData> | Map<NumbersKey, NumbersData>
Map<? super NumbersKey, ? super NumbersData> | Map< java.lang.Object, java.lang.Object >
Iterator<E> | Iterator< java.lang.Object >
Iterator<? extends NumbersData> | Iterator<NumbersData>
Iterator<? super NumbersData> | Iterator< java.lang.Object >
List<List<? extends NumbersData>> | List<List<NumbersData>

注※

Tの型定義は，<T extends NumbersData>の場合を示します。

メソッド引数や戻り値をjavax.jws.WebParamやjavax.jws.WebResultアノテーションでカスタマイズしている場合も，ジェネリクスの型は削除されます（カスタマイズも有効）。また，メソッド引数や戻り値がwrapperスタイルであっても，ジェネリクスの型は削除されます。なお，メソッド引数や戻り値がnon-wrapperスタイルの場合にはジェネリクスの型は削除されません。

(2)　JAXBアノテーションのサポートについて

CosminexusのJAX-WS機能は，JAX-WS 2.1仕様のComformance 3.14に対応しています。コマンド実行時には，必要に応じて次に示すJAXBアノテーションが解釈されます。

javax.xml.bind.annotation.XmlAttachmentRef

javax.xml.bind.annotation.XmlList

javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter

javax.xml.bind.annotation.XmlMimeType

CosminexusのJAX-WS機能ではMIMEバインディングはサポートされません。

CosminexusのJAX-WS機能が提供するアノテーションプロセッサでは，javax.xml.bind.annotation.XmlListアノテーションはwrapperスタイルの場合には解釈されますが，non-wrapperスタイルの場合には解釈されません。

これらのJAXBアノテーションで，SEIおよびサービス実装クラス以外の引数や戻り値をアノテートした場合の動作は保証されません。

CosminexusのJAX-WS機能が提供するアノテーションプロセッサでは，javax.xml.bind.annotation.XmlJavaTypeAdapterアノテーションおよびjavax.xml.bind.annotation.XmlMimeTypeアノテーションは，SEIまたはサービス実装クラスの引数や戻り値，またはJavaBeanのフィールドをアノテートした場合に解釈されます。パッケージや，インタフェース，またはクラスをアノテートした場合の動作は保証されません。

開発したWebサービスを呼び出すときに，Webサービスの引数や戻り値のサブクラスを使用するとエラーが発生します。正常に呼び出すには，SEIおよびWebサービス実装クラスを定義するときに，javax.xml.bind.annotation.XmlSeeAlsoアノテーションによってサブクラスを関連づける必要があります。

(3)　ジェネリクス型の制限

wrapperスタイルの場合にはメソッド引数や戻り値にジェネリクス型を使用できますが，non-wrapperスタイルの場合にはジェネリクス型を使用できません。

13.2　JavaからWSDLへのマッピングのカスタマイズ

アノテーションを使用することで，JavaからWSDLへのマッピングをカスタマイズできます。

アノテーションを使用したカスタマイズ例を次の図に示します。

図13-11　アノテーションを使用したカスタマイズ例

aptコマンドまたはcjwsgenコマンドを実行すると，cjwsimportコマンドで自動的に付与されるjavax.xml.ws.WebEndpointおよびjavax.xml.ws.WebServiceClientアノテーションは無視されます（警告メッセージは出力されません）。また，非サポートのアノテーションを指定した場合も無視されます。このとき，CosminexusのJAX-WS機能以外が提供するアノテーションプロセッサでも非サポートであった場合，aptコマンドの警告メッセージが出力されます。

アノテーションには，SEIに定義できるもの，Webサービス実装クラスに定義できるもの，および両方に定義できるものがあります。ただし，javax.jws.WebServiceアノテーションのendpointInterface要素を使用しない場合は，Webサービス実装クラスの情報から抽象的な情報が抽出されて暗黙のSEIがあるものと見なされます。このときに限り，SEIに定義するアノテーションを，Webサービス実装クラスに定義することが許容されます。

アノテーションの要素を明示的にデフォルト値と同じ値でカスタマイズしても，要素値が指定されていない場合と同じように処理されます。

＜この節の構成＞

13.2.1　アノテーション一覧

13.2.2　com.sun.xml.ws.developer.StreamingAttachmentアノテーション

13.2.3　javax.jws.HandlerChainアノテーション

13.2.4　javax.jws.soap.SOAPBindingアノテーション

13.2.5　javax.jws.WebMethodアノテーション

13.2.6　javax.jws.WebParamアノテーション

13.2.7　javax.jws.WebResultアノテーション

13.2.8　javax.jws.WebServiceアノテーション

13.2.9　javax.xml.bind.annotation.XmlMimeTypeアノテーション

13.2.10　javax.xml.ws.Actionアノテーション

13.2.11　javax.xml.ws.BindingTypeアノテーション

13.2.12　javax.xml.ws.FaultActionアノテーション

13.2.13　javax.xml.ws.RequestWrapperアノテーション

13.2.14　javax.xml.ws.ResponseWrapperアノテーション

13.2.15　javax.xml.ws.ServiceModeアノテーション

13.2.16　javax.xml.ws.soap.Addressingアノテーション

13.2.17　javax.xml.ws.soap.MTOMアノテーション

13.2.18　javax.xml.ws.WebFaultアノテーション

13.2.19　javax.xml.ws.WebServiceProviderアノテーション

13.2.1　アノテーション一覧

カスタマイズ時に使用できるアノテーション，および自動生成されるアノテーションを次の表に示します。各アノテーションについては，JAX-WS 2.1仕様を参照してください。

表13-11　カスタマイズ時に使用するアノテーションの一覧

項番 | アノテーション | 説明 | 定義の可否
アノテーション名 | 要素名
1 | com.sun.xml.ws.developer.StreamingAttachment | dir | 受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディを一時ファイルとして出力する際に，一時ファイルを生成するディレクトリ名です。 | ○
parseEagerly | 受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。 | ○
memoryThreshold | 受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値です。 | ○
2 | javax.jws.HandlerChain | file | ハンドラチェインファイルの場所を指すURLおよび相対パスです。 | ○
3 | javax.jws.soap.SOAPBinding | parameterStyle | メソッドのパラメタのスタイル（Document wrappedまたはDocument Bareスタイル）です。 | ○
style | メッセージのエンコードスタイルです。CosminexusのJAX-WS機能ではdocumentだけ指定できます。 | ○
use | メッセージのフォーマットスタイルです。CosminexusのJAX-WS機能ではliteralだけ指定できます。 | ○
4 | javax.jws.WebMethod | action | SOAPアクションを決定する文字列です。 | ○
exclude | Webメソッドとして，公開の可否を指定します。 | ○
operationName | メソッドに一致するwsdl:operation要素名です。 | ○
5 | javax.jws.WebParam | header | メッセージのヘッダから，パラメタを取得するかどうかを表します。 | ○
mode | パラメタの流れの方向（in，inout，およびout）です。 | ○
name | パラメタを表すXML要素のローカル名です。 | ○
partName | パラメタを表すwsdl:part要素名です。 | ○
targetNamespace | XMLの名前空間名です。 | ○
6 | javax.jws.WebResult | header | メッセージのヘッダから，戻り値を取得するかどうかを表します。 | ○
name | 戻り値を表すXML要素のローカル名です。 | ○
partName | 戻り値を表すwsdl:part要素名です。 | ○
targetNamespace | XMLの名前空間名です。 | ○
7 | javax.jws.WebService | endpointInterface | Webサービスの抽象Webサービス規約を定義する，SEIの完全修飾名です。 | ○
name | Webサービス名を表すwsdl:portType要素名です。 | ○
portName | Webサービスのポート名を表すwsdl:port要素名です。 | ○
serviceName | Webサービスのサービス名を表すwsdl:service要素名です。 | ○
targetNamespace | Webサービスの名前空間名です。 | ○
wsdlLocation | WebサービスのWSDLを示すURLです。 | ○※1
8 | javax.xml.bind.annotation.XmlMimeType | value | Java型に関連づけるMIMEタイプのテキストを表します。 | ○
9 | javax.xml.ws.Action | fault | アドレッシング・ヘッダのwsa:Action要素の値です。Webサービスがフォルトメッセージを送信する場合に必要です。 | ○
input | アドレッシング・ヘッダのwsa:Action要素の値です。Webサービスがリクエストメッセージを受信する場合に必要です。 | ○
output | アドレッシング・ヘッダのwsa:Action要素の値です。Webサービスがレスポンスメッセージを送信する場合に必要です。 | ○
10 | javax.xml.ws.BindingType | value | SEIを公開するときに使用するバインディングです。 | ○
11 | javax.xml.ws.FaultAction | className | 例外クラス名です。 | ○
value | アドレッシング・ヘッダのwsa:Action要素の値です。classNameに指定した例外クラス名に該当するフォルトメッセージを，Webサービスから送信する場合に必要です。 | ○
12 | javax.xml.ws.RequestWrapper | className | リクエストbeanクラス名です。 | ○
localName | 対象要素のローカル名です。 | ○
targetNamespace | 対象要素の名前空間名です。 | ○
13 | javax.xml.ws.ResponseWrapper | className | レスポンスbeanクラス名です。 | ○
localName | 対象要素のローカル名です。 | ○
targetNamespace | 対象要素の名前空間名です。 | ○
14 | javax.xml.ws.ServiceMode | value | サービスモードです。 | ○
15 | javax.xml.ws.soap.Addressing | enabled | アドレッシング機能を有効にするかどうかを設定します。 | ○
required | Webサービスを呼び出す場合にアドレッシング・ヘッダを必須とするかどうかを設定します。 | ○
response | エンドポイントが匿名のレスポンスまたは非匿名のレスポンスを必須とするかどうかを設定します。 | ○
16 | javax.xml.ws.soap.MTOM | enabled | MTOM/XOP仕様形式の添付ファイルを使用するかどうかを設定します。 | ○
threshold | バイナリデータをMTOM/XOP仕様形式の添付ファイルとして送信するためのしきい値を設定します。 | ○
17 | javax.xml.ws.WebFault | faultBean | フォルトbeanクラス名です。 | ○
name | 対象要素のローカル名です。 | ○
targetNamespace | 対象要素の名前空間名です。 | ○
18 | javax.xml.ws.WebServiceProvider | targetNamespace | Webサービスの名前空間名です。 | ○
portName | Webサービスのポート名です。 | ○
serviceName | Webサービスのサービス名です。 | ○
wsdlLocation | WebサービスのWSDLを示すURLです。 | ○
19 | javax.xml.ws.RespectBinding※1 | enabled | wsdl:binding要素の内容が有効かどうかを表します。 | ○※1
20 | javax.xml.ws.WebEndpoint※2 | name | ポートのローカル名です。 | ×※2
21 | javax.xml.ws.WebServiceClient※2 | name | Webサービスのローカル名です。 | ×※2
targetNamespace | Webサービスの名前空間名です。 | ×※2
wsdlLocation | WebサービスのWSDLを示すURLです。 | ×※2

注※1

指定した値は無視されます（警告メッセージは表示されません）。

注※2

WSDLから生成されたクラスに自動的に付与されるアノテーションになるため，指定できません。

JSR-181仕様およびJAX-WS 2.1仕様のアノテーションのうち，次の表に示すアノテーションは指定できません。指定した場合，動作は保証されません。

表13-12　サポート外のアノテーションの一覧

項番 | アノテーション | 備考
1 | javax.xml.ws.WebServiceRef | JSR109仕様に関連する機能はサポートしていません。
2 | javax.xml.ws.WebServiceRefs | JSR109仕様に関連する機能はサポートしていません。
3 | javax.xml.ws.spi.WebServiceFeatureAnnotation | このアノテーションを使用するためのAPI（フィーチャーをパラメタに取るメソッド）はサポートしていません。
4 | javax.jws.Oneway | one-wayパターンはサポートしていません。
5 | javax.jws.soap.InitParam | JSR181仕様で推奨していません（廃止対象）。
6 | javax.jws.soap.SOAPMessageHandler | JSR181仕様で推奨していません（廃止対象）。
7 | javax.jws.soap.SOAPMessageHandlers | JSR181仕様で推奨していません（廃止対象）。

13.2.2　com.sun.xml.ws.developer.StreamingAttachmentアノテーション

com.sun.xml.ws.developer.StreamingAttachmentアノテーションは，ストリーミングを使用するWebサービスに指定するアノテーションです。Webサービス実装クラスだけに指定できます。SEIに指定した場合は無視されます。また，プロバイダ実装クラスに指定した場合，動作は保証されません。

cjwsimportコマンドが生成するWebサービス実装クラスのスケルトンクラスを使用して，ストリーミングを使用するWebサービスを作成する場合，Webサービス実装クラスのスケルトンクラスにはcom.sun.xml.ws.developer.StreamingAttachmentアノテーションをマッピングしないので，com.sun.xml.ws.developer.StreamingAttachmentアノテーションを指定する必要があります。なお，Webサービス実装クラスにcom.sun.xml.ws.developer.StreamingAttachmentアノテーションを指定しても，サービス側JAX-WSエンジンが発行するWSDLファイルやcjwsgenコマンドが生成するWSDLファイルには，ストリーミングが使用されていることを示す要素や属性は出現しません。

com.sun.xml.ws.developer.StreamingAttachmentアノテーションはWebサービス開始時に参照する値であるため，aptコマンドおよびcjwsgenコマンドの実行時には解釈しません。

com.sun.xml.ws.developer.StreamingAttachmentアノテーションを使用した例を次の図に示します。

図13-12　com.sun.xml.ws.developer.StreamingAttachmentアノテーションを使用した例

＜この項の構成＞

(1)　dir要素（com.sun.xml.ws.developer.StreamingAttachment）

(2)　parseEagerly要素（com.sun.xml.ws.developer.StreamingAttachment）

(3)　memoryThreshold要素（com.sun.xml.ws.developer.StreamingAttachment）

(1)　dir要素（com.sun.xml.ws.developer.StreamingAttachment）

dir要素は，Webサービスでストリーミングを使用する場合に，受信した添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージに含まれるMIMEボディを一時ファイルとして出力するときに使用するディレクトリを指定します。デフォルト値は空文字（"")です。

dir要素の要素値に空文字("")またはnullを指定した場合，一時ファイルの出力先はJavaのデフォルトの一時ファイルディレクトリ（システムプロパティにある"java.io.tmpdir"キーに対応する値）となります。また，存在しないディレクトリ名，アクセス権のないディレクトリ名，または存在するファイル名を指定した場合，Webサービス開始時にメッセージを出力し，受信した添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージに含まれるMIMEボディをメモリ上に展開します（KDJW10026-W）。

(2)　parseEagerly要素（com.sun.xml.ws.developer.StreamingAttachment）

parseEagerly要素は，Webサービスでストリーミングを使用する際に，受信した添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを詳細に解析するかどうかを指定します。デフォルト値はfalseです。

(3)　memoryThreshold要素（com.sun.xml.ws.developer.StreamingAttachment）

memoryThreshold要素は，Webサービスでストリーミングを使用する際に，受信した添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージに含まれるMIMEボディを一時ファイルとして出力するかどうかを判定するためのしきい値(単位：バイト)を指定します。memoryThreshold要素には，16KB（16384L）より大きい値または-1を指定します。これら以外の値を指定した場合，動作は保証されません。-1を指定した場合，常にMIMEボディをメモリ上に展開します。デフォルト値は「1048576L」です。

受信したMIME Multipart/Related構造のSOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかの判定については，「22.3　一時ファイル（ストリーミング）」を参照してください。

13.2.3　javax.jws.HandlerChainアノテーション

javax.jws.HandlerChainアノテーションは，クラスまたはインタフェース宣言に定義した場合に有効になります。

SEIとWebサービス実装クラスに同時にjavax.jws.HandlerChainアノテーションを指定した場合，Webサービス実装クラスに指定したアノテーションが優先されます。このとき，標準出力とログに警告メッセージが出力され，処理が続行されます（KDJW61076-W）。

＜この項の構成＞

(1)　file要素（javax.jws.HandlerChain）

(1)　file要素（javax.jws.HandlerChain）

file要素では，ハンドラチェイン設定ファイルを指定します。javax.jws.HandlerChainアノテーションでアノテートしたクラス，またはインタフェースからの相対パスで指定します。CosminexusのJAX-WS機能では，URL形式での指定はサポートしていません。

参照できなかったり，開けなかったりするパスを指定した場合は，Webサービスの初期化時に，標準エラー出力とログにエラーメッセージが出力されます（KDJW00010-E）。

なお，file要素は，Webサービスの呼び出しで参照される値になるため，aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。file要素の使用例については，「26.9.1　Webサービス側のハンドラチェインの設定」を参照してください。

13.2.4　javax.jws.soap.SOAPBindingアノテーション

javax.jws.soap.SOAPBindingアノテーションは，SOAPメッセージのプロトコルのマッピングをカスタマイズするときに使用できます。

＜この項の構成＞

(1)　style要素（javax.jws.soap.SOAPBinding）

(2)　use要素（javax.jws.soap.SOAPBinding）

(3)　parameterStyle要素（javax.jws.soap.SOAPBinding）

(1)　style要素（javax.jws.soap.SOAPBinding）

CosminexusのJAX-WS機能が提供するアノテーションプロセッサでは，DOCUMENT/LITERALスタイルだけ使用できます。したがって，style要素にSOAPBinding.Style.RPCを指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61063-E）。また，SOAPBinding.Style.DOCUMENTおよびSOAPBinding.Style.RPC以外の値を指定した場合，aptコマンドを実行するときにコンパイルエラーになります。

javax.jws.soap.SOAPBindingアノテーションを，クラスまたはインタフェース宣言とメソッド宣言で同時に指定した場合，メソッド宣言で指定した値が優先されます。

(2)　use要素（javax.jws.soap.SOAPBinding）

CosminexusのJAX-WS機能が提供するアノテーションプロセッサでは，DOCUMENT/LITERALスタイルだけ使用できます。したがって，use要素にSOAPBinding.Use.ENCODEDを指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61063-E）。また，SOAPBinding.Use.LITERAL，SOAPBinding.Use.ENCODED以外の値を指定した場合，aptコマンドを実行するときにコンパイルエラーになります。

(3)　parameterStyle要素（javax.jws.soap.SOAPBinding）

wrapperスタイルの場合，parameterStyle要素にSOAPBinding.ParameterStyle.WRAPPEDを指定します。また，non-wrapperスタイルの場合，parameterStyle要素にSOAPBinding.ParameterStyle.BAREを指定します。

parameterStyle要素に，SOAPBinding.ParameterStyle.WRAPPED，およびSOAPBinding.ParameterStyle.BARE以外の値を指定した場合，aptコマンドを実行するときにコンパイルエラーになります。

13.2.5　javax.jws.WebMethodアノテーション

javax.jws.WebMethodアノテーションは，オペレーションのマッピングをカスタマイズするときに使用できます。

javax.jws.WebMethodアノテーションを使用したカスタマイズ例を次の図に示します。

図13-13　javax.jws.WebMethodアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　exclude要素（javax.jws.WebMethod）

(2)　operationName要素（javax.jws.WebMethod）

(3)　action要素（javax.jws.WebMethod）

(1)　exclude要素（javax.jws.WebMethod）

Webサービス実装クラスが持つpublicメソッドのうち，オペレーションとして公開したくないpublicメソッドは，exclude要素の要素値が"true"のjavax.jws.WebMethodアノテーションでアノテートすることで，マッピングされるオペレーションから除外できます。継承した親クラスが持つメソッドの場合，そのメソッドをオーバーライドし，exclude要素の要素値が"true"のjavax.jws.WebMethodアノテーションでアノテートすることで，マッピングされるオペレーションから除外できます。

exclude要素を指定するときの注意事項について説明します。

マッピングされるオペレーションから除外した結果，publicメソッドが一つもなくなってしまった場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW61093-E）。

Webサービス実装クラスでこの要素の要素値に"true"を指定した場合，Webサービス実装クラスのjavax.jws.WebMethodアノテーションに，ほかの要素を指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61010-E）。

SEIでこの要素を指定する場合，要素値には"false"を指定してください。"true"を指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61021-E）。

Webサービス実装クラスで親クラスのメソッドをオーバーライドしている場合で，親クラスとWebサービス実装クラス（子クラス）の両方にこの要素を指定した場合，Webサービス実装クラス（子クラス）に指定した要素が優先されます。

Webサービス実装クラスでjavax.jws.WebServiceアノテーションのendpointInterface要素を指定していない場合，Webサービス実装クラスが持つすべてのpublicメソッドが暗黙のSEIにマッピングされます。また，Webサービス実装クラスが持つメソッドに，exclude要素が"true"ではないjavax.jws.WebMethodアノテーションを一つでも指定している場合，次の表の条件を満たすWebサービス実装クラスのメソッドが，暗黙のSEIにマッピングされます。

表13-13　アノテーションの指定と暗黙のSEIへのマッピング

項番
Webサービス実装クラスのメソッド
（WebMethodアノテーション）
暗黙のSEIが持つメソッド

1
なし
マッピングされません。

2
あり（exclude要素なし）
マッピングされます。

3
exclude=false
マッピングされます。

4
exclude=true
マッピングされません。

(2)　operationName要素（javax.jws.WebMethod）

operationName要素は，オペレーション名のマッピングをカスタマイズするときに指定します。operationName要素に要素値を指定すると，オペレーション名をマッピングのデフォルト値に持つメッセージ名がカスタマイズできます。non-wrapperスタイルの場合は，グローバル要素名およびパート名もカスタマイズできます。

operationName要素を指定するときの注意事項について説明します。

operationName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合，Webサービスクライアントの開発で，cjwsimportコマンドを実行するときにコンパイルエラーとなります。

wrapperスタイルの場合，javax.xml.ws.RequestWrapperアノテーションのlocalName要素は「オペレーション名」と同じである必要があります。同じでない場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61047-E）。

(3)　action要素（javax.jws.WebMethod）

action要素は，SOAPオペレーションのアクションにマッピングされます。action要素には，RFC2396で規定されたxsd:anyURIを満たす文字を指定できますが，指定した値はランタイムでは無視されます。

13.2.6　javax.jws.WebParamアノテーション

javax.jws.WebParamアノテーションは，引数のマッピングをカスタマイズするときに使用できます。

javax.jws.WebParamアノテーションを使用したカスタマイズ例を次の図に示します。

図13-14　javax.jws.WebParamアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　header要素（javax.jws.WebParam）

(2)　name要素（javax.jws.WebParam）

(3)　partName要素（javax.jws.WebParam）

(4)　mode要素（javax.jws.WebParam）

(5)　targetNamespace要素（javax.jws.WebParam）

(1)　header要素（javax.jws.WebParam）

引数をヘッダパラメタとしてマッピングする場合，header要素の要素値に"true"を指定します。

header要素は，non-wrapperスタイルで指定できます。wrapperスタイルで指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61037-E）。

(2)　name要素（javax.jws.WebParam）

name要素は，wrapperスタイルの場合，引数からマッピングするwrapper要素の子要素の名前をカスタマイズするときに使用します。non-wrapperスタイルの場合，引数からマッピングするグローバル要素のローカル名をカスタマイズするときに使用します。non-wrapperスタイルでpartName要素を指定していない場合，name要素の要素値を指定することで，パート名もカスタマイズできます。

name要素を指定するときの注意事項について説明します。

name要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

wrapperスタイルの場合，Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合は，Webサービスクライアントの開発でcjwsimportコマンドを実行するときにコンパイルエラーとなります。

(3)　partName要素（javax.jws.WebParam）

partName要素は，パート名のマッピングをカスタマイズするときに指定します。

partName要素を指定するときの注意事項について説明します。

partName要素は，non-wrapperスタイルで有効です。wrapperスタイルでpartName要素を指定した場合は無視されます。

partName要素とname要素を同時に指定した場合，有効となる要素を次に示します。

wrapperスタイルの場合：name要素の値が有効になります。

non-wrapperスタイルの場合：partName要素の値が有効になります。

partName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

non-wrapperスタイルの場合，Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合は，Webサービスクライアントの開発でcjwsimportコマンドを実行するときにコンパイルエラーとなります。

(4)　mode要素（javax.jws.WebParam）

mode要素では，パラメタの流れる方向を表す値を指定します。指定できる値を次に示します。

WebParam.Mode.IN

WebParam.Mode.OUT

WebParam.Mode.INOUT

(5)　targetNamespace要素（javax.jws.WebParam）

targetNamespace要素は，引数からマッピングするグローバル要素の名前空間をカスタマイズするときに使用します。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61087-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61088-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61089-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表13-14　名前空間に記述できる文字列の条件（javax.jws.WebParam）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

13.2.7　javax.jws.WebResultアノテーション

javax.jws.WebResultアノテーションは，戻り値のマッピングをカスタマイズするときに使用できます。

javax.jws.WebResultアノテーションを使用したカスタマイズ例を次の図に示します。

図13-15　javax.jws.WebResultアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　header要素（javax.jws.WebResult）

(2)　name要素（javax.jws.WebResult）

(3)　partName要素（javax.jws.WebResult）

(4)　targetNamespace要素（javax.jws.WebResult）

(1)　header要素（javax.jws.WebResult）

戻り値をヘッダパラメタとしてマッピングする場合，header要素の要素値に"true"を指定します。

header要素は，non-wrapperスタイルで指定できます。wrapperスタイルでheader要素の要素値に"true"を指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61038-E）。

(2)　name要素（javax.jws.WebResult）

name要素は，wrapperスタイルの場合，戻り値からマッピングするwrapper要素の子要素の名前をカスタマイズするときに使用します。non-wrapperスタイルの場合，引数からマッピングするグローバル要素のローカル名をカスタマイズするときに使用します。non-wrapperスタイルでpartName要素を指定していない場合，name要素の要素値を指定することで，パート名もカスタマイズできます。

name要素を指定するときの注意事項について説明します。

name要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

wrapperスタイルの場合，Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合は，Webサービスクライアントの開発でcjwsimportコマンドを実行するときにコンパイルエラーとなることがあります。

引数が254個あるwrapperスタイルのメソッドで，name要素を"return"以外の値にカスタマイズした場合，cjwsimportコマンドの実行時に引数の数が255個になり，コンパイルエラーとなるおそれがあります。

(3)　partName要素（javax.jws.WebResult）

partName要素は，パート名のマッピングをカスタマイズするときに指定します。

partName要素を指定するときの注意事項について説明します。

partName要素は，non-wrapperスタイルで有効です。wrapperスタイルでpartName要素を指定した場合は無視されます。

partName要素とname要素を同時に指定した場合，有効となる要素を次に示します。

wrapperスタイルの場合：name要素の値が有効になります。

non-wrapperスタイルの場合：partName要素の値が有効になります。

partName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

non-wrapperスタイルの場合，Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合は，Webサービスクライアントの開発でcjwsimportコマンドを実行するときにコンパイルエラーとなります。

引数が254個あるwrapperスタイルのメソッドで，name要素を"return"以外の値にカスタマイズした場合，cjwsimportコマンドの実行時に引数の数が255個になり，コンパイルエラーとなるおそれがあります。

(4)　targetNamespace要素（javax.jws.WebResult）

targetNamespace要素は，戻り値からマッピングするグローバル要素の名前空間をカスタマイズするときに使用します。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61090-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61091-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61092-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表13-15　名前空間に記述できる文字列の条件（javax.jws.WebResult）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

13.2.8　javax.jws.WebServiceアノテーション

javax.jws.WebServiceアノテーションは，SEIおよびWebサービス実装クラスに必須です。

javax.jws.WebServiceアノテーションを使用したカスタマイズ例を次の図に示します。

図13-16　javax.jws.WebServiceアノテーションを使用したカスタマイズ例

なお，javax.xml.ws.WebServiceProviderアノテーションとjavax.jws.WebServiceアノテーションは，どちらか一方しか指定できません。javax.xml.ws.WebServiceProviderアノテーションとjavax.jws.WebServiceアノテーションを同時に指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61098-E）。

＜この項の構成＞

(1)　targetNamespace要素（javax.jws.WebService）

(2)　endpointInterface要素（javax.jws.WebService）

(3)　name要素（javax.jws.WebService）

(4)　serviceName要素（javax.jws.WebService）

(5)　portName要素（javax.jws.WebService）

(6)　wsdlLocation要素（javax.jws.WebService）

(1)　targetNamespace要素（javax.jws.WebService）

SEIでtargetNamespace要素を指定した場合，指定した名前空間は，types要素，message要素，およびportType要素に対して有効です。

Webサービス実装クラスでこの要素を指定した場合，指定した名前空間は，binding要素およびservice要素に対して有効です。Webサービス実装クラスで，javax.jws.WebServiceアノテーションのendpointInterface要素を使用しない場合，暗黙のSEIとWebサービス実装クラスの両方に同じ名前空間を指定したものと見なされます。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61005-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61006-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61007-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表13-16　名前空間に記述できる文字列の条件（javax.jws.WebService）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

(2)　endpointInterface要素（javax.jws.WebService）

endpointInterface要素を指定するときの注意事項について説明します。

endpointInterface要素は，Webサービス実装クラスのjavax.jws.WebServiceアノテーションで，javax.jws.WebServiceアノテーションを持つSEIを指定します。クラスを指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61009-E）。指定されたSEIが見つからない場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61028-E）。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションにendpointInterface要素を指定している場合，javax.jws.WebServiceアノテーションのname要素を同時に指定できません。同時に指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61019-E）。

SEIには，javax.jws.WebServiceアノテーションのendpointInterface要素を指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61024-E）。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションにendpointInterface要素を指定している場合，Webサービス実装クラス内に次に示すアノテーションは指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61075-E）。

javax.jws.WebMethod

javax.jws.WebParam

javax.jws.WebResult

javax.jws.SOAPBinding

(3)　name要素（javax.jws.WebService）

name要素は，ポートタイプ名のマッピングをカスタマイズするときに指定します。name要素に要素値を指定すると，ポートタイプ名をマッピングのデフォルト値に持つすべての要素もカスタマイズできます。

name要素を指定するときの注意事項について説明します。

SEIのjavax.jws.WebServiceアノテーションで使用する場合，name要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションにendpointInterface要素を指定している場合，Webサービス実装クラスでjavax.jws.WebServiceアノテーションのname要素を同時に指定できません。同時に指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61019-E）。

(4)　serviceName要素（javax.jws.WebService）

serviceName要素は，サービス名のマッピングをカスタマイズするときに指定します。

serviceName要素を指定するときの注意事項について説明します。

SEIには，javax.jws.WebServiceアノテーションのserviceName要素は指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61023-E）。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションで使用する場合，serviceName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合，動作は保証されません。

Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合は，Webサービスクライアントの開発でcjwsimportコマンドを実行するときにコンパイルエラーとなります。

(5)　portName要素（javax.jws.WebService）

portName要素は，ポート名のマッピングをカスタマイズするときに指定します。

SEIには，javax.jws.WebServiceアノテーションのportName要素は指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61022-E）。

Webサービス実装クラスのjavax.jws.WebServiceアノテーションで使用する場合，portName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません。

(6)　wsdlLocation要素（javax.jws.WebService）

wsdlLocation要素は，Webサービスの呼び出しで参照される値になるため，aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

13.2.9　javax.xml.bind.annotation.XmlMimeTypeアノテーション

javax.xml.bind.annotation.XmlMimeTypeアノテーションは，Java型とMIMEタイプの関連づけに使用されるJAXBのアノテーションで，javax.xml.ws.soap.MTOMアノテーションを使用する場合で，Java型とMIMEタイプを関連づけるときに使用します。

javax.xml.bind.annotation.XmlMimeTypeアノテーションは，SEIや暗黙のSEIがあるWebサービス実装クラスが持つサービスメソッドの引数，戻り値，またはユーザ定義型のgetterメソッドに指定できます。それ以外の個所（暗黙のSEIがないWebサービス実装クラスが持つサービスメソッドの引数，戻り値，ユーザ定義例外のフィールドなど）に指定した場合は動作が保証されません。

javax.xml.bind.annotation.XmlMimeTypeアノテーションをSEIなどにアノテートしている場合，Webサービス側のJAX-WSエンジンが発行するWSDLファイルやcjwsgenツールが生成するWSDLファイルは，javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートしたJava型に対応するスキーマの要素に，アノテーションのvalue要素に指定した値を持つxmime:expectedContentTypes属性が付与されます。

javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用した例を次の図に示します。

図13-17　javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用した例

Java型とMIMEタイプを関連づけない場合，javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートする必要はありません。そのとき，MTOM/XOP仕様形式の添付ファイルで送信されるメッセージの添付ファイルパートにあるContent-Typeフィールドの値は，Java型に対応する初期値が使用されます。

javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用しない例を次の図に示します。

図13-18　javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用しない例

javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートし，MIMEタイプを関連づけることができるJava型とその指定個所を次の表に示します。なお，それ以外の型にjavax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートした場合の動作は保証されません。

表13-17　MIMEタイプを関連づけることができるJava型とその指定個所

項番 | Java型 | 関連づけの可否 | 指定個所
メソッド引数 | メソッド戻り値 | ユーザ定義型のフィールド | ユーザ定義例外のフィールド
1 | java.awt.Image | ○※1 | ○ | ○ | △※2 | ×※3
2 | javax.xml.transform.Source | ○ | ○ | ○ | △※2 | ×※3
3 | javax.activation.DataHandler | ○ | ○ | ○ | △※2 | ×※3
4 | java.awt.Imageの配列型 | △※4 | ○ | ○ | △※2 | ×※3
5 | javax.activation.DataHandlerの配列型 | △※4 | ○ | ○ | △※2 | ×※3
6 | java.util.List<Image> | ○ | ○ | ○ | △※2 | ×※3
7 | java.util.List<DataHandler> | ○ | ○ | ○ | △※2 | ×※3
8 | javax.xml.ws.Holder<Image> | ○ | ○ | ×※5 | ×※5 | ×※5
9 | javax.xml.ws.Holder<Source> | ○ | ○ | ×※5 | ×※5 | ×※5
10 | javax.xml.ws.Holder<DataHandler> | ○ | ○ | ×※5 | ×※5 | ×※5

（凡例）

○：指定できます。

△：条件付きで指定できます。

×：指定できません。

注※1

JAXB仕様に従います。java.awt.ImageクラスはJava SE仕様でのグラフィカルイメージを表現する抽象クラスで，データ形式の規定はありません。この関連づけを使用して画像データをインスタンス化した場合，具象クラスのインスタンスには復号化した情報だけが保持される可能性があります。そのため，JPEG形式のように符号化するときに情報が削減される可能性のある画像を添付ファイルとして送信する場合，受信側のインスタンスが送信側のインスタンスや元のデータと異なることがあります。

画像を元の形式のまま扱いたい場合は，javax.activation.DataHandlerにマッピングされるMIMEタイプ（application/octet-streamなど）を使用してください。

注※2

JavaプロパティにMIMEタイプを関連づける場合，javax.xml.bind.annotation.XmlMimeTypeアノテーションをgetterメソッドにアノテートしてください。フィールドおよびsetterメソッドにアノテートした場合，動作は保証されません。JavaプロパティにMIMEタイプを関連づける例を次に示します。

package com.sample;

import java.awt.Image;

public class UserData {

   private Image image;

   public void setImage(Image image) {
       this.image = image;
   }

   @javax.xml.bind.annotation.XmlMimeType("image/png")
   public Image getImage() {
       return image;
   }
}

注※3

ユーザ定義例外のフィールドにjavax.xml.bind.annotation.XmlMimeTypeアノテーションを指定した場合，動作は保証されません。

注※4

1次元配列だけ使用でき，多次元配列は使用できません。多次元配列を使用した場合，動作は保証されません。

注※5

Holder型は引数にだけ指定できます。戻り値には指定できません。

＜この項の構成＞

(1)　value要素（javax.xml.bind.annotation.XmlMimeType）

(1)　value要素（javax.xml.bind.annotation.XmlMimeType）

value要素は，javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートしたJava型に関連づけるMIMEタイプのテキスト表現を指定します。

指定するMIMEタイプは，アノテーションをアノテートしたJava型に対して適切なMIMEタイプでなければなりません。指定するMIMEタイプが適切ではない場合や複数のMIMEタイプをコンマ区切りで記述した場合，動作は保証されません。また，指定するMIMEタイプには，"text/xml"および"application/xml"のcharsetパラメタを除いて，パラメタを記述しないでください。"text/xml"および"application/xml"のcharsetパラメタ以外のパラメタを記述した場合，動作は保証されません。

Java型に指定できるMIMEタイプを次の表に示します。

表13-18　Java型に指定できるMIMEタイプ

項番 | Java型 | value要素に指定できるMIMEタイプ
1 | java.awt.Image，java.awt.Imageの配列型，java.util.List<Image>，またはjavax.xml.ws.Holder<Image> | image/png※1
2 | image/jpeg※1
3 | image/*※2
4 | javax.xml.transform.Sourceまたはjavax.xml.ws.Holder<Source> | text/xml※3
5 | application/xml
6 | javax.activation.DataHandler，javax.activation.DataHandlerの配列型，java.util.List<DataHandler>，またはjavax.xml.ws.Holder<DataHandler> | 上記以外※4

注※1

表中にないimageタイプを送信する場合は，javax.activation.DataHandlerクラスを使用して送信してください。

注※2

MIMEタイプに"image/*"を指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，java.awt.Image型を使用したときの初期値（"image/png"）です。

注※3

MIMEタイプに"text/xml"を指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，javax.xml.transform.Source型を使用したときの初期値（"application/xml"）です。

注※4

MIMEタイプに"application/*"や未知のMIMEタイプを指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，javax.activation.DataHandler型を使用したときの初期値（javax.activation.DataHandlerオブジェクトのMIMEタイプ）です。

13.2.10　javax.xml.ws.Actionアノテーション

javax.xml.ws.Actionアノテーションでは，オペレーションのinput，output，およびfaultの各メッセージでWebサービスが使用するアドレッシング・ヘッダのwsa:Action要素の値を指定できます。

javax.xml.ws.Actionアノテーションは，SEIでだけ指定できます。サービス実装クラスに指定した場合は，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61095-W）。

javax.xml.ws.Actionアノテーションを使用したカスタマイズ例を次の図に示します。

図13-19　javax.xml.ws.Actionアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　fault要素（javax.xml.ws.Action）

(2)　input要素（javax.xml.ws.Action）

(3)　output要素（javax.xml.ws.Action）

(1)　fault要素（javax.xml.ws.Action）

fault要素には，Webサービスがフォルトメッセージを送信する場合に使用する，アドレッシング・ヘッダのwsa:Action要素の値（javax.xml.ws.FaultAction アノテーション）を指定します。"null"や"{null}"を指定した場合の動作は保証されません。

fault要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

(2)　input要素（javax.xml.ws.Action）

input要素には，Webサービスがリクエストメッセージを受信する場合に使用するアドレッシング・ヘッダの，wsa:Action要素の値を指定します。input要素には，RFC2396で規定されたxsd:anyURIを満たす文字を指定してください。それ以外の文字を指定した場合の動作は保証されません。

input要素に空白を指定した場合，空白がそのままアドレッシング・ヘッダのwsa:Action要素の値となります。空文字を指定した場合は，その指定は無視され，input要素を記述していないものと見なされます。

input要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

(3)　output要素（javax.xml.ws.Action）

output要素には，Webサービスがレスポンスメッセージを送信する場合に使用する，アドレッシング・ヘッダのwsa:Action要素の値を指定します。output要素には，RFC2396で規定されたxsd:anyURIを満たす文字を指定してください。それ以外の文字を指定した場合の動作は保証されません。

output要素に空白を指定した場合，空白がそのままアドレッシング・ヘッダのwsa:Action要素の値となります。空文字を指定した場合は，その指定は無視され，output要素を記述していないものと見なされます。

output要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

13.2.11　javax.xml.ws.BindingTypeアノテーション

javax.xml.ws.BindingTypeアノテーションは，Webサービス実装クラスで指定するアノテーションです。SEIに指定した場合は無視されます。SEIに指定した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61079-W）。

＜この項の構成＞

(1)　value要素（javax.xml.ws.BindingType）

(1)　value要素（javax.xml.ws.BindingType）

value要素には，javax.xml.ws.soap.SOAPBindingインタフェースの次に示すフィールド値が指定できます。

"SOAP11HTTP_BINDING"（SOAP1.1 over HTTP）

"SOAP12HTTP_BINDING"（SOAP1.2 over HTTP）

"SOAP11HTTP_MTOM_BINDING"（デフォルトでMTOM/XOP仕様形式の添付ファイルが有効であるSOAP1.1 over HTTP）

"SOAP12HTTP_MTOM_BINDING"（デフォルトでMTOM/XOP仕様形式の添付ファイルが有効であるSOAP1.2 over HTTP）

これら以外のフィールド値を指定した場合，標準エラー出力とログにエラーメッセージが出力されます。value要素に不正な値を指定した場合に出力されるエラーメッセージを次の表に示します。

表13-19　value要素（javax.xml.ws.BindingType）に不正な値を指定した場合に出力されるエラーメッセージ

項番 | value要素の値 | エラーメッセージID
aptコマンド実行時 | cjwsgenコマンド実行時
1 | javax.xml.ws.http.HTTPBinding.HTTP_BINDING | KDJW61072-E | KDJW71005-E
2 | バインディング識別子以外の不正な値 | KDJW61072-E | KDJW71005-E

javax.xml.ws.BindingTypeアノテーションから，WSDLのwsdl:binding要素の子要素であるsoap:binding要素またはsoap12:binding要素のtransport属性値へのマッピングを次の表に示します。

表13-20　BindingTypeアノテーションからtransport属性値へのマッピング

項番
SOAPバージョン
BindingTypeアノテーションの値
transport属性値

1
SOAP 1.1
http://schemas.xmlsoap.org/soap/http
または
@SOAPBinding.SOAP11HTTP_BINDING
http://schemas.xmlsoap.org/soap/http

2
http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true
または
@SOAPBinding.SOAP11HTTP_MTOM_BINDING

3
SOAP 1.2
http://www.w3.org/2003/05/soap/bindings/HTTP/
または
@SOAPBinding.SOAP12HTTP_BINDING
-soap12bindingオプションまたはcom.cosminexus.jaxws.publish_wsdl.soap12bindingプロパティの指定値によって，WSDLのtransport属性値が異なります。※

4
http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true
または
@SOAPBinding.SOAP12HTTP_MTOM_BINDING

注※

-soap12bindingオプションの指定値とWSDLのtransport属性値の関係については，「11.3　cjwsgenコマンド」を参照してください。

com.cosminexus.jaxws.publish_wsdl.soap12bindingプロパティの指定値とWSDLのtransport属性値の関係を次の表に示します。

表13-21　プロパティの指定値とWSDLのtransport属性値の関係

項番 | プロパティ指定有無 | プロパティ指定値 | transport属性値
1 | 指定なし | なし | http://www.w3.org/2003/05/soap/bindings/HTTP/
2 | 指定あり | DEFAULT
3 | WSI_BP20_TRANSPORT | http://schemas.xmlsoap.org/soap/http※

注※

transport属性値については標準仕様であいまいなため，JAX-WSではこのURLを使用できます。

13.2.12　javax.xml.ws.FaultActionアノテーション

javax.xml.ws.FaultActionアノテーションでは，Webサービスがフォルトメッセージを送信する場合に使用するアドレッシング・ヘッダのwsa:Action要素の値を指定します。

javax.xml.ws.FaultActionアノテーションが指定できるのは，javax.xml.ws.Actionアノテーションのfault要素内だけです。SEIやサービス実装クラスのメソッドに指定しても，無効となります。

＜この項の構成＞

(1)　className要素（javax.xml.ws.FaultAction）

(2)　value要素（javax.xml.ws.FaultAction）

(1)　className要素（javax.xml.ws.FaultAction）

className要素は，javax.xml.ws.FaultActionアノテーションの必須要素です。Webサービスが送信する例外クラスのクラス名を指定してください。className要素を指定しないと，Webサービス側のJAX-WSエンジンで例外が発生し，Webサービスを開始できません（KDJW40013-E）。

className要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

(2)　value要素（javax.xml.ws.FaultAction）

value要素には，className要素で指定した例外クラスのフォルトメッセージをWebサービスが送信する場合に使用するアドレッシング・ヘッダのwsa:Action要素の値を指定します。value要素には，RFC2396で規定されたxsd:anyURIを満たす文字を指定してください。それ以外の文字を指定した場合の動作は保証されません。

value要素に空白を指定した場合，空白がそのままアドレッシング・ヘッダのwsa:Action要素の値となります。空文字を指定した場合は，その指定は無視され，value要素を記述していないものと見なされます。

value要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

13.2.13　javax.xml.ws.RequestWrapperアノテーション

javax.xml.ws.RequestWrapperアノテーションは，wrapperスタイルで指定できます。non-wrapperスタイルで指定した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61061-W）。

javax.xml.ws.RequestWrapperアノテーションはSEIで指定するアノテーションです。Webサービス実装クラスに指定した場合は無視されます。Webサービス実装クラスに指定した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61077-W）。

javax.xml.ws.RequestWrapperアノテーションを使用したカスタマイズ例を次の図に示します。

図13-20　javax.xml.ws.RequestWrapperアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　localName要素（javax.xml.ws.RequestWrapper）

(2)　targetNamespace要素（javax.xml.ws.RequestWrapper）

(3)　className要素（javax.xml.ws.RequestWrapper）

(1)　localName要素（javax.xml.ws.RequestWrapper）

localName要素は，リクエストwrapper要素のローカル名のマッピングをカスタマイズするときに指定します。localName要素に要素値を指定した場合，wrapper要素の型名もカスタマイズできます。

localName要素を指定するときの注意事項について説明します。

localName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

localName要素とオペレーション名は同じ名前にしてください。名前が異なる場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61047-E）。

(2)　targetNamespace要素（javax.xml.ws.RequestWrapper）

targetNamespace要素は，リクエストwrapper要素の名前空間のマッピングをカスタマイズするときに指定します。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61042-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61043-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61044-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表13-22　名前空間に記述できる文字列の条件（javax.xml.ws.RequestWrapper）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

(3)　className要素（javax.xml.ws.RequestWrapper）

className要素は，生成するリクエストbeanのクラス名を完全修飾名で指定します。

className要素を指定するときの注意事項について説明します。

className要素は半角英数字，アンダースコア（_），およびドルマーク（$）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61040-E）。

13.2.14　javax.xml.ws.ResponseWrapperアノテーション

javax.xml.ws.ResponseWrapperアノテーションは，wrapperスタイルで指定できます。non-wrapperスタイルで指定した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61062-W）。

javax.xml.ws.ResponseWrapperアノテーションはSEIで指定するアノテーションです。Webサービス実装クラスに指定した場合は無視されます。Webサービス実装クラスに指定した場合，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61078-W）。

javax.xml.ws.ResponseWrapperアノテーションを使用したカスタマイズ例を次の図に示します。

図13-21　javax.xml.ws.ResponseWrapperアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　localName要素（javax.xml.ws.ResponseWrapper）

(2)　targetNamespace要素（javax.xml.ws.ResponseWrapper）

(3)　className要素（javax.xml.ws.ResponseWrapper）

(1)　localName要素（javax.xml.ws.ResponseWrapper）

localName要素は，レスポンスwrapper要素のローカル名のマッピングをカスタマイズするときに指定します。localName要素に要素値を指定した場合，wrapper要素の型名もカスタマイズできます。

localName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

(2)　targetNamespace要素（javax.xml.ws.ResponseWrapper）

targetNamespace要素は，レスポンスwrapper要素の名前空間のマッピングをカスタマイズするときに指定します。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61049-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61050-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61051-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表13-23　名前空間に記述できる文字列の条件（javax.xml.ws.ResponseWrapper）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

(3)　className要素（javax.xml.ws.ResponseWrapper）

className要素は，生成するレスポンスbeanのクラス名を完全修飾名で指定します。

className要素を指定するときの注意事項について説明します。

className要素はパッケージの区切り文字であるピリオド（.），半角英数字，アンダースコア（_），およびドルマーク（$）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61041-E）。

13.2.15　javax.xml.ws.ServiceModeアノテーション

javax.xml.ws.ServiceModeアノテーションでは，プロバイダがアクセスする対象がプロトコルメッセージのペイロード（SOAPボディ）だけなのか，プロトコルメッセージ全体（SOAPエンベロープ）なのかを指定します。

javax.xml.ws.ServiceModeアノテーションは，Webサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

＜この項の構成＞

(1)　value要素（javax.xml.ws.ServiceMode）

(1)　value要素（javax.xml.ws.ServiceMode）

value要素には，javax.xml.ws.Service.Mode.MESSAGEまたはjavax.xml.ws.Service.Mode.PAYLOADを指定します。デフォルト値はjavax.xml.ws.Service.Mode.PAYLOADです。

javax.xml.ws.Service.Mode.MESSAGEを指定するとプロトコルメッセージのすべてが，javax.xml.ws.Service.Mode.PAYLOADを指定するとプロトコルメッセージのペイロードだけが，プロバイダのインスタンスに渡されます。

13.2.16　javax.xml.ws.soap.Addressingアノテーション

javax.xml.ws.soap.Addressingアノテーションは，アドレッシング機能を使用する場合に必要です。

javax.xml.ws.soap.Addressingアノテーションは，サービス実装クラスでだけ指定できます。SEIに指定した場合は，標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW61094-W）。

javax.xml.ws.soap.Addressingアノテーションを使用したカスタマイズ例を次の図に示します。

図13-22　javax.xml.ws.soap.Addressingアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　enabled要素（javax.xml.ws.soap.Addressing）

(2)　required要素（javax.xml.ws.soap.Addressing）

(1)　enabled要素（javax.xml.ws.soap.Addressing）

enabled要素では，Webサービスでアドレッシング機能を有効にするかどうかを指定します。"true"を指定した場合はアドレッシング機能が有効に，"false"を指定した場合はアドレッシング機能は無効となります。デフォルト値は"true"です。

enabled要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

(2)　required要素（javax.xml.ws.soap.Addressing）

required要素では，Webサービスを呼び出す場合のリクエストメッセージに，アドレッシング・ヘッダを必須とするかどうかを指定します。"true"を指定した場合はアドレッシング・ヘッダが必須に，"false"を指定した場合はアドレッシング・ヘッダは任意となります。デフォルト値は"false"です。

required要素はWebサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

13.2.17　javax.xml.ws.soap.MTOMアノテーション

javax.xml.ws.soap.MTOMアノテーションは，MTOM/XOP仕様形式の添付ファイルを使用するWebサービスに指定します。

javax.xml.ws.soap.MTOMアノテーションはWebサービス実装クラスだけで指定できます。SEIに指定すると無視されます。また，プロバイダ実装クラス（javax.xml.ws.providerインタフェースを実装するクラス）に指定した場合は動作が保証されません。

cjwsimportコマンドが生成するWebサービス実装クラスのスケルトンクラスを使用してMTOM/XOP仕様形式の添付ファイルを使用するWebサービスを作成する場合，Webサービス実装クラスのスケルトンクラスにはjavax.xml.ws.soap.MTOMアノテーションをマッピングしないので，javax.xml.ws.soap.MTOMアノテーションを指定する必要があります。なお，Webサービス実装クラスにjavax.xml.ws.soap.MTOMアノテーションを指定しても，Webサービス側のJAX-WSエンジンが発行するWSDLファイルやcjwsgenコマンドが生成するWSDLファイルには，MTOM/XOP仕様形式の添付ファイルが使用されていることを示す要素や属性は出現しません。

javax.xml.ws.soap.MTOMアノテーションは，Webサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

javax.xml.ws.soap.MTOMアノテーションを使用した例を次に示します。

・・・・・
@MTOM
@WebService(endpointInterface = "jaxwstp.example.service.ExamplePortType", targetNamespace = "http://service.example.jaxwstp/", serviceName = "ExampleService", portName = "ExamplePort")
public class ExampleBinding implements ExamplePortType {

＜この項の構成＞

(1)　enabled要素（javax.xml.ws.soap.MTOM）

(2)　threshold要素（javax.xml.ws.soap.MTOM）

(1)　enabled要素（javax.xml.ws.soap.MTOM）

enabled要素は，WebサービスでMTOM/XOP仕様形式の添付ファイルを使用するかどうかを指定します。"true"を指定した場合はMTOM/XOP仕様形式の添付ファイルが使用でき，"false"を指定した場合はMTOM/XOP仕様形式の添付ファイルが使用できません。デフォルト値は"true"です。

(2)　threshold要素（javax.xml.ws.soap.MTOM）

threshold要素は，WebサービスでMTOM/XOP仕様形式の添付ファイルが使用できるときに，バイナリデータをMTOM/XOP仕様形式の添付ファイルとして送信するためのしきい値です。javax.activation.DataHandlerクラス以外で，さらに指定された値を超えるバイナリデータ（threshold要素値＜送信するデータのサイズ）の場合，MTOM/XOP仕様形式の添付ファイルとして送信されます。デフォルト値は"0"です。

13.2.18　javax.xml.ws.WebFaultアノテーション

javax.xml.ws.WebFaultアノテーションは，戻り値のマッピングをカスタマイズするときに使用できます。

javax.xml.ws.WebFaultアノテーションを使用したカスタマイズ例を次の図に示します。

図13-23　javax.xml.ws.WebFaultアノテーションを使用したカスタマイズ例

＜この項の構成＞

(1)　name要素（javax.xml.ws.WebFault）

(2)　targetNamespace要素（javax.xml.ws.WebFault）

(3)　faultBean要素（javax.xml.ws.WebFault）

(1)　name要素（javax.xml.ws.WebFault）

name要素は，フォルトbeanからマッピングするグローバル要素のローカル名をカスタマイズするときに使用します。

name要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

(2)　targetNamespace要素（javax.xml.ws.WebFault）

targetNamespace要素は，フォルトbeanからマッピングするグローバル要素の名前空間をカスタマイズするときに指定します。

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61067-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61068-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61069-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。ただし，バインディング宣言でカスタマイズする場合は，XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。

表13-24　名前空間に記述できる文字列の条件（javax.xml.ws.WebFault）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語以外の文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com

(3)　faultBean要素（javax.xml.ws.WebFault）

faultBean要素は，生成するフォルトbeanのクラス名を完全修飾名で指定します。ラッパ例外クラスが，javax.xml.ws.WebFaultアノテーションおよびフォルトbeanを返すgetFaultInfoメソッドを持つ場合，faultBean要素を指定しても，フォルトbeanは生成されません。

faultBean要素を指定するときの注意事項について説明します。

faultBean要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは出力されません）。

Java言語仕様で規定されるJava識別子の命名規則に従った値を指定してください。Java識別子の命名規則に従っていない場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61039-E）。

13.2.19　javax.xml.ws.WebServiceProviderアノテーション

javax.xml.ws.WebServiceProviderアノテーションは，javax.xml.ws.providerインタフェースを実装するクラスに指定し，プロバイダの要件を満たすクラスがWebサービスのエンドポイントを定義していることを宣言します。

javax.xml.ws.WebServiceProviderアノテーションとjavax.jws.WebServiceアノテーションは，どちらか一方しか指定できません。javax.xml.ws.WebServiceProviderアノテーションとjavax.jws.WebServiceアノテーションを同時に指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW61098-E）。

javax.xml.ws.WebServiceProviderアノテーションは，Webサービス開始時に参照されるだけです。aptコマンドまたはcjwsgenコマンドの実行時には解釈されません。

＜この項の構成＞

(1)　targetNamespace要素（javax.xml.ws.WebServiceProvider）

(2)　serviceName要素（javax.xml.ws.WebServiceProvider）

(3)　portName要素（javax.xml.ws.WebServiceProvider）

(4)　wsdlLocation要素（javax.xml.ws.WebServiceProvider）

(1)　targetNamespace要素（javax.xml.ws.WebServiceProvider）

targetNamespace要素には，http://またはurn:のプロトコルを名前空間として指定します。指定できる名前空間の形式および文字列を示します。

プロトコル
名前空間のプロトコルは，http://またはurn:のプロトコルで記述してください。http://またはurn:のプロトコル以外（https://，file://など）を記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61099-E）。
また，相対パスで記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61100-E）。

名前空間の記述形式
名前空間には次に示す形式は記述できません。次に示す形式で記述した場合，標準エラー出力とログにエラーメッセージが出力されます（KDJW61101-E）。

クエリストリング（例）http://example.com/?a=b

アンカー（例）http://example.com/index.html#anchor

ポート番号（例）http://example.com:8080/

ユーザ名／パスワード（例）http://user:password@example.com

記述できる文字列
区切り文字のスラッシュ（/）またはピリオド（.）で区切られたセグメントには，次の表に示すすべての条件を満たす文字列を記述できます。

表13-25　名前空間に記述できる文字列の条件（javax.xml.ws.WebServiceProvider）

項番
条件
不正な文字列の例
不正な文字列を指定した場合の動作

1
半角英数字（0～9，A～Z，a～z）だけを使用した文字列
http://日立.com/
http://133.145.224.19/
http://[1080:2C14;D30:BA04:275:806:270C:418A]/
動作は保証されません（エラーメッセージは表示されません）。

2
Javaの予約語でない文字列
http://hitachi.com/abstract
動作は保証されません。

3
先頭が数字でない文字列
http://1hitachi.com/

(2)　serviceName要素（javax.xml.ws.WebServiceProvider）

serviceName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合の動作は保証されません（エラーメッセージは表示されません）。

(3)　portName要素（javax.xml.ws.WebServiceProvider）

portName要素は半角英数字とアンダースコア（_）で指定します。それ以外の文字を指定した場合，動作は保証されません（エラーメッセージは表示されません）。

(4)　wsdlLocation要素（javax.xml.ws.WebServiceProvider）

wsdlLocation要素については，「10.6　メタデータの発行」を参照してください。

14.　標準仕様のサポート範囲

この章では，Webサービスを開発するときに注意が必要な，標準仕様のサポート範囲について説明します。

＜この章の構成＞

14.1　WSDL 1.1仕様のサポート範囲

14.2　WSDL作成時の注意事項

14.3　JAX-WS 2.1仕様のサポート範囲

14.4　ハンドラチェイン設定ファイルのサポート範囲

14.5　SAAJ 1.3仕様のサポート範囲

14.6　WS-RM 1.2仕様のサポート範囲

14.7　WS-RM Policy 1.2仕様のサポート範囲

14.1　WSDL 1.1仕様のサポート範囲

WSDLの要素ごとに，WSDL 1.1仕様のサポート範囲を説明します。

注意事項

この節に記載していない要素や属性を指定している場合など，CosminexusのJAX-WS機能でサポートしているWSDL仕様として文法的に不正な場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

この節では，WSDL構文の制約について説明しています。WSDL構文の問題がない場合でも，Javaへのマッピングで問題があれば，別のエラーとなることがあります。WSDL上で参照されない要素や属性についても不正がある場合は，エラーとなることがあります。

また，WSDL拡張要素および拡張属性については次の注意事項があります。

MIMEバインディングのための拡張要素（mime:content，mime:mimeXmlなど）はサポートしていません。したがって，MIME関連のWSDL要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51188-E）。

次の仕様はサポートしています。
・SOAP 1.1仕様のSOAPバインディングのための拡張要素（soap:header，soap:bodyなど）
・SOAP 1.2仕様のSOAPバインディングのための拡張要素
・WS-Addressing 1.0仕様の拡張要素（wsaw:UsingAddressingなど）および拡張属性（wsaw:Actionなど）

JAX-WS 2.1仕様のバインディング宣言（jaxws:bindingsなど）

サポートしていない拡張要素または拡張属性を指定した場合は，無視されます。

＜この節の構成＞

14.1.1　wsdl:definitions要素

14.1.2　wsdl:import要素

14.1.3　wsdl:types要素

14.1.4　wsdl:message要素

14.1.5　wsdl:part要素

14.1.6　wsdl:portType要素

14.1.7　wsdl:operation要素（wsdl:portType要素の子要素の場合）

14.1.8　wsdl:input要素（wsdl:portType要素の孫要素の場合）

14.1.9　wsdl:output要素（wsdl:portType要素の孫要素の場合）

14.1.10　wsdl:fault要素（wsdl:portType要素の孫要素の場合）

14.1.11　wsdl:binding要素

14.1.12　wsdl:operation要素（wsdl:binding要素の子要素の場合）

14.1.13　wsdl:input要素（wsdl:binding要素の孫要素の場合）

14.1.14　wsdl:output要素（wsdl:binding要素の孫要素の場合）

14.1.15　wsdl:fault要素（wsdl:binding要素の孫要素の場合）

14.1.16　wsdl:service要素

14.1.17　wsdl:port要素

14.1.18　wsdl:documentation要素

14.1.19　soap:binding要素

14.1.20　soap:operation要素

14.1.21　soap:body要素

14.1.22　soap:header要素

14.1.23　soap:fault要素

14.1.24　soap:address要素

14.1.25　soap12:operation要素

14.1.26　soap12:binding要素

14.1.27　soap12:body要素

14.1.28　soap12:header要素

14.1.29　soap12:fault要素

14.1.30　soap12:address要素

14.1.31　xsd:schema要素

14.1.1　wsdl:definitions要素

wsdl:definitions要素のサポート範囲を説明します。

WSDLファイルのルート要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51053-E）。

wsdl:documentation要素

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsdl:import要素

wsdl:types要素

wsdl:message要素

wsdl:portType要素

wsdl:binding要素

wsdl:service要素

wsdl:documentation要素とjaxws:bindings要素は，上記の順序で指定する必要があります。ただし，それ以外の要素は，指定する順序を問いません。
wsdl:documentation要素とjaxws:bindings要素の指定順序を誤った場合，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

targetNamespace属性

＜この項の構成＞

(1)　name属性（wsdl:definitions要素）

(2)　targetNamespace属性（wsdl:definitions要素）

(1)　name属性（wsdl:definitions要素）

wsdl:definitions要素に含まれるname属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　targetNamespace属性（wsdl:definitions要素）

wsdl:definitions要素に含まれるtargetNamespace属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.1(2)　名前空間の条件」を参照してください。

14.1.2　wsdl:import要素

wsdl:import要素のサポート範囲を説明します。

wsdl:definitions要素の子要素として，0個から255個まで記述できます。256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51052-E）。

子要素としてwsdl:documentation要素を指定できます。wsdl:documentation要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51054-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

namespace属性

location属性

＜この項の構成＞

(1)　namespace属性（wsdl:import要素）

(2)　location属性（wsdl:import要素）

(1)　namespace属性（wsdl:import要素）

wsdl:import要素に含まれるnamespace属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「17.3(1)　namespace属性（wsdl:import要素）」を参照してください。

(2)　location属性（wsdl:import要素）

wsdl:import要素に含まれるlocation属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

xsd:anyURIを満たす任意の文字列を指定できます。

指定できる値については，「17.3(2)　location属性（wsdl:import要素）」を参照してください。

14.1.3　wsdl:types要素

wsdl:types要素のサポート範囲を説明します。

wsdl:definitions要素の子要素として，1個だけ記述できます。省略できません※。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51049-E）。

注※

WSDLのインポート機能を使用する場合は，インポート関係にあるすべてのWSDL内で1個あれば足りるので，この場合は省略できます。また，インポート関係にあるWSDLの合計が上限になります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51059-E）。

wsdl:documentation要素

xsd:schema要素

wsdl:documentation要素とxsd:schema要素は上記の順序で指定する必要があります。指定順序を誤った場合，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

属性は指定できません。属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.4　wsdl:message要素

wsdl:message要素のサポート範囲を説明します。

wsdl:definitions要素の子要素として，1個以上記述できます。省略できません※。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51050-E）。

注※

WSDLのインポート機能を使用する場合は，インポート関係にあるすべてのWSDL内で1個あれば足りるので，この場合は省略できます。また，インポート関係にあるWSDLの合計が上限になります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51055-E）。

wsdl:documentation要素

wsdl:part要素

wsdl:documentation要素とwsdl:part要素は上記の順序で指定する必要があります。指定順序を誤った場合，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（wsdl:message要素）

(1)　name属性（wsdl:message要素）

wsdl:message要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。ただし，同じwsdl:definitions要素以下にあるほかのwsdl:message要素のname属性と同じ値は指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.5　wsdl:part要素

wsdl:part要素のサポート範囲を説明します。

wsdl:message要素の子要素として，0個から255個まで記述できます。256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

指定できる値については，「14.2　WSDL作成時の注意事項」を参照してください。

子要素としてwsdl:documentation要素を指定できます。wsdl:documentation要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51056-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

element属性

＜この項の構成＞

(1)　name属性（wsdl:part要素）

(2)　element属性（wsdl:part要素）

(1)　name属性（wsdl:part要素）

wsdl:part要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.5(2)　パート名の条件」を参照してください。

(2)　element属性（wsdl:part要素）

wsdl:part要素に含まれるelement属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:types要素以下に宣言されている要素宣言をQNameで指定してください。

14.1.6　wsdl:portType要素

wsdl:portType要素のサポート範囲を説明します。

要素の子要素として，1個から255個まで記述できます。省略できません※。省略または256個以上記述した場合については，「12.1.2(3)　ポートタイプの記述個数」を参照してください。

注※

WSDLのインポート機能を使用する場合は，インポート関係にあるすべてのWSDL内で1個あれば足りるので，この場合は省略できます。また，インポート関係にあるすべてのWSDL内での合計が上限になります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51074-E）。

wsdl:documentation要素

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsdl:operation要素

wsdl:documentation要素，jaxws:bindings要素，およびwsdl:operation要素は上記の順序で指定する必要があります。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（portType要素）

(1)　name属性（portType要素）

wsdl:portType要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.2(2)　ポートタイプ名の条件」を参照してください。ただし，同じwsdl:definitions要素以下にある，ほかのwsdl:portType要素のname属性と同じ値は指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.7　wsdl:operation要素（wsdl:portType要素の子要素の場合）

wsdl:operation要素のサポート範囲を説明します。

wsdl:portType要素の子要素として，1個から255個まで記述できます。省略できません。省略または256個以上記述した場合については，「12.1.3(3)　オペレーションとその子要素の記述個数」を参照してください。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51080-E）。

wsdl:documentation要素

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsdl:input要素

wsdl:output要素

wsdl:fault要素

wsdl:documentation要素，jaxws:bindings要素，wsdl:input要素，wsdl:output要素およびwsdl:fault要素は上記の順序で指定する必要があります。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合の動作は保証されません。

＜この項の構成＞

(1)　name属性（wsdl:operation要素）

(1)　name属性（wsdl:operation要素）

wsdl:operation要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.3(2)　オペレーション名の条件」を参照してください。ただし，同じwsdl:operation要素以下にある，ほかのwsdl:portType要素のname属性と同じ値は指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51083-E）。

14.1.8　wsdl:input要素（wsdl:portType要素の孫要素の場合）

wsdl:input要素のサポート範囲を説明します。

wsdl:operation要素の子要素として，1個だけ記述できます。省略できません。省略または2個以上記述した場合については，「12.1.3(3)　オペレーションとその子要素の記述個数」を参照してください。

子要素としてwsdl:documentation要素を指定できます。wsdl:documentation要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51057-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

message属性

wsaw:Action属性

wsaw:Action属性については，「27.5.6　wsa:Action要素指定時の動作」を参照してください。

＜この項の構成＞

(1)　name属性（wsdl:input要素）

(2)　message属性（wsdl:input要素）

(1)　name属性（wsdl:input要素）

wsdl:input要素に含まれるname属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　message属性（wsdl:input要素）

wsdl:input要素に含まれるmessage属性のサポート範囲を説明します。

wsdl:input要素の子要素として，1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定してください。

14.1.9　wsdl:output要素（wsdl:portType要素の孫要素の場合）

wsdl:output要素のサポート範囲を説明します。

wsdl:operation要素の子要素として，1個だけ記述できます。省略できません。省略または2個以上記述した場合については，「12.1.3(3)　オペレーションとその子要素の記述個数」を参照してください。

子要素としてwsdl:documentation要素を指定できます。wsdl:documentation要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51058-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

message属性

wsaw:Action属性

wsaw:Action属性については，「27.5.6　wsa:Action要素指定時の動作」を参照してください。

＜この項の構成＞

(1)　name属性（wsdl:output要素）

(2)　message属性（wsdl:output要素）

(1)　name属性（wsdl:output要素）

wsdl:output要素に含まれるname属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　message属性（wsdl:output要素）

wsdl:output要素に含まれるmessage属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定してください。

14.1.10　wsdl:fault要素（wsdl:portType要素の孫要素の場合）

wsdl:fault要素のサポート範囲を説明します。

wsdl:operation要素の子要素として，0個から255個まで記述できます。省略または256個以上記述した場合については，「12.1.3(3)　オペレーションとその子要素の記述個数」を参照してください。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す拡張要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51096-E）。

wsdl:documentation要素

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsdl:documentation要素とjaxws:bindings要素は上記の順序で指定する必要があります。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

message属性

wsaw:Action属性

wsaw:Action属性については，「27.5.6　wsa:Action要素指定時の動作」を参照してください。

＜この項の構成＞

(1)　name属性（wsdl:fault要素）

(2)　message属性（wsdl:fault要素）

(1)　name属性（wsdl:fault要素）

wsdl:fault要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　message属性（wsdl:fault要素）

wsdl:fault要素に含まれるmessage属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定します。

14.1.11　wsdl:binding要素

wsdl:binding要素のサポート範囲を説明します。

wsdl:definitions要素の子要素として，1個から255個まで記述できます。省略できません※。省略または256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51100-E）。

注※

WSDLのインポート機能を使用する場合は，インポート関係にあるすべてのWSDL内で1個あれば足りるので，この場合は省略できます。また，インポート関係にあるすべてのWSDL内での合計が上限になります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51102-E）。

wsdl:documentation要素

soap:binding要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12:binding要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsaw:UsingAddressing要素（WS-Addressing 1.0仕様の拡張要素）

wsdl:operation要素

注※

soap:binding要素とsoap12:binding要素は，どちらかを選択して指定してください。両方の要素を指定することはできません。

wsdl:binding要素の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，次に示す要素の順序は入れ替わってもかまいません。

soap:binding要素またはsoap12:binding要素

jaxws:bindings要素

wsaw:UsingAddressing要素

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

type属性

＜この項の構成＞

(1)　name属性（wsdl:binding要素）

(2)　type属性（wsdl:binding要素）

(1)　name属性（wsdl:binding要素）

wsdl:binding要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　type属性（wsdl:binding要素）

wsdl:binding要素に含まれるtype属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定します。

14.1.12　wsdl:operation要素（wsdl:binding要素の子要素の場合）

wsdl:operation要素のサポート範囲を説明します。

wsdl:binding要素の子要素として，1個から255個まで記述できます。省略できません。省略または256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51108-E）。

wsdl:documentation要素

soap:operation要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12: operation要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsaw:Anonymous要素（WS-Addressing 1.0仕様の拡張要素）

wsdl:input要素

wsdl:output要素

wsdl:fault要素

注※

soap: operation要素とsoap12: operation要素は，どちらかを選択して指定してください。両方の要素を指定することはできません。

wsdl:operation要素（wsdl:binding要素の子要素の場合）の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，次に示す要素の順序は入れ替わってもかまいません。

soap:operation要素またはsoap12: operation要素

jaxws:bindings要素

wsaw:Anonymous要素

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

wsdl:binding要素のwsdl:operation要素は，wsdl:portType要素で定義されているwsdl:operation要素に対応するように定義してください。対応するように定義していない場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51112-E）。

＜この項の構成＞

(1)　name属性（wsdl:operation要素）

(1)　name属性（wsdl:operation要素）

wsdl:operation要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

14.1.13　wsdl:input要素（wsdl:binding要素の孫要素の場合）

wsdl:input要素のサポート範囲を説明します。

wsdl:operation要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51114-E）。

wsdl:documentation要素

soap:header要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap:body要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12:header要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

soap12:body要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

注※

soap:header要素とsoap12:header要素，およびsoap:body要素とsoap12:header要素は，それぞれどちらかを選択して指定してください。SOAP 1.1仕様とSOAP 1.2仕様の要素を両方または混在して指定することはできません。

wsdl:input要素（wsdl:binding要素の孫要素の場合）の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，次に示す要素の順序は入れ替わってもかまいません。

soap:header要素またはsoap12:header要素

soap:body要素またはsoap12:body要素

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（wsdl:input要素）

(1)　name属性（wsdl:input要素）

wsdl:input要素に含まれるname属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

14.1.14　wsdl:output要素（wsdl:binding要素の孫要素の場合）

wsdl:output要素のサポート範囲を説明します。

wsdl:operation要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す拡張要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51119-E）。

wsdl:documentation要素

soap:header要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap:body要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12:header要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

soap12:body要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

注※

soap:header要素とsoap12:header要素，およびsoap:body要素とsoap12:header要素は，それぞれどちらかを選択して指定してください。SOAP 1.1仕様とSOAP 1.2仕様の要素を両方または混在して指定することはできません。

wsdl:output要素（wsdl:binding要素の孫要素の場合）の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，次に示す要素の順序は入れ替わってもかまいません。

soap:header要素またはsoap12:header要素

soap:body要素またはsoap12:body要素

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（wsdl:output要素）

(1)　name属性（wsdl:output要素）

wsdl:output要素に含まれるname属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

14.1.15　wsdl:fault要素（wsdl:binding要素の孫要素の場合）

wsdl:fault要素のサポート範囲を説明します。

wsdl:operation要素の子要素として，0個から255個まで記述できます。256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す拡張要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51123-E）。

wsdl:documentation要素

soap:fault要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12:fault要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

注※

soap:fault要素とsoap12:fault要素は，どちらかを選択して指定してください。両方の要素を指定することはできません。

wsdl:fault要素（wsdl:binding要素の孫要素の場合）の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（wsdl:fault要素）

(1)　name属性（wsdl:fault要素）

wsdl:fault要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。ただし，同じwsdl:operation要素以下にある，ほかのwsdl:fault要素のname属性と同じ値を指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.16　wsdl:service要素

wsdl:service要素のサポート範囲を説明します。

wsdl:definitions要素の子要素として，1個から255個まで記述できます。省略できません※。省略または256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51127-E）。

注※

WSDLのインポート機能を使用する場合は，インポート関係にあるすべてのWSDL内で1個あれば足りるので，この場合は省略できます。また，インポート関係にあるすべてのWSDL内での合計が上限になります。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す拡張要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51129-E）。

wsdl:documentation要素

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsdl:port要素

wsdl:service要素の子要素は，上記の順序で指定する必要があります。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性を指定できます。name属性以外の属性は指定できません。name属性以外の属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　name属性（wsdl:service要素）

(1)　name属性（wsdl:service要素）

wsdl:service要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.9(2)　サービス名およびポート名の条件」を参照してください。ただし，同じwsdl:definitions要素以下にある，ほかのwsdl:service要素のname属性と同じ値は指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.17　wsdl:port要素

wsdl:port要素のサポート範囲を説明します。

wsdl:service要素の子要素として，1個から255個まで記述できます。省略できません。省略または256個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

子要素として次に示す要素を指定できます。次に示すWSDL要素以外の要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。cjwsimportコマンドで無視しない拡張要素のうち，次に示す要素以外の拡張要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51135-E）。

wsdl:documentation要素

soap:address要素（SOAP 1.1仕様のSOAPバインディングのための拡張要素）※

soap12:address要素（SOAP 1.2仕様のSOAPバインディングのための拡張要素）※

jaxws:bindings要素（JAX-WS 2.1仕様のバインディング宣言）

wsaw:UsingAddressing要素（WS-Addressing 1.0仕様の拡張要素）

注※

soap:address要素とsoap12:address要素は，どちらかを選択して指定してください。両方の要素を指定することはできません。

wsdl:port要素の子要素は，上記の順序で指定してください。指定順序を誤った場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，次に示す要素の順序は入れ替わってもかまいません。

soap:address要素またはsoap12:address要素

jaxws:bindings要素

wsaw:UsingAddressing要素

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

binding属性

＜この項の構成＞

(1)　name属性（wsdl:port要素）

(2)　binding属性（wsdl:port要素）

(1)　name属性（wsdl:port要素）

wsdl:port要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「12.1.9(2)　サービス名およびポート名の条件」を参照してください。ただし，同じwsdl:service要素以下にある，ほかのwsdl:port要素のname属性と同じ値は指定できません。同じ値を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

(2)　binding属性（wsdl:port要素）

wsdl:port要素に含まれるbinding属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:bindingをQNameで指定してください。

14.1.18　wsdl:documentation要素

wsdl:documentation要素のサポート範囲を説明します。

次に示す要素の子要素として，0個または1個記述できます。2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。WSDL要素とcjwsimportコマンドで無視しない拡張要素のうち，次の要素の子要素として記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

wsdl:definitions要素

wsdl:import要素

wsdl:types要素

wsdl:message要素

wsdl:part要素

wsdl:portType要素

wsdl:operation要素

wsdl:input要素

wsdl:output要素

wsdl:fault要素

wsdl:binding要素

wsdl:service要素

wsdl:port要素

子要素として任意の要素を指定できます。

属性は指定できません。属性を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.19　soap:binding要素

soap:binding要素のサポート範囲を説明します。

wsdl:binding要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51143-E）。

子要素は記述できません。記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次に示す属性以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

transport属性

style属性

＜この項の構成＞

(1)　transport属性（soap:binding要素）

(2)　style属性（soap:binding要素）

(1)　transport属性（soap:binding要素）

soap:binding要素に含まれるtransport属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"http://schemas.xmlsoap.org/soap/http"を記述してください。"http://schemas.xmlsoap.org/soap/http"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51147-E）。

(2)　style属性（soap:binding要素）

soap:binding要素に含まれるstyle属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"document"を記述してください。"document"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.20　soap:operation要素

soap:operation要素のサポート範囲を説明します。

wsdl:operation要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51150-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次に示す属性以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

soapAction属性

style属性

＜この項の構成＞

(1)　soapAction属性（soap:operation要素）

(2)　style属性（soap:operation要素）

(1)　soapAction属性（soap:operation要素）

soap:operation要素に含まれるsoapAction属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

xsd:anyURIを満たす任意の文字列を指定できます。

この属性に指定した値は無視されます。

(2)　style属性（soap:operation要素）

soap:operation要素に含まれるstyle属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"document"を記述してください。"document"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.21　soap:body要素

soap:body要素のサポート範囲を説明します。

wsdl:binding要素の孫要素となるwsdl:input要素およびwsdl:outputの子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51156-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，namespace属性を指定した場合は，標準エラー出力とログに異なるエラーメッセージが出力されます（KDJW51208-E）。

use属性

parts属性

＜この項の構成＞

(1)　use属性（soap:body要素）

(2)　parts属性（soap:body要素）

(1)　use属性（soap:body要素）

soap:body要素に含まれるuse属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

(2)　parts属性（soap:body要素）

soap:body要素に含まれるparts属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

soap:body要素に参照されるwsdl:message要素以下に宣言されているwsdl:part要素を0個または1個指定してください。2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

parts属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

14.1.22　soap:header要素

soap:header要素のサポート範囲を説明します。

wsdl:binding要素の孫要素となるwsdl:input要素およびwsdl:output要素の子要素として記述できます。省略することもできます。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，namespace属性を指定した場合は，標準エラー出力とログに警告メッセージが出力され，cjwsimportコマンドの処理が続行されます（KDJW51009-W）。

message属性

part属性

use属性

soap:header要素を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

＜この項の構成＞

(1)　message属性（soap:header要素）

(2)　part属性（soap:header要素）

(3)　use属性（soap:header要素）

(1)　message属性（soap:header要素）

soap:header要素に含まれるmessage属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定してください。

message属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

(2)　part属性（soap:header要素）

soap:header要素に含まれるpart属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

message属性に指定されたwsdl:message要素以下に宣言されているwsdl:part要素を指定してください。

part属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

(3)　use属性（soap:header要素）

soap:header要素に含まれるuse属性のサポート範囲を説明します。

1個だけ記述できます。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.23　soap:fault要素

soap:fault要素のサポート範囲を説明します。

wsdl:binding要素の孫要素となるwsdl:fault要素の子要素として1個だけ記述できます。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51051-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，namespace属性を指定した場合は，標準エラー出力とログに異なるエラーメッセージが出力されます（KDJW51210-E）。

name属性

use属性

＜この項の構成＞

(1)　name属性（soap:fault要素）

(2)　use属性（soap:fault要素）

(1)　name属性（soap:fault要素）

soap:fault要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

親要素であるwsdl:fault要素のname属性と同じ値を記述してください。異なる値を記述した場合は，標準エラー出力とログに警告メッセージが出力され，cjwsimportコマンドの処理は続行されます（KDJW51027-W）。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　use属性（soap:fault要素）

soap:fault要素に含まれるuse属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.24　soap:address要素

soap:address要素のサポート範囲を説明します。

wsdl:port要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51175-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

location属性を指定できます。location属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　location属性（soap:address要素）

(1)　location属性（soap:address要素）

soap:address要素に含まれるlocation属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(3)　soap:address要素またはsoap12:address要素のlocation属性に指定できる値」を参照してください。

14.1.25　soap12:operation要素

soap12:operation要素のサポート範囲を説明します。

wsdl:operation要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51150-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，soapActionRequired属性を指定した場合は，cjwsimportコマンドの処理は続行されます。

soapAction属性

style属性

＜この項の構成＞

(1)　soapAction属性（soap12:operation要素）

(2)　style属性（soap12:operation要素）

(1)　soapAction属性（soap12:operation要素）

soap12:operation要素に含まれるsoapAction属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

xsd:anyURIを満たす任意の文字列を指定できます。

JAX-WSエンジンではsoapAction属性の指定は無視されます。

(2)　style属性（soap12:operation要素）

soap12:operation要素に含まれるstyle属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"document"を記述してください。"document"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）

14.1.26　soap12:binding要素

soap12:binding要素のサポート範囲を説明します。

wsdl:binding要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51143-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

transport属性

style属性

＜この項の構成＞

(1)　transport属性（soap12:binding要素）

(2)　style属性（soap12:binding要素）

(1)　transport属性（soap12:binding要素）

soap12:binding要素に含まれるtransport属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーとなります。

値には"http://schemas.xmlsoap.org/soap/http"または"http://www.w3.org/2003/05/soap/bindings/HTTP/"を記述してください。"http://schemas.xmlsoap.org/soap/http"または"http://www.w3.org/2003/05/soap/bindings/HTTP/"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51147-E）。

(2)　style属性（soap12:binding要素）

soap12:binding要素に含まれるstyle属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"document"を記述してください。"document"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.27　soap12:body要素

soap12:body要素のサポート範囲を説明します。

wsdl:binding要素の孫要素であるwsdl:input要素，およびwsdl:output要素の子要素として，1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51156-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，namespace属性を指定した場合は，標準エラー出力とログに異なるエラーメッセージが出力されます（KDJW51208-E）。

use属性

parts属性

＜この項の構成＞

(1)　use属性（soap12:body要素）

(2)　parts属性（soap12:body要素）

(1)　use属性（soap12:body要素）

soap12:body要素に含まれるuse属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

(2)　parts属性（soap12:body要素）

soap12:body要素に含まれるparts属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

soap12:body要素が参照するwsdl:message要素以下に宣言されているwsdl:part要素を，0個または1個記述できます。2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

parts属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

14.1.28　soap12:header要素

soap12:header要素のサポート範囲を説明します。

wsdl:binding要素の孫要素であるwsdl:input要素およびwsdl:output要素の子要素として記述できます。省略することもできます。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。ただし，namespace属性を指定した場合は，標準エラー出力とログに警告メッセージが出力され，cjwsimportコマンドの処理は続行されます（KDJW51009-W）。

message属性

part属性

use属性

soap12:header要素を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

＜この項の構成＞

(1)　message属性（soap12:header要素）

(2)　part属性（soap12:header要素）

(3)　use属性（soap12:header要素）

(1)　message属性（soap12:header要素）

soap12:header要素に含まれるmessage属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

参照できるwsdl:definitions要素以下に宣言されているwsdl:messageをQNameで指定してください。

message属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

(2)　part属性（soap12:header要素）

soap12:header要素に含まれるpart属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

message属性に指定されたwsdl:message要素以下に宣言されているwsdl:part要素を指定してください。

part属性を指定するときの注意事項については，「14.2(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について」を参照してください。

(3)　use属性（soap12:header要素）

soap12:header要素に含まれるuse属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.29　soap12:fault要素

soap12:fault要素のサポート範囲を説明します。

wsdl:binding要素の孫要素となるwsdl:fault要素の子要素として1個だけ記述できます。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51051-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

次の属性を指定できます。次の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

name属性

use属性

＜この項の構成＞

(1)　name属性（soap12:fault要素）

(2)　use属性（soap12:fault要素）

(1)　name属性（soap12:fault要素）

soap12:fault要素に含まれるname属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

親要素であるwsdl:fault要素のname属性と同じ値を記述してください。異なる値を記述した場合は，標準エラー出力とログに警告メッセージが出力され，cjwsimportコマンドの処理は続行されます（KDJW51027-W）。

指定できる値については，「14.2(1)　NCName型に指定できる値」を参照してください。

(2)　use属性（soap12:fault要素）

soap12:fault要素に含まれるuse属性のサポート範囲を説明します。

0個または1個記述できます。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

値には"literal"を記述してください。"literal"以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

14.1.30　soap12:address要素

soap12:address要素のサポート範囲を説明します。

wsdl:port要素の子要素として1個だけ記述できます。省略できません。省略または2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51175-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

location属性を指定できます。location属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

＜この項の構成＞

(1)　location属性（soap12:address要素）

(1)　location属性（soap12:address要素）

soap12:address要素に含まれるlocation属性のサポート範囲を説明します。

1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。2個以上記述した場合は，Cosminexus XML Processorのエラーになります。

指定できる値については，「14.2(3)　 soap:address要素またはsoap12:address要素のlocation属性に指定できる値」を参照してください。

14.1.31　xsd:schema要素

xsd:schema要素のサポート範囲を説明します。

JAXB 2.1仕様に従いJava型にマッピングしますが，マッピングはCosminexus XML Processorにすべて委譲しています。

＜この項の構成＞

(1)　xmime:expectedContentTypes属性（xsd:schema要素）

(1)　xmime:expectedContentTypes属性（xsd:schema要素）

WSDLのスキーマ宣言であるxsd:element要素のtype属性に"xsd:base64Binary"を指定している場合，xmime:expectedContentTypes属性を用いてMIMEタイプを明示的に指定することで，Base64形式のデータをMIMEタイプに対応したJava型に関連づけることができます。WSDLのスキーマ宣言であるxsd:element要素に対するxmime:expectedContentTypes属性の記述可否を次の表に示します。

表14-1　xmime:expectedContentTypes属性の記述可否

項番 | xsd:element要素を参照するwsdl:messageのパラメタ | xsd:element要素に対するxmime:expectedContentTypes属性の記述可否
1 | wsdl:input | ○※1
2 | wsdl:output | ○※1
3 | wsdl:fault | ×※2

（凡例）

○：記述できる。

×：記述できない。

注※1

WSDLパートの種類がinoutの場合，wsdl:input要素から参照するxsd:element要素のxmime:expectedContentTypes属性の値とwsdl:output要素から参照するxsd:element要素のxmime:expectedContentTypes属性の値には，同じMIMEタイプを指定してください。異なるMIMEタイプを指定した場合，動作は保証されません。

注※2

フォルトメッセージにxmime:expectedContentTypes属性が記述されたxsd:element要素を指定した場合，動作は保証されません。

xsd:element要素にxmime:expectedContentTypes属性を指定した場合のWSDLからJava型へのマッピング方法は，WSDLのxmime:expectedContentTypes属性があるxsd:base64Binary型をJava型へマッピングします。WSDLからJava型へのマッピング例を次の図に示します。

図14-1　WSDLからJava型へのマッピング例

xmime:expectedContentTypes属性に指定するMIMEタイプには，"text/xml"および"application/xml"のcharsetパラメタを除いて，パラメタを記述しないでください。"text/xml"および"application/xml"のcharsetパラメタ以外のパラメタを記述した場合，動作は保証されません。

WSDLからマッピングするJava型は，xmime:expectedContentTypes属性に指定されているMIMEタイプによって変化します。xmime:expectedContentTypes属性に記述されているMIMEタイプと関連づけるJava型の関係を次の表に示します。

表14-2　xmime:expectedContentTypes属性の値と関連づけるJava型

項番 | xmime:expectedContentTypes属性の値（MIMEタイプ） | 関連づけるJava型
1 | application/xml | javax.xml.transform.Source
2 | image/png※1 | java.awt.Image※2
3 | image/jpeg※1
4 | 上記のMIMEタイプをコンマ区切りで記述（例：image/png, image/jpeg）※3
5 | image/*※3
6 | text/plain | java.lang.String
7 | text/*※4 | javax.activation.DataHandler
8 | text/xml※5 | javax.xml.transform.Source
9 | 上記以外※4，※6 | javax.activation.DataHandler

注※1

表中にないimageタイプをJava型に関連づける場合は，xmime:expectedContentTypes属性に"application/octet-stream"を指定し，javax.activation.DataHandlerクラスに関連づけます。

注※2

JAXB仕様に従います。java.awt.ImageクラスはJava SE仕様でのグラフィカルイメージを表現する抽象クラスで，データ形式の規定はありません。この関連づけを使用して画像データをインスタンス化した場合，具象クラスのインスタンスには復号化した情報だけが保持される可能性があります。そのため，JPEG形式のように符号化するときに情報が削減される可能性のある画像を添付ファイルとして送信する場合，受信側のインスタンスが送信側のインスタンスや元のデータと異なることがあります。

画像を元の形式のまま扱いたい場合は，javax.activation.DataHandlerにマッピングされるMIMEタイプ（application/octet-streamなど）を使用してください。

注※3

MIMEタイプに"image/png，image/jpeg"など同一タイプを指定した場合や"image/*"を指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，java.awt.Image型を使用したときの初期値（"image/png"）です。

注※4

MIMEタイプに"text/*"や表中にないMIMEタイプを指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，javax.activation.DataHandler型を使用したときの初期値（javax.activation.DataHandlerオブジェクトのMIMEタイプ）です。

注※5

MIMEタイプに"text/xml"を指定した場合，送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は，javax.xml.transform.Source型を使用したときの初期値（"application/xml"）です。

注※6

異なるタイプ名のMIMEタイプをコンマ区切りで記述した場合も含まれます（例：image/png, text/plain）。

xmime:expectedContentTypes属性に指定されているMIMEタイプは，cjwsimportコマンドで自動生成されるJavaBeanクラスのうち，xmime:expectedContentTypes属性を記述した要素に対応するJavaBeanクラスにアノテートされたjavax.xml.bind.annotation.XmlMimeTypeアノテーションの値へマッピングされます。WSDLから自動生成されたJavaBeanクラスへのマッピングの例を次の図に示します。

図14-2　WSDLから自動生成されたJavaBeanクラスへのマッピング

(a)　名前空間"xmime"のインポート

WSDLからJava型へのマッピングでは，名前空間"xmime"に存在する属性"xmime:expectedContentTypes"を使用しますが，JAX-WSではxsd:import要素による名前空間"xmime"のインポートは不要です。

cjwsgenコマンドで作成したWSDLを使用する場合，必要に応じて名前空間"xmime"をインポートする必要があります。名前空間"xmime"のインポート例を次に示します。

<wsdl:definitions targetNamespace="http://localhost"
 xmlns:intf="http://localhost"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xmime="http://www.w3.org/2005/05/xmlmime" ・・・・・・>
 <wsdl:types>
   <xsd:schema targetNamespace="http://localhost">
     <xsd:import namespace="http://www.w3.org/2005/05/xmlmime"/>
     <xsd:element name="setPhotoData" type="intf:setPhotoData"/>
     <xsd:complexType name="setPhotoData">
       <xsd:sequence>
         <xsd:element name="in0" type="xsd:base64Binary" xmime:expectedContentTypes="image/jpeg"/>
       </xsd:sequence>
     </xsd:complexType>
     ・・・・・・
   </xsd:schema>
 </wsdl:types>
  ・・・・・・

14.2　WSDL作成時の注意事項

WSDL作成時の注意事項について説明します。

＜この節の構成＞

(1)　NCName型に指定できる値

(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について

(3)　soap:address要素またはsoap12:address要素のlocation属性に指定できる値

(1)　NCName型に指定できる値

CosminexusのJAX-WS機能では，XML Schema仕様のxsd:NCName型の制限に違反しないかぎり，半角英数字（0～9，A～Z，a～z）およびアンダースコア（_）を使用できます。半角英数字およびアンダースコア以外の文字を使用した場合，動作は保証されません。

(2)　SOAPボディおよびSOAPヘッダと参照先のwsdl:part要素の記述について

wsdl:input要素とwsdl:output要素の子要素として記述するSOAPボディおよびSOAPヘッダの記述と，SOAPボディおよびSOAPヘッダから参照されるwsdl:part要素の記述について説明します。

以降では，SOAP 1.1仕様の場合を例に説明します。SOAP 1.2仕様の場合は，名前空間や要素名，属性値などを読み替えてください。

(a)　SOAPヘッダを定義しない場合

soap:body要素にparts属性を記述する場合でも，記述しない場合でも，親要素となるwsdl:input要素またはwsdl:output要素から参照されるwsdl:message要素の子要素には，wsdl:part要素を1個だけ記述してください。

soap:header要素を記述しない場合の記述例を次の図に示します。

図14-3　soap:header要素を記述しない場合の記述例

(b)　SOAPヘッダを定義する場合

soap:header要素を記述する場合，次に示す内容に従って定義してください。

soap:header要素のmessage属性には，親要素であるwsdl:input要素，またはwsdl:output要素から参照されるwsdl:message要素を指定してください。

soap:header要素のpart属性には，message属性に指定したwsdl:message要素以下に宣言されているwsdl:part要素を指定してください。宣言されていないwsdl:part要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51022-E）。

soap:body要素のparts属性は省略できません。親要素となるwsdl:input要素，またはwsdl:output要素から参照されるwsdl:message要素の複数のwsdl:part子要素のうち，どの要素をsoap:body要素にバインドするのかを指定してください。バインドしない場合は，空の文字列を指定してください。
soap:body要素のparts属性に参照されていないwsdl:message要素のwsdl:part要素，または存在しないwsdl:part要素を指定した場合は，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51021-E）。また，soap:body要素のparts属性を指定していない場合も，標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51179-E）。

soap:header要素を記述する場合の記述例を次の図に示します。

図14-4　soap:header要素を記述する場合の記述例

(3)　soap:address要素またはsoap12:address要素のlocation属性に指定できる値

soap:address要素またはsoap12:address要素のlocation属性には，次に示す形式のURLを指定できます。

<プロトコル※1>://<ホスト名※2>/<パス部分※3>
（例）http://hitachi.com/jaxws/service/UserInfoPort

<プロトコル※1>://<ホスト名※2>:<ポート番号※4>/<パス部分※3>
（例）http://hitachi.com:80/jaxws/service/UserInfoPort

注※1

名前空間としては，http://またはhttps://だけ指定できます。そのほかのプロトコルは指定できません。http://およびhttps://以外のプロトコルを指定した場合，動作は保証されません。

注※2

RFC2396仕様の規則に従った文字列を指定できます。また，IPv4およびIPv6形式で指定できます。

ただし，次の形式は指定できません。次の形式で指定した場合，動作は保証されません。

クエリストリング　（例）http://example.com/?a=b

アンカー　（例）http://example.com/index.html#anchor

ポート番号　（例）http://example.com:8080/

ユーザ名／パスワード　（例）http://user:password@example.com

パーセントエンコードされた文字　（例）http://%E4%BD%BF%E7%94%A8

注※3

半角数字0～9だけを使用した文字列を指定できます。そのほかの文字を指定した場合，動作は保証されません。

注※4

RFC2396仕様の規則に従った文字列を指定できます。また，パーセントエンコードされた文字（（例）http://%E4%BD%BF%E7%94%A8）も指定できます。

14.3　JAX-WS 2.1仕様のサポート範囲

JAX-WS 2.1仕様の機能のサポート範囲，およびConformanceへの対応について説明します。

＜この節の構成＞

14.3.1　JAX-WS 2.1仕様の機能のサポート範囲

14.3.2　Conformanceへの対応

14.3.1　JAX-WS 2.1仕様の機能のサポート範囲

JAX-WS 2.1仕様の機能のサポート範囲を次の表に示します。

なお，前提条件については，「1.3.2　機能および仕様に関する前提条件」を参照してください。

表14-3　JAX-WS 2.1仕様の機能のサポート範囲

分類 | サポート | 備考
大分類※1 | 小分類※2
2 | WSDL 1.1からJavaへのマッピング | ○ |
2 | 埋め込みによるバインディング宣言，または外部バインディングファイルによるマッピングのカスタマイズ | ○ | バンディング宣言のサポート範囲については，「12.2　WSDLからJavaへのマッピングのカスタマイズ」を参照してください。
2 | 生成されるJavaコードへのアノテーションの付与 | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
2.1 | 名前空間からパッケージへのマッピング | ○ | マッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。
2.2 | ポートタイプからSEIへのマッピング | ○ | マッピングについては，「12.1.2　ポートタイプからSEI名へのマッピング」を参照してください。
2.3 | オペレーションからSEIのメソッドへのマッピング | ○ | マッピングについては，「12.1.3　オペレーションからメソッド名へのマッピング」を参照してください。
2.3 | メソッドのオーバーロード | ○ | メソッドのオーバーロードについては，「12.1.10(1)　Javaメソッドのオーバーロード」を参照してください。
2.3 | MEP:request-responseパターンのサポート | ○ |
2.3 | MEP:one-wayパターンのサポート | × |
2.3.1.1 | Non-wrapperスタイルのオペレーションのサポート | ○ |
2.3.1.2 | Wrapperスタイルのオペレーションのサポート | ○ |
2.3.2 | パラメタの順序と戻り値の型 | parameterOrder属性 | × |
parameterOrder属性以外 | ○
2.3.3 | javax.xml.ws.Holder<T>クラス | ○ | javax.xml.ws.Holder<T>クラスのサポート範囲については，「15.4.11　javax.xml.ws.Holder<T>クラス」を参照してください。
2.3.4 | 非同期マッピング | × |
2.5 | フォルトからサービス固有例外へのマッピング | ○ | マッピングについては，「12.1.7　フォルトから例外クラスへのマッピング」を参照してください。
2.6 | SOAPバインディング | SOAP 1.1/HTTP | ○ |
SOAP 1.2/HTTP | ○
2.6 | MIMEバインディング | × |
2.6.2.1 | soap:header要素 | ○ | soap:header要素のサポート範囲（記述できる構文）については，「14.1.22　soap:header要素」を参照してください。
2.7 | サービスとポートからサービスクラスへのマッピング | ○ | マッピングについては，「12.1.9　サービスおよびポートからサービスクラスへのマッピング」を参照してください。
2.8 | XMLの名前からJavaの識別子へのマッピング | ○ |
2.8.1 | 名前が衝突した場合の処理 | ○ | 名前衝突時の処理については，「12.1.10(2)　名前衝突時のマッピング」を参照してください。
3 | JavaからWSDL 1.1へのマッピング | ○ |
3 | アノテーションによるマッピングのカスタマイズ | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
3.1 | Javaの識別子からXMLの名前へのマッピング | ○ |
3.2 | パッケージから名前空間へのマッピング | ○ |
3.3 | 暗黙のSEIからポートタイプへのマッピング | ○ |
3.4 | SEIからポートタイプへのマッピング | ○ | マッピングについては，「13.1.3　SEI名からポートタイプへのマッピング」を参照してください。
3.5 | SEIのメソッドからオペレーションへのマッピング | ○ | マッピングについては，「13.1.4　SEIのメソッド名からオペレーションへのマッピング」を参照してください。
3.5.1 | one-wayのオペレーション | × |
3.6 | パラメタと戻り値のマッピング | ○ | マッピングについては，「13.1.5　パラメタおよび戻り値からメッセージのパートへのマッピング（wrapperスタイルの場合）」および「13.1.6　パラメタおよび戻り値からメッセージのパートへのマッピング（non-wrapperスタイルの場合）」を参照してください。
3.6 | soap:header要素 | ○ |
3.6.2.1 | Document Wrappedスタイルのマッピング | ○ |
3.6.2.2 | Document Bareスタイルのマッピング | ○ |
3.6.2.3 | RPCスタイルのマッピング | × |
3.7 | サービス固有例外からフォルトへのマッピング | ○ | マッピングについては，「13.1.7　Javaのラッパ例外クラスからフォルトへのマッピング」を参照してください。
3.8 | サービスクラスからバインディングへのマッピング | ○ | マッピングについては，「13.1.8　SEIからバインディングへのマッピング」を参照してください。
3.9 | ジェネリクスの処理 | ○ | ジェネリクスの処理については，「13.1.10(1)　ジェネリクスの型削除」および「13.1.10(3)　ジェネリクス型の制限」を参照してください。
3.10 | SOAP/HTTPバインディング | SOAP 1.1/HTTP | ○ |
SOAP 1.2/HTTP | ○
3.11 | サービスクラスからサービスとポートへのマッピング | ○ | マッピングについては，「13.1.9　Webサービス実装クラスからサービスおよびポートへのマッピング」を参照してください。
4 | クライアントAPI | ○ | APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。
5 | サービスAPI | ○ | APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。
6 | コアAPI | ○ | APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。
7 | アノテーション | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
8 | バインディング宣言 | ○ | バンディング宣言のサポート範囲については，「12.2　WSDLからJavaへのマッピングのカスタマイズ」を参照してください。
9.1.1 | 論理ハンドラ | ○ | 論理ハンドラについては，「26.4　ハンドラの型」を参照してください。
9.1.1 | プロトコルハンドラ | ○ | プロトコルハンドラについては，「26.4　ハンドラの型」を参照してください。
9.2.1.1 | Webサービスクライアント側でのハンドラの設定 | APIによる動的な設定 | ○ | ハンドラの設定については，「26.9　ハンドラチェインの設定」を参照してください。
上記以外 | ×
9.2.1.2 | ハンドラの順番づけ | ○ | ハンドラの実行順序については，「26.5　ハンドラチェインの編成と実行順序」を参照してください。
9.2.1.3 | Webサービス側でのハンドラの設定 | javax.jws.HandlerChainアノテーションによる設定 | ○ | ハンドラの設定については，「26.9　ハンドラチェインの設定」を参照してください。
上記以外 | ×
9.2.2 | WSEE仕様（JSR-109）に基づくハンドラのデプロイ | × |
9.3 | ハンドラの処理モデル | ○ | ハンドラの処理については，「26.5　ハンドラチェインの編成と実行順序」を参照してください。
9.4 | メッセージコンテキスト | ○ | メッセージコンテキストのプロパティのサポート範囲については，「15.5.1　メッセージコンテキストのプロパティのサポート範囲」を参照してください。
10.1.1 | SOAPバインディングの動的な（プログラム的な）設定 | ○ |
10.1.2 | SOAPバインディングの静的な（デプロイメントによる）設定 | × |
10.2 | SOAPバインディングの処理モデル | ○ |
10.3 | SOAPメッセージコンテキスト | ○ | メッセージコンテキストのサポート範囲については，「15.5　メッセージコンテキストの使用」を参照してください。
10.4.1 | SOAP 1.1/HTTPバインディング | ○ |
10.4.1 | SOAP 1.2/HTTPバインディング | ○ |
10.4.1.1 | MTOM仕様 | × |
10.4.1.2 | one-wayのオペレーション | × |
10.4.1.3 | HTTPベーシック認証 | ○ |
10.4.1.4 | セッション管理 | ○ |
10.4.1.5 | WS-Addressing仕様 | ○ |
11 | XML/HTTPバインディング | × |

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

空欄：特に補足する内容がないことを示します。

注※1

JAX-WS 2.1仕様の該当個所（章節項）を示します。

注※2

JAX-WS 2.1仕様の該当個所に記載されている内容を示します。

14.3.2　Conformanceへの対応

Conformanceへ対応しているかどうかを次の表に示します。なお，Conformanceの番号は，JAX-WS 2.1仕様の"Appendix A Conformance Requirements"に準じます。

表14-4　Conformanceへの対応

分類 | 対応 | 備考
番号※1 | タイトル※2
2.1 | WSDL 1.1 support | ○ |
2.2 | Customization required | ○ | バンディング宣言のサポート範囲については，「12.2　WSDLからJavaへのマッピングのカスタマイズ」を参照してください。
2.3 | Annotations on generated classes | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
2.4 | Definitions mapping | ○ | wsdl:definitions要素のtargetNamespace属性に指定できる値については，「12.1.1(2)　名前空間の条件」を参照してください。
2.5 | WSDL and XML Schema import directives | ○ | wsdl:import要素については，「17.3　wsdl:import要素の書式」を参照してください。
2.6 | Optional WSDL extensions | ○ | Conformance自体には対応していますが，JAX-WS 2.1仕様で規定されていないWSDLの拡張要素や属性はサポートしていません。
2.7 | SEI naming | ○ | wsdl:portType要素のname属性に指定できる値については，「12.1.2(2)　ポートタイプ名の条件」を参照してください。
2.8 | javax.jws.WebService required | ○ |
2.9 | javax.xml.bind.XmlSeeAlso required | ○ |
2.10 | Method naming | ○ | wsdl:operation要素のname属性に指定できる値については，「12.1.3(2)　オペレーション名の条件」を参照してください。
2.11 | javax.jws.WebMethod required | ○ |
2.12 | Transmission primitive support | one-way | × |
request-response | ○
2.13 | Using javax.jws.OneWay | × |
2.14 | Using javax.jws.SOAPBinding | ○ |
2.15 | Using javax.jws.WebParam | ○ | wsdl:part要素のname属性に指定できる値については，「12.1.5(2)　パート名の条件」を参照してください。
2.16 | Using javax.jws.WebResult | ○ |
2.17 | use of JAXB annotations | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
2.18 | Non-wrapped parameter naming | ○ | wsdl:part要素のname属性に指定できる値については，「12.1.5(2)　パート名の条件」を参照してください。
2.19 | Default mapping mode | ○ |
2.20 | Disabling wrapper style | ○ |
2.21 | Wrapped parameter naming | ○ | wrapper子要素のname属性に指定できる値については，「12.1.4(2)　wrapper子要素名の条件」を参照してください。
2.22 | Parameter name clash | ○ |
2.23 | Using javax.xml.ws.RequestWrapper | ○ |
2.24 | Using javax.xml.ws.ResponseWrapper | ○ |
2.25 | Use of Holder | ○ |
2.26 | Asynchronous mapping required | × |
2.27 | Asynchronous mapping option | × |
2.28 | Asynchronous method naming | － | 非同期関連の機能はサポートしていません。
2.29 | Asynchronous parameter naming | － | 非同期関連の機能はサポートしていません。
2.30 | Failed method invocation | － | 非同期関連の機能はサポートしていません。
2.31 | Response bean naming | － | 非同期関連の機能はサポートしていません。
2.32 | Asynchronous fault reporting | － | 非同期関連の機能はサポートしていません。
2.33 | Asynchronous fault cause | － | 非同期関連の機能はサポートしていません。
2.34 | JAXB class mapping | ○ |
2.35 | JAXB customization use | ○ |
2.36 | JAXB customization clash | ○ |
2.37 | javax.xml.ws.wsaddressing.W3CEndpointReference | ○ |
2.38 | javax.xml.ws.WebFault required | ○ |
2.39 | Exception naming | ○ | wsdl:fault要素およびwsdl:message要素のname属性に指定できる値については，「12.1.7(2)　フォルト名の条件」を参照してください。
2.40 | Fault equivalence | ○ |
2.41 | Fault equivalence | ○ |
2.42 | Required WSDL extensions | SOAP | ○ |
MIME | ×
2.43 | Unbound message parts | ○ |
2.44 | Duplicate headers in binding | ○ |
2.45 | Duplicate headers in message | ○ |
2.46 | Use of MIME type information | － | MIMEバインディングはサポートしていません。
2.47 | MIME type mismatch | － | MIMEバインディングはサポートしていません。
2.48 | MIME part identification | － | MIMEバインディングはサポートしていません。
2.49 | Service superclass required | ○ |
2.50 | Service class naming | ○ | wsdl:service要素のname属性に指定できる値については，「12.1.9(2)　サービス名およびポート名の条件」を参照してください。
2.51 | javax.xml.ws.WebServiceClient required | ○ |
2.52 | － | ○ |
2.53 | － | ○ |
2.54 | Failed getPort Method | ○ |
2.55 | javax.xml.ws.WebEndpoint required | ○ |
3.1 | WSDL 1.1 support | ○ | WSDL 1.1仕様のサポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。
3.2 | Standard annotations | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
3.3 | Java identifier mapping | ○ |
3.4 | Method name disambiguation | ○ |
3.5 | Package name mapping | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.6 | WSDL and XML Schema import directives | ○ |
3.7 | Class mapping | ○ |
3.8 | portType naming | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.9 | Inheritance flattening | ○ |
3.10 | Inherited interface mapping | ○ | Conformance自体には対応していますが，CosminexusのJAX-WS機能ではこのConformanceで説明されているようなマッピングはされません。
3.11 | Operation naming | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.12 | One-way mapping | × |
3.13 | One-way mapping errors | － | one-wayパターンはサポートしていません。
3.14 | use of JAXB annotations | ○ |
3.15 | Parameter classification | ○ |
3.16 | Parameter naming | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.17 | Result naming | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.18 | Header mapping of parameters and results | ○ |
3.19 | Default wrapper bean names | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.20 | Default wrapper bean package | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.21 | Wrapper element names | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.22 | Wrapper bean name clash | ○ |
3.23 | Null Values in rpc/literal | － | rpc/literalスタイルはサポートしていません。
3.24 | Exception naming | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.25 | java.lang.RuntimeExceptions and java.rmi.RemoteExceptions | ○ |
3.26 | Fault bean name clash | ○ |
3.27 | Binding selection | ○ |
3.28 | SOAP binding support | ○ |
3.29 | SOAP binding style required | ○ |
3.30 | Service creation | ○ |
3.31 | Port selection | ○ | Javaの識別子やアノテーションで指定できる値については，「13.　JavaからWSDLへのマッピング」を参照してください。
3.32 | Port binding | ○ |
4.1 | Service completeness | × |
4.2 | Service Creation Failure | ○ |
4.3 | Use of Executor | － | 非同期関連の機能はサポートしていません。
4.4 | Default Executor | － | 非同期関連の機能はサポートしていません。
4.5 | javax.xml.ws.BindingProvider.getEndpointReference | ○ |
4.6 | Message context decoupling | ○ |
4.7 | Required BindingProvider properties | ○ |
4.8 | Optional BindingProvider properties | ○ |
4.9 | Additional context properties | ○ |
4.10 | Asynchronous response context | － | 非同期関連の機能はサポートしていません。
4.11 | Proxy support | ○ |
4.12 | Implementing BindingProvider | ○ |
4.13 | Service.getPort failure | ○ |
4.14 | Remote Exceptions | ○ |
4.15 | Exceptions During Handler Processing | ○ |
4.16 | Other Exceptions | ○ |
4.17 | Dispatch support | ○ |
4.18 | Failed Dispatch.invoke | ○ |
4.19 | Failed Dispatch.invokeAsync | － | 非同期関連の機能はサポートしていません。
4.20 | Failed Dispatch.invokeOneWay | － | 非同期関連の機能はサポートしていません。
4.21 | Reporting asynchronous errors | － | javax.xml.ws.Responseインタフェースはサポートしていません。
4.22 | Marshalling failure | ○ |
4.23 | Use of the Catalog | × |
5.1 | Provider support required | ○ |
5.2 | Provider default constructor | ○ |
5.3 | Provider implementation | ○ |
5.4 | WebServiceProvider annotation | ○ |
5.5 | Endpoint publish(String address, Object implementor) Method | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.6 | Default Endpoint Binding | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.7 | Other Bindings | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.8 | Publishing over HTTP | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.9 | WSDL Publishing | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.10 | Checking publishEndpoint Permission | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.11 | Required Metadata Types | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.12 | Unknown Metadata | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.13 | Use of Executor | － | javax.xml.ws.Endpointクラスはサポートしていません。
5.14 | Default Executor | － | javax.xml.ws.Endpointクラスはサポートしていません。
6.1 | Read-only handler chains | ○ | javax.xml.ws.BindingインタフェースのsetHandlerChainメソッドはサポートしていません。
6.2 | Concrete javax.xml.ws.spi.Provider required | ○ |
6.3 | Provider createAndPublishEndpoint Method | － | javax.xml.ws.Providerインタフェースはサポートしていません。
6.4 | Concrete javax.xml.ws.spi.ServiceDelegate required | ○ |
6.5 | Protocol specific fault generation | ○ |
6.6 | Protocol specific fault consumption | ○ |
6.7 | One-way operations | － | one-wayパターンはサポートしていません。
6.8 | javax.xml.ws.WebServiceFeatures | － | javax.xml.ws.WebServiceFeatureクラスはサポートしていません。
6.9 | enabled property | － | javax.xml.ws.WebServiceFeatureクラスはサポートしていません。
6.10 | javax.xml.ws.soap.MTOMFeature | ○ |
6.11 | javax.xml.ws.RespectBindingFeature | － | javax.xml.ws.RespectBindingFeatureクラスはサポートしていません。
7.1 | Correctness of annotations | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
7.2 | Handling incorrect annotations | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
7.3 | Unsupported WebServiceFeatureAnnotation | ○ |
7.4 | WebServiceProvider and WebService | ○ |
7.5 | JSR-181 conformance | ○ | アノテーションのサポート範囲については，「13.2.1　アノテーション一覧」を参照してください。
8.1 | Standard binding declarations | ○ |
8.2 | Binding language extensibility | ○ |
8.3 | Multiple binding files | ○ |
9.1 | Handler framework support | ○ |
9.2 | Logical handler support | ○ |
9.3 | Other handler support | ○ | APIのサポート範囲については，「15.　JAX-WS APIのサポート範囲」を参照してください。
9.4 | Incompatible handlers | ○ |
9.5 | Incompatible handlers | ○ |
9.6 | Handler chain snapshot | ○ |
9.7 | HandlerChain annotation | ○ |
9.8 | Handler resolver for a HandlerChain annotation | ○ |
9.9 | Binding handler manipulation | ○ |
9.10 | Handler initialization | ○ |
9.11 | Handler destruction | ○ |
9.12 | Invoking close | ○ |
9.13 | Order of close invocations | ○ |
9.14 | Message context property scope | ○ |
10.1 | SOAP required roles | ○ |
10.2 | SOAP required roles | ○ |
10.3 | Default role visibility | ○ |
10.4 | Default role persistence | ○ |
10.5 | None role error | ○ |
10.6 | Incompatible handlers | ○ |
10.7 | Incompatible handlers | ○ |
10.8 | Logical handler access | ○ |
10.9 | SOAP 1.1 HTTP Binding Support | ○ |
10.10 | SOAP 1.2 HTTP Binding Support | ○ |
10.11 | SOAP MTOM Support | ○ |
10.12 | Semantics of MTOM enabled | ○ |
10.13 | MTOM support | ○ |
10.14 | SOAP bindings with MTOM disabled | ○ |
10.15 | SOAP bindings with MTOM enabled | ○ |
10.16 | MTOM on Other SOAP Bindings | － | ほかのjavax.xml.ws.soap.SOAPBindingインタフェースの実装をサポートしていないので，このConformanceには該当しません。
10.17 | One-way operations | × | one-wayパターンはサポートしていません。
10.18 | HTTP basic authentication support | ○ |
10.19 | Authentication properties | ○ |
10.20 | URL rewriting support | × |
10.21 | Cookie support | ○ |
10.22 | SSL session support | ○ | Conformance自体には対応していますが，CosminexusのJAX-WS機能ではSSLセッションをベースとする状態管理をサポートしていません。
10.23 | SOAP Addressing Support | ○ |
11.1 | XML/HTTP Binding Support | × |
11.2 | Incompatible handlers | × |
11.3 | Incompatible handlers | × |
11.4 | Logical handler access | × |
11.5 | One-way operations | × |
11.6 | HTTP basic authentication support | × |
11.7 | Authentication properties | × |
11.8 | URL rewriting support | × |
11.9 | Cookie support | × |
11.10 | SSL session support | × |

（凡例）

○：対応しています。

×：対応していません。

－：該当しません。

空欄：特に補足する内容がないことを示します。

注※1

JAX-WS 2.1仕様の"Appendix A Conformance Requirements"の番号を示します。

注※2

Conformanceに記載されたタイトルです。

14.4　ハンドラチェイン設定ファイルのサポート範囲

ハンドラチェイン設定ファイルの構文のサポート範囲を，次に示す要素ごとに説明します。

javaee:handler-chains要素

javaee:handler-chain要素

javaee:handler要素

javaee:handler-name要素

javaee:handler-class要素

javaee:soap-header要素

javaee:soap-role要素

ここで説明する内容を除いたサポート範囲については，Java EE 5仕様の"Java EE Web Services Metadata Handler Chain Schema"（標準のスキーマ）に従います。

＜この節の構成＞

14.4.1　javaee:handler-chains要素

14.4.2　javaee:handler-chain要素

14.4.3　javaee:handler要素

14.4.4　javaee:handler-name要素

14.4.5　javaee:handler-class要素

14.4.6　javaee:soap-header要素

14.4.7　javaee:soap-role要素

14.4.1　javaee:handler-chains要素

javaee:handler-chains要素のサポート範囲を説明します。

ハンドラチェイン設定ファイルのルート要素として，1個だけ記述できます。省略できません。

子要素としてjavaee:handler-chain要素を指定できます。javaee:handler-chain要素以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様およびXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.2　javaee:handler-chain要素

javaee:handler-chain要素のサポート範囲を説明します。

javaee:handler-chains要素の子要素として，1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

子要素としてjavaee:handler要素を指定できます。javaee:handler要素以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様やXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.3　javaee:handler要素

javaee:handler要素のサポート範囲を説明します。

javaee:handler-chain要素の子要素として，1個から64個まで記述できます。省略または65個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

子要素として下記の要素を指定できます。次に示す要素以外を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

javaee:handler-name要素

javaee:handler-class要素

javaee:soap-header要素

javaee:soap-role要素

javaee:handler-name要素，javaee:handler-class要素，javaee:soap-header要素，およびjavaee:soap-role要素は上記の順序で指定してください。

XML仕様およびXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.4　javaee:handler-name要素

javaee:handler-name要素のサポート範囲を説明します。

javaee:handler要素の子要素として，0個または1個記述できます。2個以上記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）※。

値には，ハンドラの名称を記述します。ただし，JAX-WSエンジンではこの値は無視されるので，XML Schema仕様のxsd:token型の制限に違反しない範囲で値を記述できます※。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様やXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

注※

標準のスキーマでは，javaee:handler-name要素は必須です。動作定義ファイルでcom.cosminexus.jaxws.validation.handlerchain.strictプロパティにtrueを設定すると，この要素の指定有無がJAX-WSエンジンでチェックされます。com.cosminexus.jaxws.validation.handlerchain.strictプロパティでtrueを設定した場合に，javaee:handler要素が省略されているときは，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.5　javaee:handler-class要素

javaee:handler-class要素のサポート範囲を説明します。

javaee:handler要素の子要素として，1個だけ記述できます。省略できません。省略した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

値には，ハンドラを実装したクラスの完全修飾名を記述してください。存在しないクラス名を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW00011-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様およびXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.6　javaee:soap-header要素

javaee:soap-header要素のサポート範囲を説明します。

javaee:handler要素の子要素として記述できます。省略することもできます。

値には，このハンドラが処理するSOAPヘッダの名称を記述します。ただし，JAX-WSエンジンではこの値は無視されるので，XML Schema仕様のxsd:QName型の制限に違反しない範囲で値を記述できます。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様およびXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.4.7　javaee:soap-role要素

javaee:soap-role要素のサポート範囲を説明します。

javaee:handler要素の子要素として記述できます。省略することもできます。

値には，このハンドラが振る舞うSOAPアクタまたはロールを記述してください。ただし，"http://www.w3.org/2003/05/soap-envelope/role/none"は記述できません。記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW10007-E）。

子要素は記述できません。子要素を記述した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

XML仕様およびXML Schema仕様の標準の属性（xmlns属性など）を除いて，属性を指定できません。XML仕様およびXML Schema仕様の標準の属性以外を指定した場合は，標準エラー出力とログにエラーメッセージが出力されます（KDJW30019-E）。

14.5　SAAJ 1.3仕様のサポート範囲

ここでは，SAAJ 1.3仕様のインタフェースおよびクラスのサポート範囲について説明します。また，ディスパッチベースのWebサービスクライアントで利用する場合の注意事項についても説明します。

SAAJ 1.3仕様のインタフェースのサポート範囲を次の表に示します。インタフェースについては，JDKのドキュメントを参照してください。

表14-5　SAAJ 1.3仕様のインタフェースのサポート範囲

項番 | インタフェース名 | メソッド名／フィールド名 | サポート
1 | Detail | addDetailEntry(Name name) | ○
2 | addDetailEntry(QName qname) | ○
3 | 上記以外のメソッド | ○
4 | DetailEntry | メソッドなし | ○
5 | Name | すべてのメソッド | ○
6 | Node | getValue() | ○
7 | recycleNode() | ○
8 | setParentElement(SOAPElement parent) | ○
9 | setValue(String value) | ○
10 | 上記以外のメソッド | ○
11 | SOAPBody | addBodyElement(Name name) | ○
12 | addBodyElement(QName qname) | ○
13 | addDocument(Document document) | ○
14 | addFault(Name faultCode, String faultString, Locale locale) | ○
15 | addFault(Name faultCode, String faultString) | ○
16 | addFault(QName faultCode, String faultString, Locale locale) | ○
17 | addFault(QName faultCode, String faultString) | ○
18 | 上記以外のメソッド | ○
19 | SOAPBodyElement | メソッドなし | ○
20 | SOAPConstants | すべてのフィールド | ○
21 | SOAPElement | addAttribute(Name name, String value) | ○
22 | addAttribute(QName qname, String value) | ○
23 | addChildElement(Name name) | ○
24 | addChildElement(SOAPElement element) | ○
25 | addChildElement(String localName) | ○
26 | addChildElement(String localName, String prefix) | ○
27 | addChildElement(String localName, String prefix, String uri) | ○
28 | addChildElement(QName qname) | ○
29 | addNamespaceDeclaration(String prefix, String uri) | ○
30 | addTextNode(String text) | ○
31 | createQName(String localName, String prefix) | ○
32 | getAttributeValue(Name name) | ○
33 | getAttributeValue(QName qname) | ○
34 | getChildElements(Name name) | ○
35 | getChildElements(QName qname) | ○
36 | getEncodingStyle() | ○
37 | getNamespacePrefixes() | ○
38 | getNamespaceURI(String prefix) | ○
39 | removeAttribute(Name name) | ○
40 | removeAttribute(QName qname) | ○
41 | setElementQName(QName newName) | ○
42 | 上記以外のメソッド | ○
43 | SOAPEnvelope | createName(String localName) | ○
44 | createName(String localName, String prefix, String uri) | ○
45 | 上記以外のメソッド | ○
46 | SOAPFault | getFaultCode() | ○
47 | getFaultCodeAsName() | ○
48 | getFaultCodeAsQName() | ○
49 | getFaultString() | ○
50 | setFaultCode(Name faultCodeQName) | ○
51 | setFaultCode(QName faultCodeQName) | ○
52 | setFaultCode(String faultCode) | ○
53 | setFaultString(String faultString) | ○
54 | setFaultString(String faultString, Locale locale) | ○
55 | addFaultReasonText(String text, Locale locale) | ○
56 | getFaultReasonLocales() | ○
57 | getFaultReasonText(Locale locale) | ○
58 | getFaultReasonTexts() | ○
59 | getFaultStringLocale() | ○
60 | setFaultRole(String uri) | ○
61 | 上記以外のメソッド | ○
62 | SOAPFaultElement | メソッドなし | ○
63 | SOAPHeader | addHeaderElement(Name name) | ○
64 | addHeaderElement(QName qname) | ○
65 | addUpgradeHeaderElement(String supportedSoapUri) | ○
66 | examineHeaderElements(String actor) | ○
67 | examineMustUnderstandHeaderElements(String actor) | ○
68 | extractHeaderElements(String actor) | ○
69 | 上記以外のメソッド | ○
70 | SOAPHeaderElement | setActor(String actorURI) | ○
71 | setRole(String uri) | ○
72 | 上記以外のメソッド | ○
73 | Text | すべてのメソッド | ○

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

SAAJ 1.3仕様のクラスのサポート範囲を次の表に示します。クラスについては，JDKのドキュメントを参照してください。

表14-6　SAAJ 1.3仕様のクラスのサポート範囲

項番 | クラス名 | メソッド名／フィールド名 | サポート
1 | AttachmentPart | addMimeHeader(String name, String value) | ○
2 | getAllMimeHeaders() | ○
3 | getContentLocation() | ×
4 | setContentLocation(String contentLocation) | ×
5 | setBase64Content(InputStream content, String contentType) | ○
6 | setContent(Object object, String contentType) | ○
7 | setContentId(String contentId) | ○
8 | setContentType(String contentType) | ○
9 | setMimeHeader(String name, String value) | ○
10 | setRawContent(InputStream content, String contentType) | ○
11 | setRawContentBytes(byte[] content, int offset, int len, String contentType) | ○
12 | 上記以外のメソッド | ○
13 | MessageFactory | newInstance(String protocol) | ○
14 | 上記以外のメソッド | ○
15 | MimeHeader | MimeHeader(String name, String value)コンストラクタ | ○
16 | 上記以外のメソッド | ○
17 | MimeHeaders | addHeader(String name, String value) | ○
18 | setHeader(String name, String value) | ○
19 | 上記以外のメソッド | ○
20 | SAAJMetaFactory | すべてのメソッド | ○
21 | SAAJResult | SAAJResult(SOAPMessage message)コンストラクタ | ○
22 | SAAJResult(SOAPElement rootNode)コンストラクタ | ○
23 | 上記以外のメソッド | ○
24 | SOAPConnection | すべてのメソッド | ○
25 | SOAPConnectionFactory | すべてのメソッド | ○
26 | SOAPElementFactory※ | すべてのメソッド | ×
27 | SOAPFactory | newInstance(String protocol) | ○
28 | createElement(Element domElement) | ○
29 | createElement(String localName, String prefix, String uri) | ○
30 | createFault(String reasonText, QName faultCode) | ○
31 | createName(String localName) | ○
32 | createName(String localName, String prefix, String uri) | ○
33 | 上記以外のメソッド | ○
34 | SOAPMessage | addAttachmentPart(AttachmentPart AttachmentPart) | ○
35 | createAttachmentPart(Object content, String contentType) | ○
36 | getAttachment(SOAPElement element) | ○
37 | getAttachments(MimeHeaders headers) | ×
38 | getProperty(String property) | ○
39 | removeAttachments(MimeHeaders headers) | ○
40 | setContentDescription(String description) | ○
41 | setProperty(String property, Object value) | ○
42 | writeTo(OutputStream out) | ○
43 | 上記以外のメソッド | ○
44 | SOAPPart | addMimeHeader(String name, String value) | ○
45 | getContentId() | ×
46 | getContentLocation() | ×
47 | getMimeHeader(String name) | ○
48 | setContent(Source source) | ○
49 | setContentId(String contentId) | ×
50 | setContentLocation(String contentLocation) | ×
51 | setMimeHeader(String name, String value) | ○
52 | 上記以外のメソッド | ○

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

注※

非推奨クラスのため，使用した場合の動作は保証されません。

＜この節の構成＞

14.5.1　Detailインタフェース

14.5.2　Nodeインタフェース

14.5.3　SOAPBodyインタフェース

14.5.4　SOAPElementインタフェース

14.5.5　SOAPEnvelopeインタフェース

14.5.6　SOAPFaultインタフェース

14.5.7　SOAPHeaderインタフェース

14.5.8　SOAPHeaderElementインタフェース

14.5.9　AttachmentPartクラス

14.5.10　MessageFactoryクラス

14.5.11　MimeHeaderクラス

14.5.12　MimeHeadersクラス

14.5.13　SAAJResultクラス

14.5.14　SOAPFactoryクラス

14.5.15　SOAPMessageクラス

14.5.16　SOAPPartクラス

14.5.17　添付ファイルを使用する場合のサポート範囲

14.5.1　Detailインタフェース

Detailインタフェースのメソッドを使用する場合の注意事項を示します。

addDetailEntry(Name name)メソッドおよびaddDetailEntry(QName qname)メソッドの引数にnullを指定しないでください。nullを指定した場合の動作は保証されません。

14.5.2　Nodeインタフェース

Nodeインタフェースのメソッドを使用する場合の注意事項を示します。

getValue()メソッドの対象ノードの子ノードの値は取得できません。対象ノードの子ノードの値を取得したい場合は，子ノードに対してメソッドを発行してください。

対象ノードに対してdetachNode()を呼び出したことがなくても，recycleNode()メソッドを呼び出せます。メソッドを呼び出すと，detachNode()と同じ動作が実行されます。

setParentElement(SOAPElement parent)メソッドでは，異なるDOM Documentに属するノード同士を親子関係にできません。

setValue(String value)メソッドの引数にnullを指定すると，対象ノードの値にnullが設定されます。

14.5.3　SOAPBodyインタフェース

SOAPBodyインタフェースのメソッドを使用する場合の注意事項を示します。

次に示すメソッドの引数にはnullを指定しないでください。nullを指定した場合の動作は保証されません。

addBodyElement(Name name)

addBodyElement(QName qname)

addDocument(Document document)

addFault(Name faultCode, String faultString, Locale locale)

addFault(Name faultCode, String faultString)

addFault(QName faultCode, String faultString, Locale locale)

addFault(QName faultCode, String faultString)

addFault(Name faultCode, String faultString, Locale locale)メソッドおよびaddFault(QName faultCode, String faultString, Locale locale)メソッドのlocale引数には，nullを指定しないでください。指定した場合の動作は保証されません。

addFault(QName faultCode, String faultString, Locale locale)メソッドおよびaddFault(QName faultCode, String faultString)メソッドの引数には，標準仕様で定義されているフォルトコードを指定してください。標準仕様で定義されていないフォルトコードを指定した場合の動作は保証されません。

addFault(QName faultCode, String faultString, Locale locale)メソッドまたはaddFault(QName faultCode, String faultString)メソッドのfaultString引数に空文字を設定してSOAPフォルトを送信した場合，受信したSOAPフォルトに対してgetFaultString()メソッドおよびgetFaultReasonTexts().next()を発行すると，nullが取得されます。

14.5.4　SOAPElementインタフェース

SOAPElementインタフェースのメソッドを使用する場合の注意事項を示します。

addAttribute(Name name, String value)メソッドのname引数にnullを指定しないでください。指定した場合の動作は保証されません。

addAttribute(QName qname, String value)メソッドのqname引数にnullを指定しないでください。指定した場合の動作は保証されません。

次に示すメソッドの引数にはnullを指定しないでください。nullを指定した場合の動作は保証されません。

addChildElement(Name name)

addChildElement(SOAPElement element)

addChildElement(QName qname)

addTextNode(String text)

getAttributeValue(Name name)

getAttributeValue(QName qname)

getChildElements(Name name)

getChildElements(QName qname)

removeAttribute(Name name)

removeAttribute(QName qname)

setElementQName(QName newName)

次に示すメソッドのlocalName引数にnullまたは空文字を指定しないでください。nullまたは空文字を指定した場合の動作は保証されません。

addChildElement(String localName)

addChildElement(String localName, String prefix)

addChildElement(String localName, String prefix, String uri)

addChildElement(String localName, String prefix, String uri)メソッドのuri引数にnullまたは空文字を指定しないでください。指定した場合の動作は保証されません。

addNamespaceDeclaration(String prefix, String uri)メソッドのprefix引数にnullを指定しないでください。指定した場合の動作は保証されません。

addNamespaceDeclaration(String prefix, String uri)メソッドのuri引数にnullまたは空文字を指定した場合，名前空間URIが空文字の名前空間宣言が追加されます。

createQName(String localName, String prefix)メソッドのlocalName引数にnullを指定しないでください。指定した場合の動作は保証されません。

エンコードスタイルが設定されていない状態でgetEncodingStyle()メソッドを発行した場合，nullが返されます。

デフォルト名前空間(xmlns="")に属する対象SOAPElementに対してgetNamespacePrefixes()メソッドを発行した場合，戻り値にデフォルト名前空間のプレフィクスは含まれません。

getNamespaceURI(String prefix)メソッドで引数に指定したプレフィクスが対象のSOAPElementに宣言されていない場合，または引数にnullまたは空文字を指定した場合，nullが返されます。

14.5.5　SOAPEnvelopeインタフェース

SOAPEnvelopeインタフェースのメソッドを使用する場合の注意事項を示します。

createName(String localName)メソッドおよびcreateName(String localName, String prefix, String uri)メソッドのlocalName引数にnullまたは空文字を指定しないでください。指定した場合の動作は保証されません。

createName(String localName, String prefix, String uri)メソッドのuri引数にnullまたは空文字を指定した場合，名前空間URIが空文字のNameオブジェクトが生成されます。

14.5.6　SOAPFaultインタフェース

SOAPFaultインタフェースのメソッドを使用する場合の注意事項を示します。

フォルトコードが明示的に設定されていないSOAPFaultオブジェクトに対して次のメソッドを発行した場合，CosminexusのJAX-WS機能が自動的に設定した値が返されます。

getFaultCode()

getFaultCodeAsName()

getFaultCodeAsQName()

フォルトコードが明示的に設定されていないSOAPFaultオブジェクトに対して次のメソッドを発行した場合，CosminexusのJAX-WS機能が自動的に設定したフォルト文字列"Fault string, and possibly fault code, not set"が返されます。

getFaultString()

getFaultReasonTexts()

SOAP 1.1形式の場合に，フォルトコードが明示的に設定されていないSOAPFaultオブジェクトに対してgetFaultStringLocale()メソッドを発行した場合，nullが返されます。

SOAP 1.2形式の場合に，フォルトコードが明示的に設定されていないSOAPFaultオブジェクトに対してgetFaultReasonLocales()メソッドまたはgetFaultStringLocale()メソッドを発行した場合，CosminexusのJAX-WS機能が自動的に設定した値が返されます。

次に示すメソッドの引数にはnullを指定しないでください。nullを指定した場合の動作は保証されません。

setFaultCode(Name faultCodeQName)

setFaultCode(QName faultCodeQName)

setFaultCode(String faultCode)

setFaultString(String faultString)

setFaultString(String faultString, Locale locale)

setFaultRole(String uri)

次に示すメソッドの引数には，名前空間で修飾されたフォルトコードを指定してください。名前空間で修飾されていない，ローカル名だけのフォルトコードを指定した場合の動作は保証されません。

setFaultCode(Name faultCodeQName)

setFaultCode(QName faultCodeQName)

setFaultCode(String faultCode)

setFaultString(String faultString, Locale locale)メソッドのlocale引数にnullを指定しないでください。指定した場合の動作は保証されません。

addFaultReasonText(String text, Locale locale)メソッドのtext引数にnullを指定しないでください。指定した場合の動作は保証されません。

getFaultReasonText(Locale locale)メソッドの引数にnullを指定した場合，nullが返されます。

getFaultReasonLocales()メソッドまたはgetFaultStringLocale()メソッドが取得したロケールは，受信したSOAPフォルトのxml:lang属性に設定されているロケールと異なる場合があります。

setFaultRole(String uri)メソッドのuri引数には，URI形式の文字列を指定してください。URI形式以外の文字列を指定した場合の動作は保証されません。

14.5.7　SOAPHeaderインタフェース

SOAPHeaderインタフェースのメソッドを使用する場合の注意事項を示します。

addHeaderElement(Name name)メソッドおよびaddHeaderElement(QName qname)メソッドの引数にnullは指定しないでください。nullを指定した場合の動作は保証されません。

addUpgradeHeaderElement(String supportedSoapUri)メソッドのsupportedSoapUri引数にnullを指定しないでください。指定した場合の動作は保証されません。

examineHeaderElements(String actor)メソッドおよびextractHeaderElements(String actor)メソッドのactor引数にnullを指定しないでください。指定した場合の動作は保証されません。

examineMustUnderstandHeaderElements(String actor)メソッドのactor引数にnullを指定した場合，設定されているすべてのSOAPHeaderElementを含むIteratorが返されます。

14.5.8　SOAPHeaderElementインタフェース

SOAPHeaderElementインタフェースのメソッドを使用する場合の注意事項を示します。

setActor(String actorURI)メソッドのactorURI引数にnullを指定した場合，SOAP 1.1形式の場合は値が空文字のactor属性が，SOAP 1.2形式の場合は値が空文字のrole属性が設定されます。

SOAP 1.2形式の場合，setRole(String uri)メソッドのuri引数にnullを指定すると，値が空文字のrole属性が設定されます。

14.5.9　AttachmentPartクラス

AttachmentPartクラスのメソッドを使用する場合の注意事項を示します。

addMimeHeader(String name, String value)メソッドまたはsetMimeHeader(String name, String value)メソッドでMIMEヘッダを設定しても，送受信時のSOAPメッセージ上にMIMEヘッダは現れません。

addMimeHeader(String name, String value)メソッドまたはsetMimeHeader(String name, String value)メソッドのvalue引数に指定した値は，MIMEヘッダの値に設定されます。

getAllMimeHeaders()メソッドではContent-Transfer-Encodingヘッダを取得できません。CosminexusのJAX-WS機能では，添付ファイルは常にバイナリ形式で送信されるため，AttachmentPartのContent-Transfer-Encodingヘッダの値はbinaryになります。

getContentLocation()メソッドを使用した場合の動作は保証されません。

setContentLocation(String contentLocation)メソッドを使用した場合の動作は保証されません。Content-Locationヘッダの代わりにAttachmentPart#setContentIdメソッドで設定したContent-Idヘッダを使用する必要があります。

次に示すメソッドのcontentType引数に指定した値がContent-Typeヘッダの値に設定されます。そのため，添付ファイルの型に適合するMIMEタイプを指定する必要があります。不正なMIMEタイプを指定した場合の動作は保証されません。

setBase64Content(InputStream content, String contentType)

setContentType(String contentType)

setRawContent(InputStream content, String contentType)

setRawContentBytes(byte[] content, int offset, int len, String contentType)

setContent(Object object, String contentType)メソッドのcontentType引数にnullまたは標準仕様で定義されていないMIMEタイプを指定しないでください。指定した場合の動作は保証されません。

setContent(Object object, String contentType)メソッドの第1引数には，第2引数に指定したMIMEタイプに適合するオブジェクトを指定してください。適合しないオブジェクトを指定した場合の動作は保証されません。また，nullを指定した場合の動作も保証されません。

setContentId(String contentId)メソッドのcontentId引数にnullまたは空文字を指定した場合は，その値がContent-Idヘッダの値に設定されます。

setRawContentBytes(byte[] content, int offset, int len, String contentType)メソッドのoffset引数には正しいオフセットを，len引数には正しいサイズを指定してください。不正な値を指定した場合の動作は保証されません。

14.5.10　MessageFactoryクラス

MessageFactoryクラスのメソッドを使用する場合の注意事項を示します。

newInstance(String protocol)メソッドでDYNAMIC_SOAP_PROTOCOLは指定しないでください。指定した場合の動作は保証されません。

14.5.11　MimeHeaderクラス

MimeHeaderクラスのメソッドを使用する場合の注意事項を示します。

RFC822やRFC2045などで，MIMEヘッダでは使用できないと定義されている文字は，MimeHeader(String name, String value)コンストラクタの引数に指定しないでください。指定した場合の動作は保証されません。

14.5.12　MimeHeadersクラス

MimeHeadersクラスのメソッドを使用する場合の注意事項を示します。

addHeader(String name, String value)メソッドおよびsetHeader(String name, String value)メソッドのvalue引数にnullを指定しないでください。指定した場合の動作は保証されません。

addHeader(String name, String value)メソッドまたはsetHeader(String name, String value)メソッドでContent-LengthヘッダまたはContent-Typeヘッダの値を設定しても，送受信時に値が上書きされます。

14.5.13　SAAJResultクラス

SAAJResultクラスのメソッドを使用する場合の注意事項を示します。

SAAJResult(SOAPMessage message)コンストラクタの引数にnullは指定しないでください。nullを指定した場合の動作は保証されません。

SAAJResult(SOAPElement rootNode)コンストラクタのrootNode引数にnullを指定しないでください。指定した場合の動作は保証されません。

14.5.14　SOAPFactoryクラス

SOAPFactoryクラスのメソッドを使用する場合の注意事項を示します。

newInstance(String protocol)メソッドでDYNAMIC_SOAP_PROTOCOLは指定しないでください。指定した場合の動作は保証されません。

createElement(Element domElement)メソッドの引数にnullを指定した場合，nullが返されます。

createElement(String localName, String prefix, String uri)メソッドのlocalName引数に空文字を指定しないでください。指定した場合の動作は保証されません。

createElement(String localName, String prefix, String uri)メソッドのprefix引数にnullまたは空文字を指定した場合，プレフィクスがnullのSOAPElementオブジェクトが生成されます。

createElement(String localName, String prefix, String uri)メソッドのuri引数にnullを指定しないでください。指定した場合の動作は保証されません。また，uri引数に空文字を指定した場合は，名前空間URIがnullのSOAPElementオブジェクトが生成されます。

createFault(String reasonText, QName faultCode)メソッドの引数にnullは指定しないでください。nullを指定した場合の動作は保証されません。

createFault(String reasonText, QName faultCode)メソッドのfaultCode引数に標準仕様で定義されていないフォルトコードを指定しないでください。指定した場合の動作は保証されません。

createName(String localName)メソッドまたはcreateName(String localName, String prefix, String uri)メソッドのlocalName引数に空文字を指定しないでください。指定した場合の動作は保証されません。

createName(String localName, String prefix, String uri)メソッドのuri引数にnullまたは空文字を指定した場合，名前空間URIが空文字のNameオブジェクトが生成されます。

14.5.15　SOAPMessageクラス

SOAPMessageクラスのメソッドを使用する場合の注意事項を示します。

次に示すメソッドの引数にnullは指定しないでください。nullを指定した場合の動作は保証されません。

addAttachmentPart(AttachmentPart AttachmentPart)

getAttachment(SOAPElement element)

writeTo(OutputStream out)

addAttachmentPart(AttachmentPart AttachmentPart)メソッドのAttachmentPart引数に空のAttachmentPartオブジェクトを指定しないでください。指定した場合の動作は保証されません。

createAttachmentPart(Object content, String contentType)メソッドの第1引数には，第2引数に指定したMIMEタイプに適合するオブジェクトを指定してください。適合しないオブジェクトを指定した場合の動作は保証されません。また，nullを指定した場合の動作も保証されません。

getAttachment(SOAPElement element)メソッドの引数に指定した要素の値やhref属性からAttachmentPartを参照する場合は，存在するAttachmentPartを示すCID URLスキーム（RFC2392規定）を記述してください。存在しないAttachmentPartを示すCID URLスキームを記述した場合の動作は保証されません。

getAttachments(MimeHeaders headers)メソッドを使用した場合の動作は保証されません。SOAPMessage#getAttachments()メソッドまたはgetAttachment(SOAPElement)メソッドでAttachmentPartを取得する必要があります。

getProperty(String property)メソッドの引数にnullを指定した場合，nullが返されます。

CosminexusのJAX-WS機能が対応しているSOAPメッセージの文字エンコードは，utf-8だけです。ただし，getProperty(String property)メソッドの引数にSOAPMessage.CHARACTER_SET_ENCODINGを指定してプロパティ値を取得する場合，nullが返される場合があります。

SOAPMessage#setPropertyメソッドで対象プロパティを設定していない場合，getProperty(String property)メソッドにはnullが返されます。

removeAttachments(MimeHeaders headers)メソッドの引数にnullを指定した場合，AttachmentPartはすべて削除されます。

setContentDescription(String description)メソッドの引数にnullを指定した場合，Content-Descriptionヘッダには値が設定されません。空文字を指定した場合は，Content-Descriptionヘッダに空文字が設定されます。

setProperty(String property, Object value)メソッドのproperty引数にはSOAPMessage.CHARACTER_SET_ENCODINGまたはSOAPMessage.WRITE_XML_DECLARATIONを指定してください。SOAPMessage.CHARACTER_SET_ENCODINGまたはSOAPMessage.WRITE_XML_DECLARATION以外のプロパティを指定しても，無視されます。

setProperty(String property, Object value)メソッドのproperty引数にSOAPMessage.CHARACTER_SET_ENCODINGを指定する場合は，value引数にutf-8を指定してください。utf-8以外の値を指定した場合の動作は保証されません。

setProperty(String property, Object value)メソッドのproperty引数にSOAPMessage.WRITE_XML_DECLARATIONを指定する場合は，"true"または"false"を指定してください。"true"または"false"以外を指定した場合の動作は保証されません。

setProperty(String property, Object value)メソッドのproperty引数にnullを指定しないでください。指定した場合の動作は保証されません。

Dispatch／ProviderでSOAPメッセージを送受信する場合，setProperty(String property, Object value)メソッドではプロパティを設定できません。プロパティを設定したい場合は，SOAPConnectionでSOAPメッセージを送受信してください。

14.5.16　SOAPPartクラス

SOAPPartクラスのメソッドを使用する場合の注意事項を示します。

addMimeHeader(String name, String value)メソッドまたはsetMimeHeader(String name, String value)メソッドのvalue引数に指定した値がMIMEヘッダの値に設定されます。

addMimeHeader(String name, String value)メソッドまたはsetMimeHeader(String name, String value)メソッドでSOAPPartにMIMEヘッダを設定しても，送受信時のSOAPメッセージ上にMIMEヘッダは現れません。

getMimeHeader(String name)メソッドの引数にSOAPPartオブジェクトに設定されていないMIMEヘッダ名やnullを指定した場合，nullが返されます。

setContent(Source source)メソッドの引数にはXMLとしてもSOAPとしても正しい内容のSourceオブジェクトを指定してください。不正な内容のSourceオブジェクトを指定した場合の動作は保証されません。また，nullを指定した場合の動作も保証されません。

次のメソッドを使用した場合の動作は保証されません。

getContentId()

getContentLocation()

setContentId(String contentId)

setContentLocation(String contentLocation)

14.5.17　添付ファイルを使用する場合のサポート範囲

プロバイダ実装クラスを使用して開発したWebサービス，またはディスパッチベースのWebサービスクライアントでは，SAAJ仕様に従って添付ファイル付きのSOAPメッセージを生成，送受信できます。一度に送受信できる添付ファイルのサイズおよび個数は，実行環境のメモリ量によって変わりますが，制限はありません。メモリ量を増やせば，容量の大きい添付ファイルや多量の添付ファイルを一度に送受信することもできます。

添付ファイルを送受信するときのメモリの使用量については，「付録D.3　添付ファイル使用時の1リクエスト当たりのメモリ使用量」を参照してください。

＜この項の構成＞

(1)　MIMEタイプ

(2)　添付ファイルを読み込む場合の注意事項

(3)　DOM APIを使用する場合の注意事項

(4)　複数のファイルを添付する場合の注意事項

(1)　MIMEタイプ

添付ファイルに対応するMIMEタイプは，添付ファイルの拡張子によって決まります。添付ファイルのMIMEタイプを明示しない場合，添付ファイルの拡張子によって自動的に適切なMIMEタイプが設定されます。AttachmentPart#setContentType()メソッドなどによってMIMEタイプを明示する場合は，添付ファイルの拡張子に対応した適切なMIMEタイプを指定する必要があります。不正なMIMEタイプを指定した場合の動作は保証されません。

添付ファイルの拡張子とMIMEタイプの適切な組み合わせを次の表に示します。次の表に示した拡張子以外の場合，MIMEタイプはapplication/octet-streamとなります。

表14-7　添付ファイルの拡張子とMIMEタイプ

項番 | 添付ファイルの拡張子 | 対応するMIMEタイプ
1 | html，htm | text/html
2 | txt，text | text/plain
3 | gif，GIF | image/gif
4 | ief | image/ief
5 | jpeg，jpg，jpe，JPG | image/jpeg
6 | tiff，tif | image/tiff
7 | xwd | image/x-xwindowdump
8 | ai，eps，ps | application/postscript
9 | rtf | application/rtf
10 | tex | application/x-tex
11 | texinfo，texi | application/x-texinfo
12 | t，tr，roff | application/x-troff
13 | au | audio/basic
14 | midi，mid | audio/midi
15 | aifc | audio/x-aifc
16 | aif，aiff | audio/x-aiff
17 | wav | audio/x-wav
18 | mpeg，mpg，mpe | video/mpeg
19 | qt，mov | video/quicktime
20 | avi | video/x-msvideo

(2)　添付ファイルを読み込む場合の注意事項

ファイルを読み込んで添付ファイルとして送受信する場合は，java.io.FileInputStreamで読み込んだオブジェクトではなく，javax.activation.FileDataSourceで読み込んだオブジェクトを添付ファイルに設定する必要があります。例を次に示します。

AttachmentPart apPart = request.createAttachmentPart();
FileDataSource source = new FileDataSource("D:¥¥attachment.txt");
apPart.setDataHandler(new DataHandler(source));
request.addAttachmentPart(apPart);

java.io.FileInputStreamで読み込んだオブジェクトを設定した場合の動作は保証されません。

(3)　DOM APIを使用する場合の注意事項

DOM APIを使用してSOAPメッセージを作成する場合は，次に示すメソッドは使用しないでください。使用した場合の動作は保証されません。

org.w3c.dom.createEntityReference(String name)

org.w3c.dom.createProcessingInstruction(String target, String data)

(4)　複数のファイルを添付する場合の注意事項

複数の添付ファイルを一度に送信する場合は，それぞれのAttachmentPartオブジェクトにユニークなContent-IDを設定する必要があります。Content-IDを設定しない，または重複するContent-IDを設定して複数の添付ファイルを送信しようとした場合，最後に設定した添付ファイルだけが送信されます。

複数のAttachmentPartオブジェクトにユニークなContent-IDを設定する例を次に示します。

AttachmentPart apPart1 = request.createAttachmentPart();
FileDataSource source1 = new FileDataSource("D:¥¥attachment1.txt");
apPart1.setDataHandler(new DataHandler(source1));
apPart1.setContentId("001");
request.addAttachmentPart(apPart1);

AttachmentPart apPart2 = request.createAttachmentPart();
FileDataSource source2 = new FileDataSource("D:¥¥attachment2.txt");
apPart2.setDataHandler(new DataHandler(source2));
apPart2.setContentId("002");
request.addAttachmentPart(apPart2);

AttachmentPart apPart3 = request.createAttachmentPart();
FileDataSource source3 = new FileDataSource("D:¥¥attachment3.txt");
apPart3.setDataHandler(new DataHandler(source3));
apPart3.setContentId("003");
request.addAttachmentPart(apPart3);

14.6　WS-RM 1.2仕様のサポート範囲

WS-RM 1.2仕様のサポート範囲を次の表に示します。なお，表中の大分類はWS-RM 1.2仕様の該当個所（章節項）を，小分類はWS-RM 1.2仕様の該当個所に記載されている内容を示します。

表14-8　WS-RM 1.2仕様のサポート範囲

分類 | サポート
大分類 | 小分類
2.4 | 送達保証 | AtLeastOnce | ×
AtMostOnce | ×
ExactryOnce | ○
InOrder | ×
3 | RM要素 | ○
3.1 | 拡張要素／拡張属性の考慮※1 | ○
3.2 | Piggy-Backing | ○
3.3 | WS-Addressingの利用 | ○
3.4 | シーケンス生成 | ○
3.4 | シーケンス生成リクエスト | wsrm:CreateSequence | ○
wsrm:AcksTo※2 | △
wsrm:Expires※3 | ×
wsrm:Offer | ○
拡張要素／拡張属性※1 | ○
3.4 | シーケンス生成レスポンス | wsrm:CreateSequenceResponse | ○
wsrm:Identifier | ○
wsrm:Expires※3 | ×
wsrm:IncompleteSequenceBehavior | DiscardEntireSequence | ×
DiscardFollowingFirstGap | ×
NoDiscard | ○
wsrm:Accept | ○
拡張要素／拡張属性※1 | ○
3.5 | シーケンスクローズ | ○
3.5 | シーケンスクローズリクエスト | wsrm:CloseSequence | ○
wsrm:Identifier | ○
wsrm:LastMsgNumber | ○
拡張要素／拡張属性※1 | ○
3.5 | シーケンスクローズレスポンス | wsrm:CloseSequenceResponse | ○
wsrm:Identifier | ○
拡張要素／拡張属性※1 | ○
3.6 | シーケンス終了 | ○
3.6 | シーケンス終了リクエスト | wsrm:TerminateSequence | ○
wsrm:Identifier | ○
wsrm:LastMsgNumber | ○
拡張要素／拡張属性※1 | ○
3.6 | シーケンス終了レスポンス | wsrm:TerminateSequenceResponse | ○
wsrm:Identifier | ○
拡張要素／拡張属性※1 | ○
3.7 | シーケンス | ○
シーケンス要素 | wsrm:Sequence | ○
wsrm:Identifier | ○
wsrm:MessageNumber | ○
3.8 | Ackリクエスト | ○
3.8 | Ackリクエスト要素 | wsrm:AckRequested | ○
wsrm:Identifier | ○
拡張要素／拡張属性※1 | ○
3.9 | Ack | ○
3.9 | Ack要素 | wsrm:SequenceAcknowledgement | ○
wsrm:Identifier | ○
wsrm:AcknowledgementRange | ○
wsrm:None※4 | △
wsrm:Final | ○
wsrm:Nack | ×
拡張要素／拡張属性※1 | ○
4 | フォルト | ○
4 | SOAP 1.1対応 | ×
4 | SOAP 1.2対応 | ○
4.1 | wsrm:SequenceFaultフォルト | ×
4.2 | wsrm:SequenceTerminatedフォルト | ○
4.3 | wsrm:UnknownSequenceフォルト | ○
4.4 | wsrm:InvalidAcknowledgementフォルト | ○
4.5 | wsrm:MessageNumberRolloverフォルト | ○
4.6 | wsrm:CreateSequenceRefusedフォルト | ○
4.7 | wsrm:SequenceClosedフォルト | ○
4.8 | wsrm:WSRMRequiredフォルト | ×
5 | セキュリティの脅威と対策 | ×
6 | セキュアなシーケンス | ×

（凡例）

○：CosminexusのWS-RM 1.2機能でサポートしています。

×：CosminexusのWS-RM 1.2機能でサポートしていません。

△：CosminexusのWS-RM 1.2機能でサポートしていますが，一部制限があります。

注※1

CosminexusのWS-RM 1.2機能では，拡張要素および拡張属性を付加しません。受信メッセージに含まれる拡張要素および拡張属性は無視されます。

注※2

使用できる要素値は，匿名URIだけです。

注※3

wsrm:Expires要素によるシーケンス有効期限の設定はサポートしていません。シーケンスの有効期限は，WSDLにnet35rmpInactivityTimeoutを指定して設定します。

注※4

CosminexusのWS-RM 1.2機能では，wsrm:None要素を送信しません。返すAckがない場合，HTTPステータスコード202を返します。受信メッセージに含まれる場合は正常に処理されます。

14.7　WS-RM Policy 1.2仕様のサポート範囲

WS-RM Policy 1.2仕様のサポート範囲を次の表に示します。なお，表中の大分類はWS-RM Policy 1.2仕様の該当個所（章節項）を，小分類はWS-RM Policy 1.2仕様の該当個所に記載されている内容を示します。

表14-9　WS-RM Policy 1.2仕様のサポート範囲

分類 | サポート
大分類 | 小分類
2.2 | アサーション要素 | /wsrmp:RMAssertion | ○
/wsrmp:RMAssertion/@wsp:Optional | ×
/wsrmp:RMAssertion/wsp:Policy | ○
/wsrmp:RMAssertion/wsp:Policy/wsrmp:SequenceSTR | ×
/wsrmp:RMAssertion/wsp:Policy/wsrmp:SequenceTransportSecurity | ×
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance | ○
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance/wsp:Policy | ○
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance/wsp:Policy/wsrmp:ExactlyOnce | ○
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance/wsp:Policy/wsrmp:AtLeastOnce | ×
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance/wsp:Policy/wsrmp:AtMostOnce | ×
/wsrmp:RMAssertion/wsp:Policy/wsrmp:DeliveryAssurance/wsp:Policy/wsrmp:InOrder | ×
拡張要素/拡張属性※ | ○
2.3 | アサーション添付 | /wsdl:definitions/wsdl:service/wsdl:port | ×
/wsdl:definitions/wsdl:binding | ○
/wsdl:definitions/wsdl:binding/wsdl:operation/wsdl:input | ×
/wsdl:definitions/wsdl:binding/wsdl:operation/wsdl:output | ×
/wsdl:definitions/wsdl:binding/wsdl:operation/wsdl:fault | ×
2.5 | シーケンスセキュリティポリシー | ×

（凡例）

○：CosminexusのWS-RM Policy 1.2機能でサポートしています。

×：CosminexusのWS-RM Policy 1.2機能でサポートしていません。

注※

CosminexusのWS-RM Policy 1.2機能では，拡張要素および拡張属性を付加しません。受信メッセージに含まれる拡張要素および拡張属性は無視されます。

15.　JAX-WS APIのサポート範囲

この章では，Webサービスを開発するときに留意が必要な，JAX-WS APIのサポート範囲について説明します。

＜この章の構成＞

15.1　インタフェースおよびクラスの一覧（JAX-WS）

15.2　クライアントAPI

15.3　サービスAPI

15.4　コアAPI

15.5　メッセージコンテキストの使用

15.1　インタフェースおよびクラスの一覧（JAX-WS）

ここでは，JAX-WS APIのインタフェースおよびクラスの種類について説明します。また，インタフェースおよびクラスのサポート範囲についても示します。

＜この節の構成＞

(1)　インタフェースおよびクラスの種類

(2)　インタフェースおよびクラスの一覧表

(1)　インタフェースおよびクラスの種類

JAX-WS APIのインタフェースおよびクラスは，次に示すAPI群に分類されます。

クライアントAPI
ディスパッチベースまたはAPIベースのWebサービスクライアントで使用するAPIです。スタブベースのWebサービスクライアントでは，コマンドで生成されたサービスクラスやスタブを使用してWebサービスにアクセスするため，クライアントAPIは使用しません。

サービスAPI
Webサービスに高度な実装を記述する場合に使用するAPIです。プロバイダ実装クラスを使用したWebサービスやハンドラなど，複雑な機能を利用する場合に使用します。

コアAPI
WebサービスとWebサービスクライアントのどちらでも使用できるAPIです。inoutおよびoutパラメタを保持するためのHolderクラス，または例外などが含まれます。

(2)　インタフェースおよびクラスの一覧表

JAX-WS APIのインタフェースおよびクラスの一覧を次の表に示します。CosminexusのJAX-WS機能でサポートしていないインタフェースおよびクラスを使用してWebサービスを開発した場合の動作は保証されません。

表15-1　JAX-WS APIのインタフェースおよびクラス一覧

項番
インタフェースまたはクラス名
説明
サポート

javax.xml.wsパッケージ

1
AsyncHandler<T>
－
×

2
Binding
－
×

3
BindingProvider
プロトコルバインディングと関連づけられたコンテキストオブジェクトへのアクセスを提供するインタフェースです。
○

4
Dispatch<T>
XMLメッセージを送信するためのインタフェースです。
○

5
LogicalMessage
プロトコルに捕らわれないXMLメッセージを表現し，メッセージのペイロードへアクセスする方法を提供するメソッドを含むインタフェースです。
○

6
Provider<T>
XMLメッセージを受信するためのインタフェースです。
○

7
Response<T>
－
×

8
WebServiceContext
－
×

9
Endpoint
－
×

10
EndpointReference
Webサービスエンドポイントのリモート参照のWS-Addressing EndpointReferenceを表す抽象クラスです。
○

11
Holder<T>
型Tの値を保持するクラスです。
○

12
RespectBindingFeature
－
×

13
Service
Webサービスクライアントが使用するためのWebサービスを表すクラスです。
○

14
WebServiceFeature
－
×

15
WebServicePermission
－
×

16
ProtocolException
プロトコルレベルでのフォルト情報を，クライアントに通知するためのクラスです。
○

17
WebServiceException
JAX-WS APIの実行時例外を表す例外クラスです。
○

javax.xml.ws.handlerパッケージ

18
Handler<C extends MessageContext>
ハンドラの基底インタフェースです。
○

19
HandlerResolver
プロキシに設定されたハンドラチェインを制御するために，Webサービスクライアントの実装者が実装するインタフェースです。
○

20
LogicalHandler<C extends LogicalMessageContext>
論理ハンドラです。論理ハンドラを実装する場合はこのインタフェースを実装してください。
このインタフェースには，メソッドはありません。
○

21
LogicalMessageContext
論理ハンドラ用のメッセージコンテキストです。
○

22
MessageContext
プロパティセットを管理するメソッドを提供するインタフェースです。
○

23
PortInfo
ハンドラリゾルバがハンドラチェインの生成を求められたときに，どのポートのために求められているのかクエリするために使用する情報です。
○

javax.xml.handler.soapパッケージ

24
SOAPHandler<T extends SOAPMessageContext>
SOAPハンドラです。SOAPハンドラを実装する場合はこのインタフェースを実装してください。
○

25
SOAPMessageContext
SOAPハンドラ用のメッセージコンテキストです。
○

javax.xml.ws.httpパッケージ

26
HTTPBinding
－
×

27
HTTPException
－
×

javax.xml.ws.soapパッケージ

28
SOAPBinding
SOAPバインディング用の抽象クラスです。
○

29
AddressingFeature
WS-Addressingを使用することを表すフィーチャークラスです。
○

30
MTOMFeature
MTOM/XOP仕様形式の添付ファイルを使用することを表すフィーチャークラスです。
○

31
SOAPFaultException
SOAPフォルトの例外を表すクラスです。
○

javax.xml.ws.spiパッケージ

32
Provider
－
×

33
ServiceDelegate
－
×

javax.xml.ws.wsaddressingパッケージ

34
W3CEndpointReference
EndpointReference抽象クラスの実装クラスです。
○

35
W3CEndpointReferenceBuilder
W3CEndpointReferenceクラスを作成するために使用されるビルダークラスです。
○

com.sun.xml.ws.developerパッケージ

36
StreamingAttachmentFeature
ストリーミングを使用することを表すフィーチャークラスです。
○

37
StreamingDataHandler
ストリーミングを使用した添付ファイルを表す抽象クラスです。
○

org.jvnet.mimepullパッケージ

38
MIMEConfig
MIMEメッセージの構文解析と出力に関する設定をするためのクラスです。
○

（凡例）

－：説明がないことを示します（非サポートのため）。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.2　クライアントAPI

ここでは，クライアントAPIのサポート範囲について説明します。

＜この節の構成＞

15.2.1　javax.xml.ws.BindingProviderインタフェース

15.2.2　javax.xml.ws.Dispatchインタフェース

15.2.3　javax.xml.ws.EndpointReferenceクラス

15.2.4　javax.xml.ws.Serviceクラス

15.2.5　javax.xml.ws.wsaddressing.W3CEndpointReferenceクラス

15.2.1　javax.xml.ws.BindingProviderインタフェース

javax.xml.ws.BindingProviderインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-2　javax.xml.ws.BindingProviderインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | Binding | getBinding() | ×
2 | EndpointReference | getEndpointReference() | ×
3 | <T extends EndpointReference> T | getEndpointReference (java.lang.Class<T> clazz) | ×
4 | java.util.Map <java.lang.String, java.lang.Object> | getRequestContext() | ○
説明 | 要求メッセージのメッセージコンテキストを初期化するために使用されるコンテキストを取得します。
5 | java.util.Map <java.lang.String, java.lang.Object> | getResponseContext() | ○
説明 | 応答メッセージの処理によって得られたコンテキストを取得します。応答メッセージが処理される前に呼び出した場合はnullを返します。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.2.2　javax.xml.ws.Dispatchインタフェース

javax.xml.ws.Dispatchインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-3　javax.xml.ws.Dispatchインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | T | invoke(T msg) | ○
2 | Response<T> | invokeAsync(T msg) | ×
3 | java.util.concurrent.Future<?> | invokeAsync(T msg, AsyncHandler<T> handler) | ×
4 | void | invokeOneWay(T msg) | ×

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.2.3　javax.xml.ws.EndpointReferenceクラス

javax.xml.ws.EndpointReferenceクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-4　javax.xml.ws.EndpointReferenceクラスのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | － | EndpointReference() | ○
2 | <T> T | getPort (java.lang.Class<T> serviceEndpointInterface, WebServiceFeature... features) | ×
3 | static EndpointReference | readFrom (javax.xml.transform.Source eprInfoset) | ○
4 | java.lang.String | toString() | ○
5 | abstract void | writeTo(javax.xml.transform.Result result) | ○

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.2.4　javax.xml.ws.Serviceクラス

javax.xml.ws.Serviceクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-5　javax.xml.ws.Serviceクラスのサポート範囲

項番
戻り値の型
メソッド名／説明
サポート

1
－
Service(java.net.URL wsdlDocumentLocation, javax.xml.namespace.QName serviceName)
○

説明
Serviceインスタンスを生成するコンストラクタです。

引数

wsdlDocumentLocation：

WSDL文書の位置です。nullを指定した場合，Serviceコンストラクタを呼び出しているクラスに設定されているjavax.xml.ws.WebServiceClientアノテーションのwsdlLocation属性の値が設定されます。指定するURLの形式については，java.net.URLクラスの仕様に従ってください。

serviceName：

サービスの名前です。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

wsdlDocumentLocationに，存在しないローカルパス名を指定した場合

wsdlDocumentLocationに，「?wsdl」付きの存在しないHTTPのURLを指定した場合

wsdlDocumentLocationに，「?wsdl」付きではない存在しないHTTPのURLを指定した場合

serviceNameにnullを指定した場合

serviceNameに，WSDLのサービス名（wsdl:service要素のname属性の値）以外のQNameを指定した場合

wsdlDocumentLocationにnullを指定し，かつServiceコンストラクタを呼び出しているクラスでjavax.xml.ws.WebServiceClientアノテーションを使用していない場合

wsdlDocumentLocationにnullを指定し，かつServiceコンストラクタを呼び出しているクラスのjavax.jws.WebServiceアノテーションで，wsdlLocation属性が設定されていない場合

2
void
addPort(javax.xml.namespace.QName portName, java.lang.String bindingId, java.lang.String endpointAddress)
○

注意
portNameは，createDispatch()を呼び出すときに同じQNameを指定する必要があります。nullは指定できません。
bindingIdにnullを指定した場合は，SOAP1.1/HTTPのバインディングIDが設定されます。

3
static Service
create(javax.xml.namespace.QName serviceName)
○

4
static Service
create(java.net.URL wsdlDocumentLocation, javax.xml.namespace.QName serviceName)
○

説明
Serviceインスタンスを生成します。

引数

wsdlDocumentLocation：

WSDL文書の位置です。指定するURLの形式についてはjava.net.URLクラスの仕様に従ってください。

serviceName：

WSDLのサービス名（wsdl:service要素のname属性値）です。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

wsdlDocumentLocationに存在しないローカルパス名を指定した場合

wsdlDocumentLocationに，「?wsdl」付きの存在しないHTTPのURLを指定した場合

wsdlDocumentLocationに，「?wsdl」付きではない存在しないHTTPのURLを指定した場合

serviceNameに，WSDLのサービス名（wsdl:service要素のname属性の値）以外を指定した場合（ただし，wsdlDocumentLocationにnullを指定した場合を除く）

5
<T> Dispatch<T>
createDispatch (EndpointReference endpointReference, java.lang.Class<T> type, Service.Mode mode, WebServiceFeature... features)
×

6
Dispatch <java.lang.Object>
createDispatch (EndpointReference endpointReference, javax.xml.bind.JAXBContext context, Service.Mode mode, WebServiceFeature... features)
×

7
<T> Dispatch<T>
createDispatch (javax.xml.namespace.QName portName, java.lang.Class<T> type, Service.Mode mode)
○

注意
portNameは，addPort()の引数に指定するポート名と同じものを指定する必要があります。nullは指定できません。

8
<T> Dispatch<T>
createDispatch (javax.xml.namespace.QName portName, java.lang.Class<T> type, Service.Mode mode, WebServiceFeature... features)
×

9
Dispatch <java.lang.Object>
createDispatch (javax.xml.namespace.QName portName, javax.xml.bind.JAXBContext context, Service.Mode mode)
○

注意
portNameは，addPort()の引数に指定するポート名と同じものを指定する必要があります。nullは指定できません。

10
Dispatch <java.lang.Object>
createDispatch (javax.xml.namespace.QName portName, javax.xml.bind.JAXBContext context, Service.Mode mode, WebServiceFeature... features)
×

11
java.util.concurrent.Executor
getExecutor()
×

12
HandlerResolver
getHandlerResolver()
○

説明
このServiceインスタンスによって使用されているHandlerResolverインスタンスを返します。存在しない場合はnullを返します。

13
<T> T
getPort (java.lang.Class<T> serviceEndpointInterface)
○

説明
ポート（サービスにアクセスするためのプロキシ）を返します。

引数

serviceEndpointInterface：

SEIのClassクラスです。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

serviceEndpointInterfaceがnullの場合

wsdlDocumentLocationにnullを指定したService.create()で生成したServiceインスタンスから呼び出した場合

javax.jws.WebServiceアノテーションを使用していないSEIを引数に指定した場合

このメソッドを呼び出す前に，nullを返すgetHandlerChain()を実装したHandlerResolverオブジェクトをsetHandlerResolver()で設定している場合

このメソッドを呼び出す前に，論理ハンドラでもSOAPハンドラでもない，ハンドラを含むハンドラチェインを返すgetHandlerChain()を実装したHandlerResolverオブジェクトをsetHandlerResolver()で設定している場合

14
<T> T
getPort (java.lang.Class<T> serviceEndpointInterface, WebServiceFeature... features)
×

15
<T> T
getPort(EndpointReference endpointReference, java.lang.Class<T> serviceEndpointInterface, WebServiceFeature... features)
○※

説明
ポート（サービスにアクセスするためのプロキシ）を返します。

引数

endpointReference：

ポートによって呼び出されるサービスエンドポイントです。

serviceEndpointInterface：

SEIのClassクラスです。

features：

ポート上で構成するWebServiceFeatureのリストです。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

ポートの生成中に例外が発生した場合

このメソッドの処理に必要なWSDLが存在しない場合

endpointReferenceメタデータがServiceインスタンスのserviceNameに合っていない場合

WSDLまたはendpointReferenceメタデータからportNameを抽出できない場合

無効なendpointReferenceが指定された場合

無効なserviceEndpointInterfaceが指定された場合

ポートと互換性がない，またはサポートされていないWebServiceFeatureが指定された場合

16
<T> T
getPort(javax.xml.namespace.QName portName, java.lang.Class<T> serviceEndpointInterface)
○

説明
ポート（サービスにアクセスするためのプロキシ）を返します。

引数

portName：

WSDLのポート名（wsdl:port要素のname属性の値）です。

serviceEndpointInterface：

SEIのClassクラスです。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

portNameにWSDLのポート名（wsdl:port要素のname属性の値）以外のQNameを指定した場合

portNameがnullの場合

serviceEndpointInterfaceがnullの場合

17
<T> T
getPort(javax.xml.namespace.QName portName, java.lang.Class<T> serviceEndpointInterface, WebServiceFeature... features)
×

18
java.util.Iterator <javax.xml.namespace.QName>
getPorts()
○

説明
サービスエンドポイント（WSDLに含まれるポート（wsdl:port要素））を表すQNameのリストのIteratorを返します。

例外

javax.xml.ws.WebServiceException：

wsdlDocumentLocationにnullを指定して生成したServiceインスタンスに対して，Service.create()メソッドを呼び出した場合に発生します。

19
javax.xml.namespace.QName
getServiceName()
○

説明
このサービスの名前（WSDLのサービス名（wsdl:service要素のname属性の値））を返します。

20
java.net.URL
getWSDLDocumentLocation()
○

説明
このサービスのWSDLファイルの位置を返します。引数wsdlDocumentLocationにnullを指定して生成したServiceインスタンスに対して，Service.create()メソッドを呼び出した場合にはnullを返します。

21
void
setExecutor (java.util.concurrent.Executor executor)
×

22
void
setHandlerResolver (HandlerResolver handlerResolver)
○

説明
このServiceインスタンスのHandlerResolverインスタンスを設定してください。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

注※

getPortメソッドで可変長引数を指定した場合の動作を次の表に示します。

表15-6　可変長引数の指定方法と動作

項番
指定方法
指定例
動作

1
引数を省略
getPort(epr, sei)
可変長引数が指定されなかったと見なします。

2
引数を一つ指定
getPort(epr, sei, new FooFeatures())
可変長引数が一つ指定されたと見なします。

3
引数を二つ指定
getPort(epr, sei,
new FooFeatures(),
new BarFeatures())
可変長引数が二つ指定されたと見なします。

4
引数にnullを指定
getPort(epr, sei, null)
可変長引数が指定されなかったと見なします。

5
引数にnullを指定してWebServiceFeature 型にキャスト
getPort(epr, sei,
(WebServiceFeature) null)
内容がnullの可変長引数が指定されたと見なし，例外NullPointerExceptionが発生します。

6
引数にnullを指定してWebServiceFeature 型の配列にキャスト
getPort(epr, sei,
(WebServiceFeature[]) null)
可変長引数が指定されなかったと見なします。

15.2.5　javax.xml.ws.wsaddressing.W3CEndpointReferenceクラス

javax.xml.ws.wsaddressing.W3CEndpointReferenceクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-7　javax.xml.ws.wsaddressing.W3CEndpointReferenceクラスのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | － | W3CEndpointReference() | ○
2 | － | W3CEndpointReference (javax.xml.transform.Source source) | ○
3 | void | writeTo(javax.xml.transform.Result result) | ○

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.3　サービスAPI

ここでは，サービスAPIのサポート範囲について説明します。

＜この節の構成＞

15.3.1　javax.xml.ws.Providerインタフェース

15.3.2　javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラス

15.3.1　javax.xml.ws.Providerインタフェース

javax.xml.ws.Providerインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-8　javax.xml.ws.Providerインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | T | invoke(T request) | ○

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.3.2　javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラス

javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-9　javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラスのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | － | W3CEndpointReferenceBuilder() | ○
2 | W3CEndpointReferenceBuilder | address(java.lang.String address) | ○
3 | W3CEndpointReference | build() | ○
4 | W3CEndpointReferenceBuilder | endpointName (javax.xml.namespace.QName endpointName) | ○
5 | W3CEndpointReferenceBuilder | metadata (org.w3c.dom.Element metadataElement) | ○
6 | W3CEndpointReferenceBuilder | referenceParameter (org.w3c.dom.Element referenceParameter) | ○
7 | W3CEndpointReferenceBuilder | serviceName (javax.xml.namespace.QName serviceName) | ○
8 | W3CEndpointReferenceBuilder | wsdlDocumentLocation (java.lang.String wsdlDocumentLocation) | ○

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4　コアAPI

ここでは，コアAPIのサポート範囲について説明します。

＜この節の構成＞

15.4.1　com.sun.xml.ws.developer.StreamingAttachmentFeatureクラス

15.4.2　com.sun.xml.ws.developer.StreamingDataHandlerクラス

15.4.3　org.jvnet.mimepull.MIMEConfigクラス

15.4.4　javax.xml.ws.handler.Handler<C extends MessageContext>インタフェース

15.4.5　javax.xml.ws.handler.HandlerResolverインタフェース

15.4.6　javax.xml.ws.handler.LogicalMessageContextインタフェース

15.4.7　javax.xml.ws.handler.MessageContextインタフェース

15.4.8　javax.xml.ws.handler.PortInfoインタフェース

15.4.9　javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェース

15.4.10　javax.xml.ws.handler.soap.SOAPMessageContextインタフェース

15.4.11　javax.xml.ws.Holder<T>クラス

15.4.12　javax.xml.ws.LogicalMessageインタフェース

15.4.13　javax.xml.ws.ProtocolExceptionクラス

15.4.14　javax.xml.ws.soap.AddressingFeatureクラス

15.4.15　javax.xml.ws.soap.MTOMFeatureクラス

15.4.16　javax.xml.ws.soap.SOAPBindingインタフェース

15.4.17　javax.xml.ws.soap.SOAPFaultExceptionクラス

15.4.18　javax.xml.ws.WebServiceExceptionクラス

15.4.1　com.sun.xml.ws.developer.StreamingAttachmentFeatureクラス

com.sun.xml.ws.developer.StreamingAttachmentFeatureクラスのサポート範囲を次の表に示します。

表15-10　com.sun.xml.ws.developer.StreamingAttachmentFeatureクラスのサポート範囲

項番
戻り値の型
メソッド名
サポート

1
－
StreamingAttachmentFeature()
×

2
－
StreamingAttachmentFeature(String dir,boolean parseEagerly,long memoryThreshold)
○

説明
StreamingAttachmentFeatureを作成します。

引数

dir：

一時ファイルの出力先ディレクトリパスです。存在しないディレクトリ，アクセス権のないディレクトリ，または存在するファイル名を指定した場合，メッセージを出力し，受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディをメモリ上に展開します（KDJW10026-W）。

parseEagerly：

受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。trueの場合，添付ファイルを含むSOAPメッセージを詳細に解析します。

memoryThreshold：

添付ファイルを含むSOAPメッセージを受信する際に，SOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値(単位：バイト)です。16KB（16384L）より大きい値または-1を指定します。これら以外の値を指定した場合，動作は保証されません。-1を指定した場合，常にMIMEボディをメモリ上に展開します。

3
java.lang.String
getID()
○

説明
StreamingAttachmentFeatureの一意の識別子を取得します。

4
org.jvnet.mimepull.MIMEConfig
getConfig()
○

説明
ストリーミングの設定情報を表すMIMEConfigインスタンスを取得します。一度このメソッドを呼び出した場合，次のsetterメソッドを用いてストリーミングの設定情報を変更することはできません。

setDir(String dir)

setParseEagerly(boolean parseEagerly)

setMemoryThreshold(int memoryThreshold)

5
void
setDir(String dir)
○

説明
ストリーミングが有効の場合に，受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディを一時ファイルとして出力するときに使用するディレクトリを設定します。このメソッドを複数回呼び出した場合，最後に指定した値が有効になります。getConfig()メソッドを呼び出した場合，このメソッドによる再設定はできません。

引数

dir：

一時ファイルの出力先ディレクトリパスです。存在しないディレクトリ，アクセス権のないディレクトリ，または存在するファイル名を指定した場合，メッセージを出力し，受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディをメモリ上に展開します（KDJW10026-W）。

6
void
setParseEagerly(boolean parseEagerly)
○

説明
ストリーミングが有効の場合に，受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。このメソッドを複数回呼び出した場合，最後に指定した値が有効になります。getConfig()メソッドを呼び出した場合，このメソッドによる再設定はできません。

引数

parseEagerly：

受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。trueの場合，添付ファイルを含むSOAPメッセージを詳細に解析します。

7
void
setMemoryThreshold(int memoryThreshold)
○

説明
ストリーミングが有効の場合に，添付ファイルを含むSOAPメッセージを受信するときにSOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値を設定します。このメソッドを複数回呼び出した場合，最後に指定した値が有効になります。getConfig()メソッドを呼び出した場合，このメソッドによる再設定はできません。

引数

memoryThreshold：

添付ファイルを含むSOAPメッセージを受信する際に，SOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値(単位：バイト)です。16KB（16384L）より大きい値または-1を指定します。これら以外の値を指定した場合，動作は保証されません。-1を指定した場合，常にMIMEボディをメモリ上に展開します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.2　com.sun.xml.ws.developer.StreamingDataHandlerクラス

com.sun.xml.ws.developer.StreamingDataHandlerクラスのサポート範囲を次の表に示します。

表15-11　com.sun.xml.ws.developer.StreamingDataHandlerクラスのサポート範囲

項番
戻り値の型
メソッド名
サポート

1
－
StreamingDataHandler(Object o, String s)
×

2
－
StreamingDataHandler(URL url)
×

3
－
StreamingDataHandler(DataSource dataSource)
×

4
java.io.InputStream
readOnce()
○

説明
このオブジェクトのjava.io.InputStreamを取得します。

例外

IOException：

このオブジェクトに対応するInputStreamが取得できなかった場合に発生します。

5
void
moveTo(File file)
○

説明
このオブジェクトが示す添付ファイルを指定されたファイルに移動します。

引数fileにnullを指定した場合，java.io.IOExceptionが発生します（KDJW10023-E）。

引数fileに存在するファイルまたはディレクトリのパス，存在しない親ディレクトリを含むファイルパスを指定した場合，IOExceptionが発生します（KDJW10027-E）。

引数

file：

出力先ファイルパスです。

例外

IOException：

次の場合に発生します。

nullをfileに指定。

存在するファイルまたはディレクトリのパス，または存在しない親ディレクトリを含むファイルパスをfileに指定。

入出力エラーが発生。

6
void
close()
○

説明
このオブジェクトが示す添付ファイルのリソースを解放します。

例外

IOException：

入出力エラーが発生した場合に発生します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.3　org.jvnet.mimepull.MIMEConfigクラス

org.jvnet.mimepull.MIMEConfigクラスのサポート範囲を次の表に示します。

表15-12　org.jvnet.mimepull.MIMEConfigクラスのサポート範囲

項番
戻り値の型
メソッド名
サポート

1
－
MIMEConfig()
×

2
void
setParseEagerly(boolean parseEagerly)
○

説明
ストリーミングが有効の場合に，受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。このメソッドを複数回呼び出した場合，最後に指定した値が有効になります。

引数

parseEagerly：

受信した添付ファイルを含むSOAPメッセージを詳細に解析するかどうかを設定します。trueの場合，添付ファイルを含むSOAPメッセージを詳細に解析します。

3
void
setMemoryThreshold(long memoryThreshold)
○

説明
ストリーミングが有効の場合に，添付ファイルを含むSOAPメッセージを受信するときに，SOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値を設定します。このメソッドを複数回呼び出した場合，最後に指定した値が有効になります。

引数

memoryThreshold：

添付ファイルを含むSOAPメッセージを受信する際に，SOAPメッセージに含まれるMIMEボディをメモリ上に展開するかどうかを判定するためのしきい値(単位：バイト)です。16KB（16384L）より大きい値または-1を指定します。これら以外の値を指定した場合，動作は保証されません。-1を指定した場合，常にMIMEボディをメモリ上に展開します。

4
void
setDir(String dir)
○

説明
ストリーミングが有効の場合に，受信した添付ファイルを含むSOAPメッセージに含まれるMIMEボディを一時ファイルとして出力するときに使用するディレクトリを設定します。このメソッドを複数回呼び出した場合，nullまたは空文字（""）以外の値で最初に指定したものが有効になります。

引数

dir：

一時ファイルの出力先ディレクトリパスです。

5
void
validate()
○

説明
一時ファイルを作成できるかを検証します。作成できない場合，添付ファイルをメモリ上に展開するように設定します。
存在しないディレクトリ，アクセス権のないディレクトリ，存在するファイル名をsetDir(String dir)メソッドで設定し，このメソッドで検証しない場合，ストリーミングが一時ファイルを出力するときにorg.jvnet.mimepull.MIMEParsingExceptionが発生します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.4　javax.xml.ws.handler.Handler<C extends MessageContext>インタフェース

javax.xml.ws.handler.Handler<C extends MessageContext>インタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-13　javax.xml.ws.handler.Handler<C extends MessageContext>インタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | MessageContext.Scope | close(MessageContext context) | ○
説明 | メッセージ交換を完了するとき，JAX-WSのランタイムがメッセージ，フォルト，または例外をディスパッチする直前に呼び出されます。
2 | boolean | handleFault(C context) | ○
説明 | フォルトメッセージを処理するために呼び出されます。
3 | boolean | handleMessage(C context) | ○
説明 | インバウンドおよびアウトバウンドのメッセージで通常の処理をするために呼び出されます。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.4.5　javax.xml.ws.handler.HandlerResolverインタフェース

javax.xml.ws.handler.HandlerResolverインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-14　javax.xml.ws.handler.HandlerResolverインタフェースのサポート範囲

項番
戻り値の型
メソッド名／説明
サポート

1
java.util.List<Handler>
getHandlerChain(PortInfo portInfo)
○

説明
指定されたポートのハンドラチェインを取得します。このメソッドではnullを返さないでください。

引数

portInfo：

アクセス対象のポートの情報です。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.4.6　javax.xml.ws.handler.LogicalMessageContextインタフェース

javax.xml.ws.handler.LogicalMessageContextインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-15　javax.xml.ws.handler.LogicalMessageContextインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | LogicalMessage | getMessage() | ○
説明 | このメッセージコンテキストからメッセージを取得します。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.4.7　javax.xml.ws.handler.MessageContextインタフェース

javax.xml.ws.handler.MessageContextインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-16　javax.xml.ws.handler.MessageContextインタフェースのサポート範囲

項番
戻り値の型
メソッド名／説明
サポート

1
MessageContext.Scope
getScope(java.lang.String name)
○

説明
プロパティのスコープを取得します。

例外

java.lang.IllegalArgumentException：

nameにnull，空の文字列，およびこのメッセージコンテキストに関連づけられていないプロパティ名を指定した場合に発生します。

標準のメッセージコンテキストのプロパティ，およびユーザプログラムが追加したプロパティは，メッセージコンテキストに関連づけられているものと見なされます。

メッセージコンテキストのプロパティについては，「15.5.1　メッセージコンテキストのプロパティのサポート範囲」を参照してください。

2
void
setScope(java.lang.String name, MessageContext.Scope scope)
×

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.8　javax.xml.ws.handler.PortInfoインタフェース

javax.xml.ws.handler.PortInfoインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-17　javax.xml.ws.handler.PortInfoインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | java.lang.String | getBindingID() | ○
説明 | アクセス対象のポートが使用する，バインディングを識別するURIを取得します。
2 | javax.xml.namespace.QName | getPortName() | ○
説明 | アクセス対象のWSDLのポートからQNameを取得します。
3 | javax.xml.namespace.QName | getServiceName() | ○
説明 | アクセス対象のポートを含む，WSDLのサービスのQNameを取得します。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.4.9　javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェース

javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-18　javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | java.util.Set<javax.xml.namespace.QName> | getHeaders() | ○
説明 | このハンドラインスタンスで処理できるヘッダを取得します。

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

15.4.10　javax.xml.ws.handler.soap.SOAPMessageContextインタフェース

javax.xml.ws.handler.soap.SOAPMessageContextインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-19　javax.xml.ws.handler.soap.SOAPMessageContextインタフェースのサポート範囲

項番
戻り値の型
メソッド名／説明
サポート

1
java.lang.Object[]
getHeaders(javax.xml.namespace.QName header, javax.xml.bind.JAXBContext context, boolean allRoles)
○

説明
このメッセージコンテキストが持つメッセージから特定のQNameを持つヘッダを取得します。このメッセージコンテキストがメッセージを持っていない場合，またはheaderで指定したQNameに一致するヘッダが存在しない場合は，空の配列を返します。

例外

javax.xml.ws.WebServiceException：

次の場合に発生します。

headerにnullを指定した場合

contextにnullを指定した場合

2
javax.xml.soap.SOAPMessage
getMessage()
○

説明
このメッセージコンテキストからSOAPメッセージを取得します。

3
java.util.Set<java.lang.String>
getRoles()
○

説明
ハンドラチェインの実行に関連づけられたSOAPアクタおよびロールを取得します。

4
void
setMessage(javax.xml.soap.SOAPMessage message)
×

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.11　javax.xml.ws.Holder<T>クラス

javax.xml.ws.Holder<T>クラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-20　javax.xml.ws.Holder<T>クラスのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | － | Holder() | ○
説明 | null値を含む新しいホルダを作成します。
2 | － | Holder(T value) | ○
説明 | 指定した値を含む新しいホルダを作成します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4.12　javax.xml.ws.LogicalMessageインタフェース

javax.xml.ws.LogicalMessageインタフェースのサポート範囲を次の表に示します。

表15-21　javax.xml.ws.LogicalMessageインタフェースのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | javax.xml.transform.Source | getPayload() | ○
2 | java.lang.Object | getPayload(javax.xml.bind.JAXBContext context) | ○
3 | void | setPayload(java.lang.Object payload, javax.xml.bind.JAXBContext context) | ×
4 | void | setPayload(javax.xml.transform.Source payload) | ×

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.13　javax.xml.ws.ProtocolExceptionクラス

javax.xml.ws.ProtocolExceptionクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-22　javax.xml.ws.ProtocolExceptionクラスのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | － | ProtocolException() | ○
説明 | 詳細メッセージがnullである新規例外を構築します。
2 | － | ProtocolException(java.lang.String message) | ○
説明 | 指定された詳細メッセージを持つ新規例外を構築します。
3 | － | ProtocolException(java.lang.String message, java.lang.Throwable cause) | ○
説明 | 指定された詳細メッセージおよび原因を使用して新規例外を構築します。
4 | － | ProtocolException(java.lang.Throwable cause) | ○
説明 | 指定された原因と詳細メッセージを持つ新規例外を構築します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4.14　javax.xml.ws.soap.AddressingFeatureクラス

javax.xml.ws.soap.AddressingFeatureクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-23　javax.xml.ws.soap.AddressingFeatureクラスのサポート範囲

項番 | 戻り値の型 | メソッド名 | サポート
1 | － | AddressingFeature() | ○
2 | － | AddressingFeature(boolean enabled) | ○
3 | － | AddressingFeature(boolean enabled, boolean required) | ○
4 | java.lang.String | getID() | ○
5 | boolean | isRequired() | ○

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4.15　javax.xml.ws.soap.MTOMFeatureクラス

javax.xml.ws.soap.MTOMFeatureクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-24　javax.xml.ws.soap.MTOMFeatureクラスのサポート範囲

項番
戻り値の型
メソッド名
サポート

1
－
MTOMFeature()
○

説明
MTOMFeatureを作成します。

2
－
MTOMFeature(boolean enabled)
○

説明
MTOMFeatureを作成します。

引数

enabled：

MTOM/XOP仕様形式の添付ファイルを使用するかどうかを指定します。

3
－
MTOMFeature(boolean enabled, int threshold)
○

説明
MTOMFeatureを作成します。

引数

enabled：

MTOM/XOP仕様形式の添付ファイルを使用するかどうかを指定します。

threshold：

MTOM/XOP仕様形式の添付ファイルとして送信するバイナリデータのサイズ（単位：バイト）です。thresholdの指定値≦バイナリデータのサイズのとき，バイナリデータをMTOM/XOP仕様形式の添付ファイルとして送信します。

4
－
MTOMFeature(int threshold)
○

説明
MTOMFeatureを作成します。

引数

threshold：

MTOM/XOP仕様形式の添付ファイルとして送信するバイナリデータのサイズ（単位：バイト）です。thresholdの指定値≦バイナリデータのサイズのとき，バイナリデータをMTOM/XOP仕様形式の添付ファイルとして送信します。

5
java.lang.String
getID()
○

説明
MTOMFeatureの一意の識別子を取得します。

6
int
getThreshold()
○

説明
バイナリデータをMTOM/XOP仕様形式の添付ファイルとして送信するかどうかを判定するためのしきい値を取得します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4.16　javax.xml.ws.soap.SOAPBindingインタフェース

javax.xml.ws.soap.SOAPBindingインタフェースのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-25　javax.xml.ws.soap.SOAPBindingインタフェースのサポート範囲

項番
戻り値の型
メソッド名
サポート

1
javax.xml.soap.MessageFactory
getMessageFactory()
×

2
java.util.Set<java.lang.String>
getRoles()
×

3
javax.xml.soap.SOAPFactory
getSOAPFactory()
×

4
boolean
isMTOMEnabled()
○

説明
MTOM/XOP仕様形式の添付ファイルが有効化されている場合，trueを返します。

5
void
setMTOMEnabled(boolean flag)
○

説明
MTOM/XOP仕様形式の添付ファイルを有効または無効にします。
MTOMFeatureやこのメソッドを使用してMTOM/XOP仕様形式の添付ファイルの有効または無効が設定されていない場合に，このメソッドで設定できます。すでにMTOM/XOP仕様形式の添付ファイルの有効または無効が設定されている場合，このメソッドによる再設定はできません。

引数

flag：

MTOM/XOP仕様形式の添付ファイルを有効にするか無効にするかを指定します。

6
void
setRoles(java.util.Set<java.lang.String> roles)
×

（凡例）

○：CosminexusのJAX-WS機能でサポートしています。

×：CosminexusのJAX-WS機能でサポートしていません。

15.4.17　javax.xml.ws.soap.SOAPFaultExceptionクラス

javax.xml.ws.soap.SOAPFaultExceptionクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-26　javax.xml.ws.soap.SOAPFaultExceptionクラスのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | － | SOAPFaultException (javax.xml.soap.SOAPFault fault) | ○
説明 | SOAPFaultExceptionの新規例外を構築します。
2 | javax.xml.soap.SOAPFault | getFault() | ○
説明 | 埋め込まれたSOAPFaultインスタンスを取得します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.4.18　javax.xml.ws.WebServiceExceptionクラス

javax.xml.ws.WebServiceExceptionクラスのサポート範囲を次の表に示します。詳細はJAX-WS 2.1仕様を参照してください。

表15-27　javax.xml.ws.WebServiceExceptionクラスのサポート範囲

項番 | 戻り値の型 | メソッド名／説明 | サポート
1 | － | WebServiceException() | ○
説明 | 詳細メッセージがnullである新規例外を構築します。
2 | － | WebServiceException (java.lang.String message) | ○
説明 | 指定された詳細メッセージを持つ新規例外を構築します。
3 | － | WebServiceException(java.lang.String message, java.lang.Throwable cause) | ○
説明 | 指定された詳細メッセージおよび原因を持つ新規例外を構築します。
4 | － | WebServiceException (java.lang.Throwable cause) | ○
説明 | 指定された原因および詳細メッセージを持つ新規例外を構築します。

（凡例）

－：戻り値の型がないことを示します。

○：CosminexusのJAX-WS機能でサポートしています。

15.5　メッセージコンテキストの使用

JAX-WS APIのサポート範囲内で，ハンドラおよびWebサービスクライアントからメッセージコンテキストにアクセスできます。

ハンドラの場合は，コールバックされるメソッド（handleMessageメソッドなど）のパラメタでメッセージコンテキストが渡されます。Webサービスクライアントの場合は，javax.xml.ws.BindingProviderインタフェースのgetRequestContextメソッド，およびgetResponseContextメソッドでメッセージコンテキストのコピーにアクセスできます。

JAX-WS APIについては，JAX-WS 2.1仕様を参照してください。また，CosminexusのJAX-WS機能でのJAX-WS APIのサポート範囲については，「15.1　インタフェースおよびクラスの一覧（JAX-WS）」を参照してください。CosminexusのJAX-WS機能では，JAX-WS 2.1仕様で定義された標準のプロパティ，およびベンダ固有のプロパティをサポートしています。

JAX-WS 2.1仕様の9章に記載されている標準のプロパティについては，参照だけサポートしています。変更した場合の動作はサポートしていません。

＜この節の構成＞

15.5.1　メッセージコンテキストのプロパティのサポート範囲

15.5.2　メッセージコンテキスト使用時の注意事項

15.5.1　メッセージコンテキストのプロパティのサポート範囲

メッセージコンテキストのプロパティのサポート範囲を次の表に示します。

表15-28　メッセージコンテキストのプロパティの一覧

項番 | プロパティ名 | 記載個所※1 | 必須※2 | サポート
Webサービスクライアント | ハンドラ
Webサービスクライアント側 | Webサービス側
out※3 | in※4 | out※5 | in※6 | in※7 | out※8
javax.xml.ws.handler.message
1 | .outbound※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △ | △ | △ | △
javax.xml.ws.binding.attachments
2 | .inbound※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △ | △ | △ | △
3 | .outbound※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △ | △ | △ | △
javax.xml.ws.reference
4 | .parameters※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △ | △ | △ | △
javax.xml.ws.wsdl
5 | .description※9，※17 | 9.4.1.1 | － | ×※9 | ×※9 | ×※10 | ×※10 | ×※10 | ×※10
6 | .service※9，※17 | 9.4.1.1 | － | ×※9 | ×※9 | △ | △ | △ | △
7 | .port※9，※17 | 9.4.1.1 | － | ×※9 | ×※9 | △ | △ | △ | △
8 | .interface※9，※17 | 9.4.1.1 | － | ×※9 | ×※9 | △ | △ | △ | △
9 | .operation※9，※17，※18 | 9.4.1.1 | － | ×※9 | △※18 | △ | △ | △ | △
javax.xml.ws.http.request
10 | .headers | 9.4.1.1 | ○ | ◎※19 | ×※9 | ◎※19 | △※11 | △ | △
11 | .method※9※10 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △ | △
12 | .querystring※9※10 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △ | △
13 | .pathinfo※9※10 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △※12 | △※12
javax.xml.ws.http.response
14 | .headers※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※13 | △ | △※13 | △※13
15 | .code※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※14 | △ | △ | △
javax.xml.ws.servlet
16 | .context※9※10 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △ | △
17 | .request※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △ | △
18 | .response※9 | 9.4.1.1 | ○ | ×※9 | ×※9 | △※11 | △※11 | △ | △
javax.xml.ws.service.endpoint
19 | .address※15 | 4.2.1.1 | ○ | ◎ | △ | ◎ | △ | △ | △
javax.xml.ws.security.auth
20 | .username | 4.2.1.1 | ○ | ◎ | △ | ◎ | △ | △ | △
21 | .password | 4.2.1.1 | ○ | ◎ | △ | ◎ | △ | △ | △
javax.xml.ws.session
22 | .maintain | 4.2.1.1 | ○ | ◎ | △ | ◎ | △ | △ | △
javax.xml.ws.soap.http.soapaction
23 | .use | 4.2.1.1 | － | ×※16 | ×※16 | ×※16 | ×※16 | ×※16 | ×※16
24 | .uri | 4.2.1.1 | － | ×※16 | ×※16 | ×※16 | ×※16 | ×※16 | ×※16
com.cosminexus.jaxws
25 | .connect.timeout |  |  | ◎ | △ | ◎ | △ | △ | △
26 | .request.timeout |  |  | ◎ | △ | ◎ | △ | △ | △

（凡例）

○：必須であることを示します。

－：必須でないことを示します。

◎：参照および変更できます。

△：参照だけできます。変更した場合の動作は保証されません。

×：参照および変更できません。

空欄：CosminexusのJAX-WS機能が提供するプロパティであるため，該当しないことを示します。

注※1

JAX-WS 2.1仕様で定義されている個所を示します。

注※2

JAX-WS 2.1仕様で必須かどうかを示します。

注※3

javax.xml.ws.BindingProvider#getRequestContextで取得できる要求コンテキストで，参照または変更できるかどうかを示します。

注※4

javax.xml.ws.BindingProvider#getResponseContextで取得できる要求コンテキストで，参照または変更できるかどうかを示します。

注※5

Webサービスクライアントに関連づけられたハンドラで，アウトバウンド時（要求メッセージを送信するとき）に，参照または変更できるかどうかを示します。

注※6

Webサービスクライアントに関連づけられたハンドラで，インバウンド時（応答メッセージを受信するとき）に，参照または変更できるかどうかを示します。

注※7

Webサービス実装クラスまたはプロバイダ実装クラスに関連づけられたハンドラで，インバウンド時（要求メッセージを受信する時）に，参照または変更できるかどうかを示します。

注※8

Webサービス実装クラスまたはプロバイダ実装クラスに関連づけられたハンドラで，アウトバウンド時（応答メッセージを送信するとき）に，参照または変更できるかどうかを示します。

注※9

「15.5.2(5)　WebサービスクライアントでのHANDLERスコープのメッセージコンテキストプロパティ」を参照してください。

注※10

常にnullが返されます。

注※11

「15.5.2(1)　Webサービスクライアント側のハンドラで操作しても意味のないメッセージコンテキストプロパティ」を参照してください。

注※12

「15.5.2(2)　パス情報」を参照してください。

注※13

「15.5.2(3)　HTTP応答ヘッダ」を参照してください。

注※14

「15.5.2(4)　HTTPステータスコード」を参照してください。

注※15

「15.5.2(7)　サービスエンドポイントのアドレスに指定するメッセージコンテキストのプロパティ」を参照してください。

注※16

「15.5.2(6)　SOAPActionヘッダに関連するメッセージコンテキストプロパティ」を参照してください。

注※17

「15.5.2(8)　WSDLに関連するメッセージコンテキストプロパティ」を参照してください。

注※18

「15.5.2(9)　WSDLオペレーションの名前に関連するメッセージコンテキストプロパティ」を参照してください。

注※19

HTTPレスポンス圧縮機能との連携時に使用するHTTPヘッダ「Accept-Encoding」，およびHTTPリクエストボディのgzip圧縮時に使用するHTTPヘッダ「Content-Encoding」の追加と参照だけできます。「Accept-Encoding」については，「10.18　HTTPレスポンス圧縮機能との連携」を参照してください。「Content-Encoding」については「10.17　HTTPリクエストボディのgzip圧縮」を参照してください。

15.5.2　メッセージコンテキスト使用時の注意事項

メッセージコンテキスト使用時の注意事項について説明します。

＜この項の構成＞

(1)　Webサービスクライアント側のハンドラで操作しても意味のないメッセージコンテキストプロパティ

(2)　パス情報

(3)　HTTP応答ヘッダ

(4)　HTTPステータスコード

(5)　WebサービスクライアントでのHANDLERスコープのメッセージコンテキストプロパティ

(6)　SOAPActionヘッダに関連するメッセージコンテキストプロパティ

(7)　サービスエンドポイントのアドレスに指定するメッセージコンテキストのプロパティ

(8)　WSDLに関連するメッセージコンテキストプロパティ

(9)　WSDLオペレーションの名前に関連するメッセージコンテキストプロパティ

(1)　Webサービスクライアント側のハンドラで操作しても意味のないメッセージコンテキストプロパティ

要求メッセージのHTTPメソッドのマップを保持するプロパティ（javax.xml.ws.http.request.methodプロパティなど）は，Webサービス側のハンドラで取得して意味のあるプロパティです。したがって，Webサービスクライアント側のハンドラでこのプロパティを参照した場合は常にnullが返されます。

(2)　パス情報

javax.xml.ws.http.request.pathinfoプロパティは常にnullが保持されます。

(3)　HTTP応答ヘッダ

応答メッセージのHTTPヘッダのマップを保持するjavax.xml.ws.http.response.headersプロパティは，インバウンド時にWebサービスクライアント側のハンドラで取得して意味のあるプロパティです。したがって，Webサービス側のハンドラ，またはWebサービスクライアント側のアウトバウンド処理のハンドラで参照した場合は，常にnullが返されます。

(4)　HTTPステータスコード

Webサービスクライアント側のアウトバウンドのハンドラは，HTTP通信が行われる前に処理されます。したがって，ハンドラからHTTPステータスコードを保持するjavax.xml.ws.http.response.codeプロパティを参照した場合は，常にnullが返されます。

(5)　WebサービスクライアントでのHANDLERスコープのメッセージコンテキストプロパティ

標準のメッセージコンテキストプロパティとしてAPPLICATIONスコープおよびHANDLERスコープがありますが，Webサービスクライアントからは，APPLICATIONスコープのメッセージコンテキストプロパティだけ参照できます。したがって，CosminexusのJAX-WS機能では，「15.5.1　メッセージコンテキストのプロパティのサポート範囲」の表で注※9が付けられたプロパティは，Webサービスクライアントでは使用できません。これらのプロパティを参照した場合の動作は保証されません。

(6)　SOAPActionヘッダに関連するメッセージコンテキストプロパティ

CosminexusのJAX-WS機能ではSOAPActionヘッダをサポートしていないため，javax.xml.ws.soap.http.soapaction.useプロパティとjavax.xml.ws.soap.http.soapaction.uriプロパティは使用できません。これらのプロパティを参照した場合の動作は保証されません。

(7)　サービスエンドポイントのアドレスに指定するメッセージコンテキストのプロパティ

サービスエンドポイントのアドレスを指定するjavax.xml.ws.service.endpoint.addressプロパティには，空白および空文字は設定できません。空白または空文字を設定した場合の動作は保証されません。javax.xml.ws.service.endpoint.addressプロパティのその他の指定値については，「14.2(3)　soap:address要素またはsoap12:address要素のlocation属性に指定できる値」を参照してください。

(8)　WSDLに関連するメッセージコンテキストプロパティ

ディスパッチベースのWebサービスクライアントおよびプロバイダベースのWebサービスではWSDLファイルがないので，WSDLに関連するメッセージコンテキストプロパティを参照した場合は常にnullが返ります。

(9)　WSDLオペレーションの名前に関連するメッセージコンテキストプロパティ

スタブベースのWebサービスクライアントでのjavax.xml.ws.wsdl.operationプロパティの参照は，javax.xml.ws.BindingProvider#getResponseContextで取得できる要求コンテキストだけでできます。javax.xml.ws.BindingProvider#getRequestContextで取得できる要求コンテキストで参照した場合は常にnullが返ります。また，javax.xml.ws.wsdl.operationプロパティに値を設定しても，送信するSOAPメッセージには影響を与えません。

16.　WS-RM 1.2機能のAPIと設定

この章では，WS-RM 1.2機能のAPIと設定について説明します。WS-RM 1.2機能については，「24.　WS-RM 1.2機能」を参照してください。

＜この章の構成＞

16.1　com.sun.xml.ws.Closeableクラス

16.2　WS-Policyによる設定

16.1　com.sun.xml.ws.Closeableクラス

com.sun.xml.ws.Closeableクラスのサポート範囲を次の表に示します。

表16-1　com.sun.xml.ws.Closeableクラスのメソッドの一覧

項番
戻り値の型
メソッド名／説明

1
void
close()

説明
シーケンスをクローズし，終了させるために，クライアント側でポートのオブジェクトをcom.sun.xml.ws.Closeable型にキャストして，close()メソッドを呼び出す必要があります。close()メソッドを呼び出したあとは，Webサービスメソッドを呼び出すことはできません。再度，通信したい場合は，ポートのオブジェクトを取得し直す必要があります。

例外

javax.xml.ws.WebServiceException：

close()メソッドを呼び出した後にWebサービスメソッドを使用した場合に発生します。

16.2　WS-Policyによる設定

WS-RM 1.2機能には，WS-RM Policyでの設定のほかに，WS-PolicyとしてWSDLに記述する独自の設定があります。ここではWSDLに追加するプロパティについて説明します。

WS-RM Policyの追加方法については，「24.4　WS-RM Policyの追加方法」を参照してください。

表16-2　WSDLに追加するプロパティ

項番
プロパティ
説明
単位
範囲
デフォルト値

1
<net35rmp:InactivityTimeout Milliseconds = "設定値"/>
シーケンスの有効期限を設定します。

設定した期間，通信されない場合

シーケンスの有効期限が切れ，シーケンスは自動的に終了します。

有効期限が切れたあとにメッセージを送信した場合

WebServiceExceptionの子クラスであるSequenceTerminatedException例外またはUnknownSequenceException例外が発生します。

有効期限が切れたあとにメッセージを受信した場合

SequenceTerminatedフォルトまたはUnknownSequenceフォルトを返信します。

通信を続ける場合

再度ポートのオブジェクトを取得し，シーケンスを生成し直す必要があります。

範囲外の値を指定した場合

警告メッセージを出力し，デフォルト値で動作します（KDJR16017-W）。

ミリ秒
1～9,223,372,036,854,775,807
600,000

2
<cwsrm:MaxMessageNumber value="設定値"/>
一つのシーケンスで扱える最大のメッセージ数を設定します。

設定したメッセージ数を超えてメッセージを送信した場合

WebServiceExceptionの子クラスであるMessageNumberRolloverException例外が発生します。

設定したメッセージ数を超えてメッセージを受信した場合

MessageNumberRolloverフォルトを返信します。

通信を続ける場合

既存のシーケンスを終了するため，ポートのオブジェクトをcom.sun.xml.ws.Closeableにキャストし，closeメソッドを呼び出します。その後，再度ポートのオブジェクトを取得し，シーケンスを生成し直す必要があります。

範囲外の値を指定した場合

警告メッセージを出力し，デフォルト値で動作します（KDJR16017-W）。

－
1～100,000
10,000

（凡例）

－：なし

シーケンスの有効期限を300,000ミリ秒（5分）に，シーケンスの最大メッセージ数を1,000に設定するWS-RM Policyの例を次に示します。

 <wsp:Policy wsu:Id="WSRM_policy">
   <wsp:ExactlyOne>
     <wsp:All>
       <wsrmp:RMAssertion>
         <wsp:Policy>
           <wsrmp:DeliveryAssurance>
             <wsp:Policy>
               <wsrmp:ExactlyOnce/>
             </wsp:Policy>
           </wsrmp:DeliveryAssurance>
         </wsp:Policy>
       </wsrmp:RMAssertion>
       <wsaw:UsingAddressing/>
       <net35rmp:InactivityTimeout Milliseconds="300000"/>
       <cwsrm:MaxMessageNumber value="1000"/>
     </wsp:All>
   </wsp:ExactlyOne>
 </wsp:Policy>

17.　WSDLインポート機能

この章では，WSDLのインポート機能について説明します。

＜この章の構成＞

17.1　WSDLインポート機能とは

17.2　インポートできるWSDL定義

17.3　wsdl:import要素の書式

17.1　WSDLインポート機能とは

WSDLインポート機能とは，wsdl:import要素を使用して，共通部品として別ファイルのWSDL定義を読み込む機能です。

WSDLインポート機能のイメージを次の図に示します。

図17-1　WSDLインポート機能のイメージ

17.2　インポートできるWSDL定義

インポート対象のWSDL定義の条件，およびインポート時の留意点について説明します。

＜この節の構成＞

(1)　インポート対象のWSDL定義の条件

(2)　複数のWSDL定義のインポート

(3)　WSDL定義の再帰的なインポート

(1)　インポート対象のWSDL定義の条件

インポート対象のWSDL定義は，次の条件を満たしている必要があります。

ルート要素にwsdl:definitionsが指定されていること。
ルート要素にwsdl:definitions以外の形式のファイルを指定した場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51200-E）。

WSDL定義にアクセス権限があること。
アクセス権限がないWSDL定義を指定した場合，JDKのエラーとなり，処理が終了されます。

インポート対象のWSDL定義の拡張子は任意です。

(2)　複数のWSDL定義のインポート

複数のWSDL定義を組み合わせてインポートできます。ただし，最初の開始点となるインポート元のWSDL定義に，wsdl:service要素を定義する必要があります。以降の階層では，wsdl:service要素以外の要素を組み合わせて，WSDL定義をインポートできます。wsdl:service要素が定義されていない場合の動作については，「14.1.16　wsdl:service要素」を参照してください。

WSDL定義の階層的なインポートの方法を，正しい場合の例および誤っている場合の例に分けて図に示します。

図17-2　WSDL定義の階層的なインポート（正しい場合の例）

図17-3　WSDL定義の階層的なインポート（誤っている場合の例）

(3)　WSDL定義の再帰的なインポート

WSDLインポート機能では，WSDL定義を再帰的にインポートできません。再帰的にインポートしようとしても，WSDL定義を読み込まないため，wsdl:import要素が無視されます。

WSDL定義の再帰的なインポートの例を次の図に示します。

図17-4　WSDL定義の再帰的なインポートの例

17.3　wsdl:import要素の書式

wsdl:import要素の書式例を次に示します。

<wsdl:import namespace="インポート対象のWSDL定義の名前空間名"
location="インポート対象のWSDL定義のロケーション"/>

wsdl:import要素の属性について，それぞれ説明します。

＜この節の構成＞

(1)　namespace属性（wsdl:import要素）

(2)　location属性（wsdl:import要素）

(1)　namespace属性（wsdl:import要素）

インポート対象のWSDL定義の名前空間名を指定します。

インポート元のWSDL定義に記述するwsdl:import要素のnamespace属性には，インポート対象のWSDL定義の名前空間名（wsdl:definitions要素のtargetNamespace属性）と同じ名前空間名を指定してください。

インポート元のWSDL定義の名前空間と，インポート対象のWSDL定義の名前空間の関係を次の表に示します。

表17-1　WSDL定義の名前空間の関係（インポート元／インポート対象）

項番
インポート元のWSDL定義
インポート対象のWSDL定義
条件
実行時の動作

1
wsdl:import要素のnamespace属性
wsdl:definitions要素のtargetNamespace属性
一致
正常終了します。

2
不一致
標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW51191-W）。
インポート対象のWSDL定義およびインポート元のWSDL定義の要素は，それぞれの名前空間に属します。

3
wsdl:definitions要素のtargetNamespace属性
一致
標準エラー出力とログに警告メッセージが出力され，処理が続行されます（KDJW51192-W）。インポート対象のWSDL定義およびインポート元のWSDL定義の要素は，同じ名前空間に属します。

4
不一致
正常終了します。

(2)　location属性（wsdl:import要素）

インポート対象のWSDL定義のロケーションを指定します。

location属性に指定する文字列の条件を次に示します。

URLの形式で相対パス，リモート，またはローカルにあるWSDLファイルを指定できます。

WARファイルに含まれるWSDLファイルは，メタデータとして発行されます（WSDLファイルを新たに生成する場合は除きます）。ただし，メタデータを発行するときに注意事項があります。メタデータを発行するときの注意事項については，「10.6(6)　WSDL定義またはXML Schemaをインポート／インクルードしている場合の注意」を参照してください。

RFC2396で規定される文字およびxsd:anyURIを満たす文字を使用してください。ただし，RFC2732（IPv6）は使用できません。

大文字と小文字は区別されません。

指定できる文字列の最大長の制限はありません。ただし，OSの制限を超えた場合は，エラーとなります。

location属性の記述例を次の表に示します。

表17-2　location属性の指定例（WSDLインポート機能）

項番 | 指定内容 | 指定例
1 | ローカルにあるWSDLファイルを相対パスで指定※1 | ./wsdl/input.wsdl
2 | ローカルにあるWSDLファイルをURL（file://～）で表現する絶対パスで指定※1※2 | file:///C:/tmp/wsdl/input.wsdl
3 | リモートにあるWSDLファイルをURL（http:～）で指定※3 | http://example.com:8080/fromjava/test?wsdl

注※1

WSDLファイルを相対パスまたは絶対パスで指定する場合は，正しいパスを指定してください。パスを間違えてWSDLファイルが見つからない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51197-EまたはKDJW51198-E）。

注※2

"C:/～"のようにドライブ指定で始まる絶対パスの文字列は指定できません。指定した場合，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51199-E）。

注※3

リモートのWSDLファイルをURLで指定する場合は，正しいURLを指定してください。パスを間違えて，WSDLファイルが見つからない場合は，標準エラー出力とログにエラーメッセージが出力され，処理が終了されます（KDJW51197-EまたはKDJW51198-E）。

18.　添付ファイル機能（wsi:swaRef形式）

添付ファイル機能を使用すると，テキストデータだけでなく，画像データや音声データなどをWebサービスで扱えます。

この章では，添付ファイル機能の概要，および添付ファイル機能を使用した場合のマッピング規則について説明します。

＜この章の構成＞

18.1　添付ファイル機能とは（wsi:swaRef形式）

18.2　添付ファイルのJavaインタフェース（wsi:swaRef形式）

18.3　添付ファイルのWSDL（wsi:swaRef形式）

18.4　添付ファイル付きSOAPメッセージ（wsi:swaRef形式）

18.5　添付ファイルのJavaインスタンスの生成と取得（wsi:swaRef形式）

18.1　添付ファイル機能とは（wsi:swaRef形式）

添付ファイル機能とは，SOAPメッセージにテキストや画像（バイナリデータ）などのファイルを添付した添付ファイル付きSOAPメッセージを送受信する機能です。

次に示す例を基に，添付ファイル機能の概要について説明します。

図18-1　添付ファイル機能を使用したバイナリデータの送受信

SOAPメッセージにファイルを添付する場合，Webサービスを呼び出すJavaメソッドの引数に，javax.activation.DataHandlerクラスを使用します。ファイルを添付したJavaソースは，送信側のJAX-WSエンジンによってSOAPメッセージにマーシャルされ，受信側のJAX-WSエンジンによってJavaソースにアンマーシャルされます。受信側のJAX-WSエンジンは，アンマーシャルされたJavaソースのメソッドの引数から，添付ファイルを取得します。

なお，この機能は，WS-I Attachments Profile - Version 1.0仕様に従っているため，wsi:swaRef形式のWSDLを使用します。また，SOAP Messages with Attachmentsプロトコルを使用しているため，添付ファイル付きSOAPメッセージはMIME Multipart/Related構造でエンコードされます。

SAAJ 1.3仕様のAPIを使用して添付ファイル付きSOAPメッセージを送受信する場合は，「14.5　SAAJ 1.3仕様のサポート範囲」を参照してください。

18.2　添付ファイルのJavaインタフェース（wsi:swaRef形式）

ここでは，Javaインタフェース内で添付ファイルを指定するJava型について説明します。

＜この節の構成＞

(1)　添付ファイルに使用できるJava型

(2)　添付ファイルを指定できる個所

(3)　javax.activation.DataHandler型に指定できる添付ファイル

(1)　添付ファイルに使用できるJava型

Javaインタフェースでの添付ファイルのJava型の使用可否を次の表に示します。

添付ファイルに使用できるJava型には，javax.xml.bind.annotation.XmlAttachmentRefアノテーションを付加する必要があります。添付ファイルに使用できない型にこのアノテーションを付加した場合，動作は保証されません。

表18-1　添付ファイルとしてのJava型の使用可否

項番 | Java型 | 使用可否
1 | javax.activation.DataHandler | ○
2 | javax.xml.ws.Holder<DataHandler> | ○
3 | javax.activation.DataHandlerの配列型 | △
4 | javax.xml.ws.Holder<DataHandler>の配列型 | ×
5 | javax.activation.DataHandlerを継承したデータ型 | ×

（凡例）

○：添付ファイルとして使用できます。

△：添付ファイルとして1次元配列だけ使用できます。多次元配列を使用した場合，動作は保証されません。

×：添付ファイルとして使用できません。

(2)　添付ファイルを指定できる個所

添付ファイルは，Javaインタフェースのメソッド引数，メソッド戻り値，およびユーザ定義型のフィールドで指定できます。ユーザ定義例外では指定できません。

Javaインタフェース内での添付ファイルの指定個所と，Java型の指定可否を次の表に示します。

表18-2　添付ファイルのJava型の指定個所と指定可否

項番 | Javaインタフェースでの指定個所 | 添付ファイルのJava型 | 指定可否
1 | メソッド引数 | javax.activation.DataHandler | ○
2 | javax.xml.ws.Holder<DataHandler> | ○
3 | javax.activation.DataHandlerの配列型 | △
4 | メソッド戻り値 | javax.activation.DataHandler | ○
5 | javax.xml.ws.Holder<DataHandler> | ×
6 | javax.activation.DataHandlerの配列型 | △
7 | ユーザ定義型のフィールド | javax.activation.DataHandler | ○
8 | javax.xml.ws.Holder<DataHandler> | ×
9 | javax.activation.DataHandlerの配列型 | △
10 | ユーザ定義例外のフィールド | javax.activation.DataHandler | ×
11 | javax.xml.ws.Holder<DataHandler> | ×
12 | javax.activation.DataHandlerの配列型 | ×

（凡例）

○：指定できます。

△：1次元配列を使用する場合だけ指定できます。多次元配列で指定した場合，動作は保証されません。

×：指定できません。

(3)　javax.activation.DataHandler型に指定できる添付ファイル

javax.activation.DataHandler型は，JavaBeans Activation Framework（JAF）の型であるため，任意のMIMEタイプの添付ファイルを指定できます。添付ファイルの拡張子と，デフォルトで設定されるMIMEタイプのマッピングについては，「18.4.2(3)　添付ファイルの拡張子とMIMEタイプのマッピング」を参照してください。

18.3　添付ファイルのWSDL（wsi:swaRef形式）

添付ファイル付きSOAPメッセージを使用する場合，WSDL上に添付ファイルを定義できます。ここでは，添付ファイルを使用する場合のWSDLの記述と，WSDLとJava型のマッピングについて説明します。

＜この節の構成＞

18.3.1　添付ファイル使用時のWSDLの記述（wsi:swaRef形式）

18.3.2　添付ファイルのJava型とWSDLのマッピング（wsi:swaRef形式）

18.3.3　WSDLから添付ファイルのJava型へのマッピング（wsi:swaRef形式）

18.3.1　添付ファイル使用時のWSDLの記述（wsi:swaRef形式）

WSDLで添付ファイルを扱う場合，wsi:swaRef形式で記述します。wsi:swaRef形式は，WSDLで添付ファイルを扱う形式としてWS-I Attachments Profile - Version 1.0で規定されています。

WS-I Attachments Profile - Version 1.0で規定された形式に基づいて，wsi:swaRef形式で記述したWSDLの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost"
 xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" ...>
 <wsdl:types>
   <schema elementFormDefault="qualified" targetNamespace="http://localhost"
     xmlns="http://www.w3.org/2001/XMLSchema">
     <import namespace="http://ws-i.org/profiles/basic/1.1/xsd"/>
     <element name="getUserData">
       <complexType>
         <sequence>
           <element name="in0" type="xsd:string"/>
           <element name="in1" type="wsi:swaRef"/>
         </sequence>
       </complexType>
     </element>
      ...
   </schema>
 </wsdl:types>
 <wsdl:message name="getUserDataRequest">
   <wsdl:part element="intf:getUserData" name="parameters"/>
 </wsdl:message>
 ...
 <wsdl:portType name="UserInfo">
   <wsdl:operation name="getUserData">
     <wsdl:input message="intf:getUserDataRequest" name="getUserDataRequest"/>
     ...
   </wsdl:operation>
 </wsdl:portType>
 ...
</wsdl:definitions>

この例では，getUserDataメソッドの引数（スキーマ定義のelement要素の型）に，添付ファイルを表すwsi:swaRef型を指定しています。

WSDLで添付ファイルを扱う場合の注意事項

swaRef型は，スキーマの要素の型（element要素のtype属性）に指定できます。属性の型（attribute要素のtype属性）に指定した場合，動作は保証されません。

swaRef型を指定しているXML Schemaでは，WSDLの例で示すように名前空間http://ws-i.org/profiles/basic/1.1/xsdをインポートする必要があります。インポートしていない場合，Cosminexus XML Processorのエラーが出力されます。
名前空間http://ws-i.org/profiles/basic/1.1/xsdをインポートするxsd:import要素のschemaLocation属性の形式と，使用可否を次の表に示します。

表18-3　xsd:import要素のschemaLocation属性の形式と使用可否（swaRef型の使用時）

項番 | schemaLocation属性 | 使用可否
1 | 指定しない | 使用できます。※1
2 | http://wsi.org/profiles/basic/1.1/swaref.xsd | 使用できます。※1
3 | 項番1および項番2以外 | 使用できません。※2

注※1

cjwsimportコマンドは，CosminexusのJAX-WS機能の内部で保持する名前空間http://ws-i.org/profiles/basic/1.1/xsdのスキーマを参照します。

注※2

cjwsimportコマンドは，schemaLocation属性で指定した場所にあるスキーマを参照します。ただし，CosminexusのJAX-WS機能で内容を保証できないスキーマが参照されるため，サポート対象外となります。

ユーザ定義例外で添付ファイルは使用できないため，wsdl:fault要素から参照するスキーマの要素の型（element要素のtype属性）にswaRef型は指定できません。wsdl:fault要素から参照するスキーマの要素の型にswaRef型を指定した場合，動作は保証されません。

18.3.2　添付ファイルのJava型とWSDLのマッピング（wsi:swaRef形式）

添付ファイルのJava型からWSDLへのマッピング規則を次に示します。

添付ファイルのJava型からWSDLへのマッピング規則

添付ファイルのJava型は，swaRef型にマッピングされます。

wsdl:definitions要素で，swaRef型の名前空間が宣言されます。

swaRef型を指定しているXML Schemaで，swaRef型の名前空間がインポートされます。

添付ファイルのJava型とWSDLのマッピング例を次の図に示します。上記の「添付ファイルのJava型からWSDLへのマッピング規則」に示した番号と，次の図に示す番号は対応しています。

図18-2　添付ファイルのJava型からWSDLへのマッピング例

18.3.3　WSDLから添付ファイルのJava型へのマッピング（wsi:swaRef形式）

WSDLから添付ファイルのJava型へのマッピング規則を次に示します。

WSDLから添付ファイルのJava型へのマッピング規則

WSDLのswaRef型は，添付ファイルのJava型へマッピングされます。

WSDLと添付ファイルのJava型のマッピング例を次の図に示します。上記の「WSDLから添付ファイルのJava型へのマッピング規則」に示した番号と，次の図に示す番号は対応しています。

図18-3　WSDLから添付ファイルのJava型へのマッピング例

18.4　添付ファイル付きSOAPメッセージ（wsi:swaRef形式）

添付ファイル付きSOAPメッセージは，SOAP Messages with Attachmentsプロトコルを使用し，MIME Multipart/Related構造でエンコードされます。

添付ファイル付きSOAPメッセージの構造を次の図に示します。

図18-4　添付ファイル付きSOAPメッセージの構造

添付ファイル付きSOAPメッセージの各部の説明を次の表に示します。

表18-4　添付ファイル付きSOAPメッセージの各部の説明

各部の名称
説明

HTTPヘッダ
HTTPプロトコルに依存するヘッダ情報です。

HTTPヘッダとHTTPボディの境界文字列
HTTPヘッダとHTTPボディの境界を示す文字列です。

HTTPボディ
送信するメッセージを記述します。
ルートパートおよび添付ファイルパートから構成されます。

┣
MIMEパートの境界文字列
各MIMEパートの境界を示す文字列です。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
ルートパート
┃
┃
メッセージ本体を記述するパートです。
MIMEヘッダとMIMEボディから構成され，必ず1個定義します。

┣
MIMEヘッダ
ルートパートのヘッダ情報です。

┣
┃
MIMEヘッダとMIMEボディ間の境界文字列
ルートパートのMIMEヘッダとMIMEボディ間の境界を示す文字列です。

┗
MIMEボディ
メッセージ本体を記述します。

┗
SOAPエンベロープ
SOAPエンベロープを記述します。

┣
SOAPヘッダ
SOAPメッセージのヘッダ情報を記述します。

┗
SOAPボディ
SOAPメッセージの本文（XML）を記述します。

┣
MIMEパートの境界文字列
各MIMEパートの境界を示す文字列です。

┣
┃
┃
┃
┃
┃
┃
┃
┃
添付ファイルパート
┃
┃
添付ファイルの内容を記述するパートです。
MIMEヘッダとMIMEボディから構成され，0個以上定義します。

┣
MIMEヘッダ
添付ファイルパートのヘッダ情報です。

┣
┃
MIMEヘッダとMIMEボディ間の境界文字列
添付ファイルパートのMIMEヘッダとMIMEボディ間の境界を示す文字列です。

┗
MIMEボディ
添付ファイルの内容（バイナリデータ）を記述します。

┗
MIMEパートの終端文字列
MIMEパートの終端を表す文字列です。

＜この節の構成＞

18.4.1　添付ファイルからSOAPメッセージへのマッピング（wsi:swaRef形式）

18.4.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（wsi:swaRef形式）

18.4.3　SOAPメッセージから添付ファイルへのマッピング（wsi:swaRef形式）

18.4.1　添付ファイルからSOAPメッセージへのマッピング（wsi:swaRef形式）

添付ファイルからSOAPメッセージへマッピングするときの設定値について説明します。マッピング規則については，「18.4.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（wsi:swaRef形式）」と合わせて確認してください。

＜この項の構成＞

(1)　HTTPヘッダ

(2)　HTTPボディ

(3)　HTTPヘッダとHTTPボディの境界文字列

(1)　HTTPヘッダ

添付ファイル使用時に，HTTPヘッダのフィールドおよびパラメタに設定される値を次の表に示します。

表18-5　HTTPヘッダのフィールドおよびパラメタの設定値

項番
フィールド名
パラメタ名
設定値

1
Content-Type
－
"multipart/related"が設定されます。

2
type

SOAP 1.1仕様

"text/xml"が設定されます。

SOAP 1.2仕様

"application/soap+xml"が設定されます。

3
boundary
MIMEパートの境界文字列が設定されます。

（凡例）

－：Content-Typeに直接設定されることを示します。

1個以上の非ルートMIMEパートを列挙している場合（添付ファイル付きSOAPメッセージを送受信する場合）は，Content-Typeにmultipart/relatedが設定されます。MIMEパートがない場合，SOAP 1.1仕様のときは"text/xml"が，SOAP 1.2仕様のときは"application/soap+xml"が設定されます。

(2)　HTTPボディ

HTTPボディは，ルートパート，添付ファイルパート，および各パートの境界文字列で構成されます。添付ファイル使用時に，各パートおよび境界文字列に生成される内容，および設定される値を示します。

(a)　ルートパートのMIMEヘッダ

添付ファイル使用時に，ルートパートのContent-Typeフィールドに設定される値を次の表に示します。

表18-6　ルートパートのフィールドの設定値

項番
フィールド名
設定値

1
Content-Type

SOAP 1.1仕様

"text/xml"が設定されます。

SOAP 1.2仕様

"application/soap+xml"が設定されます。

2
Content-Id
"グローバルに一意な値"＋"@"＋"jaxws.cosminexus.com"が設定されます。

(b)　ルートパートのMIMEボディ

添付ファイルを使用する場合，ルートパートのMIMEボディには，SOAPエンベロープがそのまま格納されます。SOAPエンベロープ内のSOAPボディから添付ファイルを参照する方法として，CID URLスキームが使用されます。

CID URLスキームの形式を次に示します。

"cid:"＋<添付ファイルパートのContent-Id>

(c)　ルートパートのMIMEヘッダとMIMEボディの境界文字列

ルートパートのMIMEヘッダとMIMEボディ間には，境界文字列として"CRLF"が設定されます。

(d)　添付ファイルパートのMIMEヘッダ

添付ファイル使用時に，添付ファイルパートのMIMEヘッダに設定される値を次の表に示します。

表18-7　添付ファイルパートのMIMEヘッダの設定値

項番 | フィールド名 | パラメタ名 | 設定値
1 | Content-Type | － | 添付ファイルの種類に応じたMIMEタイプ※1が設定されます。
2 | charset | DataHandlerオブジェクト生成時に指定した文字コード※2が設定されます。
3 | Content-Transfer-Encoding | なし | "binary"が設定されます。
4 | Content-Id | なし | "グローバルに一意な値"＋"@"＋"jaxws.cosminexus.com"が設定されます。

（凡例）

－：Content-Typeに直接設定されることを示します。

注※1

Content-Typeフィールドの設定値は，DataHandlerオブジェクトの生成方法によって，次のように異なります。

DataHandler(DataSource)コンストラクタで生成する場合
FileDataSourceの場合，入力となる添付ファイルの拡張子から，JAFによって決定されたMIMEタイプがContent-Typeフィールド値として設定されます。添付ファイルの拡張子とMIMEタイプのマッピングについては，「18.4.2(3)　添付ファイルの拡張子とMIMEタイプのマッピング」を参照してください。

DataHandler(Object, String)コンストラクタで生成する場合
DataHandlerオブジェクト生成時に，コンストラクタの第2引数に指定した内容（MIMEタイプ）がそのままContent-Typeフィールド値として設定されます。

注※2

例えば，DataHandlerオブジェクトの生成を次のように生成した場合，Content-Typeのcharsetには，第2引数に指定したcharsetパラメタ値「Shift_JIS」が設定されます。

DataHandler dhandler = new DataHandler ("あいうえお", "text/plain; charset=Shift_JIS");

添付ファイルのJava型であるjavax.activation.DataHandler型は，JavaBeans Activation Framework（JAF）の型であるため，任意のMIMEタイプの添付ファイルを指定できます。FileDataSourceを使用してDataHandlerオブジェクトを生成する場合の添付ファイルの拡張子と，デフォルトで設定されるMIMEタイプの対応については，「18.4.2(3)　添付ファイルの拡張子とMIMEタイプのマッピング」を参照してください。

(e)　添付ファイルパートのMIMEボディ

添付ファイルパートのMIMEボディには，添付ファイルの内容を表すバイナリデータが格納されます。

(f)　添付ファイルパートのMIMEヘッダとMIMEボディの境界文字列

添付ファイルパートのMIMEヘッダとMIMEボディの境界文字列は，ルートパートの場合と同様に，境界文字列として"CRLF"が設定されます。

(g)　各MIMEパート間の境界文字列

ルートパートと添付ファイルパート間，および添付ファイルパート間には，境界文字列として次の文字列が設定されます。

"CRLF"＋"--"＋"<HTTPヘッダのboundaryパラメタの値>"

(h)　MIMEパートの終端文字列

MIMEパートの終端には，終端文字列として次の文字列が設定されます。

"CRLF"＋"--"＋"<HTTPヘッダのboundaryパラメタの値>"＋"--"

(3)　HTTPヘッダとHTTPボディの境界文字列

HTTPヘッダとHTTPボディ間には，境界文字列として"CRLF"が設定されます。

18.4.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（wsi:swaRef形式）

添付ファイルからSOAPメッセージをマッピングするときの注意事項について説明します。

＜この項の構成＞

(1)　MIMEパートの記述順序

(2)　ルートパートから添付ファイルへのマッピング

(3)　添付ファイルの拡張子とMIMEタイプのマッピング

(4)　添付ファイルのデータサイズと添付ファイルパートへのマッピング

(1)　MIMEパートの記述順序

MIMEパートは1個のルートパートと0個以上の添付ファイルパートで構成されます。

ルートパートは，MIMEパートの先頭に記述されます。ルートパートのあとに，添付ファイルパートが記述されます。

添付ファイルパートでは，Javaインタフェースで指定された引数や戻り値がマッピングされます。Javaインタフェースの指定内容と添付ファイルパートでの記述順序の対応を次の表に示します。

表18-8　Javaインタフェースの指定内容と添付ファイルパートの記述順序

項番
Javaインタフェースでの指定個所
添付ファイルパートの記述順序

1
メソッド引数
メソッド引数に指定された順に記述されます。

2
メソッド戻り値
添付ファイルパートの先頭に記述されます。

3
配列型
配列内の要素順に記述されます。

4
ユーザ定義型
ユーザ定義型内での指定順に記述されます。
ユーザ定義型の中で指定したユーザ定義型で，添付ファイルのJava型を指定するときは，深さ優先順で添付ファイルパートが記述されます。

Javaインタフェースと添付ファイルパートのマッピング例を示します。

図18-5　Javaインタフェースと添付ファイルパートのマッピング例

(2)　ルートパートから添付ファイルへのマッピング

ルートパートのSOAPボディに記述されるCID URLスキームには，対応する添付ファイルパートのContent-Idが記述されます。Content-Idによって，ルートパートから対応する添付ファイルパートが参照されます。

添付ファイル付きSOAPメッセージの一部を示します。太字部分がCID URLスキームと，対応する添付ファイルパートのContent-Idになります。

--uuid:73a28380-5de5-45e8-af15-c879e65d62a0
Content-Type: text/xml

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <getUserData xmlns="http://localhost">
     <in0>cid:d10ed73c-e9b7-418e-8201-ba920cccb214@jaxws.cosminexus.com</in0>
   </getUserData>
 </S:Body>
</S:Envelope>

--uuid:73a28380-5de5-45e8-af15-c879e65d62a0
Content-Id:<d10ed73c-e9b7-418e-8201-ba920cccb214@jaxws.cosminexus.com>
Content-Type: text/plain
Content-Transfer-Encoding: binary

[添付データ]
--uuid:73a28380-5de5-45e8-af15-c879e65d62a0--

(3)　添付ファイルの拡張子とMIMEタイプのマッピング

添付ファイルの拡張子と，デフォルトで設定されるMIMEタイプのマッピングを次の表に示します。

表18-9　添付ファイルの拡張子とMIMEタイプの対応表

項番 | 添付ファイルの拡張子 | 設定されるMIMEタイプ
1 | html，htm | text/html
2 | txt，text | text/plain
3 | gif，GIF | image/gif
4 | ief | image/ief
5 | jpeg，jpg，jpe，JPG | image/jpeg
6 | tiff，tif | image/tiff
7 | xwd | image/x-xwindowdump
8 | ai，eps，ps | application/postscript
9 | rtf | application/rtf
10 | tex | application/x-tex
11 | texinfo，texi | application/x-texinfo
12 | t，tr，roff | application/x-troff
13 | au | audio/basic
14 | midi，mid | audio/midi
15 | aifc | audio/x-aifc
16 | aif，aiff | audio/x-aiff
17 | wav | audio/x-wav
18 | mpeg，mpg，mpe | video/mpeg
19 | qt，mov | video/quicktime
20 | avi | video/x-msvideo

この表にない拡張子を指定した場合，MIMEタイプは「application/octet-stream」が設定されます。

(4)　添付ファイルのデータサイズと添付ファイルパートへのマッピング

Javaインタフェースに指定する添付ファイルのデータサイズがnullの場合と，0バイト以上のデータがある場合では，添付ファイルパートへのマッピング方法が異なります。それぞれの場合のマッピングについて説明します。

(a)　添付ファイルのデータサイズがnullの場合

添付ファイルのデータサイズがnullの場合，添付ファイルパートにマッピングされません。MIMEパートを生成しないで，SOAPエンベロープだけが記述されます。また，SOAPボディの該当する引数の要素には，空の要素が指定されます。

添付ファイルのデータサイズがnullの場合のマッピング例を示します。

Webサービス呼び出しプログラム

...
UserInfoService service = new UserInfoService();
UserInfo impl = service.getUserInfo();

result = impl.getUserData( null );
...

SOAPメッセージ

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <getUserData xmlns="http://localhost">
   </getUserData>
 </S:Body>
</S:Envelope>

(b)　添付ファイルのデータサイズが0バイト以上の場合

添付ファイルのデータサイズが0バイト以上の場合，添付ファイルパートにマッピングされます。この場合，ルートパートと添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルを指定している場合は，添付ファイルパートは複数記述されます。ただし，0バイトの場合は，添付ファイルパート内のMIMEボディは空となります。

18.4.3　SOAPメッセージから添付ファイルへのマッピング（wsi:swaRef形式）

JAX-WSエンジンは，受信した添付ファイル付きSOAPメッセージがWS-I Attachments Profile - Version 1.0仕様に従っている場合だけ，添付ファイル付きのSOAPメッセージから添付ファイルデータへのマッピングは保証されます。それ以外のSOAPメッセージを受信した場合の動作は保証されません。

18.5　添付ファイルのJavaインスタンスの生成と取得（wsi:swaRef形式）

添付ファイルをプログラムで扱うには，JAFのjavax.activationパッケージを使用する必要があります。ここでは，javax.activationパッケージを使用して，添付ファイルのインスタンスを生成する方法，およびデータを取得する方法について説明します。

JAFの仕様については，JAFのAPI仕様を参照してください。

＜この節の構成＞

18.5.1　添付ファイルのインスタンスを生成する方法（wsi:swaRef形式）

18.5.2　添付ファイルデータを取得する方法（wsi:swaRef形式）

18.5.1　添付ファイルのインスタンスを生成する方法（wsi:swaRef形式）

添付ファイルのオブジェクトとして，javax.activation.DataHandlerオブジェクトを生成します。javax.activation.DataHandlerクラスのコンストラクタを次の表に示します。

表18-10　javax.activation.DataHandlerクラスのコンストラクタ

項番
利用ケース
コンストラクタ
引数の説明

1
ファイルを添付する
DataHandler(javax.activation.DataSource ds)
［第1引数］
javax.activation.DataSourceオブジェクトです。
javax.activation.FileDataSourceクラスのオブジェクトを指定できます。

2
メモリ上のオブジェクトを添付する
DataHandler(java.lang.Object obj, java.lang.String mimeType)
［第1引数］
Javaオブジェクトです。
［第2引数］
オブジェクトのMIMEタイプです。
指定できるMIMEタイプについては，「18.4.2(3)　添付ファイルの拡張子とMIMEタイプのマッピング」を参照してください。

添付ファイルとして送信するオブジェクトによって，javax.activation.DataHandlerオブジェクトを生成する方法が異なります。送信するオブジェクトごとに，生成する方法を示します。

＜この項の構成＞

(1)　存在するファイルを添付ファイルとして送信する方法

(2)　Javaオブジェクトを添付ファイルとして送信する方法

(3)　java.lang.Stringオブジェクトを添付ファイルとして送信する方法

(1)　存在するファイルを添付ファイルとして送信する方法

すでに存在するファイルを添付して送信する場合の手順を示します。

javax.activation.FileDataSourceオブジェクトを生成します。
送信する添付ファイルのファイルパスを引数に指定して，javax.activation.FileDataSourceオブジェクトを生成します。

javax.activation.FileDataSource fdSource =
new javax.activation.FileDataSource("/tmp/sample.jpg");

javax.activation.DataHandlerオブジェクトを生成します。
javax.activation.FileDataSourceオブジェクトを引数に指定して，javax.activation.DataHandlerオブジェクトを生成します。

javax.activation.DataHandler dhandler =
new javax.activation.DataHandler(fdSource);

(2)　Javaオブジェクトを添付ファイルとして送信する方法

Javaオブジェクトを添付ファイルとして送信する場合の手順を示します。

Javaオブジェクトを生成します。
ここでは，添付ファイルとして送信するjava.awt.Imageオブジェクトを生成します。

java.awt.Image attachments =
Toolkit.getDefaultToolkit().createImage("sample.jpg");

javax.activation.DataHandlerオブジェクトを生成します。
Javaオブジェクトと，Javaオブジェクトに対応するMIMEタイプを引数に指定し，javax.activation.DataHandlerオブジェクトを生成します。

javax.activation.DataHandler dhandler = new
javax.activation.DataHandler(attachments, "image/jpeg");

(3)　java.lang.Stringオブジェクトを添付ファイルとして送信する方法

java.lang.Stringオブジェクトを添付ファイルとして送信する場合の手順を示します。

java.lang.Stringオブジェクトを生成します。
添付ファイルとして送信する文字列のjava.lang.Stringオブジェクトを生成します。

java.lang.String attachments = new java.lang.String("あいうえお");

javax.activation.DataHandlerオブジェクトを生成します。
java.lang.StringオブジェクトとMIMEタイプを引数に指定し，javax.activation.DataHandlerオブジェクトを生成します。java.lang.Stringオブジェクトは，charsetパラメタに指定された文字コードでエンコードされます。

javax.activation.DataHandler dhandler = new javax.activation.DataHandler(attachments, "text/plain; charset=UTF-8");

javax.activation.DataHandler(Object, String)コンストラクタの第2引数の記述形式を示します。

MIMEタイプ＋";"＋"charset"＋"="＋文字コード

注意事項

javax.activation.DataHandler(Object, String)コンストラクタの第1引数に，日本語を含むjava.lang.Stringオブジェクトを指定する場合は，第2引数にそのMIMEタイプとcharsetパラメタで適切な文字コードを指定する必要があります。

charsetパラメタを指定しない場合，添付ファイルの文字列がデフォルトの文字コード（US-ASCII）でエンコードされます。そのため，添付ファイルの文字列がUS-ASCII以外の文字を含んでいる場合，不正な添付ファイルが送信されます。添付ファイルとしてStringオブジェクトを送信する場合に指定できます。JPEGなどのバイナリデータを送信する場合は指定できません。

charsetパラメタでは，大文字／小文字は区別されません。また，JDKがサポートしていない文字コードおよび空文字は指定できません。

18.5.2　添付ファイルデータを取得する方法（wsi:swaRef形式）

添付ファイルのデータを取得する方法について説明します。各例に示す"dhandler"は，受信したjavax.activation.DataHandlerオブジェクトを表します。

＜この項の構成＞

(1)　添付ファイルをjava.io.InputStreamオブジェクトとして取得する方法

(2)　添付ファイルをjavax.activation.DataSourceオブジェクトとして取得する方法

(3)　添付ファイルをJavaオブジェクトとして取得する方法

(4)　添付ファイルをjava.lang.Stringオブジェクトとして取得する方法

(1)　添付ファイルをjava.io.InputStreamオブジェクトとして取得する方法

受信した添付ファイルをjava.io.InputStreamオブジェクトとして取得する場合，受信したjavax.activation.DataHandlerオブジェクトからgetInputStreamメソッドでjava.io.InputStreamオブジェクトを取得します。

java.io.InputStream stream = dhandler.getInputStream();

(2)　添付ファイルをjavax.activation.DataSourceオブジェクトとして取得する方法

受信した添付ファイルをjavax.activation.DataSourceオブジェクトとして取得する場合，受信したjavax.activation.DataHandlerオブジェクトからgetDataSourceメソッドで関連づけられたjavax.activation.DataSourceオブジェクトを取得します。

javax.activation.DataSource datasource = dhandler.getDataSource();

(3)　添付ファイルをJavaオブジェクトとして取得する方法

受信した添付ファイルをJavaオブジェクトとして取得する場合の手順を示します。ここでは，java.awt.Imageオブジェクトを取得する場合の例を示します。

添付ファイルのデータをオブジェクトとして取得します。
受信したjavax.activation.DataHandlerオブジェクトからgetContentメソッドでオブジェクトを取得します。

java.lang.Object content = dhandler.getContent();

添付ファイルのMIMEタイプを取得します。
受信したjavax.activation.DataHandlerオブジェクトに対して，getContentTypeメソッドを実行します。getContentTypeメソッドを実行することで，添付ファイルのMIMEタイプを取得できます。

java.lang.String mimetype = dhandler.getContentType();

（取得したmimetypeの内容）image/jpeg

オブジェクトを適切な型にキャストします。
添付ファイルのMIMEタイプに応じて，オブジェクトを適切な型にキャストします。

java.awt.Image attachment = (java.awt.Image) content;

(4)　添付ファイルをjava.lang.Stringオブジェクトとして取得する方法

受信した添付ファイルをJavaオブジェクトとして取得する場合の手順を示します。

添付ファイルのデータをオブジェクトとして取得します。
受信したjavax.activation.DataHandlerオブジェクトからgetContentメソッドでオブジェクトを取得します。

java.lang.Object content = dhandler.getContent();

添付ファイルのMIMEタイプを取得します。
受信したjavax.activation.DataHandlerオブジェクトに対し，getContentTypeメソッドを実行します。getContentTypeメソッドを実行することで添付ファイルのMIMEタイプおよび文字コードを取得できます。

java.lang.String mimetype = dhandler.getContentType();

（取得したmimetypeの内容）text/plain; charset=UTF-8

オブジェクトを適切な型にキャストします。
添付ファイルのMIMEタイプに応じて，オブジェクトを適切な型にキャストします。

java.lang.String attachment = (java.lang.String) content;

19.　SEIを起点とした開発の例（wsi:swaRef形式の添付ファイル使用時）

この章では，添付ファイルを使用して，SEIを起点としたWebサービスを開発する場合の例を説明します。

＜この章の構成＞

19.1　開発例の構成（SEI起点・wsi:swaRef形式の添付ファイル）

19.2　開発例の流れ（SEI起点・wsi:swaRef形式の添付ファイル）

19.3　Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

19.4　デプロイと開始の例（SEI起点・wsi:swaRef形式の添付ファイル）

19.5　Webサービスクライアントの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

19.6　Webサービスの実行例（SEI起点・wsi:swaRef形式の添付ファイル）

19.1　開発例の構成（SEI起点・wsi:swaRef形式の添付ファイル）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。開発するWebサービスは，添付ファイルを使用します。

開発するWebサービスの概要および利用する情報について説明します。

開発例の概要

社員番号，顔写真，社員名，所属というユーザ情報を管理し，Webサービスクライアントからの入力に対して，処理結果を返すWebサービスを新規に開発します。

Webサービスクライアントからの要求情報およびサーバからの応答情報を次の表に示します。

表19-1　Webサービスクライアントからの要求情報

情報名 | Javaデータ型
社員番号 | java.lang.String
顔写真 | javax.activation.DataHandler

表19-2　サーバからの応答情報

情報名 | Javaデータ型
登録確認メッセージ | java.lang.String
名前 | java.lang.String
所属 | java.lang.String

サーバからの応答情報は，ユーザ定義型クラスのUserDataクラスで保持されます。

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表19-3　カレントディレクトリの構成（SEI起点・添付ファイル）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥attachments
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「19.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「19.3.1　Webサービス実装クラスを作成する」および「19.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「19.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「19.3.2　Javaソースを生成する」で使用します。

┣
attachments.ear
「19.3.5　EARファイルを作成する」で作成します。

┗
attachments.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「19.5.1　サービスクラスを生成する」および「19.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「19.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
image.jpg
Webサービスクライアントで使用するJPEGファイルで使用します。

┣
┃
┃
usrconf.cfg
「19.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「19.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

19.2　開発例の流れ（SEI起点・wsi:swaRef形式の添付ファイル）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（19.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（19.3.2）

web.xmlを作成する（19.3.3）

application.xmlを作成する（19.3.4）

EARファイルを作成する（19.3.5）

デプロイと開始

EARファイルをデプロイする（19.4.1）

Webサービスを開始する（19.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（19.5.1）

Webサービスクライアントの実装クラスを作成する（19.5.2）

Webサービスクライアントの実装クラスをコンパイルする（19.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（19.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（19.6.2）

Webサービスクライアントを実行する（19.6.3）

19.3　Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

ここでは，SEIを起点とした場合のWebサービス（添付ファイルを使用）の開発例を説明します。

＜この節の構成＞

19.3.1　Webサービス実装クラスを作成する

19.3.2　Javaソースを生成する

19.3.3　web.xmlを作成する

19.3.4　application.xmlを作成する

19.3.5　EARファイルを作成する

19.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

Webサービス実装クラスの作成例を次に示します。

package com.sample;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlAttachmentRef;
import javax.activation.DataHandler;

@javax.jws.WebService(serviceName="UserInfoService",targetNamespace="http://sample.com")
public class UserInfoImpl{

   public UserData getUserData( String in0,
       @XmlAttachmentRef javax.activation.DataHandler in1 )
   throws UserInfoException{
       //社員情報への顔写真の登録処理
       ・・・・

       UserData userdata = new UserData();
       //登録した社員の名前と所属を設定
       if ( in0.equals("1") )
       {
           userdata.setName("Hitachi Taro");
           userdata.setSection("The personnel section");
       } if ( ・・・・) {
           ・・・・・
       } ・・・・

       //登録確認メッセージを設定
       if ( in1 == null )
       {
           userdata.setMessage("Failure(no image).");
       } else {
           userdata.setMessage("Success.");
       }
       return userdata;
   }

}

作成したUserInfoImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥attachments¥server¥src¥com¥sample¥ディレクトリに保存します。

また，com.sample.UserInfoImplで使用しているユーザ定義型クラスcom.sample.UserDataを作成します。通常，ユーザ定義型クラスの作成は任意ですが，ここではユーザ定義型クラスを作成します。

ユーザ定義型クラスの作成例を次に示します。

package com.sample;

public class UserData{

   private java.lang.String message;
   private java.lang.String name;
   private java.lang.String section;

   public UserData(){
   }

   public java.lang.String getMessage() {
       return this.message;
   }

   public void setMessage(java.lang.String message) {
       this.message = message;
   }

   public java.lang.String getName() {
       return this.name;
   }

   public void setName(java.lang.String name) {
       this.name = name;
   }

   public java.lang.String getSection() {
       return this.section;
   }

   public void setSection(java.lang.String section) {
       this.section = section;
   }
}

作成したUserInfoImpl.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥attachments¥server¥src¥com¥sample¥ディレクトリに保存します。

またcom.sample.UserInfoImplでスローしている例外クラスcom.sample.UserInfoExceptionを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。

package com.sample;

public class UserInfoException extends Exception {
   String detail;

   public UserInfoException (String message, String detail) {
       super (message);
       this.detail = detail;
   }

   public String getDetail () {
       return detail;
   }
}

作成したUserInfoException.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥attachments¥server¥src¥com¥sample¥ディレクトリに保存します。

19.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥attachments¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥attachments¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

<HNTRLib2インストールディレクトリ>の部分は次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

正常に終了すると，c:¥temp¥jaxws¥works¥attachments¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。

生成物の一覧を次の表に示します。

表19-4　Javaソース生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | getUserDataメソッドに対応するリクエストbeanです。
GetUserDataResponse.java | getUserDataメソッドに対応するレスポンスbeanです。
UserInfoExceptionBean.java | UserInfoExceptionに対応するフォルトbeanです。

19.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;fromjava&quot;</description>
 <display-name>Sample_web_service_fromjava</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/UserInfoService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥attachments¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

19.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;fromjava&quot;</description>
 <display-name>Sample_application_fromjava</display-name>
 <module>
   <web>
     <web-uri>attachments.war</web-uri>
     <context-root>attachments</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥attachments¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

19.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥server¥
> jar cvf attachments.war .¥WEB-INF
> jar cvf attachments.ear .¥attachments.war .¥META-INF¥application.xml

正常に終了すると，c:¥temp¥jaxws¥works¥attachments¥server¥ディレクトリにattachments.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

19.4　デプロイと開始の例（SEI起点・wsi:swaRef形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

19.4.1　EARファイルをデプロイする

19.4.2　Webサービスを開始する

19.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f attachments.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

19.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_fromjava

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

19.5　Webサービスクライアントの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

19.5.1　サービスクラスを生成する

19.5.2　Webサービスクライアントの実装クラスを作成する

19.5.3　Webサービスクライアントの実装クラスをコンパイルする

19.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/attachments/UserInfoImplService?wsdl

正常に終了すると，c:¥temp¥jaxws¥works¥attachments¥client¥src¥com¥sample¥ディレクトリにJavaソースが生成されます。

生成物の一覧を次に示します。

表19-5　サービスクラス生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | WSDL定義の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
GetUserDataResponse.java | WSDL定義の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
UserData.java | UserDataに対応するJavaBeanクラスです。
UserInfoImpl.java | WSDL定義の「サービス」に対応するSEIです。
UserInfoService.java | サービスクラスです。
UserInfoException.java | UserInfoExceptionに対応するJavaBeanクラスです。
UserInfoException_Exception.java | フォルトbeanのラッパ例外クラスです。

19.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import java.io.File;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import com.sample.UserInfoImpl;
import com.sample.UserData;
import com.sample.UserInfoService;
import com.sample.UserInfoException_Exception;

public class TestClient {
   public static void main( String[] args ) {
       try {
           //DataHandlerオブジェクト生成
           File imagefile = new File("image.jpg");
           FileDataSource fdSource = new FileDataSource(imagefile);
           DataHandler dhandler = new DataHandler(fdSource);

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort();

           UserData userdata = port.getUserData( "1", dhandler );

           System.out.print( "[RESULT] " + userdata.getMessage() );
System.out.println( " Name:" + userdata.getName()
+ ", Section:" + userdata.getSection() );
       }
       catch( UserInfoException_Exception e ){
           e.printStackTrace();
       }
       catch( Exception e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥attachments¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

19.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

正常に終了すると，c:¥temp¥jaxws¥works¥attachments¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

19.6　Webサービスの実行例（SEI起点・wsi:swaRef形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

19.6.1　Javaアプリケーション用オプション定義ファイルを作成する

19.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

19.6.3　Webサービスクライアントを実行する

19.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥attachments¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

19.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥attachments¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

19.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥attachments¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥attachments¥client, PID = 2636)
[RESULT] Success. Name:Hitachi Taro, Section:The personnel section
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

20.　添付ファイル機能（MTOM/XOP）

添付ファイル機能を使用することで，テキストデータだけでなく，画像データや音声データなどをWebサービスで扱えます。

この章では，添付ファイル機能の概要，および添付ファイル機能を使用した場合のマッピング規則について説明します。

＜この章の構成＞

20.1　添付ファイル機能とは（MTOM/XOP）

20.2　添付ファイルのJavaインタフェース（MTOM/XOP）

20.3　添付ファイルのWSDL（MTOM/XOP）

20.4　JAX-WSエンジンの動作

20.5　MTOM/XOP仕様形式の添付ファイルのSOAPメッセージ

20.6　注意事項

20.1　添付ファイル機能とは（MTOM/XOP）

MTOM/XOP仕様形式の添付ファイル機能とは，SOAP Message Transmission Optimization Mechanism（MTOM）とXML-binary Optimized Packaging（XOP）の両機能を組み合わせ，バイナリデータを送受信する機能です。この機能によって送受信されるデータは，MIME Multipart/Related構造のSOAPメッセージに添付されます。

次に示す例を基に，添付ファイル機能の概要について説明します。

図20-1　添付ファイル機能を使用したバイナリデータの送受信

20.2　添付ファイルのJavaインタフェース（MTOM/XOP）

ここでは，Javaインタフェース内で添付ファイルを指定するJava型について説明します。

＜この節の構成＞

(1)　MTOM/XOP仕様形式の添付ファイルの対象

(2)　MTOM/XOP仕様形式の添付ファイルで使用するアノテーション

(3)　MTOM/XOP仕様形式の添付ファイルの使用方法

(4)　Document BareスタイルでのMTOM/XOP仕様形式の添付ファイル

(1)　MTOM/XOP仕様形式の添付ファイルの対象

MTOM/XOP仕様形式の添付ファイルは，次に示す個所のBase64形式のデータがすべて対象です。

メソッド引数

メソッド戻り値

ユーザ定義型のフィールド

複数のBase64形式のデータがある場合，特定のデータだけをMTOM/XOP仕様形式の添付ファイルの対象にすることはできません。

(2)　MTOM/XOP仕様形式の添付ファイルで使用するアノテーション

MTOM/XOP仕様形式の添付ファイルで使用するアノテーションは次のとおりです。

javax.xml.ws.soap.MTOM

javax.xml.bind.annotation.XmlMimeType

(3)　MTOM/XOP仕様形式の添付ファイルの使用方法

WebサービスでMTOM/XOP仕様形式の添付ファイルを使用するには，Webサービス実装クラスにjavax.xml.ws.soap.MTOMアノテーションをアノテートします。MTOM/XOP仕様形式の添付ファイルを使用したWebサービス実装クラスの例を次に示します。

package com.sample;

@MTOM
@BindingType(・・・)
public class UserInfoImpl implements UserInfo {

   public UserData setUserData(Image image)
       throws UserDefinedException {
       ・・・・・・
   }
}

また，javax.xml.ws.soap.MTOMアノテーションの代わりにjavax.xml.ws.soap.SOAPBindingインタフェースのフィールド値をjavax.xml.ws.BindingTypeアノテーションに指定することで，MTOM/XOP仕様形式の添付ファイルを使用できます。javax.xml.ws.soap.MTOMアノテーションとjavax.xml.ws.BindingTypeアノテーションに指定するjavax.xml.ws.soap.SOAPBindingインタフェースのフィールド値の関係を次の表に示します。

表20-1　MTOMアノテーションとSOAPBindingインタフェースのフィールドの関係

項番 | MTOMアノテーション | BindingTypeアノテーション | MTOM/XOP仕様形式の添付ファイル
アノテーション有無 | enabled要素値 | SOAPBindingインタフェースのフィールド値 | フィールド値の記述可否
1 | あり | true | SOAP11HTTP_BINDING | 可 | ○
2 | SOAP12HTTP_BINDING | 可 | ○
3 | SOAP11HTTP_MTOM_BINDING | 可 | ○
4 | SOAP12HTTP_MTOM_BINDING | 可 | ○
5 | false | SOAP11HTTP_BINDING | 可 | ×
6 | SOAP12HTTP_BINDING | 可 | ×
7 | SOAP11HTTP_MTOM_BINDING | 否※ | －
8 | SOAP12HTTP_MTOM_BINDING | 否※ | －
9 | なし | － | SOAP11HTTP_BINDING | 可 | ×
10 | SOAP12HTTP_BINDING | 可 | ×
11 | SOAP11HTTP_MTOM_BINDING | 可 | ○
12 | SOAP12HTTP_MTOM_BINDING | 可 | ○

（凡例）

○：有効

×：無効

－：なし

注※

Webサービス開始時にjavax.xml.ws.WebServiceExceptionが発生します。

javax.xml.ws.soap.MTOMアノテーションの代わりにjavax.xml.ws.soap.SOAPBindingインタフェースのフィールドを使用したWebサービス実装クラスの例を次に示します。

package com.sample;

@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)
public class UserInfoImpl implements UserInfo {

   public UserData setUserData(Image image)
       throws UserDefinedException {
       ・・・・・・
   }
}

(4)　Document BareスタイルでのMTOM/XOP仕様形式の添付ファイル

Document BareスタイルのJavaクラスで，MTOM/XOP仕様形式の添付ファイルを使用し，Java型とMIMEタイプを関連づける場合，Java型をサービスメソッドの戻り値やパラメタに使用しないでください。Java型とMIMEタイプを関連づける場合は，ユーザ定義型のフィールドにJava型を使用し，そのフィールドのgetterメソッドにjavax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートします。

20.3　添付ファイルのWSDL（MTOM/XOP）

WSDLにMTOM/XOP仕様形式の添付ファイルが使用されていることを示す要素および属性はありません。そのため，WSDLからWebサービスがMTOM/XOP仕様形式の添付ファイルを使用しているかどうかを判別することはできません。

＜この節の構成＞

20.3.1　non-wrapperスタイルでのMTOM/XOP仕様形式の添付ファイル（MTOM/XOP）

20.3.1　non-wrapperスタイルでのMTOM/XOP仕様形式の添付ファイル（MTOM/XOP）

non-wrapperスタイルのWSDLで，MTOM/XOP仕様形式の添付ファイルを使用し，xsd:base64Binary型にMIMEタイプを指定する場合，wsdl:part要素から参照されるxsd:element要素のtype属性にxsd:base64Binary型を使用しないでください。xsd:base64Binary型にMIMEタイプを指定する場合は，wsdl:part要素から参照されるxsd:element要素のtype属性に複合型を使用し，その複合型のxsd:element要素のtype属性にxsd:base64Binary型を指定し，xmime:expectedContentTypes属性を付与します。

＜この項の構成＞

(1)　WSDL内でのxop:Include要素の使用

(1)　WSDL内でのxop:Include要素の使用

xop:Include要素はMTOM/XOP仕様形式の添付ファイルのSOAPメッセージ中に出現し，ルートパートと添付ファイルパートを関連づける要素です。そのため，WSDLのスキーマ宣言にxop:Include要素を使用できません。WSDLのスキーマ宣言にxop:Include要素を使用した場合，動作は保証されません。

20.4　JAX-WSエンジンの動作

Webサービス側とWebサービスクライアント側のJAX-WSエンジンの動作について説明します。

＜この節の構成＞

20.4.1　Webサービス側JAX-WSエンジンの動作

20.4.2　Webサービスクライアント側JAX-WSエンジンの動作

20.4.1　Webサービス側JAX-WSエンジンの動作

Webサービス側JAX-WSエンジンでMTOM/XOP仕様形式の添付ファイルを使用できるかどうかは，Webサービス実装クラスに指定されているjavax.xml.ws.soap.MTOMアノテーション，またはjavax.xml.ws.BindingTypeアノテーションに指定するSOAPBindingインタフェースのフィールド値に依存します。MTOM/XOP仕様形式の添付ファイルの使用可否とリクエストメッセージを受信したときの動作を次の表に示します。

表20-2　MTOM/XOP仕様形式の添付ファイルの使用可否とリクエストメッセージを受信したときの動作

項番 | MTOM/XOP仕様形式の添付ファイル | 受信したリクエストメッセージに含まれるデータ | 受信の成功／失敗 | しきい値と送信する添付ファイルサイズの関係※ | 送信するレスポンスメッセージに含まれるデータ
1 | 使用する | バイナリデータ | 成功 | しきい値≦添付ファイルのサイズ | バイナリデータ
2 | Base64形式のデータ | 成功 | しきい値＞添付ファイルのサイズ
3 | 使用しない | バイナリデータ | 成功 | なし | Base64形式のデータ
4 | Base64形式のデータ | 成功 | なし

注※

javax.activation.DataHandlerを使用した場合はしきい値で判定されません。常にバイナリデータとして送信します。

Webサービス実装クラスにjavax.xml.ws.soap.MTOMアノテーションを指定しない場合やjavax.xml.ws.BindingTypeアノテーションに指定するSOAPBindingインタフェースのフィールド値にSOAPBinding.SOAP11HTTP_MTOM_BINDINGおよびSOAPBinding.SOAP12HTTP_MTOM_BINDINGを指定しない場合，MTOM/XOP仕様形式の添付ファイルを使用しません。バイナリデータを含んだメッセージかどうかに関係なく，すべてのリクエストメッセージを受信します。また，レスポンスメッセージはBase64形式のデータを含んだメッセージを送信します。

＜この項の構成＞

(1)　javax.xml.bind.annotation.XmlMimeTypeアノテーションによる変化

(1)　javax.xml.bind.annotation.XmlMimeTypeアノテーションによる変化

Java型とMIMEタイプを関連づけるjavax.xml.bind.annotation.XmlMimeTypeアノテーションをSEIなどにアノテートしている場合とアノテートしていない場合では，MTOM/XOP仕様形式の添付ファイルで送信されるメッセージの添付ファイルパートにあるContent-Typeフィールドの値が変化します。javax.xml.bind.annotation.XmlMimeTypeアノテーションの可否と添付ファイルパートにあるContent-Typeフィールドの値の変化を次に示します。

XmlMimeTypeアノテーションをアノテートしている
添付ファイルパートにあるContent-Typeフィールドの値はXmlMimeTypeアノテーションのvalue要素の値となります。

XmlMimeTypeアノテーションをアノテートしていない
添付ファイルパートにあるContent-Typeフィールドの値は使用しているJava型に対応した初期値となります。初期値を次の表に示します。

表20-3　Java型とContent-Typeの初期値

項番 | Java型 | Content-Typeの初期値
1 | java.awt.Image | "image/png"
2 | javax.xml.transform.Source | "application/xml"
3 | javax.activation.DataHandler | javax.activation.DataHandlerオブジェクトのMIMEタイプ※
4 | java.awt.Imageの配列型 | "image/png"
5 | javax.activation.DataHandlerの配列型 | javax.activation.DataHandlerオブジェクトのMIMEタイプ※
6 | java.util.List<Image> | "image/png"
7 | java.util.List<DataHandler> | javax.activation.DataHandlerオブジェクトのMIMEタイプ※
8 | javax.xml.ws.Holder<Image> | "image/png"
9 | javax.xml.ws.Holder<Source> | "application/xml"
10 | javax.xml.ws.Holder<DataHandler> | javax.activation.DataHandlerオブジェクトのMIMEタイプ※
11 | byte[] | "application/octet-stream"

注※

DataHandlerを使用した場合，Content-Typeフィールドの設定値はDataHandlerオブジェクトの生成方法によって異なります。

DataHandler（DataSource）コンストラクタで生成する場合
FileDataSourceの場合，入力となるファイルデータの拡張子から，JAFによって決定されたMIMEタイプがContent-Typeフィールド値として設定されます。

DataHandler（Object, String）コンストラクタで生成する場合
DataHandlerオブジェクト生成時に，コンストラクタの第2引数に指定した内容（MIMEタイプ）がそのままContent-Typeフィールド値として設定されます。

20.4.2　Webサービスクライアント側JAX-WSエンジンの動作

Webサービスクライアント側JAX-WSエンジンでMTOM/XOP仕様形式の添付ファイルを使用できるかどうかは，SEIを取得する際に使用するMTOMFeatureクラスに依存します。MTOM/XOP仕様形式の添付ファイルの使用可否とメッセージを送受信したときの動作を次の表に示します。

表20-4　MTOM/XOP仕様形式の添付ファイルの使用可否とメッセージを送受信したときの動作

項番 | MTOM/XOP仕様形式の添付ファイル | しきい値と送信する添付ファイルサイズの関係※ | 送信するリクエストメッセージに含まれるデータ | 受信したレスポンスメッセージに含まれるデータ | 受信の成功／失敗
1 | 使用する | しきい値≦添付ファイルのサイズ | バイナリデータ | バイナリデータ | 成功
2 | Base64形式のデータ | 成功
3 | しきい値＞添付ファイルのサイズ | Base64形式のデータ | バイナリデータ | 成功
4 | Base64形式のデータ | 成功
5 | 使用しない | － | Base64形式のデータ | バイナリデータ | 成功
6 | Base64形式のデータ | 成功

（凡例）

－：なし。

注※

javax.activation.DataHandlerを使用した場合はしきい値で判定されません。常にバイナリデータとして送信します。

MTOMFeatureクラスはほかのFeatureクラスと同時に使用できます。MTOMFeatureクラスとほかのFeatureクラスを同時に使用した例を次に示します。

package com.sample;

・・・・・・

public class TestClient {

   public static void main(String[] args) {
       try {
           File portrait = new File("portrait.png");
           if (!portrait.exists() ) {
               throw new RuntimeException("Cannot file ¥"portrait.png¥".");
           }
           BufferedImage image = ImageIO.read(portrait);

           AddressingFeature addressingFeature = new AddressingFeature();
           MTOMFeature mtomFeature = new MTOMFeature();

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort(addressingFeature, mtomFeature);

           UserData userData = port.getUserData(image);
           ・・・・・・
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

MTOMFeatureクラスの代わりに，javax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドを使用することで，MTOM/XOP仕様形式の添付ファイルを使用できるかどうかを設定できます。javax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドを使用した，MTOM/XOP仕様形式の添付ファイルの使用可否の設定例を次に示します。

package com.sample;

・・・・・・

public class TestClient {

   public static void main(String[] args) {
       try {
           File portrait = new File("portrait.png");
           if (!portrait.exists() ) {
               throw new RuntimeException("Cannot file ¥"portrait.png¥".");
           }
           BufferedImage image = ImageIO.read(portrait);

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort();

           BindingProvider bindingProvider = (BindingProvider)port;
           Binding         binding         = bindingProvider.getBinding();
           SOAPBinding     soapBinding     = (SOAPBinding)binding;
           soapBinding.setMTOMEnabled(true);

           UserData userData = port.getUserData(image);
           ・・・・・・
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

MTOM/XOP仕様形式の添付ファイルの使用可否をjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドで設定する場合，先にMTOMFeatureクラスやjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドで使用可否を設定していると，あとからsetMTOMEnabledメソッドに設定した値は無効となり，使用可否の設定はできません。

SEIを取得する際にMTOMFeatureクラスを使用しない場合やjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドによるMTOM/XOP仕様形式の添付ファイルの使用可否を設定しない場合，MTOM/XOP仕様形式の添付ファイルを使用しません。リクエストメッセージはBase64形式のデータを含んだメッセージを送信します。また，バイナリデータを含んだメッセージかどうかに関係なく，すべてのレスポンスメッセージを受信します。

＜この項の構成＞

(1)　xmime:expectedContentTypes属性による変化

(1)　xmime:expectedContentTypes属性による変化

WSDLのスキーマ要素にxmime:expectedContentTypes属性がある場合とない場合では，MTOM/XOP仕様形式の添付ファイルで送信されるメッセージの添付ファイルパートにあるContent-Typeフィールドの値が変化します。xmime:expectedContentTypes属性の有無と添付ファイルパートにあるContent-Typeフィールドの値の変化を次に示します。

xmime:expectedContentTypes属性がある
添付ファイルパートにあるContent-Typeフィールドの値はxmime:expectedContentTypes属性に指定されている値となります。

xmime:expectedContentTypes属性がない
添付ファイルパートにあるContent-Typeフィールドの値は"application/octet-stream"となります。

20.5　MTOM/XOP仕様形式の添付ファイルのSOAPメッセージ

MTOM/XOP仕様形式の添付ファイルを使用した場合のSOAPメッセージは，SOAP Messages with Attachmentsプロトコルを使用し生成されたMIME multipart/related構造です。ここでは，MTOM/XOP仕様形式の添付ファイルのSOAPメッセージについて説明します。

MTOM/XOP仕様形式の添付ファイル付きSOAPメッセージの構造を次の図に示します。

図20-2　MTOM/XOP仕様形式の添付ファイル付きSOAPメッセージの構造

MTOM/XOP仕様形式の添付ファイル付きSOAPメッセージの各部の説明を次の表に示します。

表20-5　MTOM/XOP仕様形式の添付ファイル付きSOAPメッセージの各部の説明

各部の名称
説明

HTTPヘッダ
HTTPプロトコルに依存するヘッダ情報です。

HTTPヘッダとHTTPボディの境界文字列
HTTPヘッダとHTTPボディの境界を示す文字列です。

HTTPボディ
送信するメッセージを記述します。
ルートパートおよび添付ファイルパートから構成されます。

┣
MIMEパートの境界文字列
各MIMEパートの境界を示す文字列です。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
ルートパート
┃
┃
メッセージ本体を記述するパートです。
MIMEヘッダとMIMEボディから構成され，必ず1個定義します。

┣
MIMEヘッダ
ルートパートのヘッダ情報です。

┣
┃
MIMEヘッダとMIMEボディ間の境界文字列
ルートパートのMIMEヘッダとMIMEボディ間の境界を示す文字列です。

┗
MIMEボディ
メッセージ本体を記述します。

┗
SOAPエンベロープ
SOAPエンベロープを記述します。

┣
SOAPヘッダ
SOAPメッセージのヘッダ情報を記述します。

┗
SOAPボディ
SOAPメッセージの本文（XML）を記述します。

┣
MIMEパートの境界文字列
各MIMEパートの境界を示す文字列です。

┣
┃
┃
┃
┃
┃
┃
┃
┃
添付ファイルパート
┃
┃
MTOM/XOP仕様形式の添付ファイルの内容を記述するパートです。
MIMEヘッダとMIMEボディから構成され，0個以上定義します。

┣
MIMEヘッダ
添付ファイルパートのヘッダ情報です。

┣
┃
MIMEヘッダとMIMEボディ間の境界文字列
添付ファイルパートのMIMEヘッダとMIMEボディ間の境界を示す文字列です。

┗
MIMEボディ
MTOM/XOP仕様形式の添付ファイルの内容（バイナリデータ）を記述します。

┗
MIMEパートの終端文字列
MIMEパートの終端を表す文字列です。

＜この節の構成＞

20.5.1　添付ファイルからSOAPメッセージへのマッピング（MTOM/XOP）

20.5.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（MTOM/XOP）

20.5.3　SOAPメッセージから添付ファイルへのマッピング（MTOM/XOP）

20.5.1　添付ファイルからSOAPメッセージへのマッピング（MTOM/XOP）

添付ファイルからSOAPメッセージへマッピングするときの設定値について説明します。マッピング規則については，「20.5.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（MTOM/XOP）」と合わせて確認してください。

＜この項の構成＞

(1)　HTTPヘッダ

(2)　HTTPボディ

(1)　HTTPヘッダ

MTOM/XOP仕様形式の添付ファイル使用時に，HTTPヘッダのフィールドおよびパラメタに設定される値を次の表に示します。

表20-6　HTTPヘッダのフィールドおよびパラメタの設定値

項番
フィールド名
パラメタ名
設定値

1
Content-Type
－
"multipart/related"が設定されます。※

2
start
ルートパートのContent-Idが設定されます。

3
type
"application/soap+xml"が設定されます。

4
boundary
MIMEパートの境界文字列が設定されます。

5
start-info

SOAP 1.1仕様

"text/xml"が設定されます。

SOAP 1.2仕様

"application/soap+xml"が設定されます。

（凡例）

－：Content-Typeに直接設定されることを示します。

注※

MIMEパートがルートパートだけの場合や少なくとも1個の添付ファイルMIMEパートを並べている（MTOM/XOP仕様形式の添付ファイル付きSOAPメッセージである）場合でも，"multipart/related"を設定してください。

(2)　HTTPボディ

HTTPボディは，ルートパート，添付ファイルパート，および各パートの境界文字列で構成されます。添付ファイル使用時に，各パートに生成される内容，および設定される値を示します。

(a)　ルートパートのMIMEヘッダ

添付ファイル使用時に，ルートパートのフィールドに設定される値を次の表に示します。

表20-7　ルートパートのフィールドおよびパラメタの設定値

項番
フィールド名
パラメタ名
設定値

1
Content-Type
－
"application/xop+xml"が設定されます。

2
charset
"utf-8"が設定されます。

3
type

SOAP 1.1仕様

"text/xml"が設定されます。

SOAP 1.2仕様

"application/soap+xml"が設定されます。

4
Content-Transfer-Encoding
なし
"binary"が設定されます。

5
Content-Id
なし
"rootpart*"＋"グローバルに一意な値"＋"@"＋"jaxws.cosminexus.com"が設定されます。

（凡例）

－：Content-Typeに直接設定されることを示します。

(b)　ルートパートのMIMEボディ

添付ファイルを使用する場合，ルートパートのMIMEボディには，SOAPエンベロープがそのまま格納されます。SOAPエンベロープ内のSOAPボディからMTOM/XOP仕様形式の添付ファイルを参照する方法として，XOPが使用されます。

(c)　添付ファイルパートのMIMEヘッダ

添付ファイル使用時に，添付ファイルパートのMIMEヘッダに設定される値を次の表に示します。

表20-8　添付ファイルパートのフィールドおよびパラメタの設定値

項番
フィールド名
パラメタ名
設定値

1
Content-Type
－
XmlMimeTypeアノテーションのvalue要素に指定したMIMEタイプのテキスト表現が設定されます。※1，※2，※3

2
charset
MTOM/XOP仕様形式の添付ファイルの対象がSource型の場合，"UTF-8"が設定されます。※4
MTOM/XOP仕様形式の添付ファイルの対象がDataHandler型の場合，DataHandlerオブジェクト生成時に指定した文字コードが設定されます。※5
MTOM/XOP仕様形式の添付ファイルの対象が上記以外のJava型の場合，パラメタは出現しません。

3
Content-Transfer-Encoding
なし
"binary"が設定されます。

4
Content-Id
なし
"グローバルに一意な値"＋"@"＋"jaxws.cosminexus.com"が設定されます。

（凡例）

－：Content-Typeに直接設定されることを示します。

注※1

Content-Typeフィールドに設定されるMIMEタイプで，XMLを表すMIMEタイプである"text/xml"と"application/xml"では，"application/xml"をお勧めします。

注※2

XmlMimeTypeアノテーションのvalue要素にパラメタを持ったMIMEタイプを指定した場合，そのパラメタについてもContent-Typeフィールドに設定されます。

注※3

Content-Typeフィールドの設定値は，DataHandlerオブジェクトの生成方法によって，次のように異なります。

DataHandler(DataSource)コンストラクタで生成する場合
FileDataSourceの場合，入力となる添付ファイルの拡張子から，JAFによって決定されたMIMEタイプがContent-Typeフィールド値として設定されます。

DataHandler(Object, String)コンストラクタで生成する場合
DataHandlerオブジェクト生成時に，コンストラクタの第2引数に指定した内容（MIMEタイプ）がそのままContent-Typeフィールド値として設定されます。

注※4

xmime:expectedContentTypes属性またはjavax.xml.bind.annotation.XmlMimeTypeアノテーションで指定したMIMEタイプがcharsetを含む場合，Content-Type フィールドにあるcharsetの設定値は，指定したMIMEタイプに含まれるcharsetの値になります。

注※5

次のようにDataHandlerオブジェクトを生成して，MTOM/XOP仕様形式の添付ファイルとして送信した場合，Content-Typeのcharsetには，第2引数に指定したcharsetパラメタ値「Shift_JIS」が設定されます。

DataHandler dhandler = new DataHandler ("あいうえお", "text/plain; charset=Shift_JIS");

MTOM/XOP仕様形式の添付ファイルのJava型のjavax.activation.DataHandler型は，wsi:swaRef形式の添付ファイルとして使用できるJava型のjavax.activation.DataHandler型と同様に，JavaBeans Activation Framework(JAF)の型です。そのため，javax.activation.DataHandler型には任意のMIMEタイプの添付ファイルデータを指定できます。

20.5.2　添付ファイルからSOAPメッセージへのマッピングの注意事項（MTOM/XOP）

添付ファイルからSOAPメッセージをマッピングするときの注意事項について説明します。

＜この項の構成＞

(1)　MIMEパートの記述順序

(2)　ルートパートから添付ファイルへのマッピング

(1)　MIMEパートの記述順序

MIMEパートは1個のルートパートと0個以上の添付ファイルパートで構成されます。

ルートパートは，MIMEパートの先頭に記述されます。ルートパートのあとに，添付ファイルパートが記述されます。

添付ファイルパートでは，Javaインタフェースで指定された引数や戻り値がマッピングされます。Javaインタフェースの指定内容と添付ファイルパートでの記述順序の対応を次の表に示します。

表20-9　Javaインタフェースの指定内容と添付ファイルパートの記述順序

項番
Javaインタフェースでの指定内容
添付ファイルパートの記述順序

1
メソッド引数
メソッド引数に指定された順に記述されます。

2
メソッド戻り値
添付ファイルパートの先頭に記述されます。

3
配列型
配列内の要素順に記述されます。

4
ユーザ定義型
ユーザ定義型内での指定順に記述されます。
ユーザ定義型の中で指定したユーザ定義型で，添付ファイルのJava型を指定するときは，深さ優先順で添付ファイルパートが記述されます。

Javaインタフェースと添付ファイルパートのマッピング例を示します。

図20-3　Javaインタフェースと添付ファイルパートのマッピング例

(2)　ルートパートから添付ファイルへのマッピング

MTOM/XOP仕様形式の添付ファイルの場合，ルートパートから添付ファイルパートへのマッピングにはXOP仕様で定められたXOP情報セットが使用されます。XOP情報セットがルートパートのSOAPボディに記述され，対応する添付ファイルパートのContent-Idが設定されます。Content-Idによって，ルートパートから対応する添付ファイルパートを参照できます。ルートパートから添付ファイルパートの参照例を次に示します。太字部分がCID URLスキームと，対応する添付ファイルパートのContent-Idになります。

-uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f
Content-Type: text/xml

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <getUserData xmlns="http://localhost">
     <in0>
       <xop:Include xmlns="http://www.w3.org/2004/08/xop/include" href="cid:39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com"/>
     </in0>
   </getUserData>
 </S:Body>
</S:Envelope>

--uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f
Content-Id:<39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com>
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

[添付データ]
--e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f--

(a)　XOP情報セットの形式

ルートパートのSOAPボディに記述されるXOP情報セットの形式を次に示します。

"<xop: Include href=" ＋ <CID URLスキーム> ＋ "/>"

(b)　MTOM/XOP仕様形式の添付ファイルのデータサイズによるマッピング方法

MTOM/XOP仕様形式の添付ファイルは，マッピング元であるJava型とJavaインタフェースに指定する添付ファイルのデータサイズによって，添付ファイルパートへのマッピング方法が異なります。マッピング方法を次の表に示します。

表20-10　MTOM/XOP仕様形式の添付ファイルのデータサイズによる添付ファイルパートへのマッピング

項番 | Java型 | 添付ファイルのデータサイズ | 添付ファイルパートへのマッピング
1 | byte[] | null | マッピングしない※1
2 | 0バイトのデータ | マッピングする※2
3 | 0バイトより多いバイト数のデータ | マッピングする※3
4 | java.awt.Image型 | null | マッピングしない※1
5 | 0バイトのデータ | マッピングしない※1
6 | 0バイトより多いバイト数のデータ | マッピングする※3
7 | javax.xml.transform.Source型 | null | マッピングしない※1
8 | 0バイトのデータ | マッピングする※2
9 | 0バイトより多いバイト数のデータ | マッピングする※3
10 | javax.activation.DataHandler型 | null | マッピングしない※1
11 | 0バイトのデータ | マッピングする※2
12 | 0バイトより多いバイト数のデータ | マッピングする※3

注※1

wsi:swaRef形式の添付ファイルと異なり，ルートパートだけで構成されるマルチパートとなります。ルートパートにあるMIMEボディにはSOAPエンベロープを格納します。SOAPボディに該当する引数の要素は出現しません。添付ファイルデータがnullである場合のXMLへのマッピング例を次に示します。

Webサービス呼び出しプログラム

...
UserInfoService service = new UserInfoService();
UserInfo impl = service.getUserInfo(new MTOMFeature());

result = impl.getUserData(  null  );
...

SOAPメッセージ

--uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e
Content-Id: <rootpart*cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e@jaxws.cosminexus.com>
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
 <S:Body>
   <ns2:getUserData xmlns:ns2="http://localhost">
   </ns2:getUserData>
 </S:Body>
</S:Envelope>
--uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e--

注※2

ルートパートとデータがない（MIMEボディが空である）添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は，添付ファイルパートは複数となります。

注※3

ルートパートと添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は，添付ファイルパートは複数となります。

20.5.3　SOAPメッセージから添付ファイルへのマッピング（MTOM/XOP）

JAX-WSエンジンは，受信した添付ファイル付きSOAPメッセージがMTOM/XOP仕様に従っている場合にだけ，添付ファイル付きSOAPメッセージから添付ファイルデータへのマッピングは保証されます。それ以外のSOAPメッセージを受信した場合の動作は保証されません。

20.6　注意事項

MTOM/XOP形式の添付ファイルを使用するときの注意事項を次に示します。

wsi:swaRef形式の添付ファイルと同時に使用できません。同時に使用した場合の動作は保証されません。

wsi:swaRef形式の添付ファイルと，一つのオペレーションで同時に送受信することはできません。

プロバイダ実装クラス（javax.xml.ws.providerインタフェースを実装するクラス）では使用できません。プロバイダ実装クラスでMTOM/XOP仕様形式の添付ファイルを使用した場合，動作は保証されません。

ハンドラフレームワークは併用できません。併用した場合の動作は保証されません。

WSS（Cosminexus Web Services-Security）は併用できません。併用した場合の動作は保証されません。

21.　SEIを起点とした開発の例（MTOM/XOP仕様形式の添付ファイル使用時）

この章では，添付ファイルを使用して，SEIを起点としたWebサービスを開発する場合の例を説明します。

＜この章の構成＞

21.1　開発例の構成（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.2　開発例の流れ（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.3　Webサービスの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.4　デプロイと開始の例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.5　Webサービスクライアントの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.6　Webサービスの実行例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

21.1　開発例の構成（SEI起点・MTOM/XOP仕様形式の添付ファイル）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。開発するWebサービスは，MTOM/XOP仕様形式の添付ファイルを使用します。

開発するWebサービスの概要および利用する情報について説明します。

開発例の概要

社員番号，顔写真，社員名，所属というユーザ情報を管理し，Webサービスクライアントからの入力に対して，処理結果を返すWebサービスを新規に開発します。

Webサービスクライアントからの要求情報およびサーバからの応答情報を次の表に示します。

表21-1　Webサービスクライアントからの要求情報

情報名 | Javaデータ型
社員番号 | java.lang.String
顔写真 | javax.activation.DataHandler

表21-2　サーバからの応答情報

情報名 | Javaデータ型
登録確認メッセージ | java.lang.String
社員名 | java.lang.String
所属 | java.lang.String

サーバからの応答情報は，ユーザ定義型クラスのUserDataクラスで保持されます。

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表21-3　カレントディレクトリの構成（SEI起点・添付ファイル）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥mtom¥
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「21.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「21.3.1　Webサービス実装クラスを作成する」および「21.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「21.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「21.3.2　Javaソースを生成する」で使用します。

┣
mtom.ear
「21.3.5　EARファイルを作成する」で作成します。

┗
mtom.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「21.5.1　サービスクラスを生成する」および「21.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「21.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
portrait.png
Webサービスクライアントで使用するPNGファイルで使用します。

┣
┃
┃
usrconf.cfg
「21.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「21.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

21.2　開発例の流れ（SEI起点・MTOM/XOP仕様形式の添付ファイル）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（21.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（21.3.2）

web.xmlを作成する（21.3.3）

application.xmlを作成する（21.3.4）

EARファイルを作成する（21.3.5）

デプロイと開始

EARファイルをデプロイする（21.4.1）

Webサービスを開始する（21.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（21.5.1）

Webサービスクライアントの実装クラスを作成する（21.5.2）

Webサービスクライアントの実装クラスをコンパイルする（21.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（21.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（21.6.2）

Webサービスクライアントを実行する（21.6.3）

21.3　Webサービスの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

ここでは，SEIを起点とした場合のWebサービス（添付ファイルを使用）の開発例を説明します。

＜この節の構成＞

21.3.1　Webサービス実装クラスを作成する

21.3.2　Javaソースを生成する

21.3.3　web.xmlを作成する

21.3.4　application.xmlを作成する

21.3.5　EARファイルを作成する

21.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

Webサービス実装クラスの作成例を次に示します。

package com.sample;

import java.awt.Image;
import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;
import javax.xml.bind.annotation.XmlMimeType;

@MTOM
@WebService(serviceName="UserInfoService",targetNamespace="http://sample.com")
public class UserInfoImpl {

   public UserData getUserData(String in0, @XmlMimeType("image/png")Image in1)
       throws UserInfoException {

　　　　//社員情報への顔写真の登録処理
　　　　・・・・

       UserData userdata = new UserData();
       //登録した社員の名前と所属を設定
       if (in0.equals("1")) {
           userdata.setName("Hitachi Taro");
           userdata.setSection("The personnel section");
       } if ( ・・・・) {
           ・・・・・
   　　} ・・・・

　　　　//登録確認メッセージを設定
       if (in1 == null) {
           userdata.setMessage("Failure(no image).");
       } else {
           userdata.setMessage("Success.");
       }
       return userdata;
}
}

作成したUserInfoImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥mtom¥server¥src¥com¥sample¥ディレクトリに保存します。

また，com.sample.UserInfoImplで使用しているユーザ定義型クラスcom.sample.UserDataを作成します。通常，ユーザ定義型クラスの作成は任意ですが，ここではユーザ定義型クラスを作成します。

ユーザ定義型クラスの作成例を次に示します。

package com.sample;

import java.lang.String;

public class UserData {

   private String message;
   private String name;
   private String section;

   public UserData() {
   }

   public String getMessage() {
       return this.message;
   }

   public void setMessage(String message) {
       this.message = message;
   }

   public String getName() {
       return this.name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getSection() {
       return this.section;
   }

   public void setSection(String section) {
       this.section = section;
   }
}

作成したUserData.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥mtom¥server¥src¥com¥sample¥ディレクトリに保存します。

またcom.sample.UserInfoImplでスローしている例外クラスcom.sample.UserInfoExceptionを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。

package com.sample;

import java.lang.Exception;
import java.lang.String;

public class UserInfoException extends Exception {

   String detail;

   public UserInfoException(String message, String detail) {
       super(message);
       this.detail = detail;
   }

   public String getDetail() {
       return detail;
   }
}

作成したUserInfoException.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥mtom¥server¥src¥com¥sample¥ディレクトリに保存します。

21.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥mtom¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥mtom¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

<HNTRLib2インストールディレクトリ>の部分は次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

正常に終了すると，c:¥temp¥jaxws¥works¥mtom¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。

生成物の一覧を次の表に示します。

表21-4　Javaソース生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | getUserDataメソッドに対応するリクエストbeanです。
GetUserDataResponse.java | getUserDataメソッドに対応するレスポンスbeanです。
UserInfoExceptionBean.java | UserInfoExceptionに対応するフォルトbeanです。

21.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;mtom&quot;</description>
 <display-name>Sample_web_service_mtom</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/UserInfoService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥mtom¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

21.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;mtom&quot;</description>
 <display-name>Sample_application_mtom</display-name>
 <module>
   <web>
     <web-uri>mtom.war</web-uri>
     <context-root>mtom</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥mtom¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

21.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥server¥
> jar cvf mtom.war .¥WEB-INF
> jar cvf mtom.ear .¥mtom.war .¥META-INF¥application.xml

正常に終了すると，c:¥temp¥jaxws¥works¥mtom¥server¥ディレクトリにmtom.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

21.4　デプロイと開始の例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

21.4.1　EARファイルをデプロイする

21.4.2　Webサービスを開始する

21.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f mtom.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

21.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_mtom

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

21.5　Webサービスクライアントの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

21.5.1　サービスクラスを生成する

21.5.2　Webサービスクライアントの実装クラスを作成する

21.5.3　Webサービスクライアントの実装クラスをコンパイルする

21.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/mtom/UserInfoService?wsdl

正常に終了すると，c:¥temp¥jaxws¥works¥mtom¥client¥src¥com¥sample¥ディレクトリにJavaソースが生成されます。

生成物の一覧を次の表に示します。

表21-5　サービスクラス生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | WSDL定義の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
GetUserDataResponse.java | WSDL定義の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
UserData.java | UserDataに対応するJavaBeanクラスです。
UserInfoImpl.java | WSDL定義の「サービス」に対応するSEIです。
UserInfoService.java | サービスクラスです。
UserInfoException.java | UserInfoExceptionに対応するJavaBeanクラスです。
UserInfoException_Exception.java | フォルトbeanのラッパ例外クラスです。

21.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import java.awt.Image;
import java.io.File;

import javax.imageio.ImageIO;
import javax.xml.ws.soap.MTOMFeature;

import com.sample.UserInfoImpl;
import com.sample.UserData;
import com.sample.UserInfoService;
import com.sample.UserInfoException_Exception;

public class TestClient {

   public static void main( String[] args ) {
       try {
           // Imageオブジェクト生成
           File imageFile = new File("portrait.png");
           if (!imageFile.exists()) {
               throw new RuntimeException("Cannot find the file ¥"portrait.png¥".");
           }
           Image image = ImageIO.read(imageFile);

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort(new MTOMFeature());

           UserData userdata = port.getUserData("1", image);

           System.out.print("[RESULT] " + userdata.getMessage());
           System.out.println(" Name:" + userdata.getName()
                             + ", Section:" + userdata.getSection());
       } catch(UserInfoException_Exception e) {
           e.printStackTrace();
       } catch(Exception e) {
           e.printStackTrace();
       }
   }
}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥mtom¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

21.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

正常に終了すると，c:¥temp¥jaxws¥works¥mtom¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

21.6　Webサービスの実行例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

ここでは，添付ファイルを使用して，SEIを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

21.6.1　Javaアプリケーション用オプション定義ファイルを作成する

21.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

21.6.3　Webサービスクライアントを実行する

21.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥mtom¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

21.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥mtom¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

21.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥mtom¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥mtom¥client, PID = 2636)
[RESULT] Success. Name:Hitachi Taro, Section:The personnel section
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

22.　ストリーミング

この章では，Cosminexusのストリーミングの概要，使用方法および使用時の設定について説明します。

＜この章の構成＞

22.1　ストリーミングとは

22.2　ストリーミングの使用方法

22.3　一時ファイル（ストリーミング）

22.1　ストリーミングとは

ストリーミングとは，添付ファイル機能で添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信する際に，SOAPメッセージに含まれる大きいサイズのMIMEボディをメモリ上に展開しないで処理することで，Javaヒープサイズの制約を受けることなく大容量の添付ファイルを含むSOAPメッセージを受信する機能です。ストリーミングは，受信した添付ファイルを含むSOAPメッセージをjavax.activation.DataHandlerクラスにマッピングするときに使用できます。

ストリーミングを使用したバイナリデータの送受信を次の図に示します。

図22-1　ストリーミングを使用したバイナリデータの送受信

ストリーミングは，MTOM/XOP仕様形式の添付ファイルを使用する場合にだけ使用できます。wsi:swaRef形式の添付ファイルでは使用できません。

22.2　ストリーミングの使用方法

ストリーミングを使用するには，添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信する側に設定する必要があります。ここではWebサービス側およびWebサービスクライアント側の使用方法を説明します。

＜この節の構成＞

22.2.1　Webサービス側

22.2.2　Webサービスクライアント側

22.2.3　parseEagerlyによる変化

22.2.4　ストリーミングされた添付ファイルの操作

22.2.1　Webサービス側

Webサービスでストリーミングを使用するには，Webサービス実装クラスにcom.sun.xml.ws.developer.StreamingAttachmentアノテーションをアノテートします。com.sun.xml.ws.developer.StreamingAttachmentアノテーションについては，「13.2.2　com.sun.xml.ws.developer.StreamingAttachmentアノテーション」を参照してください。

ストリーミングを使用したWebサービス実装クラスの例を次に示します。この例では，"C:/TMP"ディレクトリをストリーミングによる一時ファイルの出力先に指定し，添付ファイルを含むSOAPメッセージの詳細な解析をして，50,000バイト以上のMIMEボディを一時ファイルとして出力します。

package com.sample;

・・・・・・

@MTOM
@StreamingAttachment(dir="C:/TMP", parseEagerly=true, memoryThreshold=50000L)
@BindingType(・・・)
public class UserInfoImpl implements UserInfo {

   public DataHandler getUserInfo(DataHandler dataHandler)
       throws UserDefinedException {
       if (dataHandler instanceof StreamingDataHandler) {
           StreamingDataHandler sdh = null;
           try {
               sdh = (StreamingDataHandler)dataHandler;
               ・・・・・・
           } finally {
               try {
                   if (sdh != null) {
                       sdh.close();
                   }
               } catch(Exception ex) {
                   ・・・・・・
               }
           }
       }
       ・・・・・・
   }
}

Webサービス側でストリーミングを使用し，次の条件をすべて満たすリクエストメッセージを受信した場合，レスポンスメッセージに含まれるデータがBase64形式のデータになります。

リクエストメッセージのHTTPヘッダにあるAcceptフィールドにapplication/xop+xmlがない。

リクエストメッセージのルートパートにあるContent-Typeにapplication/xop+xmlがない。

22.2.2　Webサービスクライアント側

Webサービスクライアントでストリーミングを使用するには，SEIを取得する際にcom.sun.xml.ws.developer.StreamingAttachmentFeatureクラスを設定します。

com.sun.xml.ws.developer.StreamingAttachmentFeatureクラスについては，「15.4.1　com.sun.xml.ws.developer.StreamingAttachmentFeatureクラス」を参照してください。

ストリーミングを使用したWebサービスクライアントの例を次に示します。この例では，"C:/TMP"ディレクトリをストリーミングによる一時ファイルの出力先に指定し，添付ファイルを含むSOAPメッセージの詳細な解析をし，50,000バイト以上のMIMEボディを一時ファイルとして出力します。

package com.sample;

・・・・・・

public class TestClient {

   public static void main(String[] args) {
       try {
           File portrait = new File("portrait.png");
           FileDataSource fileDataSource = new FileDataSource(portrait);
           DataHandler dataHandler = new DataHandler(fileDataSource);

           MTOMFeature mtomFeature = new MTOMFeature();
           StreamingAttachmentFeature streamingAttachmentFeature = new StreamingAttachmentFeature("C:/TMP", true, 50000L);

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort(mtomFeature, streamingAttachmentFeature);

           DataHandler userData = port.getUserInfo(dataHandler);
           if (userData instanceof StreamingDataHandler) {
               StreamingDataHandler sdh = null;
               try {
                   sdh = (StreamingDataHandler)userData;
                   sdh.moveTo(file);
                   ・・・・・・
               } finally {
                   try {
                       if (sdh != null) {
                           sdh.close();
                       }
                   } catch(Exception ex) {
                       ・・・・・・
                   }
               }
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

22.2.3　parseEagerlyによる変化

ストリーミングは，com.sun.xml.ws.developer.StreamingAttachmentアノテーションの要素やcom.sun.xml.ws.developer.StreamingAttachmentFeatureクラスの引数にあるparseEagerlyに指定した値で，添付ファイルを含むSOAPメッセージを解析するタイミング，解析の結果，およびSOAPメッセージに異常があるときに発生する例外が変わります。

parseEagerlyの値と変化を次の表に示します。

表22-1　parseEagerlyの値と変化

項番 | parseEagerlyの値 | SOAPメッセージを解析するタイミング | SOAPメッセージに異常があるときに発生する例外
1 | true | 添付ファイルを含むSOAPメッセージをアンマーシャルしたとき | org.jvnet.mimepull.MIMEParsingException
2 | false | ストリーミングされた添付ファイルを操作したとき | java.io.IOException

parseEagerlyの値は，添付ファイルを含むSOAPメッセージの異常をユーザアプリケーションではなく，アンマーシャル時に検知する場合には，trueを指定します。

22.2.4　ストリーミングされた添付ファイルの操作

ストリーミングを使用しているときに添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信すると，JAX-WSでは受信した添付ファイルをjavax.activation.DataHandlerクラスではなく，com.sun.xml.ws.developer.StreamingDataHandlerクラスにマッピングし，ストリーミングされた添付ファイルとして操作できます。

com.sun.xml.ws.developer.StreamingDataHandlerクラスについては，「15.4.2　com.sun.xml.ws.developer.StreamingDataHandlerクラス」を参照してください。

ストリーミングされた添付ファイルを操作する例を次に示します。この例では，ストリーミングされた添付ファイルを"C:/portrait.png"として別名で出力します。

package com.sample;

・・・・・・

@MTOM
@StreamingAttachment(dir="C:/TMP", parseEagerly=true, memoryThreshold=50000L)
@BindingType(・・・)
public class UserInfoImpl implements UserInfo {

   public DataHandler getUserInfo(DataHandler dataHandler)
       throws UserDefinedException {
       if (dataHandler instanceof StreamingDataHandler) {
           File file = new File("C:/portrait.png");
           StreamingDataHandler sdh = null;
           try {
               sdh = (StreamingDataHandler)dataHandler;
               sdh.moveTo(file);
               ・・・・・・
           } finally {
               try {
                   if (sdh != null) {
                       sdh.close();
                   }
               } catch(Exception ex) {
                   ・・・・・・
               }
           }
       }
   }
}

注意

ストリーミングを使用する場合，instanceof演算子を用いてcom.sun.xml.ws.developer.StreamingDataHandlerクラスを判別する必要があります。

一時ファイルに出力した添付ファイルは使用有無に関係なく，必ずcom.sun.xml.ws.developer.StreamingDataHandler#close()メソッドでクローズする必要があります。クローズしない場合，JAX-WSは一時ファイルを消去しません。

com.sun.xml.ws.developer.StreamingDataHandler#readOnce()メソッドおよびcom.sun.xml.ws.developer.StreamingDataHandler#moveTo(File)メソッドを呼び出したあとは，com.sun.xml.ws.developer.StreamingDataHandler#close()メソッドだけ呼び出すことができます。com.sun.xml.ws.developer.StreamingDataHandler#close()メソッド以外のメソッドを呼び出した場合，動作は保証されません。

com.sun.xml.ws.developer.StreamingDataHandlerクラスはjavax.activation.DataHandlerクラスのメソッドのうち，getContentType()メソッドだけ呼び出すことができます。それ以外のメソッドを呼び出した場合，動作は保証されません。

WebサービスクライアントまたはWebサービス実装クラスで，受信したjavax.activation.DataHandlerクラスまたはjavax.xml.ws.Holder <DataHandler>クラスのストリーミングされた添付ファイルをそのまま使用して送信しないでください。送信する場合，新たにjavax.activation.DataHandlerオブジェクトを生成して送信してください。

22.3　一時ファイル（ストリーミング）

ストリーミングを使用しているときに添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信する場合，SOAPメッセージに含まれるMIMEボディをメモリ上ではなく，一時ファイルに出力する場合があります。SOAPメッセージに含まれるMIMEボディをメモリ上に展開するか，一時ファイルに出力するかは，parseEagerlyに指定した値とMIMEボディのサイズによって決まります。

SOAPメッセージに含まれるMIMEボディの出力先を次の表に示します。

表22-2　SOAPメッセージに含まれるMIMEボディの出力先

項番 | parseEagerlyに指定した値 | MIMEボディのサイズ | MIMEボディの出力先
1 | true | しきい値※より大きい | メモリ上に展開しないで，一時ファイルに出力します。
2 | しきい値※以下 | 一時ファイルに出力しないで，メモリ上に展開します。
3 | false | なし | 一時ファイルにも出力しないで，メモリ上にも展開しません。

注※

しきい値とは，com.sun.xml.ws.developer.StreamingAttachmentアノテーションのmemoryThreshold要素値またはcom.sun.xml.ws.developer.StreamingAttachmentFeatureクラスのmemoryThreshold値です。

SOAPメッセージに含まれるMIMEボディを一時ファイルに出力するかどうかは，各MIMEパートにあるMIMEボディについて判定して決定します。受信する添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージに，ルートパートが一つ，添付ファイルパートが二つ存在する場合，一時ファイルを出力するかどうかの判定は3回実行します。

＜この節の構成＞

22.3.1　命名規則

22.3.2　出力と削除

22.3.3　見積もり方法

22.3.1　命名規則

ストリーミングが出力する一時ファイルのファイル名は，接頭辞に"MIME"，接尾辞に".tmp"が付いた名前となります。この名前はJAX-WSが自動で付与するため，任意のファイル名には変更できません。

ストリーミングが出力する一時ファイルのファイル名の例を次に示します。

MIME6838906861691549713.tmp

次の場合，一時ファイルの出力先として同じディレクトリを指定すると，一時ファイルのファイル名が重複する可能性があります。

複数のJ2EEサーバにストリーミングを使用したWebサービスまたはWebサービスクライアントを配置する場合

プロセスが異なるWebサービスクライアントでストリーミングを使用する場合

上記を組み合わせる場合

そのため，複数のJ2EEサーバにストリーミングを使用したWebサービスまたはWebサービスクライアントを配置する場合にはJ2EEサーバごとに，プロセスが異なるWebサービスクライアントでストリーミングを使用する場合にはクライアントごとに一時ファイルの出力先を変える必要があります。

22.3.2　出力と削除

一時ファイルは，添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信したときに出力されます。ルートパートのMIMEボディに対応する一時ファイルは，SOAPメッセージをアンマーシャルしたあとJAX-WSエンジンによって削除されます。また，添付ファイルパートのMIMEボディに対応する一時ファイルは，ストリーミングされた添付ファイルをクローズするとき（StreamingDataHandler#close()メソッドの呼び出し時）に削除されます。

MIME Multipart/Related構造のSOAPメッセージを受信している場合，コネクションの切断やJVMがダウンしたとき，一時ファイルが残る可能性があります。一時ファイルが残った場合，一時ファイルを削除してください。

22.3.3　見積もり方法

ストリーミングが出力する一時ファイルは，受信するMIME Multipart/Related構造のSOAPメッセージに含まれるMIMEボディと同じサイズです。一時ファイルの最大ディスク使用量は次に示す算出式で求めることができます。

一時ファイルの最大ディスク使用量（Webサービス）

一時ファイルの最大ディスク使用量＝<受信するMIMEボディの最大サイズ>×<受信するMIMEボディの最大数>×<ストリーミングを使用するWebサービスの同時実行数>

一時ファイルの最大ディスク使用量（Webサービスクライアント）

一時ファイルの最大ディスク使用量＝<受信するMIMEボディの最大サイズ>×<受信するMIMEボディの最大数>×<Webサービスの呼び出し回数>

23.　SEIを起点とした開発の例（ストリーミング使用時）

この章では，ストリーミングを使用して，SEIを起点としたWebサービスを開発する場合の例を説明します。

＜この章の構成＞

23.1　開発例の構成（SEI起点・ストリーミング）

23.2　開発例の流れ（SEI起点・ストリーミング）

23.3　Webサービスの開発例（SEI起点・ストリーミング）

23.4　デプロイと開始の例（SEI起点・ストリーミング）

23.5　Webサービスクライアントの開発例（SEI起点・ストリーミング）

23.6　Webサービスの実行例（SEI起点・ストリーミング）

23.1　開発例の構成（SEI起点・ストリーミング）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。開発するWebサービスは，ストリーミングを使用します。なお，ここではJAX-WS 2.1仕様3.3節で説明されている，暗黙のSEIの形式（明示的なSEIを作成しない形式）のWebサービスを開発します。

開発するWebサービスの概要および利用する情報について説明します。

開発例の概要

社員番号，顔写真，社員名，所属というユーザ情報を管理し，Webサービスクライアントからの入力に対して，処理結果を返すWebサービスを新規に開発します。

Webサービスクライアントからの要求情報およびサーバからの応答情報を次の表に示します。

表23-1　Webサービスクライアントからの要求情報

情報名 | Javaデータ型
社員番号 | java.lang.String
顔写真 | javax.activation.DataHandler

表23-2　サーバからの応答情報

情報名 | Javaデータ型
登録確認メッセージ | java.lang.String
社員名 | java.lang.String
所属 | java.lang.String

サーバからの応答情報は，ユーザ定義型クラスのUserDataクラスで保持されます。

この章で説明する開発例では，次の表に示す構成のWebサービスを開発します。

表23-3　Webサービスの構成（SEI起点・ストリーミング）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | streaming
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://sample.com
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | UserInfoImpl
9 | オペレーション | 個数 | 1
10 | ローカル名 | GetUserData
11 | サービス | 個数 | 1
12 | ローカル名 | UserInfoService
13 | ポート | 個数 | 1
14 | ローカル名 | UserInfoImplPort
15 | Webサービス実装クラス | com.sample.UserInfoImpl
16 | Webサービス実装クラスで公開するメソッド | 個数 | 1
17 | メソッド名 | getUserData
18 | Webサービス実装内のメソッドでスローする例外 | 個数 | 1
19 | クラス名 | com.sample.UserInfoException

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表23-4　カレントディレクトリの構成（SEI起点・ストリーミング）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥streaming
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「23.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「23.3.1　Webサービス実装クラスを作成する」および「23.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「23.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「23.3.2　Javaソースを生成する」で使用します。

┣
streaming.ear
「23.3.5　EARファイルを作成する」で作成します。

┗
streaming.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「23.5.1　サービスクラスを生成する」および「23.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「23.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
portrait.png
Webサービスクライアントで使用するPNGファイルで使用します。

┣
┃
┃
usrconf.cfg
「23.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「23.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

23.2　開発例の流れ（SEI起点・ストリーミング）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（23.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（23.3.2）

web.xmlを作成する（23.3.3）

application.xmlを作成する（23.3.4）

EARファイルを作成する（23.3.5）

デプロイと開始

EARファイルをデプロイする（23.4.1）

Webサービスを開始する（23.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（23.5.1）

Webサービスクライアントの実装クラスを作成する（23.5.2）

Webサービスクライアントの実装クラスをコンパイルする（23.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（23.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（23.6.2）

Webサービスクライアントを実行する（23.6.3）

23.3　Webサービスの開発例（SEI起点・ストリーミング）

ここでは，SEIを起点とした場合のWebサービス（ストリーミングを使用）の開発例を説明します。

＜この節の構成＞

23.3.1　Webサービス実装クラスを作成する

23.3.2　Javaソースを生成する

23.3.3　web.xmlを作成する

23.3.4　application.xmlを作成する

23.3.5　EARファイルを作成する

23.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

Webサービス実装クラスの作成例を次に示します。

package com.sample;

import javax.activation.DataHandler;
import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;
import javax.xml.bind.annotation.XmlMimeType;
import com.sun.xml.ws.developer.StreamingAttachment;
import com.sun.xml.ws.developer.StreamingDataHandler;

@MTOM
@StreamingAttachment(dir="C:/TMP", parseEagerly=true, memoryThreshold=50000L)
@WebService(serviceName="UserInfoService",targetNamespace="http://sample.com")
public class UserInfoImpl {

   public UserData getUserData(String in0, @XmlMimeType("application/octet-stream")DataHandler in1)
       throws UserInfoException {

       if (in1 != null) {
           if (in1 instanceof StreamingDataHandler) {
               StreamingDataHandler sdh = null;
               try {
                   //社員情報への顔写真の登録処理
                   sdh = (StreamingDataHandler)in1;
                   ・・・・
               } catch(Exception e) {
                   throw new UserInfoException("Exception occurred.", e.getMessage());
               } finally {
                   try {
                       if (sdh != null) {
                           //データのクローズ
                           sdh.close();
                       }
                   } catch(Exception ex) {
                       ・・・・
                   }
               }
           }
       }

       UserData userdata = new UserData();
       //登録した社員の名前と所属を設定
       if (in0.equals("1")) {
           userdata.setName("Hitachi Taro");
           userdata.setSection("The personnel section");
       } if ( ・・・・) {
           ・・・・・
       } ・・・・

       //登録確認メッセージを設定
       if (in1 == null) {
           userdata.setMessage("Failure(no image).");
       } else {
           userdata.setMessage("Success.");
       }
       return userdata;
   }
}

作成したUserInfoImpl.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥streaming¥server¥src¥com¥sample¥ディレクトリに保存します。

また，com.sample.UserInfoImplで使用しているユーザ定義型クラスcom.sample.UserDataを作成します。通常，ユーザ定義型クラスの作成は任意ですが，ここではユーザ定義型クラスを作成します。

ユーザ定義型クラスの作成例を次に示します。

package com.sample;

import java.lang.String;

public class UserData {

   private String message;
   private String name;
   private String section;

   public UserData() {
   }

   public String getMessage() {
       return this.message;
   }

   public void setMessage(String message) {
       this.message = message;
   }

   public String getName() {
       return this.name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getSection() {
       return this.section;
   }

   public void setSection(String section) {
       this.section = section;
   }
}

作成したUserData.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥streaming¥server¥src¥com¥sample¥ディレクトリに保存します。

またcom.sample.UserInfoImplでスローしている例外クラスcom.sample.UserInfoExceptionを作成します。通常，例外クラスの作成は任意ですが，ここでは例外クラスを作成します。

例外クラスの作成例を次に示します。

package com.sample;

import java.lang.Exception;
import java.lang.String;

public class UserInfoException extends Exception {

   String detail;

   public UserInfoException(String message, String detail) {
       super(message);
       this.detail = detail;
   }

   public String getDetail() {
       return detail;
   }
}

作成したUserInfoException.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥streaming¥server¥src¥com¥sample¥ディレクトリに保存します。

23.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥streaming¥server¥
> mkdir WEB-INF¥classes¥
> apt -encoding UTF-8 -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥streaming¥server¥
> mkdir WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥HiEJBClientStatic.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥UserInfoImpl.java src¥com¥sample¥UserData.java src¥com¥sample¥UserInfoException.java

<HNTRLib2インストールディレクトリ>の部分は次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

正常に終了すると，c:¥temp¥jaxws¥works¥streaming¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。

生成物の一覧を次の表に示します。

表23-5　Javaソース生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | getUserDataメソッドに対応するリクエストbeanです。
GetUserDataResponse.java | getUserDataメソッドに対応するレスポンスbeanです。
UserInfoExceptionBean.java | UserInfoExceptionに対応するフォルトbeanです。

23.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;streaming&quot;</description>
 <display-name>Sample_web_service_streaming</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/UserInfoService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥streaming¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

23.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;streaming&quot;</description>
 <display-name>Sample_application_streaming</display-name>
 <module>
   <web>
     <web-uri>streaming.war</web-uri>
     <context-root>streaming</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥streaming¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

23.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥server¥
> jar cvf streaming.war .¥WEB-INF
> jar cvf streaming.ear .¥streaming.war .¥META-INF¥application.xml

正常に終了すると，c:¥temp¥jaxws¥works¥streaming¥server¥ディレクトリにstreaming.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

23.4　デプロイと開始の例（SEI起点・ストリーミング）

ここでは，ストリーミングを使用して，SEIを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

23.4.1　EARファイルをデプロイする

23.4.2　Webサービスを開始する

23.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f streaming.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

23.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_streaming

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

23.5　Webサービスクライアントの開発例（SEI起点・ストリーミング）

ここでは，添付ファイルを使用して，SEIを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

23.5.1　サービスクラスを生成する

23.5.2　Webサービスクライアントの実装クラスを作成する

23.5.3　Webサービスクライアントの実装クラスをコンパイルする

23.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/streaming/UserInfoService?wsdl

正常に終了すると，c:¥temp¥jaxws¥works¥streaming¥client¥src¥com¥sample¥ディレクトリにJavaソースが生成されます。

生成物の一覧を次に示します。

表23-6　サービスクラス生成時の生成物（SEI起点・添付ファイル）

ファイル名 | 説明
GetUserData.java | WSDL定義の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
GetUserDataResponse.java | WSDL定義の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
UserData.java | UserDataに対応するJavaBeanクラスです。
UserInfoImpl.java | WSDL定義の「サービス」に対応するSEIです。
UserInfoService.java | サービスクラスです。
UserInfoException.java | UserInfoExceptionに対応するJavaBeanクラスです。
UserInfoException_Exception.java | フォルトbeanのラッパ例外クラスです。

23.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.ws.soap.MTOMFeature;
import java.io.File;

import com.sample.UserInfoImpl;
import com.sample.UserData;
import com.sample.UserInfoService;
import com.sample.UserInfoException_Exception;

public class TestClient {

   public static void main( String[] args ) {
       try {
           //DataHandlerオブジェクト生成
           File imageFile = new File("portrait.png");
           if (!imageFile.exists()) {
               throw new RuntimeException("Cannot find the file ¥"portrait.png¥".");
           }
           FileDataSource fdSource = new FileDataSource(imageFile);
           DataHandler dhandler = new DataHandler(fdSource);

           UserInfoService service = new UserInfoService();
           UserInfoImpl port = service.getUserInfoImplPort(new MTOMFeature());

           UserData userdata = port.getUserData("1", dhandler);

           System.out.print("[RESULT] " + userdata.getMessage());
           System.out.println(" Name:" + userdata.getName()
                             + ", Section:" + userdata.getSection());
       } catch(UserInfoException_Exception e) {
           e.printStackTrace();
       } catch(Exception e) {
           e.printStackTrace();
       }
   }
}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥streaming¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

23.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

正常に終了すると，c:¥temp¥jaxws¥works¥streaming¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

23.6　Webサービスの実行例（SEI起点・ストリーミング）

ここでは，ストリーミングを使用して，SEIを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

23.6.1　Javaアプリケーション用オプション定義ファイルを作成する

23.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

23.6.3　Webサービスクライアントを実行する

23.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥streaming¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

23.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥streaming¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

23.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥streaming¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥streaming¥client, PID = 2968)
[RESULT] Success. Name:Hitachi Taro, Section:The personnel section
KDJE40054-I The cjclstartap command was stopped. (PID = 2968, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

24.　WS-RM 1.2機能

この章では，WS-RM 1.2機能（WebサービスReliable Messaging機能）について説明します。

＜この章の構成＞

24.1　WS-RM 1.2機能とは

24.2　WS-RM 1.2機能を使用したメッセージの流れ

24.3　WS-RM 1.2機能の送達保証

24.4　WS-RM Policyの追加方法

24.1　WS-RM 1.2機能とは

WS-RM 1.2機能とは，WebサービスとWebサービスクライアントのSOAPメッセージのやり取りに，RMD（Reliable Messaging Destination）およびRMS（Reliable Messaging Source）を介することで，SOAPメッセージを確実に送受信するための機能です。RMSとRMDの間では，バックグラウンドでメッセージを受信したことを通知するAckメッセージを送信して，メッセージが相手先に届いたかどうかを管理しています。必要に応じてWS-RM 1.2機能が自動的にメッセージの再送や重複したメッセージの排除をして，通信の信頼性を高めています。

WS-RM 1.2機能を使用した場合のSOAPメッセージの送受信の流れを次に示します。

図24-1　WS-RM 1.2機能を使用した場合のSOAPメッセージの送受信の流れ

WS-RM 1.2機能は，SOAP 1.2メッセージにだけ対応しています。SOAP 1.1メッセージには対応していません。また，DispatchインタフェースおよびProviderインタフェースは利用できません。

08-70より前のバージョンで提供していたWS-RM機能（WS-RM 1.1機能）とはソースコードとバイナリの互換性がありません。WS-RM 1.2機能を使用するには，アプリケーションを作成し直してください。

24.2　WS-RM 1.2機能を使用したメッセージの流れ

WS-RM 1.2機能を使用した場合の，メッセージの流れを次に示します。

図24-2　WS-RM 1.2機能を使用したメッセージの流れ

WS-RM Policyの交換
メッセージの送信元と送信先の間で，WS-RM 1.2機能の使用の有無やWS-RM 1.2機能のWS-RM Policyを交換します。WSDLファイルに，WS-RM Policy仕様を記述することでWS-RM Policyを交換します。

シーケンス生成
アプリケーションメッセージを送信する前に，RMSとRMDはシーケンスを生成して，共有します。シーケンスとは，WS-RM 1.2機能で送信される一連のアプリケーションメッセージの集合に関するコンテキストです。シーケンス生成処理は，ポートのオブジェクトに対する初回Webサービスメソッド呼び出し時に自動で実行されます。

アプリケーションメッセージ送信
シーケンスを生成したあと，RMSはRMDにアプリケーションメッセージを送信します。送信するアプリケーションメッセージには，シーケンスの識別子とメッセージ番号が付与されます。

シーケンスクローズ
アプリケーションメッセージの送信が終了すると，RMSはシーケンスをクローズできます。シーケンスをクローズすると，新たにアプリケーションメッセージを送受信することはできません。シーケンスをクローズしても，関連するリソースは破棄しないで，保持されます。シーケンスのクローズ処理は，Webサービスクライアント側でcloseメソッドが呼び出されたときに実行されます。

シーケンス終了
アプリケーションメッセージの送信が終了すると，RMSはシーケンスを終了させます。シーケンスが終了すると，関連するリソースは破棄されます。再度シーケンスを生成するには，ポートのオブジェクトを取得し直し，Webサービスメソッドを呼び出します。

以降では，シーケンス生成に関するメッセージ，シーケンスクローズに関するメッセージ，およびシーケンス終了に関するメッセージをまとめて，シーケンスライフサイクルメッセージと呼びます。

24.3　WS-RM 1.2機能の送達保証

送達保証とは，SOAPメッセージを確実に送受信するために，SOAPメッセージ時の再送，重複排除，および順序制御をする機能です。

送達保証の種類およびCosminexusのWS-RM 1.2機能でのサポート範囲を次の表に示します。

表24-1　送達保証の種類とCosminexusのWS-RM 1.2機能でのサポート範囲

項番 | 種類 | 動作 | RMSの処理 | RMDの処理 | サポート
1 | AtLeastOnce | 少なくとも1回送達 | 再送 | － | ×
2 | AtMostOnce | 重複なく送達 | － | 重複排除 | ×
3 | ExactlyOnce | 1回だけ送達 | 再送 | 重複排除 | ○
4 | InOrder | 順序どおりに送達 | － | 順序制御 | ×

（凡例）

○：使用できます。

×：使用できません。

－：該当しません。

＜この節の構成＞

(1)　再送

(2)　重複排除

(1)　再送

WS-RM 1.2機能を使用している場合，アプリケーションメッセージが接続先に届かないときに，最大3回まで，RMSから自動的にアプリケーションメッセージが再送されます。3回再送されてもアプリケーションメッセージが届かない場合，クライアントのアプリケーションにjavax.xml.ws.WebServiceExceptionが返されます。

再送の条件を次に示します。

JAX-WSの動作定義ファイルで設定したクライアントソケットの読み込みタイムアウト値を超えてもレスポンスがなく，タイムアウトした場合

サーバとの接続が不意に切断され，レスポンスが何も受信できなかった場合

アプリケーションメッセージまたは自動的に再送されたアプリケーションメッセージへのレスポンスとして，Body要素が空のAckメッセージを受信した場合

アプリケーションメッセージまたは自動的に再送されたアプリケーションメッセージへのレスポンスとして，HTTPステータスコード202を受信した場合

(2)　重複排除

以前受信したメッセージと同じメッセージを受信した場合，メッセージ送信先にはメッセージを届けないでRMDで破棄されます。アプリケーションは呼び出されません。

重複メッセージを受信した場合，次のメッセージをクライアントに返します。

すでにレスポンスを返しているリクエストと重複したリクエストを受信した場合
一度返したレスポンスと同じ内容を返します。

リクエスト処理中に，同じリクエストを重複して受信した場合
クライアントにBody要素が空のAckメッセージを返します。ただし，返すAckがないときはHTTPステータスコード202を返します。

24.4　WS-RM Policyの追加方法

WS-RM 1.2機能では，WSDLファイルにWS-RM Policyを追加することで，WS-RM 1.2機能を有効にします。WS-RM Policyの追加方法を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestJaxWsService"
 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://example.com/sample"
 xmlns:wsp="http://www.w3.org/ns/ws-policy"
 xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
 xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
 xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
 targetNamespace="http://example.com/sample">

 <wsp:Policy wsu:Id="WSRM_policy">
   <wsp:ExactlyOne>
     <wsp:All>
       <wsrmp:RMAssertion>
         <wsp:Policy>
           <wsrmp:DeliveryAssurance>
             <wsp:Policy>
               <wsrmp:ExactlyOnce/>
             </wsp:Policy>
           </wsrmp:DeliveryAssurance>
         </wsp:Policy>
       </wsrmp:RMAssertion>
       <wsaw:UsingAddressing/>
       <!-- その他の設定 -->
     </wsp:All>
   </wsp:ExactlyOne>
 </wsp:Policy>

 <wsdl:types>

<!-- 中略 -->

 <!-- バインディング(SOAP 1.2/HTTPバインディング) -->
 <wsdl:binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <wsp:PolicyReference URI="#WSRM_policy"/>

<!-- 後略 -->

太字で示す個所が，WS-RM Policyの定義または参照個所です。

WS-RM Policyの定義はwsdl:definitions要素の子要素として記載します。wsrmp:DeliveryAssurance要素以下は省略できます。wsrmp:DeliveryAssurance要素以下および「<!-- その他の設定 -->」以外は，そのまま記載します。「<!-- その他の設定 -->」は必要に応じて設定を追加します。

WS-RM Policyの参照個所はwsdl:bindingの子要素として記載します。

「<!-- その他の設定 -->」としてWSDLに追加するプロパティについては「16.2　WS-Policyによる設定」を参照してください。

25.　WSDLを起点とした開発の例（WS-RM 1.2機能使用時）

この章では，WS-RM 1.2機能を使用する場合に，WSDLを起点としたWebサービスを開発するときの例を説明します。

＜この章の構成＞

25.1　開発例の構成（WSDL起点・WS-RM 1.2）

25.2　開発例の流れ（WSDL起点・WS-RM 1.2）

25.3　Webサービスの開発例（WSDL起点・WS-RM 1.2）

25.4　デプロイと開始の例（WSDL起点・WS-RM 1.2）

25.5　Webサービスクライアントの開発例（WSDL起点・WS-RM 1.2）

25.6　Webサービスの実行例（WSDL起点・WS-RM 1.2）

25.1　開発例の構成（WSDL起点・WS-RM 1.2）

この章では，WSDLを起点としたWebサービスを開発します。

開発するWebサービスの構成を次の表に示します。

表25-1　Webサービスの構成（WSDL起点）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | wsrm_soap12
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://example.com/sample
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | TestJaxWs
9 | オペレーション | 個数 | 1
10 | ローカル名 | jaxWsTest1
11 | サービス | 個数 | 1
12 | ローカル名 | TestJaxWsService
13 | ポート | 個数 | 1
14 | ローカル名 | testJaxWs
15 | WSDLのファイル名 | input.wsdl

Webサービス開発時のカレントディレクトリの構成を次の表に示します。

表25-2　カレントディレクトリの構成（WSDL起点）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥wsrm_soap12
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「25.3.7　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「25.3.3　SEIを生成する」および「25.3.5　Webサービス実装クラスをコンパイルする」で使用します。

┣
┃
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「25.3.6　web.xmlを作成する」で作成します。

┣
classes¥
コンパイルしたクラスファイル（*.class）を格納します。

┗
wsdl¥
作成したwsdlを格納します。

┣
┃
┃
┃
temporary¥
Javaで記述，変換したものを基にWSDLを作成する場合に一時ファイルを格納します。このディレクトリの作成は任意です。

┣
src¥

┗
classes¥

┣
wsrm_soap12.ear
「25.3.8　EARファイルを作成する」で作成します。

┗
wsrm_soap12.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「25.5.1　サービスクラスを生成する」および「25.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「25.5.4　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
┃
usrconf.cfg
「25.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「25.6.2　Java アプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

25.2　開発例の流れ（WSDL起点・WS-RM 1.2）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

WSDLファイルを作成する（25.3.1）

WSDLファイルにWS-RM Policyを追加する（25.3.2）

cjwsimportコマンドを実行し，SEIを生成する（25.3.3）

Webサービス実装クラスを作成する（25.3.4）

Webサービス実装クラスをコンパイルする（25.3.5）

web.xmlを作成する（25.3.6）

application.xmlを作成する（25.3.7）

EARファイルを作成する（25.3.8）

デプロイと開始

EARファイルをデプロイする（25.4.1）

Webサービスを開始する（25.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（25.5.1）

Webサービスクライアントの実装クラスを作成する（25.5.2）

Webサービスクライアントの実装クラスにシーケンス終了処理を追加する（25.5.3）

Webサービスクライアントの実装クラスをコンパイルする（25.5.4）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（25.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（25.6.2）

Webサービスクライアントを実行する（25.6.3）

25.3　Webサービスの開発例（WSDL起点・WS-RM 1.2）

ここでは，WSDLを起点とした場合のWebサービスの開発例を説明します。

＜この節の構成＞

25.3.1　WSDLファイルを作成する

25.3.2　WSDLファイルにWS-RM Policyを追加する

25.3.3　SEIを生成する

25.3.4　Webサービス実装クラスを作成する

25.3.5　Webサービス実装クラスをコンパイルする

25.3.6　web.xmlを作成する

25.3.7　application.xmlを作成する

25.3.8　EARファイルを作成する

25.3.1　WSDLファイルを作成する

WSDLファイルを作成し，Webサービスのメタ情報を定義します。WSDL定義は，次の仕様のサポート範囲内で定義してください。

WSDL 1.1仕様
サポート範囲については，「14.1　WSDL 1.1仕様のサポート範囲」を参照してください。

XML Schema仕様
サポート範囲については，マニュアル「Cosminexus XML Processor ユーザーズガイド」を参照してください。

WS-I Basic Profile 1.1仕様

WSDLファイルの作成方法には，新規に作成する方法と，Javaソースを変換したものを利用して作成する方法の2種類があります。

＜この項の構成＞

(1)　新規にWSDLファイルを作成する

(2)　Javaソースを変換したものを基にWSDLファイルを作成する

(1)　新規にWSDLファイルを作成する

ここでは，WSDLファイル（input.wsdl）を作成します。作成したWSDLファイルは，UTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥server¥WEB-INF¥wsdl¥ディレクトリに保存してください。

SOAP 1.2の場合の作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestJaxWsService"
 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://example.com/sample"
 targetNamespace="http://example.com/sample">

 <wsdl:types>
   <xsd:schema targetNamespace="http://example.com/sample">
     <!-- 要求メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1" type="tns:jaxWsTest1"/>

     <!-- 応答メッセージの wrapper要素 -->
     <xsd:element name="jaxWsTest1Response" type="tns:jaxWsTest1Response"/>

     <!-- フォルトメッセージの wrapper要素 -->
     <xsd:element name="UserDefinedFault" type="tns:UserDefinedFault"/>

     <!-- 要求メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1">
       <xsd:sequence>
         <xsd:element name="information" type="xsd:string"/>
         <xsd:element name="count" type="xsd:int"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- 応答メッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="jaxWsTest1Response">
       <xsd:sequence>
         <xsd:element name="return" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>

     <!-- フォルトメッセージの wrapper要素が参照する型 -->
     <xsd:complexType name="UserDefinedFault">
       <xsd:sequence>
         <xsd:element name="additionalInfo" type="xsd:int"/>
         <xsd:element name="detail" type="xsd:string"/>
         <xsd:element name="message" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>
   </xsd:schema>
 </wsdl:types>

 <!-- 要求メッセージ -->
 <wsdl:message name="jaxWsTest1Request">
   <wsdl:part name="inputParameters" element="tns:jaxWsTest1"/>
 </wsdl:message>

 <!-- 応答メッセージ -->
 <wsdl:message name="jaxWsTest1Response">
   <wsdl:part name="outputParameters" element="tns:jaxWsTest1Response"/>
 </wsdl:message>

 <!-- フォルトメッセージ -->
 <wsdl:message name="UserDefinedException">
   <wsdl:part name="fault" element="tns:UserDefinedFault"/>
 </wsdl:message>

 <!-- ポートタイプ -->
 <wsdl:portType name="TestJaxWs">
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <wsdl:input message="tns:jaxWsTest1Request"/>
     <wsdl:output message="tns:jaxWsTest1Response"/>
     <wsdl:fault name="UserDefinedFault"
       message="tns:UserDefinedException"/>
   </wsdl:operation>
 </wsdl:portType>

<!-- バインディング(SOAP 1.2/HTTPバインディング) -->
<wsdl:binding name="testJaxWsBinding" type="tns:TestJaxWs">
 <!-- document/literal/wrapped -->
 <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
   <!-- オペレーション -->
   <wsdl:operation name="jaxWsTest1">
     <soap12:operation/>
     <wsdl:input>
       <soap12:body use="literal"/>
     </wsdl:input>
     <wsdl:output>
       <soap12:body use="literal"/>
     </wsdl:output>
     <wsdl:fault name="UserDefinedFault">
       <soap12:fault name="UserDefinedFault" use="literal"/>
     </wsdl:fault>
   </wsdl:operation>
 </wsdl:binding>

 <!-- サービス -->
 <wsdl:service name="TestJaxWsService">
   <!-- ポート -->
   <wsdl:port name="testJaxWs" binding="tns:testJaxWsBinding">
     <soap12:address location="http://webhost:8085/wsrm_soap12/TestJaxWsService"/>
   </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

(2)　Javaソースを変換したものを基にWSDLファイルを作成する

ここでは，WSDL変換用に仮実装のWebサービス実装クラスと例外クラスを作成し，cjwsgenコマンドのWSDL生成機能を実行して，コンパイル済みのJavaソースからWSDLファイルを作成します。作成したクラスは，javax.jws.WebServiceアノテーションとSOAP 1.2を指定したjavax.xml.ws.BindingTypeアノテーションでアノテートしてください。メソッドを実装する必要はありません。

仮実装のWebサービス実装クラスの例を次に示します。

package com.example.sample;

@javax.jws.WebService
@javax.xml.ws.BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class TestJaxWsImpl {

   public String jaxWsTest1(String information, int count)
       throws UserDefinedException
   {
       // 実装不要
       return null;
   }

}

仮実装の例外クラスの例を次に示します。

package com.example.sample;

public class UserDefinedFault extends Exception{
   // 実装不要
   public int additionalInfo;
   public String detail;
   public String message;
}

作成したTestJaxWsImpl.javaとUserDefinedFault.javaをUTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥server¥temporary¥src¥com¥example¥sample¥ディレクトリに保存し，コンパイルします。コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> mkdir .¥temporary
> mkdir .¥temporary¥classes
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar" -d .¥temporary¥classes .¥temporary¥src¥com¥example¥sample¥TestJaxWsImpl.java .¥temporary¥src¥com¥example¥sample¥UserDefinedFault.java

コンパイルが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥temporary¥classes¥com¥example¥sample¥ディレクトリにTestJaxWsImpl.classとUserDefinedFault.classが生成されます。これらのクラスファイルを利用して，cjwsgenコマンドのWSDL生成機能でWSDLファイルを作成します。

cjwsgenコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> mkdir .¥WEB-INF¥wsdl¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsgen.bat" -r .¥WEB-INF¥wsdl -d .¥temporary¥classes -cp .¥temporary¥classes com.example.sample.TestJaxWsImpl

cjwsgenコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥WEB-INF¥wsdl¥ディレクトリにTestJaxWsService.wsdlとTestJaxWsService_schema1.xsdが生成されます。c:¥temp¥jaxws¥works¥wsrm_soap12¥temporary¥classes¥ディレクトリにあるクラスは削除してください。

生成されたTestJaxWsService.wsdlとTestJaxWsService_schema1.xsdは，一部修正する必要があります。

TestJaxWsService.wsdlの修正例を次に示します。イタリック体になっている個所が，修正した個所です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://example.com/sample" name="TestJaxWsImplService" xmlns:tns="http://example.com/sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns="http://schemas.xmlsoap.org/wsdl/">
 <types>
   <xsd:schema targetNamespace="http://example.com/sample">
     <xsd:include schemaLocation="TestJaxWsImplService_schema1.xsd"/>
   </xsd:schema>
 </types>
 <message name="jaxWsTest1">
   <part name="parameters" element="tns:jaxWsTest1"/>
 </message>
 <message name="jaxWsTest1Response">
   <part name="parameters" element="tns:jaxWsTest1Response"/>
 </message>
 <message name="UserDefinedFault">
   <part name="fault" element="tns:UserDefinedFault"/>
 </message>
 <portType name="TestJaxWs">
   <operation name="jaxWsTest1">
     <input message="tns:jaxWsTest1"/>
     <output message="tns:jaxWsTest1Response"/>
     <fault message="tns:UserDefinedFault" name="UserDefinedFault"/>
   </operation>
 </portType>
 <binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
   <operation name="jaxWsTest1">
     <soap12:operation soapAction=""/>
     <input>
       <soap12:body use="literal"/>
     </input>
     <output>
       <soap12:body use="literal"/>
     </output>
     <fault name="UserDefinedFault">
       <soap12:fault name="UserDefinedFault" use="literal"/>
     </fault>
   </operation>
 </binding>
 <service name="TestJaxWsService">
   <port name="testJaxWs" binding="tns:testJaxWsBinding">
     <soap12:address location="http://webhost:8085/wsrm_soap12/TestJaxWsService"/>
   </port>
 </service>
</definitions>

TestJaxWsService_schema1.xsdの修正例を次に示します。イタリック体になっている個所が，修正した個所です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://example.com/sample" xmlns:tns="http://example.com/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:element name="UserDefinedFault" type="tns:UserDefinedFault"/>

 <xs:element name="jaxWsTest1" type="tns:jaxWsTest1"/>

 <xs:element name="jaxWsTest1Response" type="tns:jaxWsTest1Response"/>

 <xs:complexType name="jaxWsTest1">
   <xs:sequence>
     <xs:element name="arg0" type="xs:string" minOccurs="0"/>
     <xs:element name="arg1" type="xs:int"/>
   </xs:sequence>
 </xs:complexType>

 <xs:complexType name="jaxWsTest1Response">
   <xs:sequence>
     <xs:element name="return" type="xs:string" minOccurs="0"/>
   </xs:sequence>
 </xs:complexType>

 <xs:complexType name="UserDefinedFault">
   <xs:sequence>
     <xs:element name="message" type="xs:string" minOccurs="0"/>
   </xs:sequence>
 </xs:complexType>
</xs:schema>

修正したTestJaxWsService.wsdlは，名前をinput.wsdlに変更して，c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥WEB-INF¥wsdl¥ディレクトリに保存してください。

25.3.2　WSDLファイルにWS-RM Policyを追加する

新規に作成したWSDLファイルに，WS-RM Policyを追加します。追加例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestJaxWsService"
 xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://example.com/sample"
 xmlns:wsp="http://www.w3.org/ns/ws-policy"
 xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
 xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
 xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
 targetNamespace="http://example.com/sample">

 <wsp:Policy wsu:Id="WSRM_policy">
   <wsp:ExactlyOne>
     <wsp:All>
       <wsrmp:RMAssertion>
         <wsp:Policy>
       </wsrmp:RMAssertion>
       <wsaw:UsingAddressing/>
     </wsp:All>
   </wsp:ExactlyOne>
 </wsp:Policy>

 <wsdl:types>

<!-- 中略 -->

 <!-- バインディング(SOAP 1.2/HTTPバインディング) -->
 <wsdl:binding name="testJaxWsBinding" type="tns:TestJaxWs">
   <wsp:PolicyReference URI="#WSRM_policy"/>
   <!-- document/literal/wrapped -->

<!-- 後略 -->

25.3.3　SEIを生成する

cjwsimportコマンドを実行すると，SEIなど，Webサービスの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> mkdir src¥
> mkdir WEB-INF¥classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -generateService -s src -d WEB-INF¥classes WEB-INF¥wsdl¥input.wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥src¥com¥example¥sample¥ディレクトリに，Javaソースが生成されます。com¥example¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表25-3　SEI生成時の生成物（WSDL起点）

ファイル名 | 説明
JaxWsTest1.java | WSDL定義の「要求メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
JaxWsTest1Response.java | WSDL定義の「応答メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
TestJaxWs.java | TestJaxWsポートタイプに対応するSEIです。
TestJaxWsImpl.java | TestJaxWsポートタイプに対応するスケルトンクラスです。
UserDefinedFault.java | WSDL定義の「フォルトメッセージのwrapper要素が参照する型」に対応するJavaBeanクラス（フォルトbean）です。
UserDefinedException.java | フォルトbeanのラッパ例外クラスです。

ファイル名のJaxWsTest1，TestJaxWs，およびTestJaxWsImplは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名とJavaソースとのマッピングについては，「12.　WSDLからJavaへのマッピング」を参照してください。

25.3.4　Webサービス実装クラスを作成する

スケルトンクラスにWebサービスの処理を追加し，Webサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を，日付情報とともに応答メッセージとして返す処理を追加します。

Webサービス実装クラスの作成例を次に示します。

package com.example.sample;

import java.util.Calendar;
import javax.jws.WebService;

@WebService(endpointInterface = "com.example.sample.TestJaxWs", targetNamespace = "http://example.com/sample", serviceName = "TestJaxWsService", portName = "testJaxWs")
public class TestJaxWsImpl {

   public String jaxWsTest1(String information, int count)
       throws UserDefinedException
   {
       Calendar today = Calendar.getInstance();
       StringBuffer result = new StringBuffer( 256 );
       result.append( "We've got your #" );
       result.append( new Integer( count ) );
       result.append( " message ¥"" );
       result.append( information );
       result.append( "¥"! It's " );
       result.append( String.format( "%04d.%02d.%02d %02d:%02d:%02d", new Object[]{
           new Integer( today.get( Calendar.YEAR ) ),
           new Integer( today.get( Calendar.MONTH ) + 1 ),
           new Integer( today.get( Calendar.DAY_OF_MONTH ) ),
           new Integer( today.get( Calendar.HOUR_OF_DAY ) ),
           new Integer( today.get( Calendar.MINUTE ) ),
           new Integer( today.get( Calendar.SECOND ) ) } ) );
       result.append( " now. See ya!" );

       return result.toString();
   }

}

イタリック体になっている個所が，スケルトンに対して追加した実装です。

25.3.5　Webサービス実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービス実装クラスをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;.¥WEB-INF¥classes" -d .¥WEB-INF¥classes src¥com¥example¥sample¥TestJaxWsImpl.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥WEB-INF¥classes¥com¥example¥sample¥ディレクトリのTestJaxWsImpl.classが上書きされます。

javacコマンドについては，JDKのドキュメントを参照してください。

25.3.6　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;wsrm_soap12&quot;</description>
 <display-name>Sample_web_service_wsrm_soap12</display-name>
 <listener>
   <listener-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/TestJaxWsService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

25.3.7　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;wsrm_soap12&quot;</description>
 <display-name>Sample_application_wsrm_soap12</display-name>
 <module>
   <web>
     <web-uri>wsrm_soap12.war</web-uri>
     <context-root>wsrm_soap12</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥server¥META-INF¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

25.3.8　EARファイルを作成する

jarコマンドを使用して，EARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> jar cvf wsrm_soap12.war .¥WEB-INF
> jar cvf wsrm_soap12.ear .¥wsrm_soap12.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥ディレクトリにwsrm_soap12.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

25.4　デプロイと開始の例（WSDL起点・WS-RM 1.2）

ここでは，WSDLを起点とした場合のデプロイと開始の例を説明します。

＜この節の構成＞

25.4.1　EARファイルをデプロイする

25.4.2　Webサービスを開始する

25.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f wsrm_soap12.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

25.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_wsrm_soap12

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

25.5　Webサービスクライアントの開発例（WSDL起点・WS-RM 1.2）

ここでは，WSDLを起点とした場合のWebサービスクライアントの開発例を説明します。

＜この節の構成＞

25.5.1　サービスクラスを生成する

25.5.2　Webサービスクライアントの実装クラスを作成する

25.5.3　Webサービスクライアントの実装クラスにシーケンス終了処理を追加する

25.5.4　Webサービスクライアントの実装クラスをコンパイルする

25.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

Webサービスの開発と同じ環境で，Webサービスクライアントを開発する場合の実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes ..¥server¥WEB-INF¥wsdl¥input.wsdl

Webサービスの開発と異なる環境で，Webサービスクライアントを開発する場合の実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/wsrm_soap12/TestJaxWsService?wsdl

正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥src¥com¥example¥sample¥ディレクトリにJavaソースが生成されます。com¥example¥sample¥（パッケージに対応するディレクトリパス）は，名前空間URIの記述によって変わります。名前空間URIとパッケージとのマッピングについては，「12.1.1　名前空間からパッケージ名へのマッピング」を参照してください。

生成物の一覧を次の表に示します。

表25-4　サービスクラス生成時の生成物（WSDL起点）

ファイル名 | 説明
JaxWsTest1.java | WSDL定義の「要求メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
JaxWsTest1Response.java | WSDL定義の「応答メッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
TestJaxWs.java | TestJaxWsポートタイプに対応するSEIです。
TestJaxWsService.java | サービスクラスです。
UserDefinedFault.java | WSDL定義の「フォルトメッセージのwrapper要素が参照する型」に対応するJavaBeanクラスです。
UserDefinedException.java | フォルトbeanのラッパ例外クラスです。

ファイル名のJaxWsTest1，TestJaxWs，およびTestJaxWsServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名とJavaソースとのマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

25.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをするWebサービスクライアントの実装クラスの作成例を次に示します。

package com.example.sample.client;

import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;
import com.example.sample.UserDefinedException;

public class TestClient {
   public static void main( String[] args ) {
       try {
           TestJaxWsService service = new TestJaxWsService();
           TestJaxWs port = service.getTestJaxWs();

           String returnValue = port.jaxWsTest1( "Invocation test.", 1003 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( UserDefinedException e ){
           e.printStackTrace();
       }
   }

}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥client¥src¥com¥example¥sample¥client¥ディレクトリに保存します。com.example.sample，TestJaxWs，TestJaxWsService，TestJaxWs，およびjaxWsTest1は，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

25.5.3　Webサービスクライアントの実装クラスにシーケンス終了処理を追加する

Webサービスクライアントの実装クラスに，シーケンス終了処理を追加します。シーケンス終了処理の追加例を次に示します。

package com.example.sample.client;

import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;
import com.example.sample.UserDefinedException;
import com.sun.xml.ws.Closeable;

public class TestClient {
   public static void main( String[] args ) {
       TestJaxWsService service = null;
       TestJaxWs port = null;
       try {
           service = new TestJaxWsService();
           port = service.getTestJaxWs();

           String returnValue = port.jaxWsTest1( "Invocation test.", 1003 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( UserDefinedException e ){
           e.printStackTrace();
       }
       finally {
           if( port != null ) {
               ((Closeable)port).close();
           }
       }
   }

}

25.5.4　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントの実装クラスをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥example¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥classes¥com¥example¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

25.6　Webサービスの実行例（WSDL起点・WS-RM 1.2）

ここでは，WSDLを起点とした場合のWebサービスクライアントの実行例を説明します。

＜この節の構成＞

25.6.1　Javaアプリケーション用オプション定義ファイルを作成する

25.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

25.6.3　Webサービスクライアントを実行する

25.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusのインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusのインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，UTF-8形式でc:¥temp¥jaxws¥works¥wsrm_soap12¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

25.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

25.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥wsrm_soap12¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.example.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥wsrm_soap12¥client, PID = 2636)
--------------------
[RESULT] We've got your #1003 message "Invocation test."! It's 2007.11.28 14:50:50 now. See ya!
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

26.　ハンドラフレームワーク

CosminexusのJAX-WS機能では，JAX-WS 2.1仕様で規定されたハンドラフレームワークを使用して，Webサービスの機能を拡張できます。

この章では，ハンドラフレームワークの概要，処理の流れ，および使用時の設定について説明します。

＜この章の構成＞

26.1　ハンドラフレームワークとは

26.2　Webサービスセキュリティ機能を使用する場合の注意事項

26.3　EJBのWebサービスに適用する場合の注意事項

26.4　ハンドラの型

26.5　ハンドラチェインの編成と実行順序

26.6　ハンドラの初期化と破棄

26.7　SOAPヘッダが含まれる場合のハンドラの動作と設定

26.8　ハンドラの配置

26.9　ハンドラチェインの設定

26.1　ハンドラフレームワークとは

ハンドラフレームワークとは，SOAPメッセージを送受信するときに，JAX-WSエンジン内で処理をインターセプトして，処理を追加する機能（フレームワーク）です。WebサービスクライアントとWebサービス実装クラスまたはプロバイダ実装クラスの間に複数のハンドラを追加し，Webサービスの機能を拡張できます。

ハンドラフレームワークの処理の流れを次の図に示します。

図26-1　ハンドラフレームワークの処理の流れ

ハンドラの処理内容は，アウトバウンド／インバウンド，および要求／応答の組み合わせごとに異なります。組み合わせと処理内容を次の表に示します。

表26-1　アウトバウンド／インバウンドおよび要求／応答の組み合わせと処理内容

アウトバウンド
／インバウンド
要求／
応答
処理内容

アウトバウンド
要求
Webサービスクライアントが要求メッセージを送信する動作を表します。
この処理で「メッセージを振り分ける」とは，要求メッセージをWebサービスに送信することを意味します。

応答
Webサービス実装クラスまたはプロバイダ実装クラスが応答メッセージを送信する動作を表します。
この処理で「メッセージを振り分ける」とは，応答メッセージをWebサービスクライアントに送信することを意味します。

インバウンド
要求
Webサービス実装クラスまたはプロバイダ実装クラスが要求メッセージを受信する動作を表します。
この処理で「メッセージを振り分ける」とは，要求メッセージをWebサービス実装クラスまたはプロバイダ実装クラスに割り当てることを意味します。

応答
Webサービスクライアントが応答メッセージを受信する動作を表します。
この処理で「メッセージを振り分ける」とは，応答メッセージをWebサービスクライアントに割り当てることを意味します。

ハンドラでは，メッセージコンテキストを取得できます。メッセージコンテキストについては，「15.5　メッセージコンテキストの使用」を参照してください。

ハンドラフレームワークのアーキテクチャについては，JAX-WS 2.1仕様を参照してください。

26.2　Webサービスセキュリティ機能を使用する場合の注意事項

WebサービスクライアントにCosminexus Web Services - Security（Webサービスセキュリティ機能）を適用する場合， Webサービスセキュリティハンドラとこの章で説明するハンドラフレームワークとを，併用できません。

Cosminexus Web Services - SecurityおよびWebサービスセキュリティハンドラについては，マニュアル「Cosminexus アプリケーションサーバ Webサービスセキュリティ 使用の手引」を参照してください。

26.3　EJBのWebサービスに適用する場合の注意事項

EJBのWebサービスにハンドラフレームワークを適用する場合，EJBのWebサービスに適用されたハンドラフレームワークがWebコンテナで動作するため，EJBコンテナが提供する機能を同時に適用できません。EJBコンテナが提供する機能については，「10.19　EJBのWebサービス呼び出し」を参照してください。

26.4　ハンドラの型

JAX-WS 2.1仕様は，論理ハンドラとプロトコルハンドラの二つを定義しています。また，プロトコルハンドラは，SOAPハンドラを定義しています。それぞれのハンドラの説明を次に示します。

論理ハンドラ

javax.xml.ws.handler.LogicalHandlerインタフェースを実装するハンドラです。

プロトコルハンドラ

javax.xml.ws.handler.LogicalHandlerインタフェースを除く，javax.xml.ws.handler.Handlerのすべての継承インタフェースを実装するハンドラです。

SOAPハンドラ

javax.xml.ws.handler.soap.SOAPHandlerインタフェースを実装するハンドラです。

ハンドラの関係（クラス階層）を次の図に示します。

図26-2　ハンドラのクラス階層

CosminexusのJAX-WS機能では，論理ハンドラとSOAPハンドラを使用できます。

論理ハンドラでもSOAPハンドラでもないハンドラをハンドラチェインに設定した場合，Webサービス側のJAX-WSエンジンでは，Webサービス初期化時にログおよび標準エラー出力にエラーメッセージが出力されます（KDJW00009-E）。Webサービスクライアント側のJAX-WSエンジンでは，ポートを取得しようとしたときに，javax.xml.ws.WebServiceExceptionがスローされます。

javax.xml.ws.handler.LogicalHandlerインタフェースおよびjavax.xml.ws.handler.soap.SOAPHandlerインタフェースの両方を実装するハンドラ（論理ハンドラでもSOAPハンドラでもあるハンドラ）は論理ハンドラと見なされます。

26.5　ハンドラチェインの編成と実行順序

ハンドラチェインは，論理ハンドラがSOAPハンドラに先行するように編成されます。論理ハンドラ同士，およびSOAPハンドラ同士の順序は，ハンドラチェインの設定に含まれる順序に従います。

ハンドラチェインの編成の例を次に示します。

図26-3　ハンドラチェインの編成の例

JAX-WSエンジンでは，この図に示すように，次の順序でハンドラが実行されます。

アウトバウンドのメッセージの場合：

L1→L2→L3→S1→S2→S3→S4→S5→S6

インバウンドのメッセージの場合：

S6→S5→S4→S3→S2→S1→L3→L2→L1

アウトバウンドのメッセージに対しては，最初のハンドラからハンドラチェインの順序に，インバウンドのメッセージに対しては，最後のハンドラからハンドラチェインの順序とは逆順に実行されます。

ただし，ハンドラによって例外がスローされた場合，またはhandleMessageメソッドまたはhandleFaultメソッドによってfalseが返された場合は，ハンドラ処理の方向が変わります。

ここでは，handleMessageメソッド，handleFaultメソッド，およびcloseメソッドごとに処理についてそれぞれ説明します。

＜この節の構成＞

26.5.1　handleMessageメソッドの処理

26.5.2　handleFaultメソッドの処理

26.5.3　closeメソッドの処理

26.5.1　handleMessageメソッドの処理

handleMessageメソッドについて，trueを返す場合，falseを返す場合，および例外をスローする場合の処理について説明します。

＜この項の構成＞

(1)　trueを返す場合

(2)　falseを返す場合

(3)　ProtocolExceptionまたはそのサブクラスをスローする場合

(4)　ほかのランタイム例外をスローする場合

(1)　trueを返す場合

handleMessageメソッドがtrueを返す場合，JAX-WSエンジンは現在実行中の方向のままハンドラを処理します。それ以上ハンドラがなければ，メッセージを振り分けます。

要求処理の流れを次の図に示します。

図26-4　handleMessageでtrueを返す場合の処理（要求）

応答処理の流れを次の図に示します。

図26-5　handleMessageでtrueを返す場合の処理（応答）

(2)　falseを返す場合

要求メッセージを処理しているhandleMessageメソッドがfalseを返す場合，JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させて，前のハンドラのhandleMessageメソッドを呼び出します。それ以上ハンドラがなければ，メッセージを振り分けます。

要求処理でハンドラ2がfalseを返す場合の流れを次の図に示します。

図26-6　handleMessageでfalseを返す場合の処理（要求）

JAX-WSエンジンは，メッセージコンテキストに設定されたメッセージを変更しません。したがって，要求メッセージはそのままWebサービスクライアントに振り分けられます。意図した応答メッセージが振り分けられなかったWebサービスクライアントでは，javax.xml.ws.WebServiceExceptionがスローされます。

応答メッセージを処理しているhandleMessageメソッドがfalseを返す場合，メッセージの方向は変えません。ただし，以降のハンドラをすべて省略して，メッセージを振り分けます。

応答処理でハンドラ2がfalseを返す場合の流れを次の図に示します。

図26-7　handleMessageでfalseを返す場合の処理（応答）

(3)　ProtocolExceptionまたはそのサブクラスをスローする場合

要求メッセージを処理しているhandleMessageメソッドがProtocolExceptionまたはそのサブクラスをスローする場合，JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させて，前のハンドラのhandleFaultメソッドを呼び出します。それ以上ハンドラがなければ，メッセージを振り分けます。

要求処理でハンドラ2がProtocolExceptionをスローする場合の流れを次の図に示します。

図26-8　handleMessageでProtocolExceptionをスローする場合の処理（要求）

JAX-WSエンジンは，フォルトメッセージを生成して伝搬させます。生成するメッセージは，SOAPのバージョンによって次の表のとおりに異なります。

表26-2　JAX-WSエンジンが生成するフォルトメッセージ（ProtocolExceptionスロー・要求）

バージョン | フォルトメッセージ
SOAP 1.1仕様 | Webサービスクライアント側 | faultcodeはQName soapenv:Client
Webサービス側 | faultcodeはQName soapenv:Server
SOAP 1.2仕様 | Webサービスクライアント側 | soapenv12:CodeはQName soapenv12:Sender
Webサービス側 | soapenv12:CodeはQName soapenv12:Receiver

応答メッセージを処理しているhandleMessageメソッドがProtocolExceptionまたはそのサブクラスをスローする場合，メッセージの方向は変えません。ただし，以降のハンドラをすべて省略して，例外をそのままスローします。

応答処理でハンドラ2がProtocolExceptionをスローする場合の流れを次の図に示します。

図26-9　handleMessageでProtocolExceptionをスローする場合の処理（応答）

Webサービス側の場合，JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については，「10.4.1(2)　ランタイム例外のバインディング」を参照してください。

(4)　ほかのランタイム例外をスローする場合

要求メッセージを処理しているhandleMessageメソッドがほかのランタイム例外をスローする場合，JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させます。また，以降のハンドラをすべて省略し，例外をそのままスローします。

要求処理でハンドラ2がRuntimeExceptionをスローする場合の流れを次の図に示します。

図26-10　handleMessageでRuntimeExceptionをスローする場合の処理（要求）

Webサービス側の場合，JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については，「10.4.1(2)　ランタイム例外のバインディング」を参照してください。

Webサービスクライアント側の場合，JAX-WSエンジンは例外をjavax.xml.ws.WebServiceExceptionでラップして，WebServiceExceptionをスローします。

応答メッセージを処理しているhandleMessageメソッドがランタイム例外をスローする場合，メッセージの方向は変えません。ただし，以降のハンドラをすべて省略して，メッセージを振り分けます。

応答処理でハンドラ2がRuntimeExceptionをスローする場合の流れを次の図に示します。

図26-11　handleMessageでRuntimeExceptionをスローする場合の処理（応答）

Webサービス側の場合，JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については，「10.4.1(2)　ランタイム例外のバインディング」を参照してください。

Webサービスクライアント側の場合，JAX-WSエンジンは例外をjavax.xml.ws.WebServiceExceptionでラップして，WebServiceExceptionをスローします。

26.5.2　handleFaultメソッドの処理

handleMessageメソッドについて，trueを返す場合，falseを返す場合，および例外をスローする場合の処理について説明します。

＜この項の構成＞

(1)　trueを返す場合

(2)　falseを返す場合

(3)　ProtocolExceptionまたはそのサブクラスをスローする場合

(4)　ほかのランタイム例外をスローする場合

(1)　trueを返す場合

handleFaultメソッドがtrueを返す場合，JAX-WSエンジンは現在実行中の方向のままハンドラを処理します。それ以上ハンドラがなければ，メッセージを振り分けます。

応答処理の流れを次の図に示します。

図26-12　handleFaultでtrueを返す場合の処理（応答）

(2)　falseを返す場合

handleFaultメソッドがfalseを返す場合，JAX-WSエンジンは現在実行中の方向のまま，以降のハンドラをすべて省略してメッセージを振り分けます。

応答処理でハンドラ2がfalseを返す場合の流れを次の図に示します。

図26-13　handleFaultでfalseを返す場合の処理（応答）

(3)　ProtocolExceptionまたはそのサブクラスをスローする場合

handleFaultメソッドがProtocolExceptionまたはそのサブクラスをスローする場合，JAX-WSエンジンは，現在実行中の方向のまま，以降のハンドラをすべて省略して例外をスローします。

応答処理でハンドラ2がProtocolExceptionをスローする場合の流れを次の図に示します。

図26-14　handleFaultでProtocolExceptionを返す場合の処理（応答）

Webサービス側の場合，JAX-WSエンジンは例外をSOAPフォルトに変換し，もともと保持しているSOAPフォルトを置き換えます。したがって，実際は新たに生成されたフォルトメッセージを送信します。フォルトメッセージの変換については，「10.4.1(2)　ランタイム例外のバインディング」を参照してください。

(4)　ほかのランタイム例外をスローする場合

handleFaultメソッドがほかのランタイム例外をスローする場合，JAX-WSエンジンは，現在実行中の方向のまま，以降のハンドラをすべて省略してメッセージを振り分けます。

応答処理でハンドラ2がRuntimeExceptionをスローする場合の流れを次の図に示します。

図26-15　handleFaultでRuntimeExceptionを返す場合の処理（応答）

Webサービス側の場合，JAX-WSエンジンは例外をSOAPフォルトに変換し，もともと保持しているSOAPフォルトを置き換えます。したがって，実際には新たに生成されたフォルトメッセージを送信します。フォルトメッセージの変換については，「10.4.1(2)　ランタイム例外のバインディング」を参照してください。

Webサービスクライアント側の場合，JAX-WSエンジンは例外をjavax.xml.ws.WebServiceExceptionでラップして，WebServiceExceptionをスローします。

26.5.3　closeメソッドの処理

JAX-WSエンジンは，応答メッセージをWebサービスクライアントに振り分ける直前に，すでに呼び出したハンドラのcloseメソッドを呼び出します。

closeメソッドは，呼び出しと逆順に呼び出されます。したがって，要求メッセージを処理しているときにハンドラの処理を逆転させた場合，呼び出さなかったハンドラのcloseメソッドは呼び出しません。しかし，要求メッセージを処理するときにすべてのハンドラを実行していれば，応答メッセージの処理でハンドラの呼び出しを省略したとしても，すべてのハンドラのcloseメソッドを，要求メッセージを処理したときと逆順に呼び出します。

26.6　ハンドラの初期化と破棄

ハンドラを初期化するとき，およびハンドラを破棄するときのJAX-WSエンジンの動作について説明します。

＜この節の構成＞

(1)　Webサービス側

(2)　Webサービスクライアント側

(1)　Webサービス側

ハンドラがjavax.annotation.PostConstructアノテーションでアノテートされたメソッドを持つ場合，Webサービスを初期化するときに，そのメソッドが呼び出されます。

ハンドラがjavax.annotation.PreDestoryアノテーションでアノテートされたメソッドを持つ場合，Webサービスを破棄するときに，そのメソッドが呼び出されます。

(2)　Webサービスクライアント側

ハンドラがjavax.annotation.PostConstructアノテーションやjavax.annotation.PreDestoryアノテーションでアノテートされたメソッドを持っていても，それらのメソッドは呼び出されません。

26.7　SOAPヘッダが含まれる場合のハンドラの動作と設定

ハンドラ，Webサービス実装クラス，およびスタブベースのWebサービスクライアントでは，SOAPメッセージに処理できるSOAPヘッダを設定できます。プロバイダ実装クラスおよびディスパッチベースのWebサービスクライアントにSOAPヘッダを設定しても，処理できないので注意してください。

ここでは，Webサービス側およびWebサービスクライアント側に分けて，SOAPヘッダを含むSOAPメッセージを受信した場合のハンドラの動作について説明します。また，SOAPヘッダの設定方法について説明します。

＜この節の構成＞

26.7.1　SOAPヘッダが含まれる場合のハンドラの動作（Webサービス側）

26.7.2　SOAPヘッダが含まれる場合のハンドラの動作（Webサービスクライアント側）

26.7.3　処理できるSOAPヘッダの設定方法

26.7.1　SOAPヘッダが含まれる場合のハンドラの動作（Webサービス側）

SOAPヘッダが含まれるSOAPメッセージを受信した場合，SOAPヘッダのsoap:mustUnderstand属性の設定値によって，ハンドラの処理が異なります。soap:mustUnderstand属性が"1"の場合，およびsoap:mustUnderstand属性が"1"以外の場合に分けて処理内容を示します。

＜この項の構成＞

(1)　soap:mustUnderstand属性が"1"の場合

(2)　soap:mustUnderstand属性が"1"以外の場合

(1)　soap:mustUnderstand属性が"1"の場合

soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信した場合，設定されたハンドラのどれか，またはWebサービス実装クラス内で，そのSOAPヘッダを処理できれば，すべてのハンドラが呼び出されます。

ハンドラでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。

図26-16　ハンドラでSOAPヘッダを処理できる場合の処理（Webサービス側）

この図の例では，要素名tns:headerAを処理できるハンドラ3が設定されているとしています。このとき，tns:headerAのSOAPヘッダを受信した場合，ハンドラ3，ハンドラ2，およびハンドラ1のすべてのハンドラが呼び出されます。

Webサービス実装クラスでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。

図26-17　Webサービス実装クラスでSOAPヘッダを処理できる場合の処理（Webサービス側）

Webサービス実装クラスだけが要素名tns:headerSを処理できるとした場合も，ハンドラで処理できる場合と同様にすべてのハンドラが呼び出されます。

soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信した場合，次のようなときはfaultcodeにsoap:MustUnderstandが設定されたSOAPフォルトが返されます。

設定されたハンドラのどれかがSOAPヘッダを処理できない

Webサービス実装クラス内でSOAPヘッダを処理できない

プロバイダ実装クラスが使用されている

SOAPヘッダを処理できない場合のハンドラの処理は，次の図のようになります。

図26-18　SOAPヘッダを処理できない場合のハンドラの処理（Webサービス側）

(2)　soap:mustUnderstand属性が"1"以外の場合

soap:mustUnderstand属性が"1"以外の場合，設定されているすべてのハンドラが呼び出されます。

soap:mustUnderstand属性が"1"以外の場合，ハンドラの処理は次の図のようになります。

図26-19　soap:mustUnderstand属性が"1"以外の場合のハンドラの処理（Webサービス側）

この図の例では，ハンドラもWebサービス実装クラスも要素tns:headerZを処理できませんが，soap:mustUnderstand属性が"1"以外の場合はSOAPフォルトにはならないで，すべてのハンドラが呼び出されます。

26.7.2　SOAPヘッダが含まれる場合のハンドラの動作（Webサービスクライアント側）

SOAPヘッダが含まれるSOAPメッセージを受信した場合，SOAPヘッダのsoap:mustUnderstand属性の設定値によって，ハンドラの処理が異なります。soap:mustUnderstand属性が"1"の場合，およびsoap:mustUnderstand属性が"1"以外の場合に分けて処理内容を示します。

＜この項の構成＞

(1)　soap:mustUnderstand属性が"1"の場合

(2)　soap:mustUnderstand属性が"1"以外の場合

(1)　soap:mustUnderstand属性が"1"の場合

soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信した場合，設定されたハンドラのどれか，またはWebサービスクライアント内で，そのSOAPヘッダを処理できれば，すべてのハンドラが呼び出されます。

ハンドラでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。

図26-20　ハンドラでSOAPヘッダを処理できる場合の処理（Webサービスクライアント側）

この図の例では，要素名tns:headerAを処理できるハンドラ3が設定されているとしています。このとき，tns:headerAのSOAPヘッダを受信した場合，ハンドラ3，ハンドラ2，およびハンドラ1のすべてのハンドラが呼び出されます。

Webサービス実装クラスでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。

図26-21　Webサービス実装クラスでSOAPヘッダを処理できる場合の処理（Webサービスクライアント側）

Webサービス実装クラスだけが要素名tns:headerCLを処理できるとした場合も，ハンドラで処理できる場合と同様にすべてのハンドラが呼び出されます。

soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信し，次のような場合はjavax.xml.ws.soap.SOAPFaultExceptionが返され，エラーとなります（KDJW10022-E）。

設定されたハンドラのどれかがSOAPヘッダを処理できない

Webサービスクライアント内でSOAPヘッダを処理できない

Webサービスクライアントがディスパッチベースで開発されている

SOAPヘッダを処理できない場合のハンドラの処理は，次の図のようになります。

図26-22　SOAPヘッダを処理できない場合のハンドラの処理（Webサービスクライアント側）

(2)　soap:mustUnderstand属性が"1"以外の場合

soap:mustUnderstand属性が"1"以外の場合，設定されているすべてのハンドラが呼び出されます。

soap:mustUnderstand属性が"1"以外の場合，ハンドラの処理は次の図のようになります。

図26-23　soap:mustUnderstand属性が"1"以外の場合のハンドラの処理（Webサービスクライアント側）

この図の例では，ハンドラもWebサービス実装クラスも要素tns:headerCLを処理できませんが，soap:mustUnderstand属性が"1"以外の場合はエラーにはならないで，すべてのハンドラが呼び出されます。

26.7.3　処理できるSOAPヘッダの設定方法

ハンドラ，Webサービス実装クラス，およびWebサービスクライアントに分けて，処理できるSOAPヘッダの設定方法を説明します。

＜この項の構成＞

(1)　SOAPヘッダをハンドラで設定する場合

(2)　SOAPヘッダをWebサービス実装クラスで設定する場合

(3)　SOAPヘッダをWebサービスクライアントで設定する場合

(1)　SOAPヘッダをハンドラで設定する場合

javax.xml.ws.handler.soap.SOAPHandlerインタフェースを実装したハンドラクラスを作成し，getHeaders()メソッドで，処理できるSOAPヘッダのQNameを含むjava.util.Setを返します。ハンドラでの設定例を次に示します。

public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
 private final static Set<QName> headers;

 static {
   headers = new HashSet<QName>();
   headers.add(new QName("http://test.org/handler/", "headerA"));
 }

 public Set<QName> getHeaders(){
   return headers;
 }
 （以下，そのほかの実装は省略）
}

(2)　SOAPヘッダをWebサービス実装クラスで設定する場合

SEIを起点として開発する場合，Webサービス実装クラスにjavax.jws.WebParamアノテーションでアノテートした引数を持つメソッドを定義します。javax.jws.WebParamアノテーションでは，次に示す設定を定義します。

header属性にtrueを設定する。

mode属性にjavax.jws.WebParam.Mode.INまたはjavax.jws.WebParam.Mode.INOUTを設定する。

Webサービス実装クラスでの設定例を次に示します。

@WebService
@SOAPBinding (parameterStyle= javax.jws.soap.SOAPBinding.ParameterStyle.BARE)
@HandlerChain (file="handlerchainfile.xml")
public class MyWebService{
 @WebMethod(operationName = "webMethod")
 public String webMethod(
   @WebParam(targetNamespace="http://test.org/handler/", name="message")
   String message,
   @WebParam(targetNamespace="http://test.org/handler/", name="headerS", header = true, WebParam.Mode.IN)
   String headerS
 ){
   （以下，メソッドの実装は省略）
 }
}

WSDLを起点に開発する場合は，WSDL 1.1仕様およびCosminexusのJAX-WS機能のサポート範囲内で，soap:header要素をWSDLに記述します。CosminexusのJAX-WS機能でのsopa:header要素の記述については，「14.1.22　soap:header要素」を参照してください。

(3)　SOAPヘッダをWebサービスクライアントで設定する場合

接続するWebサービスのメタデータであるWSDLに，soap:header要素が含まれる場合は，そのsoap:header要素を処理できます。WSDLの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
            xmlns:tns="http://test.org/handler/"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://schemas.xmlsoap.org/wsdl/"
            targetNamespace="http://test.org/handler/"
            name="HandlerTest01Service">

 <types>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              version="1.0"
              targetNamespace="http://test.org/handler/">
     <xs:element name="headerCL" nillable="true" type="xs:string"></xs:element>
     <xs:element name="message" nillable="true" type="xs:string"></xs:element>
     <xs:element name="testResponse" nillable="true" type="xs:string"></xs:element>
   </xs:schema>
 </types>

 <message name="test">
   <part name="message" element="tns:message"></part>
   <part name="headerCL" element="tns:headerCL"></part>
 </message>
 <message name="testResponse">
   <part name="testResponse" element="tns:testResponse"></part>
   <part name="headerCL" element="tns:headerCL"></part>
 </message>

 <portType name="HandlerTest01">
   <operation name="test" parameterOrder="message headerCL">
     <input message="tns:test"></input>
     <output message="tns:testResponse"></output>
   </operation>
 </portType>

 <binding name="HandlerTest01Binding" type="tns:HandlerTest01">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
   <operation name="test">
     <soap:operation soapAction=""></soap:operation>
     <input>
       <soap:body use="literal" parts="message"></soap:body>
       <soap:header message="tns:test" part="headerCL" use="literal"></soap:header>
     </input>
     <output>
       <soap:body use="literal" parts="testResponse"></soap:body>
       <soap:header message="tns:testResponse" part="headerCL" use="literal"></soap:header>
     </output>
   </operation>
 </binding>

 <service name="HandlerTest01Service">
   <port name="HandlerTest01Port" binding="tns:HandlerTest01Binding">
     <soap:address location="http://localhost:80/SOAPHeaderTest/HandlerTestService431"></soap:address>
   </port>
 </service>
</definitions>

この場合は，要素名{http://test.org/handler/}headerCLのSOAPヘッダを処理できます。WSDLのsoap:header要素については「14.1.22　soap:header要素」を参照してください。

26.8　ハンドラの配置

ハンドラの実装クラスの配置について説明します。

＜この節の構成＞

(1)　Webサービス側

(2)　Webサービスクライアント側

(1)　Webサービス側

ハンドラの実装クラスは，次に示す場所に配置します。

POJOのWebサービスの場合：WARファイルのクラスパス上

EJBのWebサービスの場合：EJB JARファイルのクラスパス上

WARファイルまたはEJB JARファイルのクラスパス上であれば，WARファイルやEJB JARファイルに含まれていなくてもかまいません。

(2)　Webサービスクライアント側

ハンドラの実装クラスは，Webサービスクライアントのクラスパス上に配置してください。

26.9　ハンドラチェインの設定

Webサービス実装クラスおよびWebサービスクライアントでは，動的なハンドラチェインの設定が利用できます。

ここでは，ハンドラチェインの設定方法と設定例について説明します。

＜この節の構成＞

26.9.1　Webサービス側のハンドラチェインの設定

26.9.2　Webサービスクライアント側のハンドラチェインの設定

26.9.1　Webサービス側のハンドラチェインの設定

Webサービス側でハンドラチェインを設定する場合，javax.jws.HandlerChainアノテーションでSEI，Webサービス実装クラス，またはプロバイダ実装クラスをアノテートし，javax.jws.HandlerChainアノテーションのfile要素でハンドラチェイン設定ファイルを指定します。

javax.jws.HandlerChainアノテーションでWebサービス実装クラスをアノテートした例を示します。

package com.sample;

@javax.jws.WebService
@javax.jws.HandlerChain(file="handlers.xml")
public class AddNumbersImpl{

   public int add( int number1, int number2 ) throws AddNumbersFault{
     ...
   }

}

この例では，Webサービス実装クラスcom.sample.AddNumbersImplにハンドラチェイン設定ファイルhandlers.xmlで定義されたハンドラチェインを関連づけています。

ハンドラチェイン設定ファイルは，Webサービスごとに必要になります。複数のWebサービスで共有してもかまいませんが，その場合は，同じ設定が適用されます。

javax.jws.HandlerChainアノテーションについては，「13.2.3　javax.jws.HandlerChainアノテーション」を参照してください。

＜この項の構成＞

(1)　ハンドラチェイン設定ファイル

(2)　SOAPロールとアクタの設定

(3)　soap:mustUnderstand属性の設定

(1)　ハンドラチェイン設定ファイル

ハンドラチェイン設定ファイルは，ハンドラを使用してWebサービスに処理を追加した場合に，ハンドラチェインの構成を定義するファイルです。javax.jws.HandlerChainアノテーションのfile要素で指定します。

ハンドラチェイン設定ファイルのサポート範囲については，「14.4　ハンドラチェイン設定ファイルのサポート範囲」を参照してください。ここでは，ハンドラチェイン設定ファイルの構文および配置について説明します。

(a)　ハンドラチェイン設定ファイルの構文

ハンドラチェイン設定ファイルの構文は，Java EE 5仕様の標準スキーマ（Java EE Web Services Metadata Handler Chain Schema），およびCosminexusのJAX-WS機能でサポートされる範囲で記述します。

標準のスキーマは，Java EE 5の名前空間URI（http://java.sun.com/xml/ns/javaee/）にアクセスすることで参照できます。ハンドラチェイン設定ファイルの記述例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
 <handler-chain>
   <handler>
     <handler-class>org.test.handler.LoggingHandler</handler-class>
   </handler>
 </handler-chain>
</handler-chains>

(b)　ハンドラチェイン設定ファイルの配置

ハンドラチェイン設定ファイルは，次に示す場所に格納します。

POJOのWebサービスの場合：WARファイルのWEB-INFディレクトリ以下

EJBのWebサービスの場合：EJB JAR

OSのファイルシステムの制限とJava EE 5仕様に従っていて，WARファイルまたはEJB JARファイルに格納できれば，ファイル名，WEB-INFディレクトリ以下のディレクトリ名，EJB JARのディレクトリ名，およびパスの長さに制限はありません。

(2)　SOAPロールとアクタの設定

SOAPロールおよびアクタの設定を省略した場合，または空文字を指定した場合は，デフォルトの値が設定されます。デフォルトの値は，SOAP 1.1仕様のSOAPメッセージの場合は"http://schemas.xmlsoap.org/soap/actor/next"，SOAP 1.2仕様のSOAPメッセージの場合は"http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"です。

(3)　soap:mustUnderstand属性の設定

soap:mustUnderstand属性には，"0"，"1"，"true"，または"false"を設定してください。それ以外の値を設定した場合は，"0"または"false"が設定されているものと見なされます。

26.9.2　Webサービスクライアント側のハンドラチェインの設定

Webサービスクライアント側でハンドラチェインを設定する場合，JAX-WS APIを使用します。

＜この項の構成＞

(1)　ハンドラチェインを設定するコードの追加

(2)　SOAPロールとアクタの設定

(3)　soap:mustUnderstand属性の設定

(1)　ハンドラチェインを設定するコードの追加

ハンドラチェインを設定するコードを追加したWebサービスクライアントの例を示します。

package com.example.sample.client;

import com.example.sample.TestJaxWs;
import com.example.sample.TestJaxWsService;
import com.example.sample.UserDefinedException;

public class TestClient {
   public static void main( String[] args ) {
       try {
           TestJaxWsService service = new TestJaxWsService();
           //ハンドラリゾルバを生成してサービスクラスに設定
           SampleHandlerResolver handlerResolver = new SampleHandlerResolver();
           service.setHandlerResolver( handlerResolver );
           TestJaxWs port = service.getTestJaxWs();

           String returnValue = port.jaxWsTest1( "Invocation test.", 1003 );

           System.out.println( "[RESULT] " + returnValue );
       }
       catch( UserDefinedException e ){
           e.printStackTrace();
       }
   }
}

ハンドラリゾルバの例を示します。

package com.example.sample.client;

import java.util.ArrayList;
import java.util.List;

import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;
import javax.xml.ws.soap.SOAPBinding;

public class SampleHandlerResolver implements HandlerResolver{
   //このハンドラリゾルバで保持するハンドラチェイン
   private List<Handler> handlerChain = new ArrayList<Handler>();

   //都合のよい方法でハンドラチェインにハンドラを追加しておく
   //ここではコンストラクタで追加する
   public SampleHandlerResolver(){
       this.handlerChain.add( new SomeHandler() );
   }

   //ハンドラチェインを返す
   public List<Handler> getHandlerChain( PortInfo portInfo ){
       //portInfoオブジェクトの内容を調べ
       //このハンドラリゾルバで処理可能であればハンドラチェインを返す
       if( portInfo.getBindingID().equals( SOAPBinding.SOAP11HTTP_BINDING )
           && portInfo.getPortName().equals( ... )
           && portInfo.getServiceName().equals( ... ) ){
           return this.handlerChain;
       }
       else{
           ...
       }
   }
}

javax.xml.ws.Service#setHandlerResolverメソッドで設定されたハンドラリゾルバへの変更は，それ以前に同じServiceオブジェクトから取得されたポートのハンドラチェインには影響しません。

使用できるJAX-WS APIについては，「15.　JAX-WS APIのサポート範囲」を参照してください。

(2)　SOAPロールとアクタの設定

SOAPロールおよびアクタの設定を省略した場合，または空文字を指定した場合は，デフォルトの値が設定されます。デフォルトの値は，SOAP 1.1仕様のSOAPメッセージの場合は"http://schemas.xmlsoap.org/soap/actor/next"，SOAP 1.2仕様のSOAPメッセージの場合は"http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"です。

(3)　soap:mustUnderstand属性の設定

soap:mustUnderstand属性には，"0"，"1"，"true"，または"false"を設定してください。それ以外の値を設定した場合は，"0"または"false"が設定されているものと見なされます。

27.　アドレッシング機能

この章では，Cosminexusのアドレッシング機能で実現できる通信方式，および使用時の設定について説明します。

＜この章の構成＞

27.1　アドレッシング機能とは

27.2　WSDLの拡張要素と拡張属性

27.3　アドレッシング機能で使用するアノテーションの注意事項

27.4　フォルトメッセージ

27.5　Webサービス側のJAX-WSエンジンの動作（アドレッシング機能使用時）

27.6　Webサービスクライアント側のJAX-WSエンジンの動作（アドレッシング機能使用時）

27.1　アドレッシング機能とは

アドレッシング機能とは，一般的な転送プロトコルと通信システムによって与えられるサーバ名やポート番号などの情報を標準化し，特定のトランスポートまたは通信システムから，Webサービスやメッセージを独立させるための機能です。アドレッシング機能では，同期通信と非同期通信の2種類の通信方式をサポートしています。

＜この節の構成＞

27.1.1　同期通信

27.1.2　非同期通信

27.1.1　同期通信

＜この項の構成＞

(1)　同期通信の流れ

(2)　同期通信の設定方法

(1)　同期通信の流れ

同期通信の場合，Webサービスにあるサービスメソッドの呼び出しのリクエストメッセージをWebサービスクライアントから送信し，Webサービスから結果のレスポンスメッセージを受信します。

同期通信の流れを次に示します。

図27-1　同期通信の流れ

(2)　同期通信の設定方法

同期通信を使用するには，アドレッシング・ヘッダのwsa:ReplyTo/wsa:Address要素に，WS-Addressing 1.0仕様で規定されている匿名URIである"http://www.w3.org/2005/08/addressing/anonymous"を設定します。

次の条件の場合に，アドレッシング・ヘッダに設定する内容の例を示します。

WebサービスのURI
http://localhost/addressing/AddNumbersImplService

Webサービスを呼び出す際のAction値
http://sample.com/input

匿名URI
http://www.w3.org/2005/08/addressing/anonymous

このメッセージを表すユニークなID
uuid:4cfb4248-a552-4e33-a610-6af94f2aad07

<To xmlns="http://www.w3.org/2005/08/addressing">
 http://localhost/addressing/AddNumbersImplService
</To>
<Action xmlns=http://www.w3.org/2005/08/addressing>
 http://sample.com/input
</Action>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
 <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">
 uuid:4cfb4248-a552-4e33-a610-6af94f2aad07
</MessageID>

27.1.2　非同期通信

＜この項の構成＞

(1)　非同期通信の流れ

(2)　非同期通信の設定方法

(3)　非同期通信の注意事項

(1)　非同期通信の流れ

アドレッシング機能を使用した非同期通信の場合，WebサービスクライアントはWebサービスにあるサービスメソッドを呼び出すリクエストメッセージを送信したあと，Webサービスから結果のレスポンスメッセージを受信しないで処理を終了します。Webサービスは，レスポンスメッセージをほかのWebサービスに対して送信します。

非同期通信の流れを次に示します。

図27-2　非同期通信の流れ

(2)　非同期通信の設定方法

非同期通信を使用するには，アドレッシング・ヘッダのwsa:ReplyTo/wsa:Address要素やwsa:FaultTo/wsa:Address要素に，レスポンスメッセージを送信するWebサービスのURLを設定します。

次の条件の場合に，アドレッシング・ヘッダに設定する内容の例を示します。

WebサービスのURI
http://localhost/addressing/AddNumbersImplService

Webサービスを呼び出す際のAction値
http://sample.com/input

Webサービスが正常終了した際の応答メッセージ送信先URL
http://localhost/responseserver/ResponseServerImplService

Webサービスが異常終了した際の応答メッセージ送信先URL
http://localhost/responseserver/FaultServerImplService

このメッセージを表すユニークなID
uuid:b19439fa-7a29-4045-93d9-56d6a2183afd

<To xmlns="http://www.w3.org/2005/08/addressing">
 http://localhost/addressing/AddNumbersImplService
</To>
<Action xmlns="http://www.w3.org/2005/08/addressing">
 http://sample.com/input
</Action>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
 <Address>
   http://localhost/responseserver/ResponseServerImplService
 </Address>
</ReplyTo>
<FaultTo xmlns="http://www.w3.org/2005/08/addressing">
 <Address>
   http://localhost/responseserver/FaultServerImplService
 </Address>
</FaultTo>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">
 uuid:b19439fa-7a29-4045-93d9-56d6a2183afd
</MessageID>

(3)　非同期通信の注意事項

非同期通信を使用するときの注意事項について説明します。

Webサービスがレスポンスメッセージの送信に失敗しても，Webサービスクライアントにはエラーは返りません。

アドレッシング・ヘッダのwsa:ReplyTo/wsa:Address要素やwsa:FaultTo/wsa:Address要素に，wsa:To要素に設定したWebサービスと同じURLを設定した場合，レスポンスメッセージの送信元と送信先が同じになり，通信が無限ループになるおそれがあります。

Webサービス側のJAX-WSエンジンは，リクエストメッセージとしてフォルトメッセージを受信した場合，サーバエラー（HTTPコード：500）として処理します。そのため，フォルトメッセージをリクエストメッセージとして受信するWebサービスは作成できません。

プロキシを経由している場合，非同期通信は使用できません。非同期通信を使用する場合，レスポンスメッセージはプロキシを経由しないで，ほかのWebサービスに送信してください。

27.2　WSDLの拡張要素と拡張属性

WS-Addressing 1.0仕様では，WSDLに記述する二つの拡張要素と一つの拡張属性が定義されています。ここでは，このWSDL拡張要素と拡張属性について説明します。

＜この節の構成＞

27.2.1　WSDLの拡張要素

27.2.2　WSDLの拡張属性

27.2.1　WSDLの拡張要素

Cosminexusで使用できるWS-Addressing 1.0仕様のWSDL拡張要素を次に示します。

wsaw:UsingAddressing要素
Webサービスでアドレッシング機能が有効かどうかを示します。
この要素は，wsdl:definitions/wsdl:binding要素，またはwsdl:definitions/wsdl:service/wsdl:port要素の子要素として記述できます。この要素を記述したWebサービスでは，アドレッシング機能が有効になります。

wsdl:required属性
リクエストメッセージにアドレッシング・ヘッダが必須かどうかを示します。
この属性に"true"を指定した場合，アドレッシング・ヘッダは必須です。"false"を指定した場合，アドレッシング・ヘッダは任意です。

なお，wsaw:UsingAddressing要素には，子要素または名前空間"http://www.w3.org/2006/05/addressing/wsdl"に属する属性は記述できません。記述した場合，cjwsimportコマンド実行時に標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。

wsaw:Anonymous要素
アドレッシング・ヘッダの応答エンドポイント（wsa:From/wsa:Address要素，wsa:ReplyTo/wsa:Address要素，およびwsa:FaultTo/wsa:Address要素）に匿名URIを使用できるかどうかを示します。
この要素は，wsdl:definitions/wsdl:binding/wsdl:operation要素の子要素として記述できます。指定できる値は次のとおりです。

optional
リクエストメッセージの応答エンドポイントに匿名URIを使用するかどうかは任意です。

required
リクエストメッセージの応答エンドポイントとして，常に匿名URIを使用する必要があります。

prohibited
リクエストメッセージの応答エンドポイントとして，匿名URIを使用してはいけません。

wsaw:Anonymous要素に上記以外の値は設定できません。上記以外の値を設定した場合，cjwsimportコマンド実行時に標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。また，wsaw:Anonymous要素には子要素または名前空間"http://www.w3.org/2006/05/addressing/wsdl"に属する属性は記述できません。記述した場合，cjwsimportコマンド実行時に標準エラー出力とログにエラーメッセージが出力され，cjwsimportコマンドの処理が終了されます（KDJW51029-E）。
なお，Webサービス側のJAX-WSエンジンが発行したWSDLファイルや，cjwsgenコマンドで生成したWSDLファイルには，この要素は記述されていません。匿名URIが指定された場合の動作を制御する場合，この要素を記述したWSDLファイルを用意してください。

27.2.2　WSDLの拡張属性

Cosminexusで使用できるWS-Addressing 1.0仕様のWSDL拡張属性を次に示します。

wsaw:Action属性
wsdl:input要素，wsdl:output要素，およびwsdl:fault要素とアドレッシング・ヘッダのAction値を結びつけるための拡張属性です。
この属性は，wsdl:portType/wsdl:operation要素の子要素であるwsdl:input要素，wsdl:output要素，およびwsdl:fault要素の拡張属性として記述できます。それ以外の要素の拡張属性として記述した場合は，無視されます。この属性に空白を設定した場合，空白がそのままAction値として使用されます。また，空文字（""）を設定した場合，wsaw:Action属性が無視されます。
この属性がWSDLに記述されている場合，cjwsimportコマンドで生成されるSEIに，javax.xml.ws.Actionアノテーションやjavax.xml.ws.FaultActionアノテーションが付与されます。javax.xml.ws.Actionアノテーションについては「13.2.10　javax.xml.ws.Actionアノテーション」を，javax.xml.ws.FaultActionアノテーションについては「13.2.12　javax.xml.ws.FaultActionアノテーション」を参照してください。
wsaw:Action属性を使用した場合のマッピング例を次に示します。

図27-3　wsaw:Action属性を使用した場合のマッピング例

27.3　アドレッシング機能で使用するアノテーションの注意事項

アドレッシング機能を使用するときの注意事項について説明します。

javax.xml.ws.soap.Addressingアノテーションをサービス実装クラスに指定してください。

cjwsimportコマンドを実行して生成されたサービス実装クラスのスケルトンクラスには，javax.xml.ws.soap.Addressingアノテーションがマッピングされません。そのため，サービス実装クラスのスケルトンクラスを使用する場合は，javax.xml.ws.soap.Addressingアノテーションを指定する必要があります。

アドレッシング機能で使用できるアノテーションについては，「13.2.1　アノテーション一覧」を参照してください。

27.4　フォルトメッセージ

ここでは，アドレッシング機能を使用した場合のフォルトメッセージについて説明します。

＜この節の構成＞

27.4.1　サポートしていないサブサブコード

27.4.2　フォルトメッセージの注意事項

27.4.1　サポートしていないサブサブコード

WS-Addressing 1.0仕様では，フォルトメッセージで使用されるサブサブコードがあらかじめ規定されています。あらかじめ規定されているサブサブコードのうち，Cosminexusでサポートしていないサブサブコードを次に示します。

wsa:InvalidEPR

wsa:DuplicateMessageID

wsa:ActionMismatch※

注※

SOAP 1.1仕様の場合，サポートしています。

27.4.2　フォルトメッセージの注意事項

アドレッシング機能を使用するときの注意事項について説明します。

サブコードにwsa:MessageAddressingHeaderRequiredを含むフォルトメッセージ
Webサービス側のJAX-WSエンジンが，サブコードにwsa:MessageAddressingHeaderRequiredを含むフォルトメッセージ※1を送信する場合，フォルトメッセージのサブサブコードにサブコードと同じ値（wsa:MessageAddressingHeaderRequired）を設定します。

サブコードにwsa:ActionNotSupportedを含むフォルトメッセージ
Webサービス側のJAX-WSエンジンが，サブコードにwsa:ActionNotSupportedを含むフォルトメッセージ※2を送信する場合，フォルトメッセージのサブサブコードに値を設定しません。

注※1

アドレッシング・ヘッダに，必須の要素がないフォルトメッセージ

注※2

アドレッシング・ヘッダのwsa:Action要素の値がWebサービス側のwsa:Action値と異なるフォルトメッセージ

27.5　Webサービス側のJAX-WSエンジンの動作（アドレッシング機能使用時）

ここでは，アドレッシング機能を使用した場合の，Webサービス側のJAX-WSエンジンの動作について説明します。

＜この節の構成＞

27.5.1　リクエストメッセージ受信時の動作

27.5.2　レスポンスメッセージ

27.5.3　wsaw:Anonymous要素指定時の動作

27.5.4　Addressingアノテーション指定時の動作

27.5.5　Actionアノテーション指定時の動作

27.5.6　wsa:Action要素指定時の動作

27.5.7　wsa:MessageID要素を指定していない場合の動作

27.5.1　リクエストメッセージ受信時の動作

アドレッシング機能を使用する場合，サービス実装クラスに指定するjavax.xml.ws.soap.Addressingアノテーションに設定されている要素の内容によって，リクエストメッセージを受信したときの動作が異なります。javax.xml.ws.soap.Addressingアノテーションと，リクエストメッセージを受信したときの動作の関係を次の表に示します。

表27-1　javax.xml.ws.soap.Addressingアノテーションとリクエストメッセージ受信時の動作

項番
javax.xml.ws.soap.Addressingアノテーション
リクエストメッセージ受信時の動作

アドレッシング・ヘッダ
通信

enabled要素
required要素
リクエストメッセージ
レスポンスメッセージ

1
true
true
○
○
成功

2
×
×
（フォルトメッセージ）
失敗

3
false
○
○
成功

4
×
×
成功

5
false
true
○
×
成功

6
×
×
成功

7
false
○
×
成功

8
×
×
成功

（凡例）

○：アドレッシング・ヘッダがあります。

×：アドレッシング・ヘッダはありません。

サービス実装クラスにjavax.xml.ws.soap.Addressingアノテーションを指定しないと，アドレッシング機能は無効となります。その場合，アドレッシング・ヘッダの有無に関係なく，Webサービスはリクエストメッセージを受信します。また，アドレッシング機能が無効になっているため，受信したリクエストメッセージにアドレッシング・ヘッダが設定されていた場合も，Webサービスはアドレッシング・ヘッダなしのレスポンスメッセージを送信します。

27.5.2　レスポンスメッセージ

ここでは，レスポンスメッセージについて説明します。

＜この項の構成＞

(1)　レスポンスメッセージの送信先

(2)　http://www.w3.org/2005/08/addressing/none指定時の動作

(1)　レスポンスメッセージの送信先

リクエストメッセージに含まれるアドレッシング・ヘッダの応答エンドポイントに匿名URI以外を使用している場合，wsa:From/wsa:Address要素，wsa:ReplyTo/wsa:Address要素，およびwsa:FaultTo/wsa:Address要素の有無によって，レスポンスメッセージの送信先が異なります。

各要素の有無とレスポンスメッセージの送信先の関係を次の表に示します。

表27-2　レスポンスメッセージの送信先

項番 | アドレッシング・ヘッダ | 送信するレスポンスメッセージの種類 | レスポンスメッセージの送信先
wsa:From/wsa:Address要素 | wsa:ReplyTo/wsa:Address要素 | wsa:FaultTo/wsa:Address要素
1 | 存在しない | 存在しない | 存在しない | 正常メッセージ | HTTPの送信元
2 | 異常メッセージ | HTTPの送信元
3 | 存在する | 正常メッセージ | HTTPの送信元
4 | 異常メッセージ | wsa:FaultTo/wsa:Address要素
5 | 存在する | 存在しない | 正常メッセージ | wsa:ReplyTo/wsa:Address要素
6 | 異常メッセージ | wsa:ReplyTo/wsa:Address要素
7 | 存在する | 正常メッセージ | wsa:ReplyTo/wsa:Address要素
8 | 異常メッセージ | wsa:FaultTo/wsa:Address要素
9 | 存在する | 存在しない | 存在しない | 正常メッセージ | HTTPの送信元
10 | 異常メッセージ | HTTPの送信元
11 | 存在する | 正常メッセージ | HTTPの送信元
12 | 異常メッセージ | wsa:FaultTo/wsa:Address要素
13 | 存在する | 存在しない | 正常メッセージ | wsa:ReplyTo/wsa:Address要素
14 | 異常メッセージ | wsa:ReplyTo/wsa:Address要素
15 | 存在する | 正常メッセージ | wsa:ReplyTo/wsa:Address要素
16 | 異常メッセージ | wsa:FaultTo/wsa:Address要素

(2)　http://www.w3.org/2005/08/addressing/none指定時の動作

http://www.w3.org/2005/08/addressing/noneは，WS-Addressing 1.0仕様でメッセージを送信しないことを示すURIです。このURIがアドレッシング・ヘッダのwsa:ReplyTo/wsa:Address要素やwsa:FaultTo/wsa:Address要素に設定されている場合，レスポンスメッセージは送信されません。

27.5.3　wsaw:Anonymous要素指定時の動作

WSDLにwsaw:UsingAddressing要素とwsaw:Anonymous要素の両方が記述されている場合，受信したリクエストメッセージのアドレッシング・ヘッダにある応答エンドポイントの値によっては，リクエストメッセージの受信に失敗し，フォルトメッセージを返されることがあります。wsaw:Anonymous要素とWebサービス側のJAX-WSエンジンの動作の関係を次の表に示します。

表27-3　wsaw:Anonymous要素とサービス側のJAX-WSエンジンの動作

項番 | wsaw:Anonymous要素の値 | 応答エンドポイントの値 | Webサービス側のJAX-WSエンジンの動作
1 | optional | 匿名URI | 正常終了
2 | 非匿名URI | 正常終了
3 | required | 匿名URI | 正常終了
4 | 非匿名URI | 受信失敗（フォルトメッセージ）
5 | prohibited | 匿名URI | 受信失敗（フォルトメッセージ）
6 | 非匿名URI | 正常終了

wsaw:Anonymous要素の指定値については，「27.2.1　WSDLの拡張要素」を参照してください。

27.5.4　Addressingアノテーション指定時の動作

サービス実装クラスにjavax.xml.ws.soap.Addressingアノテーションを指定した場合，Webサービス側のJAX-WSエンジンが発行するWSDLファイルや，cjwsgenコマンドを実行して生成されるWSDLファイルは次のようになります。

WSDLファイルには，wsaw:UsingAddressing要素だけでなく，wsdl:input要素にwsaw:Action属性も付与されます。付与される値は，WS-Addressing 1.0仕様で決められているデフォルトのAction値です。デフォルトのAction値については，WS-Addressing 1.0仕様を参照してください。

javax.xml.ws.soap.Addressingアノテーションのrequired要素に"false"を指定した場合，WSDLファイルにはwsaw:UsingAddressing要素のwsdl:required属性が付与されません。

27.5.5　Actionアノテーション指定時の動作

SEIのメソッドに指定するjavax.xml.ws.Actionアノテーションのfault要素に，メソッドのthrows節で宣言した例外クラス以外を示したjavax.xml.ws.FaultActionアノテーションを指定した場合，javax.xml.ws.FaultActionアノテーションは無視されます。

27.5.6　wsa:Action要素指定時の動作

ここでは，wsa:Action要素の値，およびwsa:Action要素指定時の注意事項について説明します。

＜この項の構成＞

(1)　wsa:Action要素の値

(2)　リクエストメッセージ受信時の注意事項

(1)　wsa:Action要素の値

アドレッシング・ヘッダのwsa:Action要素の値は，次の条件によって変化します。

SEIのメソッドにjavax.xml.ws.Actionアノテーションが指定されているか

WSDLにwsaw:Action属性が記述されているか

javax.xml.ws.Actionアノテーションおよびwsaw:Action属性と，wsa:Action要素の値の関係を次の表に示します。

表27-4　wsa:Action要素の値

項番 | Actionアノテーション | wsaw:Action属性 | wsa:Action要素の値
1 | 指定あり | 記述あり | Actionアノテーションの値
2 | 記述なし | Actionアノテーションの値
3 | 指定なし | 記述あり | WSDLのwsaw:Action属性の値
4 | 記述なし | WS-Addressing 1.0仕様で決められているデフォルトのAction値

非同期通信の応答用またはフォルト用のWebサービスが使用するアドレッシング・ヘッダのwsa:Action要素の値も，上記のとおりに指定してください。

(2)　リクエストメッセージ受信時の注意事項

リクエストメッセージを受信するときの注意事項について説明します。

wsa:Action要素の値が，受信したリクエストメッセージのアドレッシング・ヘッダとサービス側のJAX-WSエンジンが使用するアドレッシング・ヘッダで異なる場合，Webサービスの呼び出しに失敗します。Webサービス側のJAX-WSエンジンでエラーが発生し，WS-Addressing 1.0仕様で規定されているサブサブコードであるwsa:ActionNotSupportedを含んだフォルトメッセージが送信されます。

受信したリクエストメッセージのアドレッシング・ヘッダのwsa:Action要素の値とSOAPActionの値が異なる場合，エラーが発生します。ただし，SOAPActionの値が空文字（""）の場合は，wsa:Action要素の値が空文字以外でもエラーは発生しません。エラーが発生した場合は，Webサービス側のJAX-WSエンジンは，WS-Addressing 1.0仕様で規定されているサブサブコードであるwsa:ActionMismatchを含んだフォルトメッセージを送信します。

27.5.7　wsa:MessageID要素を指定していない場合の動作

wsa:MessageID要素を含まないアドレッシング・ヘッダは，正常ではないと見なされます。そのため，Webサービス側のJAX-WSエンジンでエラーが発生し，WS-Addressing 1.0仕様で規定されているサブコードであるwsa:MessageAddressingHeaderRequiredを含んだフォルトメッセージを送信します。

27.6　Webサービスクライアント側のJAX-WSエンジンの動作（アドレッシング機能使用時）

ここでは，アドレッシング機能を使用した場合の，Webサービスクライアント側のJAX-WSエンジンの動作について説明します。

＜この節の構成＞

27.6.1　メッセージ送受信時の動作

27.6.2　AddressingFeatureクラスと匿名URI

27.6.3　wsaw:Action属性を指定していない場合の動作

27.6.4　wsa:Action要素の注意事項

27.6.5　SEIの取得に関する注意事項

27.6.1　メッセージ送受信時の動作

アドレッシング機能を使用する場合，SEIを取得するときに使用するAddressingFeatureクラスの生成時に設定した引数によって，メッセージを送受信したときの動作が異なります。

AddressingFeatureクラスと，メッセージを送信したときの動作の関係を次の表に示します。

表27-5　AddressingFeatureクラスとメッセージ送信時の動作

項番 | AddressingFeatureクラス | リクエストメッセージ送信時の動作
enabled | required
1 | true | true | ○
2 | false | ○
3 | false | true | ×
4 | false | ×

（凡例）

○：メッセージにアドレッシング・ヘッダが付与されます。

×：メッセージにアドレッシング・ヘッダは付与されません。

AddressingFeatureクラスと，メッセージを受信したときの動作の関係を次の表に示します。

表27-6　AddressingFeatureクラスとメッセージ受信時の動作

項番 | AddressingFeatureクラス | レスポンスメッセージ受信時の動作
enabled | required | アドレッシング・ヘッダ | 通信
1 | true | true | ○ | 成功
2 | × | 失敗
3 | false | ○ | 成功
4 | × | 成功
5 | false | true | ○ | 成功
6 | × | 成功
7 | false | ○ | 成功
8 | × | 成功

（凡例）

○：アドレッシング・ヘッダがあります。

×：アドレッシング・ヘッダはありません。

27.6.2　AddressingFeatureクラスと匿名URI

AddressingFeatureクラスを使用してSEIを取得した場合，Webサービスクライアント側のJAX-WSエンジンはアドレッシング・ヘッダのwsa:ReplyTo/wsa:Address要素に匿名URIを設定します。そのとき，呼び出そうとしたWebサービスのWSDLのwsaw:Anonymous要素に"prohibited"が指定されていると，匿名URIが使用できないため，サービスメソッドの呼び出し時にWebServiceExceptionが発生します。

wsa:Anonymous要素に"prohibited"が指定されているWebサービスと通信する場合は，非匿名URIを設定したアドレッシング・ヘッダを作成してください。

27.6.3　wsaw:Action属性を指定していない場合の動作

WSDLにwsaw:Action属性が記述されていない場合，Webサービスクライアント側のJAX-WSエンジンが送信するリクエストメッセージのアドレッシング・ヘッダのwsa:Action要素の値には，WS-Addressing 1.0仕様で決められているデフォルトのAction値が設定されます。デフォルトのAction値については，WS-Addressing 1.0仕様を参照してください。

27.6.4　wsa:Action要素の注意事項

Webサービスクライアント側のJAX-WSエンジンが受信したレスポンスメッセージで，アドレッシング・ヘッダのwsa:Action要素の値とSOAPActionの値が異なる場合の動作は保証されません。

27.6.5　SEIの取得に関する注意事項

W3CEndpointReferenceクラスのgetPort(Class<T>, WebServiceFeature...)メソッドを使用すると，WebServiceExceptionが発生してSEIを取得できません。SEIを取得する場合は，ServiceクラスのgetPort(EndpointReference, Class<T>, WebServiceFeature...)メソッドを使用してください。

28.　SEIを起点とした開発の例（アドレッシング機能使用時）

この章では，アドレッシング機能を使用する場合に，SEIを起点としたWebサービスを開発するときの例を説明します。

＜この章の構成＞

28.1　開発例の構成（SEI起点・アドレッシング）

28.2　開発例の流れ（SEI起点・アドレッシング）

28.3　Webサービスの開発例（SEI起点・アドレッシング）

28.4　デプロイと開始の例（SEI起点・アドレッシング）

28.5　Webサービスクライアントの開発例（SEI起点・アドレッシング）

28.6　Webサービスの実行例（SEI起点・アドレッシング）

28.1　開発例の構成（SEI起点・アドレッシング）

この章で説明する開発例では，SEIを起点としたWebサービスを開発します。

開発するWebサービスの構成を次の表に示します。

表28-1　Webサービスの構成（SEI起点・アドレッシング）

項番 | 項目 | 値
1 | デプロイするJ2EEサーバの名称 | jaxwsserver
2 | Webサーバのホスト名とポート番号 | webhost:8085
3 | ネーミングサーバのURL | corbaname::testserver:900
4 | コンテキストルート | addressing
5 | スタイル | document/literal/wrapped
6 | 名前空間URI | http://sample.com
7 | ポートタイプ | 個数 | 1
8 | ローカル名 | AddNumbersImpl
9 | オペレーション | 個数 | 3
10 | ローカル名1 | add
11 | ローカル名2 | add2
12 | ローカル名3 | add3
13 | サービス | 個数 | 1
14 | ローカル名 | AddNumbersImplService
15 | ポート | 個数 | 1
16 | ローカル名 | AddNumbersImplPort
17 | Webサービス実装クラス | com.sample.AddNumbersImpl
18 | Webサービス実装クラスで公開するメソッド | 個数 | 3
19 | メソッド名1 | add
20 | メソッド名2 | add2
21 | メソッド名3 | add3
22 | Webサービス実装クラスのメソッドでスローする例外 | 個数 | 1
23 | クラス名 | com.sample.AddNumbersFault

Webサービス開発時のカレントディレクトリの構成を次に示します。

表28-2　カレントディレクトリの構成（SEI起点・アドレッシング）

ディレクトリ
説明

c:¥temp¥jaxws¥works¥addressing
カレントディレクトリです。

┣
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
┃
server¥
Webサービスの開発で使用します。

┣
┃
┃
META-INF¥
EARファイルのMETA-INFディレクトリに対応します。

┗
application.xml
「28.3.4　application.xmlを作成する」で作成します。

┣
┃
┃
┃
src¥
Webサービスのソースファイル（*.java）を格納します。「28.3.1　Webサービス実装クラスを作成する」および「28.3.2　Javaソースを生成する」で使用します。

┣
┃
┃
┃
┃
WEB-INF¥
WARファイルのWEB-INFディレクトリに対応します。

┣
web.xml
「28.3.3　web.xmlを作成する」で作成します。

┗
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「28.3.2　Javaソースを生成する」で使用します。

┣
addressing.ear
「28.3.5　EARファイルを作成する」で作成します。

┗
addressing.war

┗
client¥
Webサービスクライアントの開発で使用します。

┣
┃
┃
┃
┃
src¥
Webサービスクライアントのソースファイル（*.java）を格納します。「28.5.1　サービスクラスを生成する」および「28.5.2　Webサービスクライアントの実装クラスを作成する」で使用します。

┣
┃
┃
classes¥
コンパイルしたクラスファイル（*.class）を格納します。「28.5.3　Webサービスクライアントの実装クラスをコンパイルする」で使用します。

┣
┃
┃
usrconf.cfg
「28.6.1　Javaアプリケーション用オプション定義ファイルを作成する」で作成します。

┗
usrconf.properties
「28.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する」で作成します。

カレントディレクトリのパスは，開発する環境に合わせて変更してください。

なお，以降の説明では，この表に示すディレクトリおよびファイル名を使用します。コマンド実行例やJavaソースなどで太字になっている部分は，この例で使用する指定値や生成される値を示します。構築する環境に合わせて読み替えてください。

また，この章で説明する開発例では，WebサービスとWebサービスクライアントを同じ環境で開発しますが，別の環境で開発することもできます。別の環境で開発する場合は，それぞれの環境に合わせて，カレントディレクトリのパスを読み替えてください。

28.2　開発例の流れ（SEI起点・アドレッシング）

この章で説明する開発例では，次の流れで開発および実行します。

Webサービスの開発

Webサービス実装クラスを作成する（28.3.1）

aptコマンドを実行し，追加のJavaソースを生成する（28.3.2）

web.xmlを作成する（28.3.3）

application.xmlを作成する（28.3.4）

EARファイルを作成する（28.3.5）

デプロイと開始

EARファイルをデプロイする（28.4.1）

Webサービスを開始する（28.4.2）

Webサービスクライアントの開発

cjwsimportコマンドを実行し，サービスクラスを生成する（28.5.1）

Webサービスクライアントの実装クラスを作成する（28.5.2）

Webサービスクライアントの実装クラスをコンパイルする（28.5.3）

Webサービスの実行

Javaアプリケーション用オプション定義ファイルを作成する（28.6.1）

Javaアプリケーション用ユーザプロパティファイルを作成する（28.6.2）

Webサービスクライアントを実行する（28.6.3）

28.3　Webサービスの開発例（SEI起点・アドレッシング）

ここでは，SEIを起点とした場合のWebサービス（アドレッシング機能を使用）の開発例を説明します。

＜この節の構成＞

28.3.1　Webサービス実装クラスを作成する

28.3.2　Javaソースを生成する

28.3.3　web.xmlを作成する

28.3.4　application.xmlを作成する

28.3.5　EARファイルを作成する

28.3.1　Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは，受け取った要求メッセージの内容を計算して，応答メッセージを返すWebサービス実装クラスを作成します。

Webサービス実装クラスの作成例を次に示します。

package com.sample;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Action;
import javax.xml.ws.FaultAction;

@WebService(name = "AddNumbers", targetNamespace = "http://sample.com/")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
interface AddNumbers {

   @Action(input = "http://sample.com/input",
           output = "http://sample.com/output")
   public int add(int number1, int number2) throws AddNumbersFault;

   public int add2(int number1, int number2) throws AddNumbersFault;

   @Action(input = "http://sample.com/input3",
           output = "http://sample.com/output3",
           fault = {@FaultAction(className = AddNumbersFault.class, value = "http://sample.com/fault3")})
   public int add3(int number1, int number2) throws AddNumbersFault;
}

作成したAddNumbers.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。

次に，SEIを実装したWebサービスの本体を作成します。ここでは，受け取った要求メッセージの内容を計算して応答メッセージとして返すWebサービス実装クラスcom.sample.AddNumbersImplを作成します。

Webサービスの本体の作成例を次に示します。

package com.sample;

import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;

@Addressing
@WebService(endpointInterface = "com.sample.AddNumbers")
public class AddNumbersImpl implements AddNumbers {

   public int add(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   public int add2(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   public int add3(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   int impl(int number1, int number2) throws AddNumbersFault {
       if (number1 < 0 || number2 < 0) {
           throw new AddNumbersFault("Negative numbers can't be added!",
                                     "Numbers: " + number1 + ", " + number2);
       }
       return number1 + number2;
   }
}

作成したAddNumbersImpl.javaは，UTF-8形式で，c:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。

また，com.sample.AddNumbersImplクラスでスローしている例外クラスcom.sample.AddNumbersFaultを作成します。

例外クラスの作成例を次に示します。

package com.sample;

public class AddNumbersFault extends Exception {

   String detail;

   public AddNumbersFault(String message, String detail) {
       super(message);
       this.detail = detail;
   }

   public String getDetail() {
       return detail;
   }
}

作成したAddNumbersFault.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。

28.3.2　Javaソースを生成する

aptコマンドを実行して，Webサービス実装クラスからWebサービスの開発に必要な追加のJavaソースを生成します。また，Webサービス実装クラスを含めてコンパイルします。aptコマンドについては，「11.2　aptコマンド」を参照してください。

aptコマンドの実行例を次に示します。

Windows(x86)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥addressing¥server¥
> mkdir WEB-INF¥classes¥
> apt -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbers.java src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

Windows(x64)の場合

> set HNTRLIB2_HOME=<HNTRLib2インストールディレクトリ>
> cd c:¥temp¥jaxws¥works¥addressing¥server¥
> mkdir ¥WEB-INF¥classes¥
> apt -factory com.cosminexus.istack.ws.AnnotationProcessorFactoryImpl -J-Dcosminexus.home="%COSMINEXUS_HOME%" -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxp.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmstax.jar;%HNTRLIB2_HOME%¥classes¥hntrlib2j64.jar;%HNTRLIB2_HOME%¥classes¥hntrlibMj64.jar" -d WEB-INF¥classes¥ -s src src¥com¥sample¥AddNumbers.java src¥com¥sample¥AddNumbersImpl.java src¥com¥sample¥AddNumbersFault.java

<HNTRLib2インストールディレクトリ>の部分には，次のコマンドの実行結果を指定します。

Windows(x86)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf.exe" HNTR2INSTDIR

Windows(x64)の場合

> "%COSMINEXUS_HOME%¥common¥bin¥gethntr2conf64.exe" HNTR2INSTDIR

aptコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥jaxws¥ディレクトリに，Javaソースが生成されます。

生成物の一覧を次の表に示します。

表28-3　Javaソース生成時の生成物（SEI起点・アドレッシング）

ファイル名 | 説明
Add.java | addメソッドに対応するリクエストbeanです。
AddResponse.java | addメソッドに対応するレスポンスbeanです。
Add2.java | add2メソッドに対応するリクエストbeanです。
Add2Response.java | add2メソッドに対応するレスポンスbeanです。
Add3.java | add3メソッドに対応するリクエストbeanです。
Add3Response.java | add3メソッドに対応するレスポンスbeanです。
AddNumbersFaultBean.java | AddNumbersFaultに対応するフォルトbeanです。

ファイル名のAdd，Add2，Add3，およびAddNumbersFaultは，Webサービス実装クラスで公開するメソッド名およびWebサービス実装クラスでスローする例外のクラス名の記述によって変わります。

28.3.3　web.xmlを作成する

WARファイルの構成要素として必要なweb.xmlを作成します。

web.xmlの作成例を次に示します。

<<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Sample web service &quot;addressing&quot;</description>
 <display-name>Sample_web_service_addressing</display-name>
 <listener>
   <listener-class>

com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/AddNumbersImplService</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

作成したweb.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥WEB-INF¥ディレクトリに保存します。web.xmlの設定項目については，「3.4　web.xmlの作成」を参照してください。

28.3.4　application.xmlを作成する

EARファイルの構成要素として必要なapplication.xmlを作成します。

application.xmlの作成例を次に示します。なお，Webサービスとしてapplication.xmlに設定する項目はありません。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;addressing&quot;</description>
 <display-name>Sample_application_addressing</display-name>
 <module>
   <web>
     <web-uri>addressing.war</web-uri>
     <context-root>addressing</context-root>
   </web>
 </module>
</application>

作成したapplication.xmlは，UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥META-INF ¥ディレクトリに保存します。application.xmlを作成するときの注意事項については，マニュアル「Cosminexus アプリケーションサーバ アプリケーション開発ガイド」の「5.2.4　application.xml編集時の注意事項」を参照してください。

28.3.5　EARファイルを作成する

jarコマンドを使用して，これまでに作成したファイルを含めたEARファイルを作成します。

EARファイルの作成例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥server¥
> jar cvf addressing.war .¥WEB-INF
> jar cvf addressing.ear .¥addressing.war .¥META-INF¥application.xml

jarコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥addressing¥server ¥ディレクトリにaddressing.earが作成されます。

jarコマンドについては，JDKのドキュメントを参照してください。

28.4　デプロイと開始の例（SEI起点・アドレッシング）

ここでは，アドレッシング機能を使用する場合に，SEIを起点としたときのデプロイと開始の例を説明します。

＜この節の構成＞

28.4.1　EARファイルをデプロイする

28.4.2　Webサービスを開始する

28.4.1　EARファイルをデプロイする

cjimportappコマンドを使用して，作成したEARファイルをJ2EEサーバにデプロイします。

デプロイの例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjimportapp" jaxwsserver -nameserver corbaname::testserver:900 -f addressing.ear

cjimportappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjimportapp（J2EEアプリケーションのインポート）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションをデプロイ（インポート）する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.3　J2EEアプリケーションのインポート」を参照してください。

28.4.2　Webサービスを開始する

cjstartappコマンドを使用して，Webサービスを開始します。

Webサービスを開始する例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥server¥
> "%COSMINEXUS_HOME%¥CC¥admin¥bin¥cjstartapp" jaxwsserver -nameserver corbaname::testserver:900 -name Sample_application_addressing

cjstartappコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartapp（J2EEアプリケーションの開始）」を参照してください。

運用管理ポータルを使用して，J2EEアプリケーションを開始する方法については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「12.3.1　J2EEアプリケーションの開始」を参照してください。

28.5　Webサービスクライアントの開発例（SEI起点・アドレッシング）

ここでは，SEIを起点とした場合のWebサービスクライアント（アドレッシング機能を使用）の開発例を説明します。

＜この節の構成＞

28.5.1　サービスクラスを生成する

28.5.2　Webサービスクライアントの実装クラスを作成する

28.5.3　Webサービスクライアントの実装クラスをコンパイルする

28.5.1　サービスクラスを生成する

cjwsimportコマンドを実行すると，サービスクラスなどWebサービスクライアントの開発に必要なJavaソースが生成されます。cjwsimportコマンドについては，「11.1　cjwsimportコマンド」を参照してください。

cjwsimportコマンドの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥client¥
> mkdir src¥
> mkdir classes¥
> "%COSMINEXUS_HOME%¥jaxws¥bin¥cjwsimport.bat" -s src -d classes http://webhost:8085/addressing/AddNumbersImplService?wsdl

cjwsimportコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥addressing¥client¥src¥com¥sample¥ディレクトリにJavaソースが生成されます。

生成物の一覧を次の表に示します。

表28-4　サービスクラス生成時の生成物（SEI起点・アドレッシング）

ファイル名 | 説明
Add.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
AddResponse.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
Add2.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
Add2Response.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
Add3.java | WSDL定義の「オペレーション」の要求メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
Add3Response.java | WSDL定義の「オペレーション」の応答メッセージのwrapper要素が参照する型に対応するJavaBeanクラスです。
ObjectFactory.java | JAXB 2.1仕様のObjectFactoryクラスです。
package-info.java | package-info.javaファイルです。
AddNumbers.java | WSDL定義の「サービス」に対応するサービスエンドポイントインタフェース（SEI）です。
AddNumbersImplService.java | サービスクラスです。
AddNumbersFault.java | WSDL定義のAddNumbersFaultに対応するJavaBeanクラスです。
AddNumbersFault_Exception.java | フォルトbeanのラッパ例外クラスです。

ファイル名のAdd，Add2，Add3，AddNumbers，およびAddNumbersImplServiceは，オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名の記述によって変わります。オペレーションのローカル名，ポートタイプのローカル名，およびサービスのローカル名のマッピングについては，次の個所を参照してください。

「12.1.2　ポートタイプからSEI名へのマッピング」

「12.1.3　オペレーションからメソッド名へのマッピング」

「12.1.4　メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）」

「12.1.5　メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）」

28.5.2　Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して3回の呼び出しをするWebサービスクライアントの作成例を次に示します。

package com.sample.client;

import javax.xml.namespace.QName;
import javax.xml.ws.soap.AddressingFeature;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;

import com.sample.AddNumbers;
import com.sample.AddNumbersImplService;
import com.sample.AddNumbersFault_Exception;

public class TestClient {

   int number1 = 10;
   int number2 = 10;
   int negativeNumber = -10;

   public static void main(String[] args) {
       TestClient client = new TestClient();

       client.existActionAnnotation1();
       client.existActionAnnotation2();
       client.notExistActionAnnotation();
       client.existFaultActionAnnotation();
       client.notExistFaultActionAnnotation();
   }

   public void existActionAnnotation1() {
       System.out.println("existActionAnnotation1");
       try {
           AddressingFeature feature = new AddressingFeature();

           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbers stub = service.getAddNumbersImplPort(feature);
           int result = stub.add(number1, number2);
           assert result == 20;
       } catch (Exception ex) {
           ex.printStackTrace();
           assert false;
       }
   }

   public void existActionAnnotation2() {
       System.out.println("existActionAnnotation2");
       try {
           AddressingFeature feature = new AddressingFeature();
           W3CEndpointReferenceBuilder eprBuilder = new W3CEndpointReferenceBuilder();
           eprBuilder.address("http://webhost:8085/addressing/AddNumbersImplService");
           eprBuilder.serviceName(new QName("http://sample.com/", "AddNumbersImplService"));
           eprBuilder.endpointName(new QName("http://sample.com/", "AddNumbersImplPort"));
           W3CEndpointReference epr = eprBuilder.build();

           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbers stub = service.getPort(epr, AddNumbers.class, feature);
           int result = stub.add(number1, number2);
           assert result == 20;
       } catch (Exception ex) {
           ex.printStackTrace();
           assert false;
       }
   }

   public void notExistActionAnnotation() {
       System.out.println("notExistActionAnnotation");
       try {
           AddressingFeature feature = new AddressingFeature();

           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbers stub = service.getAddNumbersImplPort(feature);
           int result = stub.add2(number1, number2);
           assert result == 20;
       } catch (Exception ex) {
           ex.printStackTrace();
           assert false;
       }
   }

   public void existFaultActionAnnotation() {
       System.out.println("existFaultActionAnnotation");
       try {
           AddressingFeature feature = new AddressingFeature();

           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbers stub = service.getAddNumbersImplPort(feature);
           stub.add3(negativeNumber, number2);
           assert false;
       } catch (AddNumbersFault_Exception e) {
           System.out.println("This is expected exception");
       } catch (Exception e) {
           e.printStackTrace();
           assert false;
       }
   }

   public void notExistFaultActionAnnotation() {
       System.out.println("notExistFaultActionAnnotation");
       try {
           AddressingFeature feature = new AddressingFeature();

           AddNumbersImplService service = new AddNumbersImplService();
           AddNumbers stub = service.getAddNumbersImplPort(feature);
           stub.add(negativeNumber, number2);
           assert false;
       } catch (AddNumbersFault_Exception ex) {
           System.out.println("This is expected exception");
       } catch (Exception e) {
           e.printStackTrace();
           assert false;
       }
   }
}

作成したTestClient.javaは，UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥client¥src¥com¥sample¥client¥ディレクトリに保存します。

なお，com.sample，AddNumbers，AddNumbersImplService，AddNumbersImplPort，add，add2，およびadd3は，生成されたJavaソースのパッケージ名，クラス名，およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には，パッケージ名，クラス名，およびクラス内のメソッド名の記述を見直す必要があります。

28.5.3　Webサービスクライアントの実装クラスをコンパイルする

javacコマンドを使用して，作成したWebサービスクライアントをコンパイルします。

コンパイルの例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥client¥
> javac -encoding UTF-8 -cp "%COSMINEXUS_HOME%¥jaxws¥lib¥cjjaxws.jar;%COSMINEXUS_HOME%¥CC¥client¥lib¥j2ee-javax.jar;%COSMINEXUS_HOME%¥jaxp¥lib¥csmjaxb.jar;.¥classes" -d .¥classes src¥com¥sample¥client¥TestClient.java

javacコマンドが正常に終了すると，c:¥temp¥jaxws¥works¥addressing¥client¥classes¥com¥sample¥client¥ディレクトリに，TestClient.classが生成されます。

javacコマンドについては，JDKのドキュメントを参照してください。

28.6　Webサービスの実行例（SEI起点・アドレッシング）

ここでは，SEIを起点とした場合のWebサービスクライアント（アドレッシング機能使用時)の実行例を説明します。

＜この節の構成＞

28.6.1　Javaアプリケーション用オプション定義ファイルを作成する

28.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

28.6.3　Webサービスクライアントを実行する

28.6.1　Javaアプリケーション用オプション定義ファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用オプション定義ファイル（usrconf.cfg）を作成します。

Javaアプリケーション用オプション定義ファイルの作成例を次に示します。

add.class.path=<Cosminexusインストールディレクトリ>¥jaxws¥lib¥cjjaxws.jar
add.class.path=.¥classes
ejb.client.log.directory=logs
add.jvm.arg=-Dcosminexus.home=<Cosminexusインストールディレクトリ>
add.jvm.arg=-Dejbserver.server.prf.PRFID=<PRF ID>

<Cosminexusのインストールディレクトリ>の部分は，Cosminexusをインストールしているパスを絶対パスで指定します。

作成したJavaアプリケーション用オプション定義ファイルは，c:¥temp¥jaxws¥works¥addressing¥client¥ディレクトリに保存します。Javaアプリケーション用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.2　usrconf.cfg（Javaアプリケーション用オプション定義ファイル）」を参照してください。

28.6.2　Javaアプリケーション用ユーザプロパティファイルを作成する

Webサービスを実行するときに必要なJavaアプリケーション用ユーザプロパティファイルを作成します。

ここでは特に設定を変更しないため，c:¥temp¥jaxws¥works¥addressing¥client¥ディレクトリにusrconf.propertiesという名称の空のファイルを作成します。Javaアプリケーション用ユーザプロパティファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「15.3　usrconf.properties（Javaアプリケーション用ユーザプロパティファイル）」を参照してください。

28.6.3　Webサービスクライアントを実行する

cjclstartapコマンドを使用して，Webサービスクライアントを実行します。

Webサービスクライアントの実行例を次に示します。

> cd c:¥temp¥jaxws¥works¥addressing¥client¥
> "%COSMINEXUS_HOME%¥CC¥client¥bin¥cjclstartap"  com.sample.client.TestClient

cjclstartapコマンドが正常に終了すると，Webサービスクライアントの実行結果が表示されます。実行結果の表示例を次に示します。

KDJE40053-I The cjclstartap command will now start. (directory for the user definition file = c:¥temp¥jaxws¥works¥addressing¥client, PID = 2636)
existActionAnnotation1
existActionAnnotation2
notExistActionAnnotation
existFaultActionAnnotation
This is expected exception
notExistFaultActionAnnotation
This is expected exception
KDJE40054-I The cjclstartap command was stopped. (PID = 2636, exit status = 0)

イタリック体になっている個所は，実行したタイミングや環境によって変わります。

cjclstartapコマンドについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjclstartap（Javaアプリケーションの開始）」を参照してください。

29.　障害対策

この章では，Webサービスの運用中に発生した障害の対策について説明します。

＜この章の構成＞

29.1　障害の種類と対策

29.2　障害発生時に取得する資料

29.3　ログ

29.4　性能解析トレース（PRF）

29.1　障害の種類と対策

Webサービスの運用中に発生する障害として，次に示す現象が考えられます。

Webサービスが正常に動作しない場合

プログラムの実行中に異常終了する

プログラムが意図したとおりに動作しない

Webサービスが正常に動作する場合

期待した性能が出ない

プログラムが正常に動作しない場合，ログやコンソールにエラーメッセージ，または警告メッセージが出力され，異常終了します。または正常に終了しても，意図したとおりに動作しない場合も考えられます。

また，プログラムが正常に動作している場合でも，プログラムまたはコンポーネントの処理能力が，期待した性能に届かない場合が考えられます。

それぞれの場合について，対策方法を説明します。なお，EJBのWebサービス呼び出しをする際に，EJBコンテナ内で障害が発生する場合があります。EJBコンテナで発生した障害については，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「7.10　EJBコンテナのトレース取得ポイント」を参照してください。

＜この節の構成＞

29.1.1　プログラムの実行中に異常終了する場合

29.1.2　プログラムが意図したとおりに動作しない場合

29.1.3　期待した性能が出ない場合

29.1.1　プログラムの実行中に異常終了する場合

プログラムの実行中に異常終了した場合の対策の流れを次の図に示します。

図29-1　警告，エラーメッセージ出力時の調査の流れ

作成したプログラムが正常に動作しないで，エラーメッセージまたは警告メッセージが出力される場合，ログに出力されたメッセージの内容から原因を調査してください。調査の対象となるログは，稼働ログおよび例外ログになります。各ログに出力された情報，および例外のスタックトレースの情報を基に，原因を調査してください。

なお，コマンド実行時に発生した警告メッセージおよびエラーメッセージは，コマンド稼働ログ，またはコマンド例外ログに出力されます。ログについては，「29.3　ログ」を参照してください。

発生した障害がプログラム以外に原因があると判断され，原因が解決できない場合は，障害情報を取得してシステム管理者に連絡してください。障害情報については，「29.2　障害発生時に取得する資料」を参照してください。

29.1.2　プログラムが意図したとおりに動作しない場合

エラーメッセージや警告メッセージが出力されない場合でも，不良などが原因で，作成したプログラムが意図したとおりに動作しないことがあります。この場合，プログラムからWebサービスの実装に対して，意図したSOAPメッセージが送信されていないおそれがあります。プログラムが意図したとおりに動作しないときには，送受信されているSOAPメッセージの内容を解析して，意図したメッセージが送信されているかどうか確認してください。

通信ログの出力内容については，「29.3.4　ログのフォーマット」を参照してください。

SOAPメッセージの通信の流れを次の図に示します。

図29-2　通信ログの出力

29.1.3　期待した性能が出ない場合

プログラムは正常に動作しているのに，実行時の性能が期待どおりにならない場合があります。原因として，プログラムの問題のほかに，Webサーバやデータベースなどのコンポーネントの問題が考えられます。コンポーネントに問題がある場合は，性能解析トレース（PRF）を使用した調査が有効です。性能解析トレースを使用すれば，各レイヤの処理時間や，リクエストの状況などが解析できます。Webサービスクライアント側のプログラムからリクエストの流れを追って，どこで遅延が発生しているかを確認してください。

性能解析トレースを使用した調査方法については，「29.4.3　性能解析トレースによる性能解析方法」を参照してください。

各機能レイヤの処理時間の例を次の図に示します。

図29-3　各機能レイヤの処理時間の例

29.2　障害発生時に取得する資料

システム管理者へ連絡が必要になる障害，または対処方法がわからない障害が発生した場合は，次に示す障害情報を取得して，システム管理者に連絡してください。

なお，ファイル名の「?」は面数を表します。

稼働ログ（cjwmessage?.log）

例外ログ（cjwexception?_?.log）

保守ログ（cjwmessage?.log）

通信ログ（cjwtransport?_?.log）

コマンドの稼働ログ（cjwsimport?.log，cjwapt?.log）

コマンドの例外ログ（cjwsimportex?_?.log，cjwaptex?_?.log）

コマンドの保守ログ（cjwsimport?.log，cjwapt?.log）

性能解析トレース

ユーザプログラム独自のログ（ある場合だけ）

共通定義ファイル（cjwconf.properties）

プロセス別の定義ファイル

WebサービスのDDファイル（web.xml，cosminexus-jaxws.xml）

サーバおよびクライアントに設定したシステムプロパティとシステムクラスパス

サーバおよびクライアントの標準出力と標準エラー出力

Cosminexus Component ContainerおよびWebサーバのログ

Cosminexus Component Containerで規定する障害時取得情報

J2EEサーバのユーザ定義ファイル

J2EEサーバの保守情報

サーバ管理コマンドのユーザ定義ファイル

サーバ管理コマンドの保守情報

J2EEサーバの標準出力，標準エラー出力

J2EEサーバ側のCosminexus TPBrokerのログ

EJBクライアントアプリケーションに設定したシステムプロパティ，およびシステムクラスパス

EJBクライアントアプリケーションの標準出力，標準エラー出力

Cosminexus Component Containerで規定する障害時取得情報の取得方法については，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「10.7.9　資料の取得方法」を参照してください。

29.3　ログ

Webサービスの開発時，および実行時に出力されるログについて説明します。

＜この節の構成＞

29.3.1　ログの種類

29.3.2　ログの出力先

29.3.3　ログの重要度と出力条件

29.3.4　ログのフォーマット

29.3.5　ログの設定方法

29.3.6　ログの見積もり

29.3.1　ログの種類

出力されるログの種類，および概要を次の表に示します。

表29-1　ログの種類

項番 | 分類 | 概要
1 | 稼働ログ | 稼働状態が出力されます。発生した問題の現象を確認して，問題を取り除くために使用します。
2 | 例外ログ | 例外のスタックトレースが出力されます。発生した例外の詳細を確認するために使用します。
3 | 保守ログ | 保守情報が出力されます。
4 | 通信ログ※ | 送受信したSOAPメッセージが出力されます。アプリケーション開発時や障害調査時に，送受信した内容を確認するために使用します。

注※

通信ログを有効にする場合は，動作定義ファイルのcom.cosminexus.jaxws.logger.runtime.transport.client_dumpプロパティ（通信ログの出力（Webサービスクライアント側）），およびcom.cosminexus.jaxws.logger.runtime.transport.server_dumpプロパティ（通信ログの出力（Webサービス側））に値を設定してください。

プロパティについては，「10.1.2　共通定義ファイルの設定項目」を参照してください。

ログが出力される機能と出力されるログの対応を次の表に示します。

表29-2　機能と出力されるログの対応

項番 | 機能 | 出力されるログ
稼働ログ | 例外ログ | 保守ログ | 通信ログ
1 | J2EEサーバ上で動作するWebサービスおよびWebサービスクライアント | ○ | ○ | ○ | ○
2 | コマンドラインインタフェースから起動したWebサービスクライアント | ○ | ○ | ○ | ○
3 | cjwsimportコマンド | ○ | ○ | ○ | －
4 | aptコマンド | ○ | ○ | ○ | －
5 | cjwsgenコマンド | ○ | ○ | ○ | －

（凡例）

○：ログが出力されます。

－：ログが出力されません。

29.3.2　ログの出力先

利用する場面ごとに，ログの出力先について説明します。

＜この項の構成＞

(1)　J2EEサーバ上のWebサービス，およびWebサービスクライアントを利用する場合

(2)　コマンドラインインタフェースでWebサービスクライアントを利用する場合

(3)　コマンドを実行する場合

(1)　J2EEサーバ上のWebサービス，およびWebサービスクライアントを利用する場合

J2EEサーバ上で動作するWebサービス，およびWebサービスクライアント（サーブレットやEJBなど）のログの出力先を次の表に示します。

表29-3　ログの出力先（J2EEサーバ上で動作する場合）

項番 | ログの種類 | 出力先ディレクトリ | ファイル名
1 | 稼働ログ | <ejb.server.log.directory>/CJW | cjwmessage?.log
2 | 例外ログ | <ejb.server.log.directory>/CJW | cjwexception?_?.log
3 | 保守ログ | <ejb.server.log.directory>/CJW/maintenance | cjwmessage?.log
4 | 通信ログ | <ejb.server.log.directory>/CJW | cjwtransport?_?.log

注意事項

<ejb.server.log.directory>は，J2EEサーバのログの出力先になります。詳細については，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「3.3.6　J2EEサーバのログ取得の設定」を参照してください。

ファイル名の「?」は面数を表します。

ログ初期化処理前に問題が発生した場合は，Cosminexus Component Containerの稼働ログ（cjmessage?.log）にログが出力されます。

(2)　コマンドラインインタフェースでWebサービスクライアントを利用する場合

Javaアプリケーションの開始コマンド（cjclstartap）で，Webサービスクライアントを起動する場合のログの出力先を次の表に示します。

表29-4　ログの出力先（コマンドラインインタフェースを利用する場合）

項番
ログの種類
出力先ディレクトリ
ファイル名

1
稼働ログ
<ejbserver.client.log.directory>/
<ejbserver.client.ejb.log>/
<ejbserver.client.log.appid>/CJW
cjwmessage?.log

2
例外ログ
<ejbserver.client.log.directory>/
<ejbserver.client.ejb.log>/
<ejbserver.client.log.appid>/CJW
cjwexception?_?.log

3
保守ログ
<ejbserver.client.log.directory>/
<ejbserver.client.ejb.log>/
<ejbserver.client.log.appid>/CJW/maintenance
cjwmessage?.log

4
通信ログ
<ejbserver.client.log.directory>/
<ejbserver.client.ejb.log>/
<ejbserver.client.log.appid>/CJW
cjwtransport?_?.log

注意事項

<ejbserver.client.log.directory>，<ejbserver.client.ejb.log>，および<ejbserver.client.log.appid>は，EJBクライアントアプリケーションのシステムログの出力先になります。詳細については，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「4.5.2　EJBクライアントアプリケーションのシステムログの出力先」を参照してください。

ファイル名の「?」は面数を表します。

ログ初期化処理前に問題が発生した場合は，Cosminexus Component Containerの稼働ログ（cjclmessage?.log）にログが出力されます

(3)　コマンドを実行する場合

コマンドを実行する場合のログの出力先を次の表に示します。

表29-5　ログの出力先（コマンドを実行する場合）

項番
ログの種類
出力先ディレクトリ
ファイル名

1
稼働ログ
<コマンドログ出力先ディレクトリ（com.cosminexus.jaxws.tool.log.directory）>
cjwsimportコマンドの場合：cjwsimport?.log
aptコマンドの場合：cjwapt?.log
cjwsgenコマンドの場合：cjwsgen?.log

2
例外ログ
<コマンドログ出力先ディレクトリ（com.cosminexus.jaxws.tool.log.directory）>
cjwsimportコマンドの場合：cjwsimportex?_?.log
aptコマンドの場合：cjwaptex?_?.log
cjwsgenコマンドの場合：cjwsgenex?_?.log

3
保守ログ
<コマンドログ出力先ディレクトリ（com.cosminexus.jaxws.tool.log.directory）>/maintenance
cjwsimportコマンドの場合：cjwsimport?.log
aptコマンドの場合：cjwapt?.log
cjwsgenコマンドの場合：cjwsgen?.log

注意事項

<コマンドログ出力先ディレクトリ（com.cosminexus.jaxws.tool.log.directory）>は動作定義ファイルのプロパティで設定します。デフォルトの出力先は，<Cosminexusのインストールディレクトリ>/jaxws/logsになります。
プロパティについては，「10.1.2　共通定義ファイルの設定項目」を参照してください。

ファイル名の「?」は面数を表します。

29.3.3　ログの重要度と出力条件

ログの重要度，および出力条件について説明します。

＜この項の構成＞

(1)　ログの重要度

(2)　稼働ログ／例外ログ／保守ログの出力条件

(3)　通信ログの出力条件

(1)　ログの重要度

ログの重要度，およびメッセージの出力内容を次の表に示します。

表29-6　重要度の意味と出力内容

項番
重要度
メッセージの意味
メッセージ出力内容

1
ERROR
重大な障害を示すメッセージレベルです。
問題が発生して，処理が継続できなかった場合に出力されます。
処理を継続するには，対処が必要です。
メッセージIDのインジケータから，-Eのメッセージが出力されます。メッセージには，発生した例外などの障害情報および対処方法が出力されます。

2
WARN
潜在的な問題を示すメッセージレベルです。
問題が発生していても，処理が継続できる場合に出力されます。
早急な対処は必要ありませんが，対処することが望ましい潜在的な問題があります。
メッセージIDのインジケータから，-Wのメッセージが出力されます。メッセージには，発生した例外などの障害情報および対処の内容が出力されます。

（例）

定義が誤りなので，デフォルトの値を使用した。

3
INFO
情報を提供するメッセージレベルです。
対処は必要ありませんが，通知する必要がある情報が出力されます。
メッセージIDのインジケータが，-Iのメッセージを出力します。メッセージには通知する内容が出力されます。

（例）

コマンドの処理が開始した。

4
DEBUG
DEBUGレベルのメッセージです。
障害の要因調査で使用する情報です。
メッセージIDがKDJW99999-Iのメッセージが出力されます。

（例）

実行時の環境，メソッドトレースなど。

設定ファイルにログレベルの定義をした場合，出力されるログの重要度については，「29.3.5　ログの設定方法」を参照してください。

(2)　稼働ログ／例外ログ／保守ログの出力条件

稼働ログ，例外ログ，および保守ログは，動作定義ファイルに設定したログの定義によって出力内容が変更されます。

稼働ログ，例外ログ，および保守ログの出力条件を次の表に示します。

表29-7　稼働ログ／例外ログ／保守ログの出力条件（イベントの重要度）

ログの種類
ログの定義
発生したイベントの重要度

ERROR
WARN
INFO
DEBUG

稼働ログ
例外ログ※
NONE
－
－
－
－

ERROR
○
－
－
－

WARN
○
○
－
－

INFO
○
○
○
－

DEBUG
○
○
○
○

保守ログ
NONE
－
－
－
－

ALL
○
○
○
○

（凡例）

○：ログが出力されます。

－：ログが出力されません。

注※

例外ログは例外情報がない場合は出力されません。なお，例外情報とは，イベントを発生する原因となった例外のスタックトレースを指します。

ログの定義のデフォルト設定は，稼働ログと例外ログの出力レベルが「INFO」，保守ログの出力レベルが「ALL」です。つまり，デフォルト設定の状態で重要度が「ERROR」のイベントが発生した場合，稼働ログ，保守ログ，および例外ログのすべてにログが出力されます。

出力される稼働ログおよび例外ログの量は，ログの定義をNONE，ERROR，WARN，INFO，DEBUGへと変更するごとに増加する可能性が高くなります。より多くのログが出力されるようにログの定義を変更することを，出力レベルを上げると呼びます。ログの量が増加すると，全体の処理速度が低下するおそれがあるので，出力レベルを上げる場合は，処理速度や面数の見積もりに注意してください。

(3)　通信ログの出力条件

通信ログは，動作定義ファイルに設定したログの定義によって出力内容が変更されます。ただし，WebサービスクライアントまたはWebサービスによって，設定するプロパティが異なります。設定するプロパティを次に示します。

com.cosminexus.jaxws.logger.runtime.transport.client_dump（Webサービスクライアント側）

com.cosminexus.jaxws.logger.runtime.transport.server_dump（Webサービス側）

通信ログの定義，および出力内容を次の表に示します。

表29-8　通信ログの出力条件（Webサービスクライアント側）

ログの定義 | 出力内容
ALL | 送受信メッセージが常に出力されます。
HEADER | 受信メッセージのHTTPヘッダが常に出力されます。
ERROR_HEADER | 受信メッセージのHTTPヘッダがエラーのときだけ出力されます。
NONE | 送受信メッセージは出力されません。

表29-9　通信ログの出力条件（Webサービス側）

ログの定義 | 出力内容
ALL | Webサービスの送受信メッセージが常に出力されます。受信時は，HTTPのリクエスト情報も出力されます。
HEADER | 受信メッセージのHTTPヘッダおよびHTTPのリクエスト情報が常に出力されます。
ERROR_HEADER | 受信メッセージのHTTPヘッダおよびHTTPのリクエスト情報がエラーのときだけ出力されます。
NONE | Webサービスの送受信メッセージは出力されません。

通信ログの量は，ログの定義がNONE，ERROR_HEADER，HEADER，ALLの順に増加します。ログの量が増加すると，全体の処理速度が低下するおそれがあるので，ログの定義のデフォルト設定を変更する場合は，処理速度や面数の見積もりに注意してください。

29.3.4　ログのフォーマット

稼働ログ，保守ログ，例外ログおよび通信ログのフォーマットについて説明します。

＜この項の構成＞

(1)　稼働ログと保守ログのフォーマット

(2)　例外ログと通信ログのフォーマット

(3)　通信ログの文字エンコーディング

(1)　稼働ログと保守ログのフォーマット

稼働ログおよび保守ログの出力項目と出力内容を次の表に示します。

表29-10　稼働ログと保守ログのフォーマット

項目
出力内容

番号
トレースコードの通番（4けた）です。0000から始まり，9999まで行くと，0000に戻ります。

日付
出力時の日付（yyyy/mm/dd形式）

時刻
出力時の時刻（hh:mm:ss.nnn形式）

アプリケーション名

WebサービスおよびWebサービスクライアントの場合：「cjw」

cjwsimportコマンドの場合：「cjwsimport」

aptコマンドの場合：「cjwapt」

cjwsgenコマンドの場合：「cjwsgen」

WS-RM 1.2機能の場合：「wsrm」

プロセス識別子
プロセス識別子（16進数）

スレッド識別子
スレッド識別子（16進数）

メッセージID
メッセージID

メッセージ種別
メッセージ種別

ER：エラーメッセージを表示したことを表します。

EC：例外をキャッチしたことを表します。

なし：上記以外のトレース情報を表します。

メッセージテキスト
メッセージの本体

CRLF
レコード終端記号

(2)　例外ログと通信ログのフォーマット

例外ログと通信ログの出力項目と出力内容を次の表に示します。

表29-11　例外ログと通信ログのフォーマット

項目 | 出力内容
日付 | 出力時の日付（yyyy/mm/dd形式）
時刻 | 出力時の時刻（hh:mm:ss形式）
Sourceクラス名 | ログを発行したクラス名
レベル | ログの重要度
メッセージ | メッセージの本体

通信ログの出力例を次に示します。

2008/10/14 13:09:44 com.cosminexus.xml.ws.transport.http.client.HttpTransportPipe process
情報: KDJW30011-I http client message
---[HTTP request]---
SOAPAction: ""
Content-Type: text/xml;charset="utf-8"
X-hitachi-rootAp: MTgxNDczMTYyLzE2ODgvMC84MDI=
X-hitachi-clientAp: MTgxNDczMTYyLzE2ODgvMC84MDI=
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:jaxWsTest1 xmlns:ns2="http://example.com/sample"><information>Invocation test.</information><count>1003</count></ns2:jaxWsTest1></S:Body></S:Envelope>
2008/10/14 13:09:45 com.cosminexus.xml.ws.transport.http.client.HttpTransportPipe process
情報: KDJW30012-I http client message
---[HTTP response 200]---
HTTP/1.1 200 OK
Keep-alive: timeout=3, max=100
Date: Tue, 14 Oct 2008 04:09:44 GMT
Content-type: text/xml;charset=utf-8
Connection: Keep-Alive
Transfer-encoding: chunked
Server: Hitachi Web Server
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:jaxWsTest1Response xmlns:ns2="http://example.com/sample"><return>We've got your #1003 message &quot;Invocation test.&quot;! It's 2008.10.14 13:09:45 now. See ya!</return></ns2:jaxWsTest1Response></S:Body></S:Envelope>

(3)　通信ログの文字エンコーディング

SOAPメッセージの文字エンコーディングとは関係なく，通信ログには動作定義ファイルのcom.cosminexus.jaxws.logger.runtime.transport.encodingプロパティで指定した文字エンコーディングが適用されます。デフォルトは，プラットフォーム依存のエンコーディングです。

SOAPメッセージの文字エンコーディングと通信ログの文字エンコーディングが異なる場合，組み合わせによっては通信ログ内の一部の文字が不正になるおそれがあります。例えば，SOAPメッセージの文字エンコーディングがUTF-8，通信ログの文字エンコーディングがMS932の場合，SOAPメッセージ内にMS932に存在しない文字が含まれていると，その文字は通信ログ内で不正となります。そのため，Webサービス開発時には，使用できる文字コードまたは文字セットを規定して，Webサービスクライアントの開発者（WSDLの公開先）に通知することをお勧めします。

29.3.5　ログの設定方法

出力レベル，サイズ，および面数を動作定義ファイルで指定します。

動作定義ファイルの設定例を次に示します。

com.cosminexus.jaxws.logger.runtime.message.level=INFO
com.cosminexus.jaxws.logger.runtime.message.file_num=2
com.cosminexus.jaxws.logger.runtime.message.file_size=2097152

com.cosminexus.jaxws.logger.runtime.maintenance.level=ALL
com.cosminexus.jaxws.logger.runtime.maintenance.file_num=2
com.cosminexus.jaxws.logger.runtime.maintenance.file_size=16777216

com.cosminexus.jaxws.logger.runtime.exception.level=INFO
com.cosminexus.jaxws.logger.runtime.exception.file_num=2
com.cosminexus.jaxws.logger.runtime.exception.file_size=16777216

com.cosminexus.jaxws.logger.runtime.transport.client_dump=NONE
com.cosminexus.jaxws.logger.runtime.transport.server_dump=NONE
com.cosminexus.jaxws.logger.runtime.transport.encoding=DEFAULT

com.cosminexus.jaxws.logger.cjwsimport.message.level=INFO
com.cosminexus.jaxws.logger.cjwsimport.message.file_num=2
com.cosminexus.jaxws.logger.cjwsimport.message.file_size=2097152

com.cosminexus.jaxws.logger.cjwsimport.exception.level=INFO
com.cosminexus.jaxws.logger.cjwsimport.exception.file_num=2
com.cosminexus.jaxws.logger.cjwsimport.exception.file_size=16777216

com.cosminexus.jaxws.logger.cjwsimport.maintenance.level=ALL
com.cosminexus.jaxws.logger.cjwsimport.maintenance.file_num=2
com.cosminexus.jaxws.logger.cjwsimport.maintenance.file_size=16777216

com.cosminexus.jaxws.logger.apt.message.level=INFO
com.cosminexus.jaxws.logger.apt.message.file_num=2
com.cosminexus.jaxws.logger.apt.message.file_size=2097152

com.cosminexus.jaxws.logger.apt.exception.level=INFO
com.cosminexus.jaxws.logger.apt.exception.file_num=2
com.cosminexus.jaxws.logger.apt.exception.file_size=16777216

com.cosminexus.jaxws.logger.apt.maintenance.level=ALL
com.cosminexus.jaxws.logger.apt.maintenance.file_num=2
com.cosminexus.jaxws.logger.apt.maintenance.file_size=16777216

com.cosminexus.jaxws.logger.cjwsgen.message.level=INFO
com.cosminexus.jaxws.logger.cjwsgen.message.file_num=2
com.cosminexus.jaxws.logger.cjwsgen.message.file_size=2097152

com.cosminexus.jaxws.logger.cjwsgen.exception.level=INFO
com.cosminexus.jaxws.logger.cjwsgen.exception.file_num=2
com.cosminexus.jaxws.logger.cjwsgen.exception.file_size=16777216

com.cosminexus.jaxws.logger.cjwsgen.maintenance.level=ALL
com.cosminexus.jaxws.logger.cjwsgen.maintenance.file_num=2
com.cosminexus.jaxws.logger.cjwsgen.maintenance.file_size=16777216

29.3.6　ログの見積もり

各ログファイルの見積もり方法について説明します。

＜この項の構成＞

(1)　使用するモデルおよびログの設定

(2)　ログの見積もり方法

(1)　使用するモデルおよびログの設定

ログの見積もり方法は，次に示すモデル1およびモデル2を例に説明します。

モデル1：正常系

Webサービスからリクエストを送信し，SEIが正常にレスポンスを返す場合のモデルです。

モデル2：異常系

WebサービスのSEIでRuntimeExceptionが発生する場合のモデルです。

このモデルで使用するログの設定を示します。

稼働ログ／例外ログ／保守ログの設定は，デフォルト値のまま変更しません。

通信ログの設定は，次のプロパティにそれぞれ「ALL」を指定します。

com.cosminexus.jaxws.logger.runtime.transport.client_dump

com.cosminexus.jaxws.logger.runtime.transport.server_dump

ログの設定値およびデフォルト値については，「10.1.2　共通定義ファイルの設定項目」を参照してください。

(2)　ログの見積もり方法

モデル1およびモデル2の各ログの出力結果を次の表に示します。

次の表にある「起動時」とはアプリケーション開始時，「終了時」とはアプリケーション停止時，「1リクエスト処理時」とはSEIによる1リクエストの処理を表します。出力量はこれらの期間に出力されるログの量を示します。

表29-12　起動時，1リクエスト処理時，停止時の各ログの出力例（モデル1／モデル2）

項番
ログの種類
出力量

起動時
1リクエスト処理時
終了時

1
稼働ログ
0.7KB

モデル1：

0.0KB

モデル2：

0.3KB

0.3KB

2
例外ログ
0KB

モデル1：

0KB

モデル2※：

5KB

0KB

3
通信ログ
0KB
0.3KB＋HTTPリクエスト＋HTTPレスポンス量
0KB

4
保守ログ
2.4KB

モデル1：

3.2KB

モデル2：

3.6KB

0.4KB

注※

例外のスタックトレースの量になります。

各ログの見積もり式を次に示します。この結果を基に，各ログファイル一つのファイルサイズ，およびファイル面数を求めます。

[単位時間当たりのログの出力量] ＝
  [起動時の出力量]
  ＋[モデル1の1リクエスト処理時の出力量]×総リクエスト数×正常ケースのリクエストの割合
  ＋[モデル2の1リクエスト処理時の出力量]×総リクエスト数×異常ケースのリクエストの割合
  ＋[終了時の出力量]

この式を基に，例を使用して各ファイルの見積もり方法を説明します。

想定する例として，1分間に平均100件のリクエストがあるようなシステムで，ログを3時間ラップアラウンドされないようにログファイルのサイズと個数を見積もるものとします。全リクエスト中，正常終了するリクエストが80%，異常終了するリクエストが20%を占めるとすると，50リクエスト／分なので，3時間では計18,000リクエスト（100リクエスト／分×180分）が到着します。

この場合，稼働ログの出力量を計算すると，次のとおりになります。

0.7KB（起動時の出力量）
＋{0.0KB×18000}（モデル1の全リクエスト処理時の出力量）×0.8（正常ケースのリクエストの割合）
＋{0.3KB×18000}（モデル2の全リクエスト処理時の出力量）×0.2（異常ケースのリクエストの割合）
＋0.3KB（終了時の出力量）
＝1081KB

計算の結果，ファイルサイズとファイル面数はデフォルト値で間に合います。

同様に，保守ログの出力量を計算すると，次のとおりになります。

2.4KB(起動時の出力量)
＋{3.2KB×18000}（モデル1の全リクエスト処理時の出力量）×0.8（正常ケースのリクエストの割合）
＋{3.6KB×18000}（モデル2の全リクエスト処理時の出力量）×0.2（異常ケースのリクエストの割合）
＋0.4KB（終了時の出力量）
＝59043KB≒57.6MB

計算の結果，ログファイル一つ当たり15MBとすると，面数は四つとなります。

注意事項

通信ログでは，HTTPリクエストやHTTPレスポンスの内容によって，出力量が変化します。添付ファイルを使用して通信する場合は，通信ログにも添付ファイルの内容が記録されるため，特に大きな添付ファイルを使用しているときは，通信ログファイルのサイズや面数を考慮する必要があります。

29.4　性能解析トレース（PRF）

性能解析トレースとは，性能解析や障害を調査するためのトレース情報を指します。性能解析トレースを参照することで，システムの性能ボトルネックや，障害が発生した場合の，リクエスト処理の到達度合いを解析できます。

Cosminexusシステムが提供する性能解析トレースについては，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「4.6　性能解析トレース」を参照してください。

＜この節の構成＞

29.4.1　性能解析トレースの取得レベル

29.4.2　性能解析トレースのトレース出力情報

29.4.3　性能解析トレースによる性能解析方法

29.4.1　性能解析トレースの取得レベル

CosminexusのJAX-WS機能で使用できる性能解析トレースの取得レベルを次の表に示します。

表29-13　性能解析トレースの取得レベル一覧

項番
取得レベル
目的

1
標準レベル
（デフォルト）
CosminexusのJAX-WS機能とその他の機能との境界（入口と出口）が識別できるトレース情報が出力されます。

2
詳細レベル
標準レベルの出力内容に加えて，CosminexusのJAX-WS機能の内部処理のトレース情報が出力されます。

3
保守レベル
障害発生時などに保守情報を取得するためのレベルで，通常は使用しません。

29.4.2　性能解析トレースのトレース出力情報

CosminexusのJAX-WS機能で出力する性能解析トレースのトレース出力情報を次の表に示します。

表29-14　性能解析トレースのトレース出力情報

項番 | ファイル項目 | 内容
1 | イベントID | トレース取得ポイントのイベントIDです。
2 | クライアントAP情報 | ルートAP情報の有効範囲内のWebサービスクライアント，Webサービス間で一意の情報です。ただし，WS-RM 1.2機能の場合，一意ではありません。オプション情報を参照してください。
3 | ルートAP情報 | 一連のリクエストに対する処理で，一意の情報です。ただし，WS-RM 1.2機能の場合，一意ではありません。オプション情報を参照してください。
4 | リターンコード | トレース取得ポイントの種別（正常終了または異常終了）です。
5 | インタフェース名 | トレース取得ポイントのクラス名です。
6 | オペレーション名 | トレース取得ポイントのメソッド名です。
7 | オプション情報 | オプション情報です。

ここでは，クライアントAP情報とルートAP情報の有効範囲，およびトレース取得ポイントについて説明します。

＜この項の構成＞

(1)　クライアントAP情報とルートAP情報の有効範囲

(2)　性能解析トレースのトレース取得ポイント

(1)　クライアントAP情報とルートAP情報の有効範囲

次の図を基に，クライアントAP情報とルートAP情報の有効範囲について説明します。

図29-4　クライアントAP情報とルートAP情報の有効範囲

ルートAP情報（通信番号，ルートAPのPID，およびルートAPの動作するマシンのIPアドレスから構成されます）は，一連のリクエストに対する処理で一意となります。

リクエストを受けたWebサービスクライアント（A）からWebサービス（B）にリクエストが送信されると，Webサービス（B）がWebサービスクライアントになります。さらに，Webサービス（B）がWebサービスクライアントになって，ほかのWebサービス（C）および（D）にリクエストが送信されると，AからDまでが一意の値となります。

クライアントAP情報（通信番号，クライアントAPのPID，クライアントAPの動作するマシンのIPアドレスから構成される）は，ルートAP情報の有効範囲内のWebサービスクライアント，およびWebサービスの一連のリクエストに対する処理で一意となります。

クライアントAP（1），（2），（3），および（4）は，異なるクライアントAP情報になります。

(2)　性能解析トレースのトレース取得ポイント

CosminexusのJAX-WS機能で出力する性能解析トレースのトレース取得ポイントを次の図に示します。なお，WS-RM 1.2機能を使用する場合は，ここに記載する以外の性能解析トレースも出力されます。詳細については，「29.4.2(2)(c)　WS-RM 1.2機能使用時のトレース取得ポイント」を参照してください。

(a)　POJOのWebサービス呼び出し時のトレース取得ポイント

POJOのWebサービス呼び出し時のトレース取得ポイントを次の図に示します。

図29-5　POJOのWebサービス呼び出し時のトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表29-15　標準レベルでのトレース取得ポイントと出力される情報（JAX-WS機能・POJOのWebサービス）

図中の番号 | 取得ポイント | 出力される情報
イベントID | オプション情報
1 | Webサービスクライアントライブラリの開始時 | スタブベースの場合 | 0xA400 | －
ディスパッチベースの場合 | 0xA420
2 | WebサービスクライアントライブラリのHTTPメッセージ送信前 | 0xA404 | エンドポイントURL
3 | JAX-WSエンジンのサーブレット開始時 | 0xA408 | コンテキストルート
4 | Webサービス呼び出し前 | Webサービス実装クラスの場合 | 0xA40C | サービスメソッド名
プロバイダ実装クラスの場合 | 0xA424 | －
5 | Webサービス呼び出し後 | Webサービス実装クラスの場合 | 0xA410 | 異常終了の場合は例外名
プロバイダ実装クラスの場合 | 0xA428
6 | JAX-WSエンジンのHTTPメッセージ送信前 | 0xA414 | －
7 | WebサービスクライアントライブラリのHTTPメッセージ受信後 | 0xA418 | 異常終了の場合は例外名
8 | Webサービスクライアントライブラリ終了時 | スタブベースの場合 | 0xA41C | 異常終了の場合は例外名
ディスパッチベースの場合 | 0xA42C

（凡例）

－：オプション情報はありません。

表29-16　詳細レベルでのトレース取得ポイントと出力される情報（JAX-WS機能・POJOのWebサービス）

図中の番号 | 取得ポイント | 出力される情報
イベントID | オプション情報
9 | ハンドラ呼び出し前 | 0xA430 | ハンドラの位置とハンドラクラス名
10 | ハンドラ呼び出し後 | 0xA434 | 異常終了の場合は例外名
11 | WebサービスクライアントライブラリのHTTPメッセージ送信後 | 0xA438 | 異常終了の場合は例外名
12 | アンマーシャル前 | スタブべース，およびWebサービス実装クラスの場合 | 0xA43C | －
ディスパッチベース，およびプロバイダ実装クラスの場合 | 0xA450
13 | アンマーシャル後 | スタブべース，およびWebサービス実装クラスの場合 | 0xA440 | －
ディスパッチベース，およびプロバイダ実装クラスの場合 | 0xA454
14 | JAX-WSエンジンのHTTPメッセージ送信後 | 0xA444 | 異常終了の場合は例外名
15 | JAX-WSエンジンのサーブレット終了時 | 0xA448 | 異常終了の場合は例外名

（凡例）

－：オプション情報はありません。

(b)　EJBのWebサービス呼び出し時のトレース取得ポイント

EJBのWebサービス呼び出し時のトレース取得ポイントを次の図に示します。なお，Webサービスクライアントのトレース取得ポイントは，POJOのWebサービス呼び出し時と同じです。

図29-6　EJBのWebサービス呼び出し時のトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表29-17　標準レベルでのトレース取得ポイントと出力される情報（JAX-WS機能・EJBのWebサービス）

図中の番号 | 取得ポイント | 出力される情報
イベントID | オプション情報
1 | JAX-WSエンジンのサーブレット開始時 | 0xA408 | コンテキストルート
2 | EJBコンテナ呼び出し前 | Webサービス実装クラス | 0xA40E | サービスメソッド名
3 | EJBのメソッド呼び出し前 | 0x8482 | －
4 | EJBのメソッド呼び出し後 | 0x8483 | －
5 | EJBコンテナ呼び出し後 | Webサービス実装クラス | 0xA412 | 異常終了の場合は例外名
6 | JAX-WSエンジンのHTTPメッセージ送信前 | 0xA414 | 異常終了の場合は例外名

（凡例）

－：オプション情報はありません。

表29-18　詳細レベルでのトレース取得ポイントと出力される情報（JAX-WS機能・EJBのWebサービス）

図中の番号 | 取得ポイント | 出力される情報
イベントID | オプション情報
7 | ハンドラ呼び出し前 | 0xA430 | ハンドラの位置とハンドラクラス名
8 | ハンドラ呼び出し後 | 0xA434 | 異常終了の場合は例外名
9 | アンマーシャル前 | Webサービス実装クラス | 0xA43C | －
10 | アンマーシャル後 | Webサービス実装クラス | 0xA440 | －
11 | JAX-WSエンジンのHTTPメッセージ送信後 | 0xA444 | 異常終了の場合は例外名
12 | JAX-WSエンジンのサーブレット終了時 | 0xA448 | 異常終了の場合は例外名

（凡例）

－：オプション情報はありません。

(c)　WS-RM 1.2機能使用時のトレース取得ポイント

WS-RM 1.2機能でシーケンスライフサイクルメッセージを送受信するときに出力される性能解析トレースのトレース取得ポイントを次の図に示します。

図29-7　シーケンスライフサイクルメッセージ送受信時のトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表29-19　標準レベルでのトレース取得ポイントと出力される情報（WS-RM 1.2機能のライフサイクルメッセージ）

図中の番号
取得ポイント
出力情報

イベントID
オプション情報

1
Webサービスクライアント側WS-RM 1.2機能開始時
0xA4B0
次のどれかが出力されます。

CreateSequence

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

2
Webサービスクライアント側シーケンスライフサイクルメッセージ送信前
0xA4B1
次のどれかが出力されます。

CreateSequence

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

3
Webサービス側WS-RM 1.2機能開始時
0xA4B2
次のどれかが出力されます。

CreateSequence

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

4
Webサービス側WS-RM 1.2機能終了時
0xA4B3
次のどれかが出力されます。

CreateSequence,[SequenceID]

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

異常終了の場合は例外名

5
Webサービスクライアント側シーケンスライフサイクルメッセージ受信後
0xA4B4
次のどれかが出力されます。

CreateSequence

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

異常終了の場合は例外名

6
Webサービスクライアント側WS-RM 1.2機能終了時
0xA4B5
次のどれかが出力されます。

CreateSequence,[SequenceID]

CloseSequence,[SequenceID]

TerminateSequence,[SequenceID]

異常終了の場合は例外名

WS-RM 1.2機能のシーケンストラフィックメッセージの性能解析トレースのトレース取得ポイントを次の図に示します。

図29-8　シーケンストラフィックメッセージのトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表29-20　標準レベルでのトレース取得ポイントと出力される情報（WS-RM 1.2機能のシーケンストラフィックメッセージ）

図中の番号
取得ポイント
出力情報

イベントID
オプション情報

7
リクエストでのWebサービスクライアント側WS-RM 1.2機能開始時
0xA4B6
[SequenceID],[MessageNumber]

8
リクエストでのWebサービスクライアント側WS-RM 1.2機能終了時
0xA4B7
次のどちらかが出力されます。

[SequenceID],[MessageNumber]

異常終了の場合は例外名

9
リクエストでのWebサービス側WS-RM 1.2機能開始時
0xA4B8
[SequenceID],[MessageNumber]

10
リクエストでのWebサービス側WS-RM 1.2機能終了時
0xA4B9
次のどちらかが出力されます。

[SequenceID],[MessageNumber]

異常終了の場合は例外名

11
レスポンスでのWebサービス側WS-RM 1.2機能開始時※1
0xA4BA
[SequenceID],[MessageNumber]

12
レスポンスでのWebサービス側WS-RM 1.2機能終了時※2
0xA4BB
次のどちらかが出力されます。

[SequenceID],[MessageNumber]

異常終了の場合は例外名

13
レスポンスでのWebサービスクライアント側WS-RM 1.2機能開始時
0xA4BC
[SequenceID],[MessageNumber]

14
レスポンスでのWebサービスクライアント側WS-RM 1.2機能終了時
0xA4BD
次のどちらかが出力されます。

[SequenceID]

異常終了の場合は例外名

注※1

重複したメッセージを受信した場合は出力されません。

注※2

重複したメッセージを受信した場合に，HTTPステータスコード202を返すときは出力されません。

WS-RM 1.2機能のAckメッセージの性能解析トレースのトレース取得ポイントを次の図に示します。

図29-9　Ackメッセージのトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表29-21　詳細レベルでのトレース取得ポイントと出力される情報（WS-RM 1.2機能のAckメッセージ）

図中の番号
取得ポイント
出力情報

イベントID
オプション情報

15
Webサービスクライアント側WS-RM 1.2機能開始時
0xA4BE
[SequenceID]

16
Webサービス側WS-RM 1.2機能開始時
0xA4C0
[SequenceID]

17
Webサービス側WS-RM 1.2機能終了時
0xA4C1
次のどちらかが出力されます。

[SequenceID]

異常終了の場合は例外名

18
Webサービスクライアント側WS-RM 1.2機能終了時
0xA4BF
次のどちらかが出力されます。

[SequenceID]

異常終了の場合は例外名

29.4.3　性能解析トレースによる性能解析方法

性能解析トレースファイルとは，性能解析トレースをCSV形式で出力したテキストファイルを指します。

性能解析トレースファイルを使用して，JAX-WSエンジンを含むWebサービス全体のレスポンスタイムと，サービスプログラム（UP）のレスポンスタイムを解析する方法を説明します。なお，ここではWebサービス実装クラスで開発したWebサービスと，スタブベースのWebサービスクライアントの例を説明します。そのほかの形態のWebサービスおよびWebサービスクライアントの場合はイベントIDが異なることがあるので，必要に応じて読み替えてください。

イベントID「0xA408」，「0xA40C」，「0xA410」，および「0xA414」をキーにして，性能解析トレースファイルをフィルタリングします。各イベントIDに対するトレース取得ポイントを次の表に示します。

表29-22　フィルタリングするイベントIDに対応するトレース取得ポイント

項番 | イベントID | トレース取得ポイント
1 | 0xA408 | JAX-WSエンジンのサーブレット開始時
2 | 0xA40C | Webサービス呼び出し前
3 | 0xA410 | Webサービス呼び出し後
4 | 0xA414 | JAX-WSエンジンのHTTPメッセージ送信前

リクエストを2回送信した場合に，イベントID「0xA408」，「0xA40C」，「0xA410」および「0xA414」をキーにして，性能解析トレースファイルをフィルタリングした例を次の図に示します。

図29-10　性能解析トレースをフィルタリングした例

クライアントAP情報から，リクエストの処理状況を確認できます。同じリクエストを処理している場合，同じクライアントAP情報が出力されます。

同一クライアントAP情報の中のイベントID「0xA408」および「0xA414」のトレース取得時刻から，JAX-WSエンジンを含めたWebサービス全体のレスポンスタイムを解析できます。また，「0xA40C」および「0xA410」のトレース取得時刻から，サービスプログラム（UP）のレスポンスタイムを解析できます。

付録

＜この付録の構成＞

付録A　旧バージョンからの移行

付録B　旧バージョンのWS-RM機能

付録C　POJOのWebサービスからEJBのWebサービスへの移行

付録D　JAX-WSエンジンのメモリ使用量の算出

付録E　このマニュアルの参考情報

付録F　用語解説

付録A　旧バージョンからの移行

旧バージョンの機能であるSOAPアプリケーション開発支援機能，およびSOAP通信基盤を利用して開発したSOAPアプリケーションの移行について説明します。

SOAPアプリケーション開発支援機能／SOAP通信基盤で開発したSOAPアプリケーションおよびSOAPクライアントは，バージョンアップインストールして同じ環境で利用できます。この場合，特に設定は不要です。

SOAPアプリケーション開発支援機能／SOAP通信基盤で開発したSOAPアプリケーションおよびSOAPクライアントをJAX-WSエンジン上で利用する場合，バージョンアップインストールしたあとに，JAX-WSエンジンの環境に切り替えます。

また，改めてWebサービスおよびWebサービスクライアントを作成します。このとき，JAX-WS 2.1仕様およびCosminexusのJAX-WS機能のサポート範囲に従って作成してください。

＜この節の構成＞

付録A.1　バージョンアップインストール

付録A.2　旧バージョンで作成したWSDLの互換性

付録A.1　バージョンアップインストール

SOAPアプリケーション開発支援機能／SOAP通信基盤，およびJAX-WS機能は，Cosminexusのインストール時に同時にインストールされます。

ここでは，旧バージョンがインストールされているマシンに対して，バージョンアップインストールする場合の手順および注意事項について説明します。

＜この項の構成＞

(1)　J2EEサーバの移行

(2)　Webサービスのアンデプロイ

(3)　動作環境の切り替え

(1)　J2EEサーバの移行

Cosminexusをバージョンアップインストールする場合，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「12.1.2　アプリケーションサーバの移行の手順」または「12.2.2　アプリケーションサーバの移行の手順」に記載されている移行手順に従ってインストールしてください。

バージョンアップインストールすると，SOAPアプリケーション開発支援機能およびSOAP通信基盤を利用するように設定されます。

(2)　Webサービスのアンデプロイ

Webサービス（またはSOAPアプリケーション）を移行する場合，あらかじめJ2EEサーバにデプロイされているWebサービス（またはSOAPアプリケーション）をアンデプロイしてください。

(3)　動作環境の切り替え

SOAPアプリケーション開発支援機能／SOAP通信基盤，およびJAX-WSエンジンの切り替えは，J2EEサーバ用オプション定義ファイルで定義します。ここでは，J2EEサーバ用オプション定義ファイルの指定内容，および指定方法について説明します。

J2EEサーバ用オプション定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.3　usrconf.cfg（J2EEサーバ用オプション定義ファイル）」を参照してください。

JAX-WSエンジンを利用する場合
JAX-WSエンジンを利用する場合，J2EEサーバ用オプション定義ファイルのadd.class.pathの「cjjaxws.jar」の行を有効にし，「hitsaaj.jar」の行を無効にします。次の例に従って定義してください。

...
#add.class.path=<cosminexus.home>¥c4web¥lib¥hitsaaj.jar
add.class.path=<cosminexus.home>¥jaxws¥lib¥cjjaxws.jar
...

SOAPアプリケーション開発支援機能／SOAP通信基盤を利用する場合
SOAPアプリケーション開発支援機能／SOAP通信基盤を利用する場合，J2EEサーバ用オプション定義ファイルのadd.class.pathの「hitsaaj.jar」の行を有効にし，「cjjaxws.jar」の行を無効にします。次の例に従って定義してください。

...
add.class.path=<cosminexus.home>¥c4web¥lib¥hitsaaj.jar
#add.class.path=<cosminexus.home>¥jaxws¥lib¥cjjaxws.jar
...

注意事項

「hitsaaj.jar」と「cjjaxws.jar」の両方のコメントを外した場合，または両方のコメントを付けた場合の動作は保証されません。

J2EEサーバ用オプション定義ファイルの編集方法を説明します。

ここで説明するどの方法でも，J2EEサーバ用オプション定義ファイルを編集（保存）したあとに，J2EEサーバを再起動してください。J2EEサーバを再起動しない場合は，編集内容が反映されません。

(a)　直接編集する場合

直接編集する場合，次の場所に格納されたJ2EEサーバ用オプション定義ファイルをテキストエディタで開き，内容を変更します。

<Cosminexusのインストールディレクトリ>/CC/server/usrconf/ejb/<J2EEサーバ名>/usrconf.cfg

(b)　Management Serverの運用管理ポータルを利用する場合

Management Serverの運用管理ポータルを利用する場合，［J2EEコンテナの設定］画面の「拡張パラメタ」で設定します。

JAX-WSエンジンを利用する場合の設定例を次に示します。

図A-1　運用管理ポータルによるJAX-WSエンジンの設定例

SOAPアプリケーション開発支援機能およびSOAP通信基盤を利用する場合の設定例を次に示します。

図A-2　運用管理ポータルによるSOAPアプリケーション開発支援機能／SOAP通信基盤の設定例

運用管理ポータルの［J2EEコンテナの設定］画面については，マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「10.9.2　J2EEコンテナの設定」を参照してください。

(c)　Smart Composer機能を利用する場合

Smart Composer機能を利用する場合は，簡易構築定義ファイルに，J2EEの拡張パラメタとして追加します。Smart Composer機能については，マニュアル「Cosminexus アプリケーションサーバ システム構築・運用ガイド」を参照してください。簡易構築定義ファイルについては，マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.　Smart Composer機能で使用するファイル」を参照してください。

JAX-WSエンジンを利用する場合の設定例を次に示します。

<param>
<param-name>add.class.path</param-name>
<param-value>&lt;cosminexus.home&gt;¥jaxws¥lib¥cjjaxws.jar</param-value>
</param>

SOAPアプリケーション開発支援機能およびSOAP通信基盤を利用する場合の設定例を次に示します。

<param>
<param-name>add.class.path</param-name>
<param-value>&lt;cosminexus.home&gt;¥c4web¥lib¥hitsaaj.jar</param-value>
</param>

付録A.2　旧バージョンで作成したWSDLの互換性

旧バージョンで作成したWSDLをJAX-WSエンジン上で使用できます。ただし，WSDLに記述されたXML Schemaには制限があります。データ型，制約ファセット，および出現回数の制限について示します。

データ型の制限を次の表に示します。

表A-1　XML Schemaのデータ型の制限

項番
データ型
最大値
最大桁数

1
duration型
（形式：PnYnMnDTnHnMnS）
nY（年）
2147483647
－

2
nM（月）

3
nD（日）

4
nH（時）

5
nM（分）

6
nS（秒）
1秒以上

7
1秒未満

8
date型
（形式：CCYY-MM-DD）
CCYY※1

9
gYearMonth型
（形式：CCYY-MM）
CCYY※1

10
gYear型
（形式：CCYY）
CCYY※1

11
dateTime型
（形式：CCYY-MM-DDThh:mm:ss）
CCYY※1

1秒未満※2

12
dateTime型
（形式：CCYY-MM-DDThh:mm:ss）
1秒未満※2

13
time型（形式：hh:mm:ss）
規定はありません。

14
base64Binary型
メモリに依存します。

15
hexBinary型

16
decimal型

17
integer型

18
nonPositiveInteger型

19
nonNegativeInteger型

20
negativeInteger型

21
positiveInteger型

（凡例）

－：該当しないことを示します。

注※1

"9999"を超える場合，桁数を追加できます。

注※2

"ss"に続く小数点以下に，1秒未満の値を指定できます。

制約ファセットに関する制限を次の表に示します。

表A-2　XML Schemaの制約ファセットに関する制限

項番 | 制約ファセット | 最大値 | 最大桁数
1 | length | 2147483647 | －
2 | minLength
3 | maxLength
4 | totalDigits
5 | fractionDigits
6 | maxInclusive | 規定はありません。 | メモリに依存します。
7 | maxExclusive
8 | minInclusive
9 | minExclusive

（凡例）

－：該当しないことを示します。

出現回数の指定の制限を次の表に示します。

表A-3　XML Schemaの出現回数の指定に関する制限

項番 | 出現回数の指定 | 最大値 | 最大桁数
1 | minOccurs | 2147483647 | －
2 | maxOccurs

（凡例）

－：該当しないことを示します。

付録B　旧バージョンのWS-RM機能

WS-RM 1.1機能とは，WebサービスとWebサービスクライアントのSOAPメッセージのやり取りに，RMD（Reliable Messaging Destination）およびRMS（Reliable Messaging Source）を介することで，SOAPメッセージを確実に送受信するための機能です。

WS-RM 1.1機能は，WS-RM 1.2機能と互換性がありません。新規にWS-RM機能を利用する場合，WS-RM 1.2機能を利用することをお勧めします。WS-RM 1.2機能については，「24.　WS-RM 1.2機能」を参照してください。

WS-RM 1.1機能を使用した場合のSOAPメッセージの送受信の流れを次に示します。

図B-1　WS-RM 1.1機能を使用した場合のSOAPメッセージの送受信の流れ

＜この節の構成＞

付録B.1　WS-RM 1.1機能を使用したメッセージの流れ

付録B.2　WS-RM 1.1機能を使用する場合のシステム構成

付録B.3　WS-RM 1.1機能の送達保証

付録B.4　WS-RM 1.1機能のAPI一覧

付録B.5　WS-RM 1.1機能のプロパティ設定

付録B.6　WS-RM 1.1機能の性能解析トレース（PRF）

付録B.7　WS-RM 1.1仕様のサポート範囲

付録B.1　WS-RM 1.1機能を使用したメッセージの流れ

WS-RM 1.1機能を使用した場合の，メッセージの流れを次に示します。

図B-2　WS-RM 1.1機能を使用したメッセージの流れ

シーケンス生成
アプリケーションメッセージを送信する前に，RMSとRMDはシーケンスを生成して，共有します。シーケンスとは，WS-RM 1.1機能で送信される一連のアプリケーションメッセージの集合に関するコンテキストです。

アプリケーションメッセージ送信
シーケンスを生成したあと，RMSはRMDにアプリケーションメッセージを送信します。送信するアプリケーションメッセージには，シーケンスの識別子とメッセージ番号が付与されます。

シーケンスクローズ（任意）
アプリケーションメッセージの送信が終了すると，RMSはシーケンスをクローズできます。シーケンスをクローズすると，新たにアプリケーションメッセージを送受信することはできません。シーケンスをクローズしても，関連するリソースは破棄しないで，保持されます。

シーケンス終了
アプリケーションメッセージの送信が終了すると，RMSはシーケンスを終了させます。シーケンスが終了すると，関連するリソースは破棄されます。

以降では，シーケンス生成に関するメッセージ，シーケンスクローズに関するメッセージ，およびシーケンス終了に関するメッセージをまとめて，シーケンスライフサイクルメッセージと呼びます。

付録B.2　WS-RM 1.1機能を使用する場合のシステム構成

WS-RM 1.1機能を使用する場合のシステム構成には，次の種類があります。

WebサービスとWebサービスクライアントが同じCosminexus上にある場合

WebサービスとWebサービスクライアントが異なるCosminexus上にある場合

WebサービスがCosminexus以外のアプリケーションサーバ上にある場合※

注※

この構成は，Cosminexus以外のアプリケーションサーバがWS-RM 1.1仕様に準拠していて，かつWS-RM 1.1機能のサポート範囲内で使用する場合だけ使用できます。

なお，WebサービスクライアントがCosminexus以外のアプリケーションサーバ上にある構成はサポートしていません。

＜この項の構成＞

(1)　WebサービスとWebサービスクライアントが同じCosminexus上にある場合

(2)　WebサービスとWebサービスクライアントが異なるCosminexus上にある場合

(3)　WebサービスがCosminexus以外のアプリケーションサーバ上にある場合

(1)　WebサービスとWebサービスクライアントが同じCosminexus上にある場合

WebサービスとWebサービスクライアントが同じCosminexus上にある場合の構成例を次に示します。

図B-3　WS-RM 1.1機能の構成例（WebサービスとWebサービスクライアントが同じCosminexus上にある場合）

この構成では，WebサービスクライアントとWebサービスが同じCosminexus上で動作します。そのため，RMSハンドラ，RMDハンドラ，RMD（SEI）のすべてを同じアプリケーションサーバに配置します。

(2)　WebサービスとWebサービスクライアントが異なるCosminexus上にある場合

WebサービスとWebサービスクライアントが異なるCosminexus上にある場合の構成例を次に示します。

図B-4　WS-RM 1.1機能の構成例（WebサービスとWebサービスクライアントが異なるCosminexus上にある場合）

この構成では，WebサービスクライアントとWebサービスが異なるCosminexus上で動作します。そのため，Webサービスクライアントが動作するCosminexus上にRMSハンドラを配置し，Webサービスが動作するCosminexus上にRMDハンドラおよびRMD（SEI）を配置します。

(3)　WebサービスがCosminexus以外のアプリケーションサーバ上にある場合

WebサービスがCosminexus以外のアプリケーションサーバ上にある場合の構成例を次に示します。この構成は，Cosminexus以外のアプリケーションサーバがWS-RM 1.1仕様に準拠していて，かつ，WS-RM 1.1機能のサポート範囲内で使用する場合だけ使用できます。

図B-5　WS-RM 1.1機能の構成例（WebサービスがCosminexus以外のアプリケーションサーバ上にある場合）

この構成では，WebサービスクライアントがCosminexus上で動作し，WebサービスがCosminexus以外のアプリケーションサーバ上で動作します。そのため，Webサービスクライアントが動作するCosminexus上にRMSハンドラを配置します。RMSハンドラは，Cosminexus以外のアプリケーションサーバが提供するRMDと通信します。

付録B.3　WS-RM 1.1機能の送達保証

送達保証とは，SOAPメッセージを確実に送受信するために，SOAPメッセージ時の再送，重複排除，順序制御をする機能です。

ここでは，送達保証の種類および設定方法について説明します。

＜この項の構成＞

(1)　送達保証の種類

(2)　送達保証の設定方法

(1)　送達保証の種類

送達保証の種類およびCosminexusのWS-RM 1.1機能でのサポート範囲を次の表に示します。

表B-1　送達保証の種類とCosminexusのWS-RM 1.1機能でのサポート範囲

項番 | 種類 | 動作 | RMSの処理 | RMDの処理 | サポート
1 | AtLeastOnce | 少なくとも1回送達 | 再送 | － | ×
2 | AtMostOnce | 重複なく送達 | － | 重複排除 | ○
3 | ExactlyOnce | 1回だけ送達 | 再送 | 重複排除 | ×
4 | InOrder | 順序どおりに送達 | － | 順序制御 | ×

（凡例）

○：使用できます。

×：使用できません。

－：該当しません。

(2)　送達保証の設定方法

送達保証は，WebサービスおよびWebサービスクライアントに次のハンドラを追加することで使用できます。

Webサービスクライアント
com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandler

Webサービス
com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandler

これらのハンドラは，最後のハンドラ（最もネットワーク寄りのハンドラ）として配置してください。

注

RMSAtMostOnceHandlerはスレッドセーフではありません。RMSAtMostOnceHandlerオブジェクトや，RMSAtMostOnceHandlerオブジェクトを含むHandlerResolverやServiceをスレッド間で共有しないでください。

付録B.4　WS-RM 1.1機能のAPI一覧

WS-RM 1.1機能のAPIのインタフェース，クラス，および列挙型の一覧を次の表に示します。

表B-2　WS-RM 1.1機能のAPIのインタフェース，クラス，および列挙型の一覧

項番 | インタフェース，クラス，または列挙型名 | 説明
com.cosminexus.wsrm.rms.apiパッケージ
1 | RMSProvider | WS-RM 1.1機能を使用する場合に最初に呼び出すクラスです。メインのAPI群であるRMSMessagingインタフェースを取得します。
2 | RMSMessaging | WS-RM 1.1機能の操作を実行するための，クライアントから使用するインタフェースです。シーケンス生成やシーケンス終了などの操作を実行できます。
3 | RMSConfigurations | RMSのプロパティをプログラムから動的に設定する場合に使用するクラスです。
com.cosminexus.wsrm.common.exceptionパッケージ
4 | RMException | WS-RM 1.1機能で使用する例外クラスです。
5 | FaultType | 例外に対応づけられたフォルトの種類を表す列挙型です。
com.cosminexus.wsrm.rms.handlerパッケージ
6 | RMSAtMostOnceHandler | AtMostOnce送達保証に対応したRMS機能を提供するハンドラです。
com.cosminexus.wsrm.rmd.handlerパッケージ
7 | RMDAtMostOnceHandler | AtMostOnce送達保証に対応したRMD機能を提供するハンドラです。
com.cosminexus.wsrm.common.modelパッケージ
8 | SequenceStatesEnum | シーケンスの状態を表す列挙型です。

＜この項の構成＞

(1)　com.cosminexus.wsrm.rms.api.RMSProviderクラス

(2)　com.cosminexus.wsrm.rms.api.RMSMessagingインタフェース

(3)　com.cosminexus.wsrm.rms.api.RMSConfigurationsクラス

(4)　com.cosminexus.wsrm.common.exception.RMExceptionクラス

(5)　com.cosminexus.wsrm.common.exception.FaultType列挙型

(6)　com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラス

(7)　com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラス

(8)　com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型

(1)　com.cosminexus.wsrm.rms.api.RMSProviderクラス

com.cosminexus.wsrm.rms.api.RMSProviderクラスの目的およびメソッドについて説明します。

(a)　目的

WS-RM 1.1機能を使用するためには，WS-RM 1.1機能のAPIを呼び出す必要があります。WS-RM 1.1機能を利用するユーザは，最初にcom.cosminexus.wsrm.rms.api.RMSProviderクラスを使用して，APIを提供するRMSMessagingクラスを取得する必要があります。

(b)　メソッド

com.cosminexus.wsrm.rms.api.RMSProviderクラスのメソッドの一覧を次の表に示します。

表B-3　com.cosminexus.wsrm.rms.api.RMSProviderクラスのメソッドの一覧

項番
メソッド名／説明

1
public static com.cosminexus.wsrm.rms.api.RMSMessaging getRMSMessaging(Service service) throws com.cosminexus.wsrm.common.RMException

説明
RMSMessagingオブジェクトを取得するためのメソッドです。

引数

javax.xml.ws.Service service:

Webサービスとの通信で使用するサービスクラスです。

例外

com.cosminexus.wsrm.common.exception.RMException:

次の場合に発生します。

引数のserviceにnullを指定した場合

処理中にエラーが発生した場合

2
public static com.cosminexus.wsrm.rms.api.RMSMessaging getRMSMessaging (Service service, PortInfo portInfo) throws com.cosminexus.wsrm.common.RMException

説明
RMSMessagingオブジェクトを取得するためのメソッドです。

引数

javax.xml.ws.Service service:

Webサービスとの通信で使用するサービスクラスです。

javax.xml.ws.handler.PortInfo portInfo:

HandlerResolverオブジェクトからHandlerChainオブジェクトを取得するためのPortInfoオブジェクトです。

例外

com.cosminexus.wsrm.common.exception.RMException:

次の場合に発生します。

引数のserviceにnullを指定した場合

処理中にエラーが発生した場合

3
public static com.cosminexus.wsrm.rms.api.RMSMessaging getRMSMessaging (Service service, RMSConfigurations rmsConfigurations) throws com.cosminexus.wsrm.common.RMException

説明
RMSMessagingオブジェクトを取得するためのメソッドです。

引数

javax.xml.ws.Service service:

Webサービスとの通信で使用するサービスクラスです。

com.cosminexus.wsrm.common.exception.RMSConfigurations rmsConfigurations:

プログラムから動的に設定する場合に使用するRMSを設定します。

例外

com.cosminexus.wsrm.common.exception.RMException:

次の場合に発生します。

引数のserviceにnullを指定した場合

処理中にエラーが発生した場合

4
public static com.cosminexus.wsrm.rms.api.RMSMessaging getRMSMessaging (Service service, PortInfo portInfo, RMSConfigurations rmsConfigurations) throws com.cosminexus.wsrm.common.RMException

説明
RMSMessagingオブジェクトを取得するためのメソッドです。

引数

javax.xml.ws.Service service:

Webサービスとの通信で使用するサービスクラスです。

javax.xml.ws.handler.PortInfo portInfo:

HandlerResolverオブジェクトからHandlerChainオブジェクトを取得するためのPortInfoオブジェクトです。

com.cosminexus.wsrm.common.exception.RMSConfigurations rmsConfigurations:

プログラムから動的に設定する場合に使用するRMSを設定します。

例外

com.cosminexus.wsrm.common.exception.RMException:

次の場合に発生します。

引数のserviceにnullを指定した場合

処理中にエラーが発生した場合

(2)　com.cosminexus.wsrm.rms.api.RMSMessagingインタフェース

com.cosminexus.wsrm.rms.api.RMSMessagingインタフェースの目的およびメソッドについて説明します。

(a)　目的

シーケンス生成やシーケンス終了など，WS-RM 1.1機能のメインAPIを提供します。

(b)　メソッド

com.cosminexus.wsrm.rms.api.RMSMessagingインタフェースのメソッドの一覧を次の表に示します。

表B-4　com.cosminexus.wsrm.rms.api.RMSMessagingインタフェースのメソッドの一覧

項番
メソッド名／説明

1
public boolean createSequence() throws com.cosminexus.wsrm.common.exception.RMException

説明
シーケンスを生成します。なお，このメソッドを呼び出す前に，RMS定義ファイルまたはRMSConfigurationsクラスを使用して，正しいRMD（SEI）のURLを設定する必要があります。
シーケンス生成に成功した場合はtrue，失敗した場合はfalseを返します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

2
public boolean closeSequence() throws com.cosminexus.wsrm.common.exception.RMException

説明
シーケンスをクローズします。
シーケンスのクローズに成功した場合はtrue，失敗した場合はfalseを返します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

3
public boolean terminateSequence() throws com.cosminexus.wsrm.common.exception.RMException

説明
シーケンスを終了します。
シーケンスの終了に成功した場合はtrue，失敗した場合はfalseを返します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

4
public long getLastMessageNumber() throws com.cosminexus.wsrm.common.exception.RMException

説明
最後に送信したアプリケーションメッセージのメッセージ番号を取得します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

5
public boolean getMessageStatus(long messageNumber) throws com.cosminexus.wsrm.common.exception.RMException

説明
特定のメッセージ番号を持つメッセージが届いたかどうかを取得します。
メッセージが届いている場合はtrue，届いていない場合はfalseを返します。

引数

long messageNumber:

状態を取得したいメッセージのメッセージ番号です。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

6
public com.cosminexus.wsrm.common.model.SequenceStateEnum getSequenceState() throws com.cosminexus.wsrm.common.exception.RMException

説明
使用中のシーケンスの状態を取得します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

7
public boolean isExpired() throws com.cosminexus.wsrm.common.exception.RMException

説明
シーケンスの有効期限を超過しているかどうかを取得します。
有効期限を超過している場合はtrue，超過していない場合はfalseを返します。

例外

com.cosminexus.wsrm.common.exception.RMException:

処理中にエラーが発生した場合に発生します。

(3)　com.cosminexus.wsrm.rms.api.RMSConfigurationsクラス

com.cosminexus.wsrm.rms.api.RMSConfigurationsクラスの目的およびメソッドについて説明します。

(a)　目的

プログラムからRMSを動的に設定するためのクラスです。RMS定義ファイルより優先度が高いため，com.cosminexus.wsrm.rms.api.RMSConfigurationsクラスを使用することで，RMS定義ファイルの設定を上書きできます。

(b)　メソッド

com.cosminexus.wsrm.rms.api.RMSConfigurationsクラスのメソッドの一覧を次の表に示します。

表B-5　com.cosminexus.wsrm.rms.api.RMSConfigurationsクラスのメソッドの一覧

項番
メソッド名／説明

1
public final void setExpiresDuration(long expiresDuration)

説明
生成するシーケンスの有効期限を設定します。生成済みのシーケンスの有効期限は変更されません。

引数

long expiresDuration:

シーケンスの有効期限（秒）です。0を指定した場合，有効期限は設定されません。

2
public final long getExpiresDuration()

説明
設定されているシーケンスの有効期限を取得します。

3
public final void setCwsrmSeiUrl(String wsrmSeiUrl)

説明
RMD（SEI）のURLを設定します。

引数

String wsrmSeiUrl:

RMD（SEI）のURLです。

4
public final String getCwsrmSeiUrl()

説明
設定されているRMD（SEI）のURLを取得します。

(4)　com.cosminexus.wsrm.common.exception.RMExceptionクラス

com.cosminexus.wsrm.common.exception.RMExceptionクラスの目的およびメソッドについて説明します。

(a)　目的

WS-RM 1.1機能でエラーが発生した場合にスローされる例外クラスです。

(b)　メソッド

com.cosminexus.wsrm.common.exception.RMExceptionクラスのメソッドの一覧を次の表に示します。

表B-6　com.cosminexus.wsrm.common.exception.RMExceptionクラスのメソッドの一覧

項番
メソッド名／説明

1
public RMException(Throwable throwable)

説明
RMExceptionクラスのコンストラクタです。

引数

Throwable throwable:

原因例外です。

2
public RMException(String errorCode, String errorMessage)

説明
RMExceptionクラスのコンストラクタです。

引数

String errorCode:

エラーコードです。

String errorMessage:

エラーメッセージです。

3
public RMException(String errorCode, String errorMessage, Throwable throwable)

説明
RMExceptionクラスのコンストラクタです。

引数

String errorCode:

エラーコードです。

String errorMessage:

エラーメッセージです。

Throwable throwable:

原因例外です。

4
public RMException(String errorCode, String errorMessage, FaultType faultType)

説明
RMExceptionクラスのコンストラクタです。

引数

String errorCode:

エラーコードです。

String errorMessage:

エラーメッセージです。

com.cosminexus.wsrm.common.exception.FaultType faultType:

フォルトの種類です。

5
public RMException(String errorCode, String errorMessage, FaultType faultType, Throwable throwable)

説明
RMExceptionクラスのコンストラクタです。

引数

String errorCode:

エラーコードです。

String errorMessage:

エラーメッセージです。

com.cosminexus.wsrm.common.exception.FaultType faultType:

フォルトの種類です。

Throwable throwable:

原因例外です。

6
public final com.cosminexus.wsrm.common.exception.FaultType getFaultType()

説明
例外に対応づけられているフォルトの種類を取得します。

7
public final String getErrorCode()

説明
例外に対応づけられているエラーコードを取得します。

8
public final String getErrorDetails()

説明
例外の詳細情報を取得します。

(5)　com.cosminexus.wsrm.common.exception.FaultType列挙型

com.cosminexus.wsrm.common.exception.FaultType列挙型の目的および要素について説明します。

(a)　目的

RMExceptionクラスに対応づけられたフォルトの種類を表す列挙型です。

(b)　要素

com.cosminexus.wsrm.common.exception.FaultType列挙型の要素の一覧を次の表に示します。

表B-7　com.cosminexus.wsrm.common.exception.FaultType列挙型の要素の一覧

項番 | 要素名 | 説明
1 | UNKNOWN_SEQUENCE_FAULT | wsrm:UnknownSequenceフォルトを受信したことを示します。
2 | CREATE_SEQUENCE_REFUSED_FAULT | wsrm:CreateSequenceRefusedフォルトを受信したことを示します。
3 | SEQUENCE_CLOSED_FAULT | wsrm:SequenceClosedフォルトを受信したことを示します。
4 | SEQUENCE_TERMINATED_FAULT | wsrm:SequenceTerminatedフォルトを受信したことを示します。
5 | WSRM_REQUIRED_FAULT | wsrm:WSRMRequiredフォルトを受信したことを示します。

(6)　com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラス

com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラスの目的およびメソッドについて説明します。

(a)　目的

AtMostOnce送達保証に対応したRMSハンドラクラスです。WS-RM 1.1機能を使用する場合は，com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラスをWebサービスクライアントの最後のハンドラとして組み込む必要があります。

com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラスはスレッドセーフではありません。RMSAtMostOnceHandlerオブジェクトや，RMSAtMostOnceHandlerオブジェクトを含むHandlerResolverやServiceオブジェクトをスレッド間で共有しないでください。

(b)　メソッド

com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラスのメソッドの一覧を次の表に示します。

表B-8　com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラスのメソッドの一覧

項番 | メソッド名 | 説明
1 | public RMSAtMostOnceHandler() | RMSAtMostOnceHandlerクラスのコンストラクタです。

(7)　com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラス

com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラスの目的およびメソッドについて説明します。

(a)　目的

AtMostOnce送達保証に対応したRMDハンドラクラスです。WS-RM 1.1機能を使用する場合は，com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラスをWebサービスの最後のハンドラとして組み込む必要があります。

(b)　メソッド

com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラスのメソッドの一覧を次の表に示します。

表B-9　com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラスのメソッドの一覧

項番 | メソッド名 | 説明
1 | public RMDAtMostOnceHandler() | RMDAtMostOnceHandlerクラスのコンストラクタです。

(8)　com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型

com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型の目的および要素について説明します。

(a)　目的

シーケンスの状態を表す列挙型です。

(b)　要素

com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型の要素の一覧を次の表に示します。

表B-10　com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型の要素の一覧

項番 | 要素名 | 説明
1 | NONE | シーケンスがないことを示します。
2 | CREATING | シーケンスが生成中であることを示します。
3 | CREATED | シーケンスが生成されたことを示します。
4 | CLOSING | シーケンスがクローズ中であることを示します。
5 | CLOSED | シーケンスがクローズされたことを示します。
6 | TERMINATING | シーケンスが終了中であることを示します。
7 | TERMINATED | シーケンスが終了されたことを示します。

付録B.5　WS-RM 1.1機能のプロパティ設定

WS-RM 1.1機能には，既存の共通定義ファイルに記述する設定と，WS-RM 1.1機能独自のRMS定義ファイルに記述する設定があります。

それぞれのファイルに設定するプロパティについて説明します。

＜この項の構成＞

(1)　共通定義ファイルに追加するプロパティ

(2)　RMS定義ファイルに追加するプロパティ

(1)　共通定義ファイルに追加するプロパティ

共通定義ファイル（cjwconf.properties）に追加するプロパティを次の表に示します。

表B-11　共通定義ファイル（cjwconf.properties）に追加するプロパティ

項番
プロパティ
説明
単位
範囲
デフォルト値

1
com.cosminexus.wsrm.rmd.sequence_expire_duration
RMD側のシーケンスの有効期限を設定します。
RMSが要求した有効期限と，このプロパティに指定した値とを比較して，小さい値をシーケンスの有効期限として採用します。
0を指定すると，シーケンスの有効期限は設定されません。無期限に使用できます。
秒
0～3600
300

(2)　RMS定義ファイルに追加するプロパティ

RMS定義ファイル（cwsrm_rms_conf.properties）に追加するプロパティを次の表に示します。RMS定義ファイルは，Webサービスクライアント実行時にWebサービスクライアントのクラスパスに含めてください。

表B-12　RMS定義ファイル（cwsrm_rms_conf.properties）に追加するプロパティ

項番
プロパティ
説明
単位
範囲
デフォルト値

1
com.cosminexus.wsrm.rms.sequence_expire_duration
RMS側のシーケンスの有効期限を設定します。シーケンス生成リクエストでRMDに要求する値を指定してください。
0を指定すると，シーケンスの有効期限は設定されません。無期限に使用できます。
秒
0～3600
300

2
com.cosminexus.wsrm.rms.cwsrm_sei_url
RMD（SEI）のURLを設定します。Webサービスクライアント実行時は，このプロパティを必ず指定してください。
このプロパティには次の値を指定します。
http://<host>:<port>/cwsrmsei1_1/WSRMSequenceService
<host>と<port>は，RMD（SEI）が動作する環境に合わせて変更してください。
－
－
－

（凡例）

－：該当しません。

付録B.6　WS-RM 1.1機能の性能解析トレース（PRF）

性能解析トレースとは，性能解析や障害を調査するためのトレース情報を指します。性能解析トレースを参照することで，システムの性能ボトルネックや，障害が発生した場合の，リクエスト処理の到達度合いを解析できます。

Cosminexusシステムが提供する性能解析トレースについては，マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編」の「4.6　性能解析トレース」を参照してください。

＜この項の構成＞

(1)　性能解析トレースの取得レベル

(2)　性能解析トレースのトレース出力情報

(3)　性能解析トレースのトレース取得ポイント（WS-RM 1.1機能使用時）

(1)　性能解析トレースの取得レベル

CosminexusのJAX-WS機能で使用できる性能解析トレースの取得レベルを次の表に示します。

表B-13　性能解析トレースの取得レベル一覧

項番
取得レベル
目的

1
標準レベル
（デフォルト）
CosminexusのJAX-WS機能とその他の機能との境界（入口と出口）が識別できるトレース情報が出力されます。

2
詳細レベル
標準レベルの出力内容に加えて，CosminexusのJAX-WS機能の内部処理のトレース情報が出力されます。

3
保守レベル
障害発生時などに保守情報を取得するためのレベルで，通常は使用しません。

(2)　性能解析トレースのトレース出力情報

CosminexusのJAX-WS機能で出力する性能解析トレースのトレース出力情報を次の表に示します。

表B-14　性能解析トレースのトレース出力情報

項番 | ファイル項目 | 内容
1 | イベントID | トレース取得ポイントのイベントIDです。
2 | クライアントAP情報 | ルートAP情報の有効範囲内のWebサービスクライアント，Webサービス間で一意の情報です。ただし，WS-RM 1.2機能の場合，一意ではありません。オプション情報を参照してください。
3 | ルートAP情報 | 一連のリクエストに対する処理で，一意の情報です。ただし，WS-RM 1.2機能の場合，一意ではありません。オプション情報を参照してください。
4 | リターンコード | トレース取得ポイントの種別（正常終了または異常終了）です。
5 | インタフェース名 | トレース取得ポイントのクラス名です。
6 | オペレーション名 | トレース取得ポイントのメソッド名です。
7 | オプション情報 | オプション情報です。

ここでは，クライアントAP情報とルートAP情報の有効範囲，およびトレース取得ポイントについて説明します。

(3)　性能解析トレースのトレース取得ポイント（WS-RM 1.1機能使用時）

WS-RM 1.1機能でシーケンスライフサイクルメッセージを送受信するときに出力される性能解析トレースのトレース取得ポイントを次の図に示します。

図B-6　シーケンスライフサイクルメッセージ送受信時のトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表B-15　トレース取得ポイントと出力される情報（WS-RM 1.1機能のライフサイクルメッセージ）

項番
取得レベル
取得ポイント
出力情報
（イベントID）

1
標準レベル
Webサービスクライアントによるシーケンス生成API呼び出し時
0xA4D0

WebサービスクライアントによるシーケンスクローズAPI呼び出し時
0xA4D1

Webサービスクライアントによるシーケンス終了API呼び出し時
0xA4D2

2
RMSハンドラがSEIへメッセージを送信する直前
0xA4D3

3
SEIのシーケンス生成処理開始時
0xA4D4

SEIのシーケンスクローズ処理開始時
0xA4D5

SEIのシーケンス終了処理開始時
0xA4D6

4
SEIのシーケンス生成処理終了時
0xA4D7

SEIのシーケンスクローズ処理終了時
0xA4D8

SEIのシーケンス終了処理終了時
0xA4D9

5
RMSハンドラがSEIからメッセージを受信した直後
0xA4DA

6
シーケンス生成API呼び出し終了時
0xA4DB

シーケンスクローズAPI呼び出し終了時
0xA4DC

シーケンス終了API呼び出し終了時
0xA4DD

7
詳細レベル
RMSハンドラのシーケンス生成処理開始時
0xA4DE

RMSハンドラのシーケンスクローズ処理開始時
0xA4DF

RMSハンドラのシーケンス終了処理開始時
0xA4E0

8
シーケンス情報生成処理開始時
0xA4E1

シーケンス情報更新処理開始時
0xA4E2

シーケンス情報削除処理開始時
0xA4E3

シーケンス情報読み込み処理開始時
0xA4EA

9
シーケンス情報生成処理終了時
0xA4E4

シーケンス情報更新処理終了時
0xA4E5

シーケンス情報削除処理終了時
0xA4E6

シーケンス情報読み込み処理終了時
0xA4EB

10
RMSハンドラのシーケンス生成処理終了時
0xA4E7

RMSハンドラのシーケンスクローズ処理終了時
0xA4E8

RMSハンドラのシーケンス終了処理終了時
0xA4E9

WS-RM 1.1機能のシーケンスメッセージの性能解析トレースのトレース取得ポイントを次の図に示します。

図B-7　シーケンスメッセージのトレース取得ポイント

各トレース取得ポイントとイベントIDの対応を次の表に示します。

表B-16　トレース取得ポイントと出力される情報（WS-RM 1.1機能のシーケンスメッセージ）

項番
取得レベル
取得ポイント
出力情報
（イベントID）

1
標準レベル
リクエストでのRMSハンドラ呼び出し開始時
0xA4F0

2
リクエストでのRMSハンドラ呼び出し終了時
0xA4F1

3
リクエストでのRMDハンドラ呼び出し開始時
0xA4F2

4
リクエストでのRMDハンドラ呼び出し終了時
0xA4F3

5
レスポンスでのRMDハンドラ呼び出し開始時
0xA4F4

6
レスポンスでのRMDハンドラ呼び出し終了時
0xA4F5

7
レスポンスでのRMSハンドラ呼び出し開始時
0xA4F6

8
レスポンスでのRMSハンドラ呼び出し終了時
0xA4F7

9
詳細レベル
シーケンス情報更新処理開始時
0xA4E2

シーケンス情報削除処理開始時
0xA4E3

シーケンス情報読み込み処理開始時
0xA4EA

10
シーケンス情報更新処理終了時
0xA4E5

シーケンス情報削除処理終了時
0xA4E6

シーケンス情報読み込み処理終了時
0xA4EB

付録B.7　WS-RM 1.1仕様のサポート範囲

WS-RM 1.1仕様のサポート範囲を次の表に示します。なお，表中の大分類はWS-RM 1.1仕様の該当個所（章節項）を，小分類はWS-RM 1.1仕様の該当個所に記載されている内容を示します。

表B-17　WS-RM 1.1仕様のサポート範囲

分類 | サポート
大分類 | 小分類
2.4 | 送達保証 | AtLeastOnce | ×
AtMostOnce | ○
ExactryOnce | ×
InOrder | ×
3 | RM要素 | ○
3.1 | 拡張要素／拡張属性の考慮※1 | ○
3.2 | Piggy-Backing | ○
3.3 | WS-Addressingの利用 | ○
3.4 | シーケンス生成 | ○
3.4 | シーケンス生成リクエスト | wsrm:CreateSequence | ○
wsrm:AcksTo※2 | △
wsrm:Expires | ○
wsrm:Offer | ×
拡張要素／拡張属性※1 | ○
3.4 | シーケンス生成レスポンス | wsrm:CreateSequenceResponse | ○
wsrm:Identifire | ○
wsrm:Expires | ○
wsrm:IncompleteSequenceBehavior | DiscardEntireSequence | ×
DiscardFollowingFirstGap | ×
NoDiscard | ○
wsrm:Accept | ×
拡張要素／拡張属性※1 | ○
3.5 | シーケンスクローズ | ○
3.5 | シーケンスクローズリクエスト | wsrm:CloseSequence | ○
wsrm:Identifire | ○
wsrm:LastMsgNumber | ○
拡張要素／拡張属性※1 | ○
3.5 | シーケンスクローズレスポンス | wsrm:CloseSequenceResponse | ○
wsrm:Identifire | ○
拡張要素／拡張属性※1 | ○
3.6 | シーケンス終了 | ○
3.6 | シーケンス終了リクエスト | wsrm:TerminateSequence | ○
wsrm:Identifire | ○
wsrm:LastMsgNumber | ○
拡張要素／拡張属性※1 | ○
3.6 | シーケンス終了レスポンス | wsrm:TerminateSequenceResponse | ○
wsrm:Identifire | ○
拡張要素／拡張属性※1 | ○
3.7 | シーケンス | ○
シーケンス要素 | wsrm:Sequence | ○
wsrm:Identifire | ○
wsrm:MessageNumber | ○
3.8 | Ackリクエスト※3 | ○
3.8 | Ackリクエスト要素 | wsrm:AckRequested | ○
wsrm:Identifire | ○
拡張要素／拡張属性※1 | ○
3.9 | Ack | ○
3.9 | Ack要素 | wsrm:SequenceAcknowledgement | ○
wsrm:Identifire | ○
wsrm:AcknowledgementRange | ○
wsrm:None | ○
wsrm:Final | ○
wsrm:Nack※4 | ×
拡張要素／拡張属性※1 | ○
4 | フォルト | ○
4 | SOAP 1.1対応 | ○
4 | SOAP 1.2対応 | ×
4.1 | wsrm:SequenceFaultフォルト※5 | △
4.2 | wsrm:SequenceTerminatedフォルト※6 | △
4.3 | wsrm:UnknownSequenceフォルト | ○
4.4 | wsrm:InvalidAcknowledgementフォルト | ×
4.5 | wsrm:MessageNumberRolloverフォルト | ○
4.6 | wsrm:CreateSequenceRefusedフォルト | ○
4.7 | wsrm:SequenceClosedフォルト | ○
4.8 | wsrm:WSRMRequiredフォルト | ○
5 | セキュリティの脅威と対策 | ×
6 | セキュアなシーケンス | ×

（凡例）

○：CosminexusのWS-RM 1.1機能でサポートしています。

×：CosminexusのWS-RM 1.1機能でサポートしていません。

△：CosminexusのWS-RM 1.1機能でサポートしていますが，一部制限があります。

注※1

CosminexusのWS-RM 1.1機能では，拡張要素および拡張属性を付加しません。受信メッセージに含まれる拡張要素および拡張属性は無視されます。

注※2

使用できる要素値は，anonymous URIだけです。

注※3

Ackリクエストは常にPiggy-Backingで送信されます。

注※4

CosminexusのWS-RM 1.1機能では，受信したメッセージの範囲をwsrm:AcknowledgementRange要素またはwsrm:None要素で表します。wsrm:Nack要素は使用しません。wsrm:Nack要素を含むメッセージを受信した場合，wsrm:Nack要素は無視されます。

注※5

CosminexusのWS-RM 1.1機能では，wsrm:SequenceFaultフォルトを送信しません。wsrm:FaultCode要素およびwsrm:Detail要素は，soap:Fault要素の子要素であるdetail要素の子要素となります。なお，wsrm:SequenceFaultフォルトを受信した場合は正常に処理されます。

注※6

CosminexusのWS-RM 1.1機能では，wsrm:SequenceTerminatedフォルトではなくwsrm:UnknownSequenceフォルトを送信します。なお，wsrm:SequenceTerminatedフォルトを受信した場合は正常に処理されます。

付録C　POJOのWebサービスからEJBのWebサービスへの移行

POJOで開発されたWebサービスを，EJBのWebサービスとして動作させることで，EJBの機能を利用できます。ここでは，POJOのWebサービスをEJBのWebサービスに移行する方法について説明します。なお，POJOのWebサービスで十分な場合，EJBへの移行は不要です。

POJOのWebサービスをEJBのWebサービスに移行する方法を次の表に示します。

表C-1　EJBのWebサービスに移行する方法

項番 | POJOのWebサービスの構成物 | EJBのWebサービスへの移行方法
1 | Webサービス実装クラス | ソースコードにjavax.ejb.Statelessアノテーションを追加し，コンパイルします。
2 | 項番1以外のJavaクラス（SEI，JavaBeansクラス（スタブ）など） | EJBのWebサービスへの移行後もクラスファイルをそのまま使用できます。
3 | WSDL | POJOのWebサービスの場合とEJBのWebサービスの場合とではWebサービスとして公開するURLが異なるため，soap:address要素のlocation属性などのURLに関する値を変更して使用します。EJBのURLについては，「10.2.2(1)　ディスカバリ」を参照してください。
4 | cosminexus-jaxws.xml，web.xml，application.xmlなどのDD | POJOのWebサービス用に作成されたDDは，EJBのWebサービスではそのまま使用できません。EJBのWebサービス用に新たにDDを作成してください。

POJOのWebサービスをEJBのWebサービスに移行する場合，Webサービス実装クラスのソースコードの修正が必要です。ここでは，POJOのWebサービスの実行に必要なクラスファイルと，Webサービス実装クラスのソースコードがあることを前提に説明します。

移行手順の流れを次に示します。

＜この節の構成＞

(1)　EJBのWebサービス実装クラスを作成する

(2)　Webサービス実行に必要なクラスファイルおよびWSDLを流用する

(3)　EJB JARファイルを作成する

(4)　デプロイメントディスクリプタを作成する

(5)　EARファイルを作成する

(1)　EJBのWebサービス実装クラスを作成する

POJOのWebサービス実装クラスのソースコードにjavax.ejb.Statelessアノテーションでアノテートします。アノテートしたソースコードをコンパイルしてクラスファイルを作成します。

(2)　Webサービス実行に必要なクラスファイルおよびWSDLを流用する

POJOのWebサービスを実行するために必要なSEI，JavaBeansクラス（スタブ）などのクラスファイルは，EJBのWebサービスとして実行する場合にも使用できます。

POJOのWebサービスを実行するために使用していたWSDLがある場合は，EJBのWebサービスとして実行する場合にも使用できます。ただし，POJOのWebサービスをEJBのWebサービスとして実行した場合に，Webサービスとして公開するURLが異なるため，WSDLのsoap:address要素のlocation属性などのURLに関する値を変更して使用します。EJBのWebサービスのURLについては，「10.2.2(1)　ディスカバリ」を参照してください。

(3)　EJB JARファイルを作成する

(1)(2)のクラスファイルおよびWSDLをEJB JARファイルに格納します。EJB JARファイルの構成については，「3.5.2　EJB JARファイルの構成」を参照してください。

(4)　デプロイメントディスクリプタを作成する

(3)で作成したEJB JARファイルを指定するapplication.xmlを作成します。application.xmlの例を次に示します。「statelessjava.jar」には(3)で作成したEJB JARファイルの名前を指定します。

<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">

 <description>Sample application &quot;statelessjava&quot;</description>
 <display-name>Sample_application_statelessjava</display-name>
 <module>
   <ejb>statelessjava.jar</ejb>
 </module>
</application>

EJBのWebサービスの動作には，web.xmlは必須ではありません。EJBのWebサービスで，サーブレットフィルタなどの設定をweb.xmlに加える場合にweb.xmlを作成します。詳細については，「3.5.4　EJBのWebサービスの設定用WARファイルの作成」を参照してください。また，cosminexus-jaxws.xmlはEJBのWebサービスには適用されません。

(5)　EARファイルを作成する

(3)(4)で作成したEJB JARファイルとapplication.xmlを含むEARファイルを作成します。EARファイルの構成については，「3.5.3　EARファイルの作成」を参照してください。

付録D　JAX-WSエンジンのメモリ使用量の算出

Javaヒープ領域でのJAX-WSエンジンのメモリ使用量（Webサービス実行側）を次の場合を用いて説明します。

アプリケーション起動時のメモリ使用量

1リクエスト当たりのメモリ使用量

添付ファイル使用時の1リクエスト当たりのメモリ使用量

単位時間当たりのメモリ使用量

なお，JAX-WSエンジンに関する設定は，すべてデフォルト値とします。以降で説明するメモリ使用量には，JAX-WSエンジンの内部クラスで使用するメモリ使用量，内部クラスが呼び出すJava APIのメモリ使用量，およびJavaVMの内部実装クラスで使用するメモリ量も含みます。

また，以降で説明するJAX-WSエンジン固有のメモリ使用量は目安であり，実際のシステムでは若干異なる場合があります。

＜この節の構成＞

付録D.1　アプリケーション起動時のメモリ使用量

付録D.2　1リクエスト当たりのメモリ使用量

付録D.3　添付ファイル使用時の1リクエスト当たりのメモリ使用量

付録D.4　単位時間当たりのメモリ使用量の算出

付録D.1　アプリケーション起動時のメモリ使用量

Webサービスを含むアプリケーション起動時のメモリ使用量について説明します。アプリケーション起動時とは，cjstartappコマンド実行時，またはManagement ServerからJ2EEアプリケーションを起動した直後のことを指します。

アプリケーション起動時には，JAX-WSエンジンの実行に必要なクラスの初期化などが行われます。初期化に必要なメモリ量は，Webサービス実装クラスの処理に関係なく，約21.2MBとなります。

付録D.2　1リクエスト当たりのメモリ使用量

1リクエスト当たりの処理に必要なメモリ使用量について説明します。1リクエストとは，Webサービスクライアントからリクエストを受け付け，処理をし，レスポンスを返すまでのことを指します。

初回リクエスト時と2回目以降のリクエスト時では，使用されるJAX-WSエンジン固有のメモリ使用量が異なります。

初回リクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（初回）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量(2.43MB)

2回目以降のリクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（2回目以降）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量(119.9KB)

また，単位時間当たりに複数のリクエストが到着する場合のメモリ使用量の算出式は，次のとおりです。

単位時間当たりのメモリ使用量＝
  1リクエスト当たりのメモリ使用量（初回）+{1リクエスト当たりのメモリ使用量（2回目以降）×（単位時間当たりのリクエスト処理数－1）}

付録D.3　添付ファイル使用時の1リクエスト当たりのメモリ使用量

添付ファイルを使用するWebサービスのアプリケーションで，1リクエスト当たりの処理に必要なメモリ使用量について説明します。1リクエストとは，Webサービスクライアントからリクエストを受け付け，処理をし，レスポンスを返すまでのことを指します。

ここで説明する算出方法では，Webサービスクライアントから添付ファイルを受け付け，添付ファイルをそのままWebサービスクライアントに返す処理をするWebサービスを想定しています。

＜この項の構成＞

(1)　添付ファイルサイズが10KBの場合

(2)　添付ファイルサイズが100KBの場合

(3)　添付ファイルサイズが1MBの場合

(1)　添付ファイルサイズが10KBの場合

初回リクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（初回）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（2.68MB）

2回目以降のリクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（2回目以降）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（193KB）

(2)　添付ファイルサイズが100KBの場合

初回リクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（初回）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（2.73MB）

2回目以降のリクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（2回目以降）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（411KB）

(3)　添付ファイルサイズが1MBの場合

初回リクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（初回）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（4.54MB）

2回目以降のリクエスト時のメモリ使用量を示します。

1リクエスト当たりのメモリ使用量（2回目以降）＝
  Webサービス実装クラスが使用するメモリ使用量＋JAX-WSエンジン固有のメモリ使用量（2.24MB）

付録D.4　単位時間当たりのメモリ使用量の算出

単位時間当たりに複数のリクエストが到着する場合のメモリ使用量の算出式は，次のとおりです。

単位時間当たりのメモリ使用量 ＝
  1リクエスト当たりのメモリ使用量（初回）+{1リクエスト当たりのメモリ使用量（2回目以降）×（単位時間当たりのリクエスト処理数－1）}

ここでは例として，1分間に60リクエストが到着し，平均約10KBの添付ファイルを扱うシステムの1時間当たりのメモリ使用量を算出します。このシステムでは，Webサービス実装クラスが使用するメモリ使用量が，1リクエスト当たり100KBとします。

この場合，初回時の1リクエスト当たりのメモリ使用量は次のとおりとなります。

100KB＋2.68MB＝2.78MB

また，2回目以降の1リクエスト当たりのメモリ使用量は次のとおりとなります。

100KB＋193KB＝293KB

この結果から，1時間当たりのメモリ使用量は，次のように算出できます。

2.78MB＋{293KB×（60×60－1)}＝1,033MB

1時間当たりのメモリ使用量に，アプリケーション起動時のメモリ量を加えると，このアプリケーションが起動してから1時間で使用するJavaヒープのメモリ量がわかります。

21.2MB＋1,033MB＝1,054.2MB

付録E　このマニュアルの参考情報

このマニュアルを読むに当たっての参考情報を示します。

＜この節の構成＞

付録E.1　関連マニュアル

付録E.2　このマニュアルでの表記

付録E.3　英略語

付録E.4　KB（キロバイト）などの単位表記について

付録E.1　関連マニュアル

このマニュアルと関連するCosminexusのマニュアルを次に示します。

Cosminexus アプリケーションサーバ V8 概説（3020-3-U01）
アプリケーションサーバの概要について説明しています。

Cosminexus アプリケーションサーバ V8 システム構築・運用ガイド（3020-3-U04）
セットアップウィザードおよびSmart Composer機能を使用したシステムの構築・運用の手順について説明しています。

Cosminexus アプリケーションサーバ V8 機能解説 保守／移行／互換編（3020-3-U10）
アプリケーションサーバで構築したシステムの保守に関する機能，移行情報，および互換用機能について説明しています。

Cosminexus アプリケーションサーバ V8 運用管理ポータル操作ガイド（3020-3-U13）
運用管理ポータルの使用方法について説明しています。

Cosminexus アプリケーションサーバ V8 リファレンス コマンド編（3020-3-U14）
アプリケーションサーバを構築・運用するときに使用するコマンドについて説明しています。

Cosminexus アプリケーションサーバ V8 リファレンス 定義編(サーバ定義)（3020-3-U15）
アプリケーションサーバを構築・運用するとき，またはアプリケーションを開発するときに使用するファイルのうち，J2EEサーバやManagement Serverなどのサーバの定義に使用するファイルの形式について説明しています。

Cosminexus アプリケーションサーバ V8 アプリケーション開発ガイド（3020-3-U25）
Cosminexusシステムで動作させるアプリケーションの開発方法について説明しています。

Cosminexus アプリケーションサーバ V8 Cosminexus XML Processor ユーザーズガイド（3020-3-U27）
Cosminexus XML Processorが提供するXMLパーサ・XSLTトランスフォーマの機能，作成方法，および使用方法について説明しています。

Cosminexus アプリケーションサーバ V8 SOAPアプリケーション開発の手引（3020-3-U30）
SOAPアプリケーション開発支援機能およびSOAP通信基盤を使用したSOAPアプリケーションの開発，実行方法について説明しています。

Cosminexus アプリケーションサーバ V8 Webサービスセキュリティ 使用の手引（3020-3-U32）
Cosminexusが提供するWebサービスセキュリティ機能に対応したWebサービスの開発について説明しています。

Cosminexus アプリケーションサーバ V8 メッセージ2 KDJE-KDJW編（3020-3-U42）
Cosminexusで出力されるKDJEからKDJWまでのメッセージについて説明しています。

なお，このマニュアルでは，次のマニュアルについて，バージョン番号を省略して表記しています。マニュアルの正式名称とこのマニュアルでの表記を次の表に示します。

正式名称 | このマニュアルでの表記
Cosminexus アプリケーションサーバ V8 概説 | Cosminexus アプリケーションサーバ 概説
Cosminexus アプリケーションサーバ V8 システム構築・運用ガイド | Cosminexus アプリケーションサーバ システム構築・運用ガイド
Cosminexus アプリケーションサーバ V8 機能解説 保守／移行／互換編 | Cosminexus アプリケーションサーバ 機能解説 保守／移行／互換編
Cosminexus アプリケーションサーバ V8 運用管理ポータル操作ガイド | Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド
Cosminexus アプリケーションサーバ V8 リファレンス コマンド編 | Cosminexus アプリケーションサーバ リファレンス コマンド編
Cosminexus アプリケーションサーバ V8 リファレンス 定義編(サーバ定義) | Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)
Cosminexus アプリケーションサーバ V8 アプリケーション開発ガイド | Cosminexus アプリケーションサーバ アプリケーション開発ガイド
Cosminexus アプリケーションサーバ V8 Cosminexus XML Processor ユーザーズガイド | Cosminexus XML Processor ユーザーズガイド
Cosminexus アプリケーションサーバ V8 SOAPアプリケーション開発の手引 | Cosminexus アプリケーションサーバ SOAPアプリケーション開発の手引
Cosminexus アプリケーションサーバ V8 Webサービスセキュリティ 使用の手引 | Cosminexus アプリケーションサーバ Webサービスセキュリティ 使用の手引
Cosminexus アプリケーションサーバ V8 メッセージ2 KDJE-KDJW編 | Cosminexus アプリケーションサーバ メッセージ 2

付録E.2　このマニュアルでの表記

このマニュアルで使用している表記と，対応する製品名を次に示します。

表記 | 製品名
Application Server | Application Server Enterprise | uCosminexus Application Server Enterprise
Application Server Standard | uCosminexus Application Server Standard
Developer | Developer Professional | uCosminexus Developer Professional
Developer Standard | uCosminexus Developer Standard
IPF | Itanium(R) Processor Family
UNIX | AIX | AIX 5L V5.3
AIX V6.1
AIX V7.1
HP-UXまたはHP-UX（IPF） | HP-UX 11i V2（IPF）
HP-UX 11i V3（IPF）
Linux | Linux（IPF） | Red Hat Enterprise Linux(R) AS 4（IPF）
Red Hat Enterprise Linux(R) 5 Advanced Platform（Intel Itanium）
Red Hat Enterprise Linux(R) 5（Intel Itanium）
Linux（x86/AMD64 & Intel EM64T） | Red Hat Enterprise Linux(R) AS 4（x86）
Red Hat Enterprise Linux(R) ES 4（x86）
Red Hat Enterprise Linux(R) AS 4（AMD64 & Intel EM64T）
Red Hat Enterprise Linux(R) ES 4（AMD64 & Intel EM64T）
Red Hat Enterprise Linux(R) 5 Advanced Platform（x86）
Red Hat Enterprise Linux(R) 5（x86）
Red Hat Enterprise Linux(R) 5 Advanced Platform（AMD/Intel 64）
Red Hat Enterprise Linux(R) 5（AMD/Intel 64）
Red Hat Enterprise Linux(R) Server 6（32-bit x86）
Red Hat Enterprise Linux(R) Server 6（64-bit x86_64）

このマニュアルで使用している表記と，対応するアプリケーションサーバの機能名を次に示します。

表記 | アプリケーションサーバの機能名
Management Server | Cosminexus Management Server
PRF | Cosminexus Performance Tracer
Smart Composer | Cosminexus Smart Composer

このマニュアルで使用している表記と，対応するJava関連用語を次に示します。

表記 | Java関連用語
EAR | Enterprise Archive
EJBまたはEnterprise JavaBeans | Enterprise JavaBeansTM
J2EEまたはJava 2 Platform, Enterprise Edition | JavaTM 2 Platform, Enterprise Edition
JAR | JavaTM Archive
Java | JavaTM
JavaVMまたはJVM | JavaTM Virtual Machine
JAXB | JavaTM Architecture for XML Binding
JAXP | JavaTM API for XML Processing
JDK | JavaTM Development Kit
JSP | JavaServer PagesTM
Servletまたはサーブレット | JavaTM Servlet
WAR | Web Archive

付録E.3　英略語

このマニュアルで使用している英略語を次に示します。

英略語 | 説明
API | Application Programming Interface
ASCII | American Standard Code for Information Interchange
CSV | Comma Separated Value
DII | Dynamic Invocation Interface
EJB | Enterprise Java Beans
HTTP | Hyper Text Transfer Protocol
MIME | Multipurpose Internet Mail Extensions
OS | Operating System
POJO | Plain Old Java ObjectまたはPlain Ordinary Java Object
QName | Qualified Name
RFC | Request For Comments
RMD | Reliable Messaging Destination
RMI | Remote Method Invocation
RMS | Reliable Messaging Source
RPC | Remote Procedure Call
SAAJ | SOAP with Attachments API for Java
SEI | Service Endpoint Interface
SOAP | Simple Object Access Protocol
UAC | User Account Control
UDDI | Universal Description, Discovery, and Integration
URI | Uniform Resource Identifier
URL | Uniform Resource Locator
W3C | World Wide Web Consortium
WS-I | Web Services Interoperability Organization
WSDL | Web Services Description Language
XML | Extensible Markup Language

付録E.4　KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

付録F　用語解説

（英字）

EJB（Enterprise Java Beans）

ビジネスアプリケーション向けに拡張したJavaオブジェクトの仕様です。

CosminexusのWebサービスは，POJOの範囲の仕様でも，EJBの範囲の仕様でも作成できます。

EJBのWebサービスの開発では，EJBプロジェクトを使用します。

JAX-WS API

JAX-WS 2.1仕様で提供されているAPIです。ハンドラフレームワークなどの機能を追加する場合に使用します。

JAX-WSエンジン

JAX-WS 2.1仕様に対応したWebサービスの通信基盤となるエンジンです。Webサービスクライアント側およびWebサービス側に配置され，送受信されたSOAPメッセージのマーシャル／アンマーシャルをする役割を果たします。

JAX-WS機能

JAX-WS 2.1仕様に対応したWebサービスを開発，実行するための機能です。Webサービス開発用のコマンドラインインタフェース，およびWebサービス実行用の通信基盤を提供します。

POJO（Plain Old Java ObjectまたはPlain Ordinary Java Object）

Javaの仕様範囲で作成するJavaオブジェクトを示す用語です。

CosminexusのWebサービスは，POJOの範囲の仕様でも，EJBの範囲の仕様でも作成できます。

POJOのWebサービスの開発では，Webプロジェクトを使用します。

SOAP（Simple Object Access Protocol）

HTTPなどの通信プロトコルを下位に持ち，ネットワークを経由したオブジェクト間の通信を規定したプロトコルです。リモートマシン上のオブジェクトに対するアクセスには，XMLの技術を利用したSOAPメッセージを利用します。

SOAPアプリケーション

Cosminexusの既存機能であるSOAPアプリケーション開発支援機能で開発されたWebサービス用のアプリケーションです。

SOAPアプリケーションについては，マニュアル「Cosminexus アプリケーションサーバ SOAPアプリケーション開発の手引」を参照してください。

SOAPアプリケーション開発支援機能

Cosminexusが提供する，SOAPアプリケーションを開発するための機能です。SOAPアプリケーション開発支援機能では，開発支援コマンドを使用してSOAPアプリケーションを開発できます。

SOAPアプリケーション開発支援機能については，マニュアル「Cosminexus アプリケーションサーバ SOAPアプリケーション開発の手引」を参照してください。

SOAPエンベロープ

SOAPメッセージの要素です。メッセージのいちばん外側の要素で，SOAPヘッダとSOAPボディという子要素を持ちます。

SOAPヘッダ

SOAPメッセージの要素です。SOAPヘッダでは，メッセージ処理のあて先，およびメッセージ処理が必須かどうかを指定します。

SOAPボディ

SOAPメッセージの要素です。SOAPボディに送信するメッセージの内容を記述します。

SOAPメッセージ

SOAPプロトコルでオブジェクト間の送受信に使用するメッセージです。SOAPメッセージは，SOAPエンベロープ，SOAPヘッダ，およびSOAPボディという要素で構成されます。

Webサービス

Web関連の技術を利用して，ネットワークを介して提供されるプログラム（サービス）です。Webサービスの基礎となる技術には，SOAP，WSDL，およびUDDIなどがあります。

CosminexusのWebサービスは，次のどちらの仕様範囲でも作成できます。

POJO
既存の仕様範囲でJavaオブジェクトを作成する方法です。

EJB
ビジネスアプリケーション向けに拡張したJavaオブジェクトの仕様です。

Webサービスクライアント

Webサービスを利用するクライアントプログラムです。Webサービスの開発では，コマンドで自動生成されたクラスを利用して，Webサービスを呼び出す処理を記述します。

Webサービス実装クラス

Webサービスの実装に当たるプログラムです。Webサービスの開発では，コマンドで自動生成されたクラスを利用して，Webサービスの実装を記述します。

（カ行）

共通定義ファイル

システム共通の動作を設定するための定義ファイルです。

コマンド

このマニュアルでは，Webサービスの開発時に使用するcjwsimportコマンドおよびaptコマンドをコマンドと総称して表記しています。

コンテキストルート

コンテキストのルートパスです。コンテキスト内のWebアプリケーションにアクセスするときにURL上に指定します。コンテキストパスとも呼びます。

（サ行）

自動生成クラス

cjwsimportコマンドおよびaptコマンドを実行したときに生成されるJavaクラスを表します。

スケルトン

SOAPサービスに対する静的なインタフェースです。Webサービス側にデプロイし，Webサービスクライアント側との送受信の処理を隠蔽します。

スタブ

WebサービスクライアントからのリクエストをJAX-WSエンジンに渡し，JAX-WSエンジンからの戻り値を返す働きを持つインタフェースです。Webサービスクライアント側にデプロイし，Webサービス側との送受信の処理を隠蔽します。

（タ行）

デプロイ

作成したJavaプログラムを利用できる状態にする手続きのことをいいます。EARファイルをデプロイすることで，Webサービスとして利用できるようになります。

添付ファイル付きSOAPメッセージ

SOAPヘッダやSOAPボディに加えて，任意のファイルが添付されたSOAPメッセージです。

動作定義ファイル

共通定義ファイルおよびプロセス別の定義ファイルの総称です。ログ出力やタイムアウトなど，JAX-WSエンジンの動作を設定する場合に定義します。

（ナ行）

名前空間

XML文書内で同じ名前を持つ要素や属性が，異なる意味を表すために定義する識別子です。

（ハ行）

ハンドラフレームワーク

SOAPメッセージを送受信するときに，JAX-WSエンジン内で処理をインターセプトして，処理を追加する機能（フレームワーク）です。WebサービスクライアントとWebサービス実装クラスの間に複数のハンドラを追加し，Webサービスの機能を拡張できます。

プロセス別の定義ファイル

プロセス固有の動作を設定する必要がある場合に作成する定義ファイルです。

（ヤ行）

ユーザ定義例外

Webサービスの開発者が，Webサービスの処理で独自に実装する例外のことです。必要に応じてWebサービスの処理でスローします。

索引

[数字]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｈ][Ｉ][Ｊ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｒ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(数字)

1リクエスト当たりのメモリ使用量

1リクエスト当たりのメモリ使用量（添付ファイル使用時）

(英字)

(Ａ)

action要素（javax.jws.WebMethod）

AddressingFeature

APIベースのWebサービスクライアントの開発の流れ

application.xmlを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

application.xmlを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

application.xmlを作成する（SEI起点・アドレッシング）

application.xmlを作成する（SEI起点・カスタマイズ）

application.xmlを作成する（SEI起点・ストリーミング）

application.xmlを作成する（SEI起点）

application.xmlを作成する（WSDL起点・WS-RM 1.2）

application.xmlを作成する（WSDL起点）

application.xmlを作成する（プロバイダ起点・SAAJ）

aptコマンド

aptコマンドの生成ファイル一覧

aptコマンドの引数

AttachmentPartクラス

(Ｂ)

binding属性（wsdl:port要素）

(Ｃ)

childElementName属性（jaxws:bindings要素）

CID URLスキームの形式

cjwsgenコマンド

cjwsgenコマンドのオプション一覧

cjwsgenコマンドの指定形式

cjwsgenコマンドの終了コード

cjwsimportコマンド

cjwsimportコマンドのオプション一覧

cjwsimportコマンドの指定形式

cjwsimportコマンドの終了コード

cjwsimportコマンドの生成ファイル一覧

className要素（javax.xml.ws.FaultAction）

className要素（javax.xml.ws.RequestWrapper）

className要素（javax.xml.ws.ResponseWrapper）

closeメソッドの処理

com.cosminexus.jaxws.http.proxyPassword

com.cosminexus.jaxws.http.proxyUser

com.cosminexus.jaxws.https.proxyPassword

com.cosminexus.jaxws.https.proxyUser

com.cosminexus.wsrm.common.exception.FaultType列挙型

com.cosminexus.wsrm.common.exception.RMExceptionクラス

com.cosminexus.wsrm.common.model.SequenceStatesEnum列挙型

com.cosminexus.wsrm.rmd.handler.RMDAtMostOnceHandlerクラス

com.cosminexus.wsrm.rms.api.RMSConfigurationsクラス

com.cosminexus.wsrm.rms.api.RMSMessagingインタフェース

com.cosminexus.wsrm.rms.api.RMSProviderクラス

com.cosminexus.wsrm.rms.handler.RMSAtMostOnceHandlerクラス

com.sun.xml.ws.developer.StreamingAttachmentFeatureクラス

com.sun.xml.ws.developer.StreamingAttachmentアノテーション

com.sun.xml.ws.developer.StreamingDataHandlerクラス

Conformanceへの対応

cosminexus-jaxws.xml使用時の設定例

cosminexus-jaxws.xmlによるカスタマイズ

cosminexus-jaxws.xmlの書式

cosminexus-jaxws.xmlのファイル名と格納先

(Ｄ)

Detailインタフェース

Document BareスタイルでのMTOM/XOP仕様形式の添付ファイル

(Ｅ)

EARファイル

EARファイルの作成

EARファイルを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

EARファイルを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

EARファイルを作成する（SEI起点・アドレッシング）

EARファイルを作成する（SEI起点・カスタマイズ）

EARファイルを作成する（SEI起点・ストリーミング）

EARファイルを作成する（SEI起点）

EARファイルを作成する（WSDL起点・WS-RM 1.2）

EARファイルを作成する（WSDL起点）

EARファイルを作成する（プロバイダ起点・SAAJ）

EARファイルをデプロイする（SEI起点・MTOM/XOP仕様形式の添付ファイル）

EARファイルをデプロイする（SEI起点・wsi:swaRef形式の添付ファイル）

EARファイルをデプロイする（SEI起点・アドレッシング）

EARファイルをデプロイする（SEI起点・カスタマイズ）

EARファイルをデプロイする（SEI起点・ストリーミング）

EARファイルをデプロイする（SEI起点）

EARファイルをデプロイする（WSDL起点・WS-RM 1.2）

EARファイルをデプロイする（WSDL起点）

EARファイルをデプロイする（プロバイダ起点・SAAJ）

EJB

EJB JARファイル

EJB JARファイルの構成

EJB（Enterprise Java Beans）〔用語解説〕

EJBのWebサービスに適用する場合の注意事項

element属性（wsdl:part要素）

enabled要素（javax.xml.ws.soap.Addressing）

enabled要素（javax.xml.ws.soap.MTOM）

endpointInterface要素（javax.jws.WebService）

exclude要素（javax.jws.WebMethod）

(Ｆ)

faultBean要素（javax.xml.ws.WebFault）

fault要素（javax.xml.ws.Action）

file要素（javax.jws.HandlerChain）

(Ｈ)

handleFaultメソッドの処理

handleMessageメソッドの処理

header要素（javax.jws.WebParam）

header要素（javax.jws.WebResult）

http.nonProxyHosts

http.proxyHost

http.proxyPort

https.proxyHost

https.proxyPort

HTTP応答ヘッダ

HTTPステータスコード

HTTPステータスコード

HTTPステータスコード（例外をフォルトにバインディングする場合）

HTTPヘッダ（添付ファイルからSOAPメッセージ・MTOM/XOP）

HTTPヘッダ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

HTTPヘッダとHTTPボディの境界文字列（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

HTTPボディ（添付ファイルからSOAPメッセージ・MTOM/XOP）

HTTPボディ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

(Ｉ)

implementation属性（cosminexus-jaxws.xml）

input要素（javax.xml.ws.Action）

(Ｊ)

J2EEサーバの移行

java.util.Listオブジェクト

java.util.Mapクラス

javaee:handler-chains要素

javaee:handler-chain要素

javaee:handler-class要素

javaee:handler-name要素

javaee:handler要素

javaee:soap-header要素

javaee:soap-role要素

JavaVMのプロパティ

javax.activation.DataHandler型に指定できる添付ファイル

javax.jws.HandlerChainアノテーション

javax.jws.soap.SOAPBindingアノテーション

javax.jws.WebMethodアノテーション

javax.jws.WebParamアノテーション

javax.jws.WebResultアノテーション

javax.jws.WebServiceアノテーション

javax.xml.bind.annotation.XmlMimeTypeアノテーション

javax.xml.ws.Actionアノテーション

javax.xml.ws.BindingProviderインタフェース

javax.xml.ws.BindingTypeアノテーション

javax.xml.ws.Dispatchインタフェース

javax.xml.ws.EndpointReferenceクラス

javax.xml.ws.FaultActionアノテーション

javax.xml.ws.handler.Handler<C extends MessageContext>インタフェース

javax.xml.ws.handler.HandlerResolverインタフェース

javax.xml.ws.handler.LogicalMessageContextインタフェース

javax.xml.ws.handler.MessageContextインタフェース

javax.xml.ws.handler.PortInfoインタフェース

javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext>インタフェース

javax.xml.ws.handler.soap.SOAPMessageContextインタフェース

javax.xml.ws.Holder<T>クラス

javax.xml.ws.LogicalMessageインタフェース

javax.xml.ws.ProtocolExceptionクラス

javax.xml.ws.Providerインタフェース

javax.xml.ws.RequestWrapperアノテーション

javax.xml.ws.ResponseWrapperアノテーション

javax.xml.ws.ServiceModeアノテーション

javax.xml.ws.Serviceクラス

javax.xml.ws.soap.AddressingFeatureクラス

javax.xml.ws.soap.Addressingアノテーション

javax.xml.ws.soap.MTOMFeatureクラス

javax.xml.ws.soap.MTOMアノテーション

javax.xml.ws.soap.SOAPBindingインタフェース

javax.xml.ws.soap.SOAPFaultExceptionクラス

javax.xml.ws.soap.SOAPFaultExceptionのバインディング

javax.xml.ws.WebFaultアノテーション

javax.xml.ws.WebServiceExceptionクラス

javax.xml.ws.WebServiceExceptionのバインディング

javax.xml.ws.WebServiceProviderアノテーション

javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilderクラス

javax.xml.ws.wsaddressing.W3CEndpointReferenceクラス

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点・アドレッシング）

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点・カスタマイズ）

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点・ストリーミング）

Javaアプリケーション用オプション定義ファイルを作成する（SEI起点）

Javaアプリケーション用オプション定義ファイルを作成する（WSDL起点・WS-RM 1.2）

Javaアプリケーション用オプション定義ファイルを作成する（WSDL起点）

Javaアプリケーション用オプション定義ファイルを作成する（プロバイダ起点・SAAJ）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点・アドレッシング）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点・カスタマイズ）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点・ストリーミング）

Javaアプリケーション用ユーザプロパティファイルを作成する（SEI起点）

Javaアプリケーション用ユーザプロパティファイルを作成する（WSDL起点・WS-RM 1.2）

Javaアプリケーション用ユーザプロパティファイルを作成する（WSDL起点）

Javaアプリケーション用ユーザプロパティファイルを作成する（プロバイダ起点・SAAJ）

JavaからWSDLへのデフォルトマッピング

JavaソースからWSDLへのマッピング一覧

JavaソースからWSDLへのマッピング例

Javaソースを生成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Javaソースを生成する（SEI起点・wsi:swaRef形式の添付ファイル）

Javaソースを生成する（SEI起点・アドレッシング）

Javaソースを生成する（SEI起点・カスタマイズ）

Javaソースを生成する（SEI起点・ストリーミング）

Javaソースを生成する（SEI起点）

Javaソースを生成する（プロバイダ起点・SAAJ）

Javaのパッケージ名に記述できる文字列

Javaのラッパ例外クラスからフォルトへのマッピング

Javaメソッドのオーバーロード

Javaメソッドのパラメタの条件

Java例外の伝搬

JAX-WS 2.1仕様のサポート範囲

JAX-WS API

JAX-WS API〔用語解説〕

JAX-WS APIのインタフェースおよびクラスの種類

JAX-WS APIのサポート範囲

JAX-WS APIを使用する場合の実装例

JAX-WSエンジン

JAX-WSエンジン〔用語解説〕

JAX-WSエンジンのサポート範囲（Webサービス側）

JAX-WSエンジンの設定

JAX-WSエンジンの動作

JAX-WSエンジンの動作とサポート範囲（Webサービスクライアント側）

JAX-WSエンジンのメモリ使用量の算出

JAX-WS機能〔用語解説〕

JAXBアノテーションのサポート

JAXBアノテーションのサポート

jaxws:bindings要素の指定（埋め込みによるバインディング宣言）

jaxws:bindings要素の指定（外部バインディングファイル）

jaxws:bindings要素の属性の指定可否

jaxws:enableAsyncMapping要素（jaxws:bindings要素）

jaxws:enableWrapperStyle要素（jaxws:bindings要素）

jaxws:enableWrapperStyle要素の優先順位

jaxws:javadoc要素（jaxws:bindings要素）

jaxws:provider要素（jax:bindings要素）

jaxwsdd:endpoints要素（cosminexus-jaxws.xml）

jaxwsdd:endpoint要素（cosminexus-jaxws.xml）

(Ｌ)

localName要素（javax.xml.ws.RequestWrapper）

localName要素（javax.xml.ws.ResponseWrapper）

location属性（soap:address要素）

location属性（soap12:address要素）

location属性（wsdl:import要素）

location属性（wsdl:import要素）

(Ｍ)

MessageFactoryクラス

message属性（soap:header要素）

message属性（soap12:header要素）

message属性（wsdl:fault要素）

message属性（wsdl:input要素）

message属性（wsdl:output要素）

MimeHeadersクラス

MimeHeaderクラス

MIMEパートの記述順序（MTOM/XOP）

MIMEパートの記述順序（wsi:swaRef形式）

MIMEパートの終端文字列（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

MIMEバインディング

mode要素（javax.jws.WebParam）

MTOM/XOP仕様形式の添付ファイルで使用するアノテーション

MTOM/XOP仕様形式の添付ファイルの使用方法

MTOM/XOP仕様形式の添付ファイルの対象

MTOM/XOP仕様形式の添付ファイルのデータサイズによるマッピング方法

MTOMFeature

(Ｎ)

namespace属性（wsdl:import要素）

namespace属性（wsdl:import要素）

name属性（cosminexus-jaxws.xml）

name属性（jaxws:bindings要素）

name属性（portType要素）

name属性（soap:fault要素）

name属性（soap12:fault要素）

name属性（wsdl:binding要素）

name属性（wsdl:definitions要素）

name属性（wsdl:fault要素）

name属性（wsdl:fault要素）

name属性（wsdl:input要素）

name属性（wsdl:input要素）

name属性（wsdl:message要素）

name属性（wsdl:operation要素）

name属性（wsdl:operation要素）

name属性（wsdl:output要素）

name属性（wsdl:output要素）

name属性（wsdl:part要素）

name属性（wsdl:port要素）

name属性（wsdl:service要素）

name要素（javax.jws.WebParam）

name要素（javax.jws.WebResult）

name要素（javax.jws.WebService）

name要素（javax.xml.ws.WebFault）

Nodeインタフェース

node属性の記述形式（jaxws:bindings要素）

non-wrapperスタイルでのMTOM/XOP仕様形式の添付ファイル（MTOM/XOP）

(Ｏ)

operationName要素（javax.jws.WebMethod）

org.jvnet.mimepull.MIMEConfigクラス

output要素（javax.xml.ws.Action）

(Ｐ)

parameterStyle要素（javax.jws.soap.SOAPBinding）

partName要素（javax.jws.WebParam）

partName要素（javax.jws.WebResult）

parts属性（soap:body要素）

parts属性（soap12:body要素）

part属性（jaxws:bindings要素）

part属性（soap:header要素）

part属性（soap12:header要素）

POJO

POJO（Plain Old Java ObjectまたはPlain Ordinary Java Object）〔用語解説〕

portName要素（javax.jws.WebService）

portName要素（javax.xml.ws.WebServiceProvider）

port属性（cosminexus-jaxws.xml）

PRFデーモンの起動

(Ｒ)

required要素（javax.xml.ws.soap.Addressing）

RMD

RMD

RMS

RMS

RMS定義ファイルに追加するプロパティ

(Ｓ)

SAAJ 1.3仕様のサポート範囲

SAAJResultクラス

SEIからバインディングへのマッピング

SEIからバインディングへのマッピング規則

SEIの条件

SEIのメソッド名からオペレーションへのマッピング

SEIのメソッド名からオペレーションへのマッピング規則

SEI名およびクラス名の衝突時のマッピング

SEI名からポートタイプへのマッピング

SEI名に記述できる文字列

SEI名の条件

SEIを起点とした開発の流れ

SEIを起点とした開発の流れ（cjwsgenコマンドを使用する場合）

SEIを生成する（WSDL起点・WS-RM 1.2）

SEIを生成する（WSDL起点）

serviceName要素（javax.jws.WebService）

serviceName要素（javax.xml.ws.WebServiceProvider）

servlet-mapping要素の記述例

servlet-mapping要素の記述例

soap:address要素

soap:binding要素

soap:body要素

soap:fault要素

soap:header要素

soap:mustUnderstand属性の設定（Webサービス側）

soap:mustUnderstand属性の設定（Webサービスクライアント側）

soap:operation要素

SOAP（Simple Object Access Protocol）〔用語解説〕

soap12:address要素

soap12:binding要素

soap12:body要素

soap12:fault要素

soap12:header要素

soap12:operation要素

soapAction属性（soap:operation要素）

soapAction属性（soap12:operation要素）

SOAPActionヘッダに関連するメッセージコンテキストプロパティ

SOAPBodyインタフェース

SOAPElementインタフェース

SOAPEnvelopeインタフェース

SOAPFactoryクラス

SOAPFaultインタフェース

SOAPHeaderElementインタフェース

SOAPHeaderインタフェース

SOAPMessageクラス

SOAPPartクラス

SOAPアプリケーション〔用語解説〕

SOAPアプリケーション開発支援機能〔用語解説〕

SOAPアプリケーションの移行

SOAPエンベロープ〔用語解説〕

SOAPトランスポートと転送バインディング

SOAPのバージョン選択

SOAPバインディング

SOAPハンドラ

SOAPヘッダ〔用語解説〕

SOAPヘッダが含まれる場合のハンドラの動作（Webサービス側）

SOAPヘッダが含まれる場合のハンドラの動作（Webサービスクライアント側）

SOAPヘッダの設定方法

SOAPボディ〔用語解説〕

SOAPメッセージ〔用語解説〕

SOAPメッセージから添付ファイルへのマッピング（MTOM/XOP）

SOAPメッセージから添付ファイルへのマッピング（wsi:swaRef形式）

SOAPロールとアクタの設定（Webサービス側）

SOAPロールとアクタの設定（Webサービスクライアント側）

SSLプロトコルによる接続

style属性（soap:binding要素）

style属性（soap:operation要素）

style属性（soap12:binding要素）

style属性（soap12:operation要素）

style要素（javax.jws.soap.SOAPBinding）

(Ｔ)

targetNamespace属性（wsdl:definitions要素）

targetNamespace要素（javax.jws.WebParam）

targetNamespace要素（javax.jws.WebResult）

targetNamespace要素（javax.jws.WebService）

targetNamespace要素（javax.xml.ws.RequestWrapper）

targetNamespace要素（javax.xml.ws.ResponseWrapper）

targetNamespace要素（javax.xml.ws.WebFault）

targetNamespace要素（javax.xml.ws.WebServiceProvider）

threshold要素（javax.xml.ws.soap.MTOM）

transport属性（soap:binding要素）

transport属性（soap12:binding要素）

type属性（wsdl:binding要素）

(Ｕ)

UAC（ユーザアカウント制御）

url-pattern属性（cosminexus-jaxws.xml）

use属性（soap:body要素）

use属性（soap:fault要素）

use属性（soap:header要素）

use属性（soap12:body要素）

use属性（soap12:fault要素）

use属性（soap12:header要素）

use要素（javax.jws.soap.SOAPBinding）

(Ｖ)

value要素（javax.xml.bind.annotation.XmlMimeType）

value要素（javax.xml.ws.BindingType）

value要素（javax.xml.ws.FaultAction）

value要素（javax.xml.ws.ServiceMode）

version属性の記述形式（jaxws:bindings要素）

(Ｗ)

WARファイル

WARファイルの構成

web.xmlの作成

web.xmlの例

web.xmlをWARファイルに含めない場合の動作

web.xmlを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

web.xmlを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

web.xmlを作成する（SEI起点・アドレッシング）

web.xmlを作成する（SEI起点・カスタマイズ）

web.xmlを作成する（SEI起点・ストリーミング）

web.xmlを作成する（SEI起点）

web.xmlを作成する（WSDL起点・WS-RM 1.2）

web.xmlを作成する（WSDL起点）

web.xmlを作成する（プロバイダ起点・SAAJ）

Webサービス〔用語解説〕

Webサービス開発の流れ

Webサービス側のフォルトおよび例外の処理

Webサービスクライアント〔用語解説〕

Webサービスクライアント開発の流れ

Webサービスクライアント側のフォルトの処理

WebサービスクライアントでのHANDLERスコープのメッセージコンテキストプロパティ

Webサービスクライアントの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスクライアントの開発例（SEI起点・アドレッシング）

Webサービスクライアントの開発例（SEI起点・カスタマイズ）

Webサービスクライアントの開発例（SEI起点）

Webサービスクライアントの開発例（WSDL起点・WS-RM 1.2）

Webサービスクライアントの開発例（WSDL起点）

Webサービスクライアントの開発例（プロバイダ起点・SAAJ）

Webサービスクライアントの形態

Webサービスクライアントの実装

Webサービスクライアントの実装クラスにシーケンス終了処理を追加する（WSDL起点・WS-RM 1.2）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点・アドレッシング）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点・カスタマイズ）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点・ストリーミング）

Webサービスクライアントの実装クラスをコンパイルする（SEI起点）

Webサービスクライアントの実装クラスをコンパイルする（WSDL起点・WS-RM 1.2）

Webサービスクライアントの実装クラスをコンパイルする（WSDL起点）

Webサービスクライアントの実装クラスをコンパイルする（プロバイダ起点・SAAJ）

Webサービスクライアントの実装クラスを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービスクライアントの実装クラスを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスクライアントの実装クラスを作成する（SEI起点・アドレッシング）

Webサービスクライアントの実装クラスを作成する（SEI起点・カスタマイズ）

Webサービスクライアントの実装クラスを作成する（SEI起点・ストリーミング）

Webサービスクライアントの実装クラスを作成する（SEI起点）

Webサービスクライアントの実装クラスを作成する（WSDL起点・WS-RM 1.2）

Webサービスクライアントの実装クラスを作成する（WSDL起点）

Webサービスクライアントの実装クラスを作成する（プロバイダ起点・SAAJ）

Webサービスクライアントの実装例（JAX-WS APIを使用）

Webサービスクライアントの実装例（ディスパッチベース）

Webサービスクライアントを実行する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービスクライアントを実行する（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスクライアントを実行する（SEI起点・アドレッシング）

Webサービスクライアントを実行する（SEI起点・カスタマイズ）

Webサービスクライアントを実行する（SEI起点・ストリーミング）

Webサービスクライアントを実行する（SEI起点）

Webサービスクライアントを実行する（WSDL起点・WS-RM 1.2）

Webサービスクライアントを実行する（WSDL起点）

Webサービスクライアントを実行する（プロバイダ起点・SAAJ）

Webサービス実装クラス〔用語解説〕

Webサービス実装クラスおよびプロバイダ実装クラスの作成

Webサービス実装クラスからSEIへのマッピング

Webサービス実装クラスからサービスおよびポートへのマッピング

Webサービス実装クラスからサービスおよびポートへのマッピング規則

Webサービス実装クラスの条件

Webサービス実装クラス名に記述できる文字列

Webサービス実装クラス名の条件

Webサービス実装クラスをコンパイルする（WSDL起点・WS-RM 1.2）

Webサービス実装クラスをコンパイルする（WSDL起点）

Webサービス実装クラスを作成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービス実装クラスを作成する（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービス実装クラスを作成する（SEI起点・アドレッシング）

Webサービス実装クラスを作成する（SEI起点・カスタマイズ）

Webサービス実装クラスを作成する（SEI起点・ストリーミング）

Webサービス実装クラスを作成する（SEI起点）

Webサービス実装クラスを作成する（WSDL起点・WS-RM 1.2）

Webサービス実装クラスを作成する（WSDL起点）

Webサービスセキュリティハンドラ

WebサービスとWebサービスクライアントの形態

Webサービスのアンデプロイ

Webサービスの開発および実行の前提条件

Webサービスの開発の概要

Webサービスの開発例（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービスの開発例（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスの開発例（SEI起点・アドレッシング）

Webサービスの開発例（SEI起点・カスタマイズ）

Webサービスの開発例（SEI起点・ストリーミング）

Webサービスの開発例（SEI起点）

Webサービスの開発例（WSDL起点・WS-RM 1.2）

Webサービスの開発例（WSDL起点）

Webサービスの開発例（プロバイダ起点・SAAJ）

Webサービスの形態

Webサービスの実行例（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスの実行例（SEI起点・アドレッシング）

Webサービスの実行例（SEI起点・カスタマイズ）

Webサービスの実行例（SEI起点）

Webサービスの実行例（WSDL起点・WS-RM 1.2）

Webサービスの実行例（WSDL起点）

Webサービスの実行例（プロバイダ起点・SAAJ）

Webサービスの情報表示

Webサービスの初期化

Webサービスの破棄

Webサービスを開始する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

Webサービスを開始する（SEI起点・wsi:swaRef形式の添付ファイル）

Webサービスを開始する（SEI起点・アドレッシング）

Webサービスを開始する（SEI起点・カスタマイズ）

Webサービスを開始する（SEI起点・ストリーミング）

Webサービスを開始する（SEI起点）

Webサービスを開始する（WSDL起点・WS-RM 1.2）

Webサービスを開始する（WSDL起点）

Webサービスを開始する（プロバイダ起点・SAAJ）

wrapper子要素名に記述できる文字列（wrapperスタイル）

wrapperスタイルの条件

WS-RM 1.1機能

WS-RM 1.1機能のAPI一覧

WS-RM 1.1機能のプロパティ設定

WS-RM 1.1仕様のサポート範囲

WS-RM 1.2機能

WS-RM 1.2仕様のサポート範囲

WS-RM Policy 1.2仕様のサポート範囲

WS-RM Policyの追加方法

wsdl:binding要素

wsdl:definitions要素

wsdl:documentation要素

wsdl:fault要素（wsdl:binding要素の孫要素の場合）

wsdl:fault要素（wsdl:portType要素の孫要素の場合）

wsdl:import要素

wsdl:import要素の書式

wsdl:input要素（wsdl:binding要素の孫要素の場合）

wsdl:input要素（wsdl:portType要素の孫要素の場合）

wsdl:message要素

wsdl:operation要素（wsdl:binding要素の子要素の場合）

wsdl:operation要素（wsdl:portType要素の子要素の場合）

wsdl:output要素（wsdl:binding要素の孫要素の場合）

wsdl:output要素（wsdl:portType要素の孫要素の場合）

wsdl:part要素

wsdl:portType要素

wsdl:port要素

wsdl:service要素

wsdl:types要素

WSDL 1.1仕様のサポート範囲

wsdlLocation属性の記述形式（jaxws:bindings要素）

wsdlLocation要素（javax.jws.WebService）

wsdlLocation要素（javax.xml.ws.WebServiceProvider）

WSDLインポート機能

WSDLインポート機能

WSDLからJavaソースへのマッピング一覧

WSDLからJavaソースへのマッピング例

WSDLからJavaへのマッピングのカスタマイズ

WSDLから添付ファイルのJava型へのマッピング（wsi:swaRef形式）

WSDL作成時の注意事項

WSDL定義の階層的なインポート

WSDL定義の再帰的なインポート

WSDLの作成

WSDLファイルにWS-RM Policyを追加する（WSDL起点・WS-RM 1.2）

WSDLファイルを作成する（WSDL起点・WS-RM 1.2）

WSDLファイルを作成する（WSDL起点）

WSDLを起点とした開発の流れ

WSIMPORT_OPTS環境変数

(Ｘ)

XML Schemaの出現回数の指定に関する制限

XML Schemaの制約ファセットに関する制限

XML Schemaのデータ型の制限

XOP情報セットの形式

xsd:schema要素

(ア行)

(あ)

アーカイブの作成

アウトバウンド

アドレッシング機能

アノテーション一覧

アプリケーション起動時のメモリ使用量

アプリケーションのクライアントの実行

アンマーシャル

(い)

異常終了時の対処（aptコマンド）

異常終了時の対処（cjwsgenコマンド）

異常終了時の対処（cjwsimportコマンド）

インタフェースおよびクラスの一覧表

インタフェースおよびクラスのサポート範囲

インタフェースおよびクラスの種類

インタフェースの透過性

インバウンド

インポート／インクルードしている場合の注意

インポート対象のWSDL定義の条件

インポートできるWSDL定義

(う)

埋め込みによるバインディング宣言

埋め込みによるバインディング宣言と外部バインディングファイルの同時指定

(え)

エラーページ

(お)

オーバーロードによる名前衝突

オプションの指定有無とファイルの出力先

オペレーションとその子要素の記述個数

オペレーション名に記述できる文字列

オペレーション名の条件

(カ行)

(か)

開発例の構成（SEI起点・EJBのWebサービス）

開発例の構成（SEI起点・MTOM/XOP仕様形式の添付ファイル）

開発例の構成（SEI起点・wsi:swaRef形式の添付ファイル）

開発例の構成（SEI起点・アドレッシング）

開発例の構成（SEI起点・カスタマイズ）

開発例の構成（SEI起点・ストリーミング）

開発例の構成（SEI起点）

開発例の構成（WSDL起点・WS-RM 1.2）

開発例の構成（WSDL起点）

開発例の構成（プロバイダ起点・SAAJ）

開発例の流れ（SEI起点・MTOM/XOP仕様形式の添付ファイル）

開発例の流れ（SEI起点・wsi:swaRef形式の添付ファイル）

開発例の流れ（SEI起点・アドレッシング）

開発例の流れ（SEI起点・カスタマイズ）

開発例の流れ（SEI起点・ストリーミング）

開発例の流れ（SEI起点）

開発例の流れ（WSDL起点）

開発例の流れ（プロバイダ起点・SAAJ）

外部バインディングファイルによるカスタマイズ

各MIMEパート間の境界文字列（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

稼働ログ

(き)

期待した性能が出ない

旧バージョンからの移行

旧バージョンで作成したWSDLの互換性

共通定義ファイル

共通定義ファイル〔用語解説〕

共通定義ファイルに追加するプロパティ

共通定義ファイルの設定項目

(く)

クライアントAPI

クライアントAP情報とルートAP情報の有効範囲

クライアント側のハンドラで操作しても意味のないメッセージコンテキストプロパティ

クラスベースのマッピング

(こ)

コアAPI

コマンド

コマンド〔用語解説〕

コマンドラインインタフェース

コマンドラインの実行

コマンドライン利用時の設定

コマンドラインを利用したクライアントアプリケーションの実行

コンテキストルート〔用語解説〕

(サ行)

(さ)

サービスAPI

サービスおよびポートからサービスクラスへのマッピング

サービスクラスを生成する（SEI起点・MTOM/XOP仕様形式の添付ファイル）

サービスクラスを生成する（SEI起点・wsi:swaRef形式の添付ファイル）

サービスクラスを生成する（SEI起点・アドレッシング）

サービスクラスを生成する（SEI起点・カスタマイズ）

サービスクラスを生成する（SEI起点・ストリーミング）

サービスクラスを生成する（SEI起点）

サービスクラスを生成する（WSDL起点・WS-RM 1.2）

サービスクラスを生成する（WSDL起点）

サービス固有例外の処理

サービス名およびポート名に記述できる文字列

サービス名およびポート名の条件

(し)

シーケンスライフサイクルメッセージ

シーケンスライフサイクルメッセージ

ジェネリクス型の制限

ジェネリクスの型削除

自動生成クラス

自動生成クラス〔用語解説〕

障害の種類と対策

障害発生時に取得する資料

使用できるHTTPメソッド

使用できるバインディング宣言（埋め込みによるバインディング宣言）

使用できるバインディング宣言（外部バインディングファイル）

(す)

スキーマ型からJava型へのマッピング

スケルトン〔用語解説〕

スタブ〔用語解説〕

スタブベースのWebサービスクライアントの開発の流れ

スタブベースの実装例

ストリーミング

(せ)

生成されるラッパ例外クラス

性能解析トレースによる性能解析方法

性能解析トレースの取得レベル

性能解析トレースのトレース出力情報

性能解析トレースのトレース取得ポイント

前提条件

(そ)

送達保証

送達保証の種類

(タ行)

(た)

単位時間当たりのメモリ使用量の算出

単位表記

(つ)

通信ログ

(て)

ディスカバリ

ディスカバリ

ディスパッチ

ディスパッチ

ディスパッチベースのWebサービスクライアントの開発の流れ

ディスパッチベースの実装例

デプロイ〔用語解説〕

デプロイと開始の例（SEI起点・wsi:swaRef形式の添付ファイル）

デプロイと開始の例（SEI起点・アドレッシング）

デプロイと開始の例（SEI起点・カスタマイズ）

デプロイと開始の例（SEI起点）

デプロイと開始の例（WSDL起点・WS-RM 1.2）

デプロイと開始の例（WSDL起点）

デプロイと開始の例（プロバイダ起点・SAAJ）

添付ファイルからSOAPメッセージへのマッピング（MTOM/XOP）

添付ファイルからSOAPメッセージへのマッピング（wsi:swaRef形式）

添付ファイル機能（MTOM/XOP）

添付ファイル機能（wsi:swaRef）

添付ファイル使用時のWSDLの記述（wsi:swaRef形式）

添付ファイル付きSOAPメッセージ

添付ファイル付きSOAPメッセージ〔用語解説〕

添付ファイル付きSOAPメッセージの構造

添付ファイルデータを取得する方法（wsi:swaRef形式）

添付ファイルに使用できるJava型

添付ファイルのJavaインタフェース（MTOM/XOP）

添付ファイルのJavaインタフェース（wsi:swaRef形式）

添付ファイルのJava型とWSDLのマッピング（wsi:swaRef形式）

添付ファイルのインスタンスを生成する方法（wsi:swaRef形式）

添付ファイルの拡張子とMIMEタイプのマッピング

添付ファイルのデータサイズ

添付ファイルパートのMIMEヘッダ（添付ファイルからSOAPメッセージ・MTOM/XOP）

添付ファイルパートのMIMEヘッダ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

添付ファイルパートのMIMEヘッダとMIMEボディの境界文字列（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

添付ファイルパートのMIMEボディ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

添付ファイルを指定できる個所

(と)

動作環境の切り替え

動作定義の優先度

動作定義ファイル〔用語解説〕

動作定義ファイルの記述規則

(ナ行)

(な)

名前空間〔用語解説〕

名前空間からパッケージ名へのマッピング

名前空間に記述できる文字列

名前空間の記述形式

名前空間の条件

名前衝突時のマッピング

名前衝突の優先順位と解決方法

(ハ行)

(は)

バージョンアップインストール

パートの種類とJavaソースへのマッピングの関係（non-wrapperスタイル）

パートの種類とJavaソースへのマッピングの関係（wrapperスタイル）

パート名に記述できる文字列（non-wrapperスタイル）

配列

バインディング拡張要素からパラメタへのマッピング

パス情報

パッケージ名から名前空間へのマッピング

パッケージ名のカスタマイズ

パッケージ名の条件

パラメタおよび戻り値からメッセージのパートへのマッピング（non-wrapperスタイルの場合）

パラメタおよび戻り値からメッセージのパートへのマッピング（wrapperスタイルの場合）

パラメタと戻り値の組み合わせ（non-wrapperスタイル）

パラメタと戻り値の組み合わせ（wrapperスタイル）

パラメタに指定できるJava型（non-wrapperスタイル）

パラメタに指定できるJava型（wrapperスタイル）

ハンドラチェイン設定ファイルの構文

ハンドラチェイン設定ファイルのサポート範囲

ハンドラチェイン設定ファイルの配置

ハンドラチェインの設定（Webサービス側）

ハンドラチェインの設定（Webサービスクライアント側）

ハンドラチェインの編成

ハンドラチェインを設定するコードの追加

ハンドラの型

ハンドラの初期化と破棄

ハンドラの配置

ハンドラフレームワーク

ハンドラフレームワーク〔用語解説〕

ハンドラリゾルバの例

(ひ)

必須オプション（aptコマンド）

(ふ)

フォルトbeanへのマッピング

フォルトから参照されるメッセージのパートの個数

フォルトから例外クラスへのマッピング

フォルト名に記述できる文字列

フォルト名の条件

複数のWSDL定義のインポート

プロキシサーバ経由の接続

プログラムが意図したとおりに動作しない

プログラムの実行中に異常終了する

プロセス別の定義ファイル

プロセス別の定義ファイル〔用語解説〕

プロセス別の定義ファイルの設定

プロトコルハンドラ

プロバイダ実装クラスを作成する

プロバイダを起点とした開発の流れ

(へ)

ベーシック認証による接続

(ほ)

ポートタイプからSEI名へのマッピング

ポートタイプに記述できる文字列

ポートタイプの記述個数

ポートタイプ名の条件

保守ログ

(マ行)

(ま)

マーシャル

(め)

メソッドのパラメタおよび戻り値からメッセージのパートへのマッピング規則

メソッド名およびパラメタ名の衝突時のマッピング

メソッド名に記述できる文字列

メソッド名の条件

メタデータの発行

メタデータの発行条件

メタデータ発行の有効／無効

メッセージコンテキスト使用時の注意事項

メッセージコンテキストの使用

メッセージコンテキストのプロパティのサポート範囲

メッセージのパートからパラメタおよび戻り値へのマッピング（non-wrapperスタイルの場合）

メッセージのパートからパラメタおよび戻り値へのマッピング（wrapperスタイルの場合）

(ヤ行)

(ゆ)

ユーザ定義例外〔用語解説〕

(ラ行)

(ら)

ラッパ例外クラスからフォルトへのマッピング規則

ラッパ例外クラスの条件

ラッパ例外クラス名に記述できる文字列

ラッパ例外クラス名の条件

ランタイム例外のバインディング

(り)

略語

(る)

ルートパートから添付ファイルへのマッピング（MTOM/XOP）

ルートパートから添付ファイルへのマッピング（wsi:swaRef形式）

ルートパートのMIMEヘッダ（添付ファイルからSOAPメッセージ・MTOM/XOP）

ルートパートのMIMEヘッダ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

ルートパートのMIMEヘッダとMIMEボディの境界文字列（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

ルートパートのMIMEボディ（添付ファイルからSOAPメッセージ・MTOM/XOP）

ルートパートのMIMEボディ（添付ファイルからSOAPメッセージ・wsi:swaRef形式）

(れ)

例外ログ

(ろ)

ログの重要度

ログの出力先

ログの出力先（J2EEサーバ上で動作する場合）

ログの出力先（コマンドラインインタフェースを利用する場合）

ログの出力先（コマンドを実行する場合）

ログの出力条件（稼働ログ／例外ログ／保守ログ）

ログの出力条件（通信ログ）

ログの種類

ログの設定方法

ログのフォーマット（稼働ログ／保守ログ）

ログのフォーマット（例外ログ／通信ログ）

ログの見積もり

ログの見積もり方法

論理ハンドラ

■ 商標類

AIXは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
AIX 5Lは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
AMDは，Advanced Micro Devices,Inc.の商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
gzipは，米国FSF(Free Software Foundation)が配布しているソフトウェアです。
HP-UXは，Hewlett-Packard Companyのオペレーティングシステムの名称です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
J2EEは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Javaは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
JDKは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
JSPは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Red Hatは，米国およびその他の国でRed Hat,Inc. の登録商標もしくは商標です。
SOAP（Simple Object Access Protocol）は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Solarisは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
Sunは，Oracle Corporation 及びその子会社，関連会社の米国 及びその他の国における登録商標または商標です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
W3Cは，World Wide Web Consortiumの商標（多数の国において登録された）です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
X/Openは，The Open Groupの英国ならびに他の国における登録商標です。