Web Service のサンプルには次の 2 つの部分があります。
Web Service Host サンプルを実行すると、ブローカーは HTTP プロトコルを使用して SOAP/XML メッセージを受信し、 再び HTTP を使用して SOAP/XML 応答メッセージを送信します。 このようにして、ブローカーは、Web Service Host として動作します。
ブローカーは、この SOAP メッセージからデータを取り出して、C ヘッダー・ファイルにマップされた新しいメッセージを 生成します。 これによって、WebSphere MQ を使用して、生成されたメッセージがレガシー・アプリケーションに送られます。 レガシー・アプリケーションが応答し、この応答からのデータが、ブローカーで生成された HTTP 応答に入れられます。 このようにして、ブローカーは、レガシー・アプリケーションを Web サービスのフロントとして使用します。
Web Service Host サンプルを実行するには、以下を行います。
レガシー・アプリケーションは C で作成されており、2 つの入力パラメーター (WebSphere MQ キュー・マネージャー名および キュー名) を指定して開始します。 アプリケーションはこのキューおよびキュー・マネージャーからのメッセージを読み取り、入力メッセージの応答情報に指定された キューおよびキュー・マネージャーに応答を送ります。
レガシー・アプリケーションの以下の 2 つの実行可能ファイル版が提供されています。
このサンプルは、ブローカーと同じ WebSphere MQ キュー・マネージャーを使用してレガシー・アプリケーションを 実行するように構成されています。 ブローカーがレガシー・アプリケーションに対して別のキュー・マネージャーを使用する場合は、WebSphere MQ キュー・マネージャー (ブローカーとレガシー) を、相互通信が可能になるように構成してください。
また、メッセージ・フロー WSHOST_WSHOST1 の MQOutput to legacy ノードに対して若干の変更を行う必要があります。 基本プロパティーであるキュー・マネージャー名を、レガシー・アプリケーションの キュー・マネージャーの名前に設定します。入力メッセージおよび出力メッセージはどちらも、以下の 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_LEGACY のファイル 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 メッセージとして受信し、MQ を使用してレガシー応答メッセージを送り返します。 このようにして、ブローカーは、Web Service Client として動作します。
ブローカーはレガシー・メッセージからデータを取り出します。これは C ヘッダー・ファイルにマップされます。 このレガシー・メッセージからのデータは SOAP/XML メッセージの作成に使用されます。 これは WSDL ファイルの 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 メッセージ・フローは上記メッセージを CWF フォーマットで出力します。 これは、上記で定義されている C 構造 tagIA81CONF に基づきます。 フィールドと値は次のとおりです。
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;