handleMessageメソッドについて,trueを返す場合,falseを返す場合,および例外をスローする場合の処理について説明します。
handleMessageメソッドがtrueを返す場合,JAX-WSエンジンは現在実行中の方向のままハンドラを処理します。それ以上ハンドラがなければ,メッセージを振り分けます。
要求処理の流れを次の図に示します。
図36-4 handleMessageでtrueを返す場合の処理(要求)
応答処理の流れを次の図に示します。
図36-5 handleMessageでtrueを返す場合の処理(応答)
要求メッセージを処理している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を返す場合の処理(応答)
要求メッセージを処理している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) ランタイム例外のバインディング」を参照してください。
要求メッセージを処理している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をスローします。