43.4. 实施协议处理程序

概述

协议处理程序特定于使用中的协议。Apache CXF 提供由 JAX-WS 指定的 SOAP 协议处理程序。SOAP 协议处理程序实施 javax.xml.ws.handler.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() 的其他方法。这个附加方法返回处理器可以处理的标头块的 QName。

流程

要实现逻辑手:

  1. 实施处理程序所需的任何 第 43.6 节 “初始化处理程序” 逻辑。
  2. 实施 第 43.5 节 “在 SOAP 处理程序中处理消息” 逻辑。
  3. 实施 第 43.7 节 “处理故障消息” 逻辑。
  4. 实施 getHeaders() 方法。
  5. 第 43.8 节 “关闭处理程序” 完成后实现 处理程序的逻辑。
  6. 第 43.9 节 “发布处理程序” 处理程序在销毁前实施任何逻辑。

实施 getHeaders()方法

getHeaders() 显示在 例 43.9 “SOAPHander.getHeaders() 方法” 中,方法告知 Apache CXF 运行时,处理程序负责处理的 SOAP 标头。它返回每个 SOAP 的 outer 元素的 QNames,处理程序理解。

例 43.9. SOAPHander.getHeaders() 方法

set<QName&gt;getHeaders

对于很多情况来说,简单地返回 null 就足够了。但是,如果应用程序使用任何 SOAP 标头的 mustUnderstand 属性,那么务必要指定应用程序 SOAP 处理程序理解的标头。运行时会检查所有注册处理程序是否对标头列表了解的 SOAP 标头集,并将 mustUnderstand 属性设为 true。如果任何标记的标头都不在被理解的标头列表中,则运行时会拒绝该消息并抛出 SOAP 必须了解异常。