42.4. 使用 JMS 消息属性

摘要

Apache CXF JMS 传输具有一个上下文机制,可用于检查 JMS 消息的属性。上下文机制也可用于设置 JMS 消息的属性。

42.4.1. 检查 JMS 消息标头

摘要

消费者和服务使用不同的上下文机制来访问 JMS 邮件标题属性。但是,这两种机制都会将标头属性返回为 org.apache.cxf.transports.jms.context.JMSMessageHeadersType 对象。

在服务中获取 JMS 消息标头

要从 WebServiceContext 对象获取 JMS 邮件标头属性,请执行以下操作:

  1. “获取上下文”一节 所述获取上下文。
  2. 使用消息上下文的 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 Message Header Properties

从 JMS 传输成功检索消息后,您可以使用使用者的响应上下文检查 JMS 标头属性。另外,您可以设置或检查客户端在超时前等待响应的时间长度,如 “客户端接收超时”一节 所述。 要从消费者的响应上下文中获取 JMS 消息标头,请执行以下操作:

  1. 获取响应上下文,如 “获取上下文”一节 所述。
  2. 通过 org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RESPONSE_HEADERS 方法从响应上下文 获取 JMS 邮件标题属性。

例 42.13 “从消费者响应标头中获取 JMS 标头” 显示用于从使用者的响应上下文获取 JMS 邮件标题属性的代码。

例 42.13. 从消费者响应标头中获取 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 “从消费者响应标头中获取 JMS 标头” 中的代码执行以下操作:

将代理转换为绑定Provider.

获取响应上下文。

从响应上下文检索 JMS 消息标头。