43.4. 实施协议处理程序
概述
协议处理程序特定于使用的协议。Apache CXF 提供 JAX-WS 指定的 SOAP 协议处理程序。SOAP 协议处理程序实施 javax.xml.ws.handler.soap.SOAPHandler 接口。
在 例 43.8 “SOAPHandler Synopsis” 中显示的 SOAPHandler 接口使用 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 “SOAPHander.getHeaders ()
方法” 所示,方法告知 Apache CXF 运行时处理器负责处理的 SOAP 标头。它返回每个 SOAP 标头的 outer 元素的 QNames,处理程序会理解。
例 43.9. SOAPHander.getHeaders ()
方法
set<QName>
;getHeaders
对于许多情况下,只需返回 null 就足够了。但是,如果应用程序使用任何 SOAP 标头的 mustUnderstand
属性,则务必要指定应用的 SOAP 处理程序理解的标头。运行时检查一组 SOAP 标头,所有已注册的处理程序都对 mustUnderstand
属性设置为 true
的标头列表理解。如果任何标记的标头不在理解标头列表中,则运行时会拒绝消息,并抛出 SOAP 必须理解异常。