JMS コントロールで XML メッセージを送信および受信する
このトピックでは、JMS コントロールのインタフェースに含まれるメソッドおよびコールバックのパラメータである Java オブジェクトと、コントロールによって送信および受信されるメッセージ本体との間の変換を行う XML マップの使用方法について説明します。
WebLogic Workshop のコントロールの詳細については、コントロール : Web サービスからリソースを使用するを参照してください。
JMS コントロールの詳細については、JMS コントロール : Web サービスから Java Message Service のキューとトピックを使用するを参照してください。
メッセージ本体ではなく、メッセージ ヘッダとメッセージ プロパティを操作する方法については、JMS コントロールで JMS メッセージ ヘッダとメッセージ プロパティを処理するを参照してください。
JMS コントロールでは、テキスト メッセージ、XML メッセージ、オブジェクト メッセージ、または javax.jms.Message オブジェクトのいずれかを送信および受信できます。[JMS コントロールの追加] ダイアログで JMS コントロールを作成した場合、JMS コントロールの CTRL ファイルには、ダイアログの [メッセージ タイプ] ドロップダウン リストで選択したタイプのメッセージを送信および受信するためのコードが含まれます。
[XML マップ] メッセージ タイプを選択して JMS コントロールをコンフィグレーションした場合、JMS コントロールは、指定された XML マップを使用して、コントロールのメソッド インタフェースの Java の型と XML メッセージとの間の変換を行います。
XML マップは、XML メッセージと Java オブジェクト間の変換用に WebLogic Workshop 全体で使用されます。XML マップの全般的な概念については、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 メッセージ ヘッダとメッセージ プロパティを処理するを参照してください。
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 コントロールで XML メッセージを送信および受信する