Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


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サービスクライアントの関係を次に示します。

図10‒1 Webサービス側のJAX-WSエンジンとWebサービスクライアントの関係(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サービスクライアントの関係を次に示します。

図10‒2 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サービスの関係を次に示します。

図10‒3 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サービスの関係を次に示します。

図10‒4 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の具象クラスのオブジェクトを受け取ります。

表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サービスクライアント側も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の具象クラスを受信するので,注意してください。