10.2.1 JAX-WSエンジンの動作とサポート範囲
Webサービス側とWebサービスクライアント側でやり取りされるSOAPメッセージは,JAX-WSエンジンの動作によってマーシャル/アンマーシャルされます。
ここでは,Webサービス側およびWebサービスクライアント側のJAX-WSエンジンとサポート範囲について説明します。
- 〈この項の構成〉
(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エンジンは,HTTP GETメソッドによって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サービスクライアントの関係を次に示します。
Webサービス側のJAX-WSエンジンが受信できるメッセージ,および接続元のWebサービスクライアントの条件を次に示します。
-
Application ServerのJAX-WS機能で動作するWebサービスクライアント
Application ServerのJAX-WS機能が提供しているコマンドで開発し,Application ServerのJAX-WS機能で動作するWebサービスクライアントを利用できます。接続先のApplication ServerのJAX-WS機能が以前のバージョンの場合,そのバージョンでサポートしている機能だけを使用できます。
-
SOAP通信基盤で動作する,RPC形態のSOAPアプリケーションのクライアントSOAPアプリケーション開発支援機能で開発し,SOAP通信基盤で動作するRPC形態のSOAPアプリケーションのクライアントを利用できます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは,07-10以降である必要があります。また,この場合のWebサービスは,SOAP通信基盤のJava2WSDLコマンドで生成した,document/literal形式のWSDLを起点として開発している必要があります。
-
そのほかのWebサービスクライアント
Application Serverの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のサポート範囲については,「20.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サービスクライアントの関係を次に示します。
Webサービス側のJAX-WSエンジンが受信できるメッセージ,および接続元のWebサービスクライアントの条件を次に示します。
-
Application ServerのJAX-WS機能で動作するWebサービスクライアント
Application ServerのJAX-WS機能が提供しているAPIで開発し,Application ServerのJAX-WS機能で動作するWebサービスクライアントを利用できます。接続先のApplication ServerのJAX-WS機能が以前のバージョンの場合,そのバージョンでサポートしている機能だけを使用できます。
-
Application ServerのJAX-WS機能で動作するディスパッチベースのWebサービスクライアント
-
SAAJ 1.2仕様を利用したSOAPアプリケーションのクライアント
SOAPアプリケーション開発支援機能で開発し,SOAP通信基盤で動作するSAAJ 1.2仕様を利用したSOAPアプリケーションのクライアントを利用できます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは,07-10以降である必要があります。また,SOAPアプリケーション開発支援機能とApplication Serverの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.2仕様に基づくため,Webサービスクライアントの実装者は,標準仕様以外のインタフェースを考慮する必要はありません。Webサービスの呼び出し(SOAP要求メッセージの送信),およびSOAP応答メッセージおよびフォルトメッセージの受信は,標準仕様のインタフェースのサポート範囲内で行われます。
(b) Webサービスクライアント側のJAX-WSエンジンのサポート範囲
Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係について説明します。
スタブベースのWebサービスクライアントの場合
スタブベースのWebサービスクライアントの場合の,Webサービスクライアント側のJAX-WSエンジンとWebサービスの関係を次に示します。
Webサービスクライアント側のJAX-WSエンジンが呼び出せるWebサービスの条件を次に示します。
-
Application ServerのJAX-WS機能が提供しているコマンドで開発したWebサービス実装クラス
Application ServerのJAX-WS機能が提供しているコマンドで開発し,JAX-WSエンジン上にデプロイされたWebサービス実装クラスを呼び出せます。接続先のApplication ServerのJAX-WS機能が以前のバージョンの場合,そのバージョンでサポートしている機能だけを使用できます。
-
SOAP通信基盤で動作するRPC形態のSOAPアプリケーション
SOAPアプリケーション開発支援機能で開発し,SOAP通信基盤にデプロイされたRPC形態のSOAPアプリケーションを呼び出せます。
開発時のSOAPアプリケーション開発支援機能およびSOAP通信基盤のバージョンは,07-10以降である必要があります。また,SOAP通信基盤のJava2WSDLコマンドで生成したdocument/literal形式のSOAPアプリケーションである必要があります。
-
そのほかのWebサービス
Application Serverの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のサポート範囲については,「20.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サービスの関係を次に示します。
Webサービスクライアント側のJAX-WSエンジンが呼び出せるWebサービスの条件を次に示します。
-
Application ServerのJAX-WS機能が提供しているコマンドで開発したWebサービス実装クラス
Application ServerのJAX-WS機能が提供しているコマンドで開発し,JAX-WSエンジン上にデプロイされたWebサービス実装クラスを呼び出せます。Application ServerのJAX-WS機能が以前のバージョンの場合,そのバージョンでサポートしている機能だけを使用できます。
-
Application ServerのJAX-WS機能が提供しているコマンドで開発したプロバイダ実装クラス
Application Serverの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アプリケーション開発支援機能とApplication ServerのJAX-WS機能の両方でサポートする範囲のSOAPメッセージを送受信するSOAPアプリケーションである必要があります。
-
そのほかのWebサービス
Application Serverの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のサポート範囲については,「20.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 サービスクライアント側もApplication ServerのJAX-WS 機能を使用する場合の動作について「10.2.1(3)(c) Webサービス側もWebサービスクライアント側もApplication Serverの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の具象クラスのオブジェクトを受け取ります。
項番 |
条件 |
---|---|
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サービスクライアント側もApplication ServerのJAX-WS機能を使用する場合
Application ServerのJAX-WSエンジンの動作は,「10.2.1(3)(a) SOAPメッセージを送信する場合」および「10.2.1(3)(b) SOAPメッセージを受信する場合」で説明したとおりです。特にWebサービスクライアントおよびWebサービスの両方がApplication Server上にある場合,表10-2に示す条件を満たすWebサービスクライアントの実装クラスやWebサービスの実装クラスで,WebサービスクライアントおよびWebサービスのどちらか一方が配列やjava.util.Listオブジェクトとしてnullを送信しても,もう一方は要素数が0である配列やjava.util.Listの具象クラスを受信するので,注意してください。