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,处理程序可以处理。
流程
要实现逻辑手,请执行以下操作:
- 实施处理程序所需的任何 第 43.6 节 “初始化处理程序” 逻辑。
- 实施 第 43.5 节 “在 SOAP 处理程序中处理消息” 逻辑。
- 实施 第 43.7 节 “处理容错消息” 逻辑。
-
实施
getHeaders ()
方法。 - 在结束时为 第 43.8 节 “关闭处理程序” 实施处理程序的逻辑。
- 在销毁前,为 第 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 必须理解异常。