JMS コントロールで JMS メッセージ ヘッダとメッセージ プロパティを処理する

このトピックでは、JMS コントロールのインタフェースのメソッドおよびコールバックのパラメータである Java オブジェクトと、コントロールによって送信および受信されるメッセージ ヘッダおよびメッセージ プロパティとの間の変換を行う XML マップの使用方法について説明します。

WebLogic Workshop のコントロールの詳細については、コントロール : Web サービスからリソースを使用するを参照してください。

JMS コントロールについては、JMS コントロール : Web サービスから Java Message Service のキューとトピックを使用するを参照してください。

メッセージ本体の XML フォーマットの操作方法については、JMS コントロールで XML メッセージを送信および受信するを参照してください。

XML メッセージと JMS コントロール

JMS コントロールでは、テキスト メッセージ、XML メッセージ、オブジェクト メッセージ、または javax.jms.Message オブジェクトを送信および受信できます。XML マップは、メッセージ タイプが「XML マップ」の JMS コントロールでメッセージ本体のみを指定するためのものですが、「XML マップ」を使用して、すべてのメッセージ タイプ(テキスト、XML マップ、オブジェクト、または JMS メッセージ)の JMS コントロールのメッセージ ヘッダとメッセージ プロパティも制御できます。

注意 : JMS コントロールのバグにより、XML マップを使用してメッセージ ヘッダまたはメッセージ プロパティを指定すると、メッセージ タイプは強制的に「テキスト」になります。この問題は将来のリリースで対応されます。

XML マップは、XML メッセージと Java オブジェクト間の変換用に WebLogic Workshop 全体で使用されます。XML マップの全般的な概念については、XML マップを使用する理由を参照してください。

XML マップでメッセージ ヘッダにアクセスする

JMS コントロールを使用して送信および受信されるメッセージのヘッダにアクセスするには、@jws:jms-header タグを使用します。

メソッドで XML マップを使用して、送られるメッセージにヘッダを追加することができます。ヘッダ内のメソッドのパラメータ値を置換することもできます。また、JMS コントロールのコールバックで XML を使用すると、受け取ったメッセージからヘッダを抽出し、その値をコールバックのパラメータに代入することができます。

以下のでは、@jws:jms-header タグを使用してメッセージ ヘッダを設定および抽出します。

XML マップでメッセージ プロパティにアクセスする

JMS コントロールを使用して送信および受信されるメッセージのプロパティにアクセスするには、@jws:jms-property タグを使用します。

メソッドで XML マップを使用して、送られるメッセージにプロパティを追加することができます。プロパティ内のメソッドのパラメータ値を置換することもできます。また、JMS コントロールのコールバックで XML を使用すると、受け取ったメッセージからプロパティを抽出し、その値をコールバックのパラメータに代入することができます。

以下のでは、@jws:jms-property タグを使用してメッセージ プロパティを設定および抽出します。

[マップおよびインタフェースの編集] ダイアログ

[マップおよびインタフェースの編集] ダイアログでは、JMS コントロール メソッドまたはコールバック用のパラメータ リストと関連する XML マップをカスタマイズできます。[マップおよびインタフェースの編集] ダイアログを表示するには、カスタマイズするメソッドまたはコールバックに関連付けられているマップ アイコンをダブルクリックします。

JMS コントロール メソッドのマップ アイコンを次に示します。

JMS コントロール コールバックのマップ アイコンを次に示します。

JMS コントロールの [マップおよびインタフェースの編集] ダイアログには、メッセージ本体(@jws:jms-message タグの XML マップの設定)、メッセージ ヘッダ(@jws:jms-header タグの XML マップの設定)、およびメッセージ プロパティ(@jws:jms-property タグの XML マップの設定)の XML マップを編集するための 3 つのタブ付きペインが含まれています。

JMS コントロール メソッドの [マップおよびインタフェースの編集] ダイアログの [プロパティ XML] ペインを次に示します。

次の例では、メッセージ本体の XML フォーマットを指定するだけでなく、メッセージ ヘッダとメッセージ プロパティを設定および抽出します。

/** 
 * @jws:jms type="queue"
 *          send-jndi-name="OutQueue" 
 *          receive-jndi-name="InQueue" 
 */
public interface GetPersonControl extends JMSControl 
{
    /**
     * @jws::jms-header xml-map::
     *   <header>
     *     <command>GetPerson</command>
     *   </header>
     * ::
     *
     * @jws::jms-property xml-map::
     *   <property>
     *     <requestingAccount>{accountID}</requestingAccount>
     *   </property>
     * ::
     *
     * @jws:jms-message xml-map::
     *   <personIdentifier type={idType}>
     *     <identifier>{personID}</identifier>
     *   </personIdentifier>
     * ::
     */
    public void sendID(int accountID, String personID, String idType);
 
    public static interface Callback extends JMSControl.Callback
    {
  
        /**
         * @jws::jms-header xml-map::
         *   <header>
         *     <command>{command}</command>
         *   </header>
         * ::
         *
         * @jws::jms-property xml-map::
         *   <property>
         *     <requestingAccount>{accountID}</requestingAccount>
         *   </property>
         * ::
         *
         * @jws:jms-message xml-map::
         *   <person>
         *     <firstname>{fname}</firstname>
         *     <lastname>{lname}</lastname>
         *   </person>
         * ::
         */
        public void onNameReply(String receivedCommand, int accountID, String fname, String lname);
    }
}

<sendID> メソッドは、最上位の要素が <personIdentifier> の XML ドキュメントの本体を持つメッセージを送信します。<sendID>personID パラメータの値は、<identifier> 要素の値として置換されます。personIdentifier 要素には、idType メソッド パラメータの値を持つ type 属性も含まれています。

メッセージには、ハードコード化された値 GetPerson を持つ command というメッセージ ヘッダが含まれます。また、sendIDaccountID パラメータの値となる値を持つ requestingAccount というメッセージ プロパティもメッセージに含まれます。

JMS コントロールがメッセージを受信すると、onNameReply コールバックが呼び出されます。受信したメッセージに command というヘッダが含まれていた場合、ヘッダの値は onNameReplyreceivedCommand パラメータに代入されます。受信したメッセージに requestingAccount というプロパティが含まれていた場合、プロパティの値は onNameReplyaccountID パラメータに代入されます。メッセージ本体の <firstname> および <lastname> 要素の値は、onNameReplyfname および lname パラメータに代入されます。次に、onNameReply が新しく代入されたパラメータを使用して呼び出されます。

関連トピック

概要 : メッセージング システムと JMS

SimpleJMS.jws サンプル

CustomJMSClient.jws サンプル

@jws:jms タグ

@jws:jms-message タグ

@jws:jms-header タグ

@jws:jms-property タグ