サンプルのインポート時に、属性、CWF メッセージ、エレメント、および MRM ドメインに関するいくつかの警告を Toolkit で受け取ることがあります。 そのような警告は、メッセージ・セットに関連するものであり、サンプルの実行には影響しません。
HTTP ノード・サンプルを使用する Web Service には、以下の 2 つの部分が含まれます。
サンプルの実行時に問題を検出した場合は、 WebSphere Message Broker 資料の『サンプル実行時の問題の解決』を参照してください。
Web Service Host サンプルを実行すると、ブローカーは HTTP プロトコルを使用して SOAP/XML メッセージを受信し、返送します。ブローカーは、Web サービス・ホストとして動作します。
ブローカーは、この SOAP メッセージからデータを取り出して、C ヘッダー・ファイルにマップされた新しいメッセージを 生成します。 この新しいメッセージは、WebSphere MQ を使用してレガシー・アプリケーションに送られます。 レガシー・アプリケーションが応答し、この応答からのデータが、ブローカーで生成された HTTP 応答に入れられます。 ブローカーは、レガシー・アプリケーションを Web サービスのフロントとして使用します。
Web Service Host サンプルを実行するには、以下を行います。
レガシー・アプリケーションは C で作成されており、2 つの入力パラメーター (WebSphere MQ キュー・マネージャー名および キュー名) を指定して開始します。 アプリケーションはこのキューおよびキュー・マネージャーからのメッセージを読み取り、入力メッセージの応答情報に指定された キューおよびキュー・マネージャーに応答を送ります。
レガシー・アプリケーションの以下の 2 つの実行可能ファイル版が提供されています。
legacyservice qmname qname
を入力します。
qmname はキュー・マネージャー名、qname は WSHOST1_OUT1 です (最初の MQOutput ノードから)。
例:
legacyservice MB8QMGR WSHOST1_OUT1。
レガシー・アプリケーションを WebSphere Message Broker Toolkit から呼び出すことはできません。このサンプルは、ブローカーで使用されてデフォルト構成ウィザードで作成されるキュー・マネージャー (MB8QMGR) を使用して、
レガシー・アプリケーションを実行するように構成されています。
ブローカーがレガシー・アプリケーションに対して別のキュー・マネージャーを使用する場合は、
WebSphere MQ キュー・マネージャー (ブローカーとレガシー) を、相互通信が可能になるように構成してください。
メッセージ・フロー WSHOST_WSHOST1 内で、MQOutput をレガシー・ノードに変更する必要もあります。
基本プロパティーである「キュー・マネージャー名」を、レガシー・アプリケーションによって使用されるキュー・マネージャーの名前に設定します。
レガシー・アプリケーションを Windows または Linux 以外のプラットフォーム上で実行する場合、そのソース・ファイルが
プロジェクト WSHOST_LEGACY1 で提供されます。
C ソース・ファイルは legacyservice.c で、ヘッダー・ファイル legacyservice.h および legacyservice2.h を持ちます。選択したコンパイラーを使用してコンパイルを行ってから、前述の入力パラメーターのガイドラインに従ってアプリケーションを実行します。
入力メッセージおよび出力メッセージはどちらも、以下の C 構造体にマップされます。
typedef struct tagIA81CONF { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; char Confirm[1]; char filler1[3]; } IA81CONF;
この構造は、プロジェクト WSHOST_LEGACY1 の legacyservice.h ファイルで提供されています。 このヘッダー・ファイルには、他の構造体も含まれています。
このサンプルの実行に使用されるすべてのテスト・メッセージは、以下のフォーマットに基づいています。
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <c:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </c:IA81CONFIN> </soapenv:Body> </soapenv:Envelope>
Web Service Host サンプルでは、msg_tagIA81CONF というメッセージを使用して レガシー・アプリケーションを呼び出します。 そのメッセージの DeliveryRef フィールドは、入力についてはブランクに設定され、 出力については JOHNCORP に設定されます。 Confirm フィールドは、入力についてはブランクに設定され、出力については Y または N のいずれかに設定されます (ItemReference 入力フィールドが文字 Y を含むかどうかに依存)。
以下のコードは、前述の入力メッセージからの応答メッセージを示しています。
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>Y</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
Web Service Client サンプルを実行すると、ブローカーは WebSphere MQ プロトコルを使用してレガシー・フォーマットのメッセージを受信します。 次に、HTTP プロトコルを使用して SOAP/XML メッセージを送信することにより、Web サービスを呼び出します。 そして、HTTP を使用して Web サービス応答を SOAP/XML メッセージとして受信し、WebSphere MQ を使用してレガシー応答メッセージを送り返します。 ブローカーは、Web サービス・クライアントとして動作します。
ブローカーはレガシー・メッセージからデータを取り出します。これは C ヘッダー・ファイルにマップされます。 このデータは、WSDL ファイルの XML スキーマにマップされる SOAP/XML メッセージの作成に使用されます。 Web サービス・ホストによって WSDL ファイルが提供され、ブローカーに設定されたメッセージにインポートされました。 このサンプルで、Web サービス・ホストは Web Service Host サンプルです。
この Web Service Client サンプルを実行するには、Web Service Host サンプルが実行中でなければなりません。
Web Service Client サンプルを実行するには、以下を行います。
このサンプルの実行に使用される入力テスト・メッセージは、以下のフォーマットに基づいています。
typedef struct tagIA81BUY { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; } IA81BUY;
以下のメッセージが、Web Service Host メッセージ・フローに送られます。
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mrm="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS2:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </NS2:IA81CONFIN> </tns:Body> </tns:Envelope>
以下の応答メッセージが、前述の入力メッセージに関して Web Service Client メッセージ・フローによって受信されます。
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>N</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
応答メッセージ。
Web Service Client メッセージ・フローは、前述のメッセージを C 構造 tagIA81CONF に基づく CWF フォーマットで出力します。 以下の情報は、フィールドおよび値を詳しく示しています。
typedef struct tagIA81CONF { char MessageId[8]; IA81CONF char OrderNumber[8]; LAB5123 char ItemReference[12]; ITEM12345678 char ItemQuantity[8]; qty00005 char CustomerNumber[12]; CUST34567890 char DeliveryRef[8]; JOHNCORP char Confirm[1]; N char filler1[3]; } IA81CONF;
レガシー・アプリケーションを閉じます。 これで、「サンプルの準備」ウィザードを使用して、サンプルをワークスペースから除去できます。