58.3. 出错后 Unwinding

概述

在执行拦截器链的过程中发生错误时,运行时会通过调用已执行的链中的 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);
  }
}