Hitachi

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


36.5.1 handleMessageメソッドの処理

handleMessageメソッドについて,trueを返す場合,falseを返す場合,および例外をスローする場合の処理について説明します。

〈この項の構成〉

(1) trueを返す場合

handleMessageメソッドがtrueを返す場合,JAX-WSエンジンは現在実行中の方向のままハンドラを処理します。それ以上ハンドラがなければ,メッセージを振り分けます。

要求処理の流れを次の図に示します。

図36‒4 handleMessageでtrueを返す場合の処理(要求)

[図データ]

応答処理の流れを次の図に示します。

図36‒5 handleMessageでtrueを返す場合の処理(応答)

[図データ]

(2) falseを返す場合

要求メッセージを処理しているhandleMessageメソッドがfalseを返す場合,JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させて,前のハンドラのhandleMessageメソッドを呼び出します。それ以上ハンドラがなければ,メッセージを振り分けます。

要求処理でハンドラ2がfalseを返す場合の流れを次の図に示します。

図36‒6 handleMessageでfalseを返す場合の処理(要求)

[図データ]

JAX-WSエンジンは,メッセージコンテキストに設定されたメッセージを変更しません。したがって,要求メッセージはそのままWebサービスクライアントに振り分けられます。意図した応答メッセージが振り分けられなかったWebサービスクライアントでは,javax.xml.ws.WebServiceExceptionがスローされます。

応答メッセージを処理しているhandleMessageメソッドがfalseを返す場合,メッセージの方向は変えません。ただし,以降のハンドラをすべて省略して,メッセージを振り分けます。

応答処理でハンドラ2がfalseを返す場合の流れを次の図に示します。

図36‒7 handleMessageでfalseを返す場合の処理(応答)

[図データ]

(3) ProtocolExceptionまたはそのサブクラスをスローする場合

要求メッセージを処理しているhandleMessageメソッドがProtocolExceptionまたはそのサブクラスをスローする場合,JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させて,前のハンドラのhandleFaultメソッドを呼び出します。それ以上ハンドラがなければ,メッセージを振り分けます。

要求処理でハンドラ2がProtocolExceptionをスローする場合の流れを次の図に示します。

図36‒8 handleMessageでProtocolExceptionをスローする場合の処理(要求)

[図データ]

JAX-WSエンジンは,フォルトメッセージを生成して伝搬させます。生成するメッセージは,SOAPのバージョンによって次の表のとおりに異なります。

表36‒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をスローする場合の流れを次の図に示します。

図36‒9 handleMessageでProtocolExceptionをスローする場合の処理(応答)

[図データ]

Webサービス側の場合,JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については,「10.4.1(2) ランタイム例外のバインディング」を参照してください。

(4) ほかのランタイム例外をスローする場合

要求メッセージを処理しているhandleMessageメソッドがほかのランタイム例外をスローする場合,JAX-WSエンジンはメッセージとハンドラ処理の方向を逆転させます。また,以降のハンドラをすべて省略し,例外をそのままスローします。

要求処理でハンドラ2がRuntimeExceptionをスローする場合の流れを次の図に示します。

図36‒10 handleMessageでRuntimeExceptionをスローする場合の処理(要求)

[図データ]

Webサービス側の場合,JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については,「10.4.1(2) ランタイム例外のバインディング」を参照してください。

Webサービスクライアント側の場合,JAX-WSエンジンは例外をjavax.xml.ws.WebServiceExceptionでラップして,WebServiceExceptionをスローします。

応答メッセージを処理しているhandleMessageメソッドがランタイム例外をスローする場合,メッセージの方向は変えません。ただし,以降のハンドラをすべて省略して,メッセージを振り分けます。

応答処理でハンドラ2がRuntimeExceptionをスローする場合の流れを次の図に示します。

図36‒11 handleMessageでRuntimeExceptionをスローする場合の処理(応答)

[図データ]

Webサービス側の場合,JAX-WSエンジンは例外をSOAPフォルトに変換して送信します。フォルトメッセージの変換については,「10.4.1(2) ランタイム例外のバインディング」を参照してください。

Webサービスクライアント側の場合,JAX-WSエンジンは例外をjavax.xml.ws.WebServiceExceptionでラップして,WebServiceExceptionをスローします。