43.4. 实施协议处理程序

概述

协议处理程序特定于使用中的协议。Apache CXF 提供由 JAX-WS 指定的 SOAP 协议处理器。SOAP 协议处理程序实施 javax.xml.ws.handler.soap.SOAPHandler 接口。

SOAPHandler 接口(如 例 43.8 “SOAPHandler Synopsis” 所示)使用 SOAP 特定消息上下文,作为 SOAPMessage 对象提供消息的访问。它还可让您访问 SOAP 标头。

例 43.8. SOAPHandler Synopsis

public interface SOAPHandler extends Handler
{
  boolean handleMessage(SOAPMessageContext context);
  boolean handleFault(SOAPMessageContext context);
  void close(SOAPMessageContext context);
  Set<QName> getHeaders()
}

除了使用 SOAP 特定的消息上下文外,SOAP 协议处理程序还要求您实施名为 getHeaders () 的额外方法。这个额外的方法返回标头的 QNames,处理程序可以处理。

流程

要实现逻辑手,请执行以下操作:

  1. 实施处理程序所需的任何 第 43.6 节 “初始化处理程序” 逻辑。
  2. 实施 第 43.5 节 “在 SOAP 处理程序中处理消息” 逻辑。
  3. 实施 第 43.7 节 “处理容错消息” 逻辑。
  4. 实施 getHeaders () 方法。
  5. 在结束时为 第 43.8 节 “关闭处理程序” 实施处理程序的逻辑。
  6. 在销毁前,为 第 43.9 节 “发布处理程序” 处理程序的资源实施任何逻辑。

实现 getHeaders ()方法

getHeaders ()例 43.9 “The SOAPHander.getHeaders() Method” 中显示的,方法会通知 Apache CXF 运行时,SOAP 用来处理处理程序。它会返回每个 SOAP 的 outer 元素的 QNames,处理程序理解。

例 43.9. The SOAPHander.getHeaders() Method

Set<QName>getHeaders

对于很多情况,只需返回 null 即可。但是,如果应用程序使用任何 SOAP 标头的 mustUnderstand 属性,那么务必要指定应用程序 SOAP 处理程序所理解的标头。运行时会检查一组 SOAP 标头,所有注册的处理程序都知道所有已注册的处理程序对标头列表(且 mustUnderstand 属性设置为 true )的理解。如果任何标记的标头没有包括在所理解的标头列表中,则运行时会拒绝该消息并抛出一个 SOAP 必须理解异常。