58.3. エラー後の巻き戻し

概要

インターセプターチェーンの実行中にエラーが発生した場合、ランタイムはインターセプターチェーンのトラバースを停止し、すでに実行されたチェーンでインターセプターの handleFault() メソッドを呼び出すことでチェーンをアンワインドします。

handleFault() メソッドを使用して、通常のメッセージ処理中にインターセプターによって使用されるすべてのリソースをクリーンアップできます。また、メッセージ処理が正常に完了した場合にのみ有効なアクションをロールバックするために使用することもできます。障害メッセージがアウトバウンド障害処理のインターセプターチェーンに渡される場合、handleFault() メソッドを使用して情報を障害メッセージに追加することもできます。

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

handleFault() メソッドは、通常のメッセージ処理で使用される handleMessage() メソッドと同じ Message オブジェクトを受け取ります。Message オブジェクトからメッセージコンテンツを取得する方法は、「メッセージコンテンツの取得」 で説明します。

例58.5「巻き戻しインターセプターチェーンの処理」 は、インターセプターチェーンが巻き戻しされるときに、元の XML ストリームがメッセージに確実に戻るようにするために使用されるコードです。

例58.5 巻き戻しインターセプターチェーンの処理

@Override
public void handleFault(SoapMessage message)
{
  super.handleFault(message);
  XMLStreamWriter writer = (XMLStreamWriter)message.get(ORIGINAL_XML_WRITER);
  if (writer != null)
  {
    message.setContent(XMLStreamWriter.class, writer);
  }
}