JMS コントロールで XML メッセージを送信および受信する

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

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

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

メッセージ本体ではなく、メッセージ ヘッダとメッセージ プロパティを操作する方法については、JMS コントロールで JMS メッセージ ヘッダとメッセージ プロパティを処理するを参照してください。

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

JMS コントロールでは、テキスト メッセージ、XML メッセージ、オブジェクト メッセージ、または javax.jms.Message オブジェクトのいずれかを送信および受信できます。[JMS コントロールの追加] ダイアログで JMS コントロールを作成した場合、JMS コントロールの CTRL ファイルには、ダイアログの [メッセージ タイプ] ドロップダウン リストで選択したタイプのメッセージを送信および受信するためのコードが含まれます。

[XML マップ] メッセージ タイプを選択して JMS コントロールをコンフィグレーションした場合、JMS コントロールは、指定された XML マップを使用して、コントロールのメソッド インタフェースの Java の型と XML メッセージとの間の変換を行います。

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

JMS コントロールのメソッドとコールバックに XML マップを指定する

メッセージ本体、メッセージ ヘッダ、およびメッセージ プロパティを制御するための XML マップを指定するには、[マップおよびインタフェースの編集] ダイアログを使用します。[マップおよびインタフェースの編集] ダイアログの表示および使用方法については、[マップおよびインタフェースの編集] ダイアログを参照してください。

[JMS コントロールの追加] ダイアログの [メッセージ タイプ] ドロップダウン リストで [XML マップ] を選択した場合に生成される CTRL ファイルを次の例に示します。ただし、簡潔にするために、手順に関するコメントを生成されたコードから削除してあります。

import weblogic.jws.control.JMSControl; 
import java.io.Serializable;


/** *   @jws:jms type="queue" send-jndi-name="jms.SimpleJmsQ" receive-jndi-name="jms.SimpleJmsQ" *   connection-factory-jndi-name="cg.jms.QueueConnectionFactory" */ public interface SimpleXMLMapControl extends JMSControl {    /**     * @jws:jms-message xml-map::     * <YourOuterTag>     *   <SampleParameter1>{param1}</SampleParameter1>     *   <SampleParameter2>{param2}</SampleParameter2>     * </YourOuterTag>::     */    public void sendMessage(String param1, String param2);
   interface Callback extends JMSControl.Callback    {        /**         * @jws:jms-message xml-map::         * <YourOuterTag>         *   <SampleParameter1>{param1}</SampleParameter1>         *   <SampleParameter2>{param2}</SampleParameter2>         * </YourOuterTag>         * ::         */         public void receiveMessage(String param1, String param2);    } }

生成されたコードには、sendMessage というメソッドと receiveMessage というコールバックが含まれています。XML メッセージを渡す JMS コントロールには、任意の名前およびシグネチャの 1 つまたは複数のメソッドを定義することができます。したがって、生成されたメソッドの名前を変更することも、生成されたインタフェースに他のメソッドを追加することもできます。既存のパラメータ リスト(param1、param2)を必要なパラメータ リストに置き換えてから、パラメータを XML マップで参照します。

JMS コントロールには、任意の名前およびシグネチャの 1 つのコールバックも定義することができます。生成されたコールバックの名前およびシグネチャは変更できます。

上の例では、XML マップは、@jws:jms-message タグを使用してメッセージ本体に適用されています。メッセージ本体を XML マップで操作できるのは、[XML マップ] メッセージ タイプを選択して JMS コントロールを作成した場合のみです。

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

XML マップを使用すると、すべてのメッセージ タイプ(テキスト、XML マップ、オブジェクト、または JMS メッセージ)の JMS コントロールでも、メッセージ ヘッダとメッセージ プロパティを制御できます。ヘッダの制御には @jws:jms-header タグを、プロパティの制御には @jms:jws-property タグを指定します。メッセージ ヘッダとメッセージ プロパティを操作する方法については、JMS コントロールで JMS メッセージ ヘッダとメッセージ プロパティを処理するを参照してください。

カスタマイズした XML マップの JMS コントロール例

sendID メソッドと onNameReply コールバックを定義する JMS コントロールの例を次に示します。

/** 
 * @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>
    *     <requesterID>123</requesterID>
    *   </property>
    * ::
    *
    * @jws:jms-message xml-map::     *   <person>     *     <identifier>{personID}</identifier>     *   </person>     * ::     *     */    public void sendID(String personID);    public static interface Callback extends JMSControl.Callback    {          /**         * @jws:jms-message xml-map::         *   <person>         *     <firstname>{firstname}</firstname>         *     <lastname>{lastname}</lastname>         *   </person>::         */        public void onNameReply(String firstname, String lastname);    } }

sendID メソッドは、OutQueue というキューにメッセージを送信します。

@jws:jms-header タグでは、送信メッセージのメッセージ ヘッダを設定します。この例では、ハードコード化された値 GetPerson を持つ command という JMS メッセージ ヘッダが、送信 XML メッセージに含まれます。@jws:jms-header の XML マップの一番外側にある要素は、<header> でなければなりません。

@jws:jms-property タグでは、送信メッセージのメッセージ プロパティを設定します。この例では、ハードコード化された値 123 を持つ requesterID という JMS メッセージ プロパティが、送信 XML メッセージに含まれます。@jws:jms-property の XML マップの一番外側にある要素は、<property> でなければなりません。

@jws:jms-message タグでは、メッセージ本体をフォーマットします。メッセージ本体は、XML マップによって定義され、指示された置換が行われた XML ドキュメント フラグメントから構成されます。

メッセージ ヘッダをフォーマットする @jws:jms-header タグも追加されています。これらのタグはすべて同じように機能します。

onNameReply コールバックは @jws:jms-message タグで定義された XML マップを使用して、受け取った XML メッセージからデータを抽出し、コールバックの Java パラメータに転送します。

@jws:jms-header タグの詳細については、@jws:jms-header タグを参照してください。

@jws:jms-property タグの詳細については、@jws:jms-property タグを参照してください。

@jws:jms-message タグの詳細については、@jws:jms-message タグを参照してください。

関連トピック

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

JMS コントロールで XML メッセージを送信および受信する

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

SimpleJMS.jws サンプル

CustomJMSClient.jws サンプル

@jws:jms タグ