43.7. 障害メッセージの処理
概要
ハンドラーは、メッセージの処理中に ProtocolException 例外が出力されると、障害メッセージを処理するために handleFault()
メソッドを使用します。
handleFault()
メソッドは、ハンドラーの型に応じて LogicalMessageContext
オブジェクトまたは SOAPMessageContext
オブジェクトのいずれかを受け取ります。受信したコンテキストは、ハンドラーの実装にメッセージペイロードへのアクセスを提供します。
障害メッセージ処理の継続方法に応じて、handleFault()
メソッドは true または false のいずれかを返します。例外を出力することもできます。
メッセージペイロードの取得
handleFault()
メソッドで受信されるコンテキストオブジェクトは、handleMessage()
メソッドによって受信されるものに似ています。コンテキストの getMessage()
メソッドを使用して、同じ方法でメッセージペイロードにアクセスします。唯一の違いは、コンテキストに含まれるペイロードです。
LogicalMessageContext
の操作の詳細は、「論理ハンドラーでのメッセージの処理」を参照してください。
SOAPMessageContext
の操作の詳細は、「SOAP ハンドラーでのメッセージの処理」を参照してください。
戻り値の決定
handleFault()
メソッドがそのメッセージ処理をどのように完了するかが、メッセージ処理の実施方法に直接的な影響を及ぼします。次のいずれかのアクションを実行することで完了します。
- true を返す
-
障害処理が正常に続行される必要があることを示す真のシグナルを返します。チェーンの次のハンドラーの
handleFault()
メソッドが呼び出されます。 - false を返します
-
障害処理が停止したという false シグナルを返します。現在のメッセージの処理で呼び出されたハンドラーの
close()
メソッドが呼び出され、障害メッセージがディスパッチされます。 - 例外を出力する
-
例外を出力すると、障害メッセージの処理が停止します。現在のメッセージの処理で呼び出されたハンドラーの
close()
メソッドが呼び出され、例外がディスパッチされます。
例
例43.13「メッセージハンドラーでの障害の処理」に、メッセージのボディーを画面に出力する handleFault()
の実装を示します。
例43.13 メッセージハンドラーでの障害の処理
public final boolean handleFault(LogicalMessageContext messageContext) { System.out.println("handleFault() called with message:"); LogicalMessage msg=messageContext.getMessage(); System.out.println(msg.getPayload()); return true; }