Red Hat Training
A Red Hat training course is available for Red Hat Fuse
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);
}
}