Menu Close

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);
  }
}