Menu Close

43.7. 障害メッセージの処理

概要

ハンドラーは、メッセージの処理中に ProtocolException 例外がスローされると、障害メッセージを処理するために handleFault() メソッドを使用します。

handleFault() メソッドは、ハンドラーの型に応じて LogicalMessageContext オブジェクトまたは SOAPMessageContext オブジェクトのいずれかを受け取ります。受信したコンテキストにより、ハンドラーの実装はメッセージペイロードにアクセスすることができます。

障害メッセージ処理の継続方法に応じて、handleFault() メソッドは true または false のいずれかを返します。また、例外をスローすることもできます。

メッセージペイロードの取得

handleFault() メソッドで受信されるコンテキストオブジェクトは、handleMessage() メソッドによって受信されるものに似ています。コンテキストの getMessage() メソッドを使用して、同じ方法でメッセージペイロードにアクセスします。唯一の違いは、コンテキストに含まれるペイロードです。

LogicalMessageContext の操作の詳細は、「論理ハンドラーでのメッセージの処理」を参照してください。

SOAPMessageContext の操作の詳細は、「SOAP ハンドラーでのメッセージの処理」を参照してください。

戻り値の決定

handleFault() メソッドがそのメッセージ処理をどのように完了するかが、メッセージ処理の実施方法に直接的な影響を及ぼします。以下のアクションのいずれかを実行して完了します。

true を返す
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;
}