Menu Close

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. org.apache.cxf.transports.jms.JMSConstants.JMS_SERVER_HEADERS パラメーターと共にメッセージコンテキストの get() メソッドを使用して、メッセージコンテキストからメッセージヘッダーを取得します。

例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 メッセージヘッダーを取得するには、以下を行います。

  1. 「コンテキストの取得」の説明に従って、レスポンスコンテキストを取得します。
  2. org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RESPONSE_HEADERS をパラメーターとしてコンテキストの get() メソッドを使用して、応答コンテキストから 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 ヘッダーの取得」のコードは、以下を行います。

プロキシーを BindingProvider にキャストする。

応答コンテキストを取得する。

応答コンテキストから JMS メッセージヘッダーを取得する。