42.4. 使用 JMS 消息属性
摘要
Apache CXF JMS 传输具有一个上下文机制,可用于检查 JMS 消息的属性。上下文机制也可用于设置 JMS 消息的属性。
42.4.1. 检查 JMS 消息标头
摘要
使用者和服务使用不同的上下文机制来访问 JMS 消息标头属性。但是,这两种机制都将标头属性作为 org.apache.cxf.transports.jms.context.JMSMessageHeadersType
对象返回。
在服务中获取 JMS 消息标头
要从 WebServiceContext
对象获取 JMS 消息标头属性,请执行以下操作:
- 获取 “获取上下文”一节 中描述的上下文。
-
使用消息上下文的
get ()
方法和参数 org.apache.cxf.transports.jms.JMSConstants.JMS_SERVER_HEADERS 获取消息标题。
例 42.12 “在服务实现中获取 JMS 消息标头” 显示从服务的消息上下文获取 JMS 消息标头的代码:
例 42.12. 在服务实现中获取 JMS 消息标头
import org.apache.cxf.transport.jms.JMSConstants; import org.apache.cxf.transports.jms.context.JMSMessageHeadersType; @WebService(serviceName = "HelloWorldService", portName = "HelloWorldPort", endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldPortType", targetNamespace = "http://cxf.apache.org/hello_world_jms") public class GreeterImplTwoWayJMS implements HelloWorldPortType { @Resource protected WebServiceContext wsContext; ... @WebMethod public String greetMe(String me) { MessageContext mc = wsContext.getMessageContext(); JMSMessageHeadersType headers = (JMSMessageHeadersType) mc.get(JMSConstants.JMS_SERVER_HEADERS); ... } ... }
在消费者中获取 JMS 消息标头属性
从 JMS 传输成功检索了消息后,您可以使用消费者的响应上下文检查 JMS 标头属性。另外,您可以设置或检查客户端在超时前等待响应的时间,如 “客户端接收超时”一节 所述。 从消费者的响应上下文获取 JMS 消息标头,请执行以下操作:
- 获取响应上下文,如 “获取上下文”一节 所述。
-
使用上下文的
get ()
方法和 org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RESPONSE_HEADERS 获取 JMS 消息标头属性。
例 42.13 “从 Consumer Response 标头获取 JMS 标头” 显示从消费者的响应上下文获取 JMS 消息标头属性的代码。
例 42.13. 从 Consumer Response 标头获取 JMS 标头
import org.apache.cxf.transports.jms.context.*; // Proxy greeter initialized previously BindingProvider bp = (BindingProvider)greeter; Map<String, Object> responseContext = bp.getResponseContext(); JMSMessageHeadersType responseHdr = (JMSMessageHeadersType) responseContext.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS); ... }
例 42.13 “从 Consumer Response 标头获取 JMS 标头” 中的代码执行以下操作:
将代理广播到 BindingProvider。
获取响应上下文。
从响应上下文检索 JMS 消息标头。