43.7. 处理故障消息

概述

在消息处理过程中引发 ProtocolException 异常时,处理程序使用 handleFault() 方法来处理错误消息。

handleFault() 方法根据处理程序类型接收 LogicalMessageContext 对象或 SOAPMessageContext 对象。收到的上下文授予处理程序的实现对消息有效负载的访问。

handleFault() 方法返回 true 或 false,具体取决于故障消息处理是如何继续的。它还可能会引发异常。

获取消息有效负载

handleFault() 方法接收的上下文对象与 handleMessage() 方法接收的上下文对象类似。您可以使用上下文的 getMessage() 方法以同样的方式访问消息有效负载。唯一的区别是上下文中包含的有效负载。

有关使用 LogicalMessageContext 的更多信息,请参阅 第 43.3 节 “在逻辑处理程序中处理消息”

有关使用 SOAPMessageContext 的更多信息,请参阅 第 43.5 节 “在 SOAP 处理程序中处理消息”

确定返回值

handleFault() 方法如何完成其消息处理会对消息处理方式进行直接影响。它通过执行以下操作之一完成:

返回 true
返回错误处理应正常继续的真正信号。将调用链中下一处理程序的 handleFault() 方法。
返回错误
返回错误处理停止的假信号。调用在处理当前消息时调用的处理程序的 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;
}