第 43 章 编写处理程序
摘要
JAX-WS 提供灵活的插件框架,用于向应用添加消息处理模块。这些模块称为处理程序,独立于应用级别代码,可以提供低级消息处理功能。
43.1. 处理程序:简介
概述
当服务代理调用服务上的操作时,操作的参数将传递给 Apache CXF,其中它们构建到消息中并放置在有线条上。当服务收到消息时,Apache CXF 从有线条读取消息,重新构建消息,然后将操作参数传递给负责实施操作的应用程序代码。当应用程序代码完成处理请求时,回复消息会在其出去到源自请求的服务代理时执行类似事件链。这在 图 43.1 “消息交换路径” 中显示。
图 43.1. 消息交换路径
JAX-WS 定义用于操作应用级别代码和网络之间的消息数据的机制。例如,您可能希望通过开放网络传递的消息数据使用专有加密机制进行加密。您可以编写加密和解密数据的 JAX-WS 处理程序。然后,您可以将处理程序插入到所有客户端和服务器的消息处理链中。
如 图 43.2 “带有处理程序的消息交换路径” 所示,处理程序放置在链中,它会在应用级别代码和将消息放入网络中的传输代码之间遍历。
图 43.2. 带有处理程序的消息交换路径
处理程序类型
JAX-WS 规范定义了两种基本处理程序类型:
逻辑处理程序 逻辑处理程序可以处理消息有效负载和消息上下文中存储的属性。例如,如果应用使用纯 XML 消息,逻辑处理程序可以访问整个消息。如果应用使用 SOAP 消息,则逻辑处理程序可以访问 SOAP 正文的内容。它们无法访问 SOAP 标头或任何附件,除非它们被放入消息上下文中。
逻辑处理程序放在处理程序链中的应用程序代码最接近的。这意味着,当消息从应用程序代码传递给传输时,首先执行它们。从网络接收消息并传递回应用程序代码时,逻辑处理程序将最后执行。
协议处理程序 协议处理程序可以处理从网络接收的整个消息,以及存储在消息上下文中的属性。例如,如果应用使用 SOAP 消息,则协议处理程序将能够访问 SOAP 正文、SOAP 标头和任何附件的内容。
协议处理程序放在处理程序链中的传输最接近。这意味着,在从网络收到消息时,首先执行它们。当消息从应用程序代码发送到网络时,协议处理程序将最后执行。
注意Apache CXF 支持的唯一协议处理程序特定于 SOAP。
处理程序的实现
两个处理程序类型之间的区别非常小,它们共享一个通用的基本接口。由于其常见的父项,逻辑处理程序和协议处理程序共享必须实施的一些方法,包括:
逻辑处理器实现和协议处理器的实现之间的不同会围绕以下内容:
实施的特定接口
所有处理程序实施从处理程序接口派生的接口。逻辑处理程序实施 LogicalHandler 接口。协议处理程序实现处理程序接口的特定协议扩展。例如,SOAP 处理程序实施 SOAPHandler 接口。
处理程序可用的信息量
协议处理程序有权访问消息的内容以及所有与消息内容一起打包的协议特定信息。逻辑处理程序只能访问消息的内容。逻辑处理程序不知道协议详情。
将处理程序添加到应用程序
要在应用程序中添加处理器,您必须执行以下操作:
- 确定处理程序是否在服务提供商、消费者或两者中使用。
- 确定最适合该作业的处理程序类型。
实施正确的接口。
要实现逻辑处理器,请参阅 第 43.2 节 “实施逻辑处理程序”。
要实现协议处理器,请参阅 第 43.4 节 “实施协议处理程序”。
- 将您的端点配置为使用处理程序。请参阅 第 43.10 节 “配置端点以使用处理程序”。