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。
流程
要实现逻辑手:
- 实施处理程序所需的任何 第 43.6 节 “初始化处理程序” 逻辑。
- 实施 第 43.5 节 “在 SOAP 处理程序中处理消息” 逻辑。
- 实施 第 43.7 节 “处理故障消息” 逻辑。
-
实施
getHeaders()
方法。 - 在 第 43.8 节 “关闭处理程序” 完成后实现 处理程序的逻辑。
- 为 第 43.9 节 “发布处理程序” 处理程序在销毁前实施任何逻辑。
实施 getHeaders()方法
getHeaders()
显示在 例 43.9 “SOAPHander.getHeaders()
方法” 中,方法告知 Apache CXF 运行时,处理程序负责处理的 SOAP 标头。它返回每个 SOAP 的 outer 元素的 QNames,处理程序理解。
例 43.9. SOAPHander.getHeaders()
方法
set<QName>
;getHeaders
对于很多情况来说,简单地返回 null 就足够了。但是,如果应用程序使用任何 SOAP 标头的 mustUnderstand
属性,那么务必要指定应用程序 SOAP 处理程序理解的标头。运行时会检查所有注册处理程序是否对标头列表了解的 SOAP 标头集,并将 mustUnderstand
属性设为 true
。如果任何标记的标头都不在被理解的标头列表中,则运行时会拒绝该消息并抛出 SOAP 必须了解异常。