Web Service サンプルの実行

Web Service のサンプルには次の 2 つの部分があります。

Web Service Host サンプルの実行

Web Service Host サンプルを実行すると、ブローカーは HTTP プロトコルを使用して SOAP/XML メッセージを受信し、 再び HTTP を使用して SOAP/XML 応答メッセージを送信します。 このようにして、ブローカーは、Web Service Host として動作します。

ブローカーは、この SOAP メッセージからデータを取り出して、C ヘッダー・ファイルにマップされた新しいメッセージを 生成します。 これによって、WebSphere MQ を使用して、生成されたメッセージがレガシー・アプリケーションに送られます。 レガシー・アプリケーションが応答し、この応答からのデータが、ブローカーで生成された HTTP 応答に入れられます。 このようにして、ブローカーは、レガシー・アプリケーションを Web サービスのフロントとして使用します。

Web Service Host サンプルを実行するには、以下を行います。

  1. レガシー・アプリケーションを開始します。

    レガシー・アプリケーションは C で作成されており、2 つの入力パラメーター (WebSphere MQ キュー・マネージャー名および キュー名) を指定して開始します。 アプリケーションはこのキューおよびキュー・マネージャーからのメッセージを読み取り、入力メッセージの応答情報に指定された キューおよびキュー・マネージャーに応答を送ります。

    レガシー・アプリケーションの以下の 2 つの実行可能ファイル版が提供されています。

    このサンプルは、ブローカーと同じ WebSphere MQ キュー・マネージャーを使用してレガシー・アプリケーションを 実行するように構成されています。 ブローカーがレガシー・アプリケーションに対して別のキュー・マネージャーを使用する場合は、WebSphere MQ キュー・マネージャー (ブローカーとレガシー) を、相互通信が可能になるように構成してください。

    また、メッセージ・フロー WSHOST_WSHOST1 の MQOutput to legacy ノードに対して若干の変更を行う必要があります。 基本プロパティーであるキュー・マネージャー名を、レガシー・アプリケーションの キュー・マネージャーの名前に設定します。

    レガシー・アプリケーションを Windows または Linux 以外のプラットフォーム上で実行する場合、そのソース・ファイルが プロジェクト WSHOST_LEGACY で提供されます。 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_LEGACY のファイル legacyservice.h で提供されています。 このヘッダー・ファイルには、他の構造体も含まれていることに注意してください。

  2. SOAP メッセージを HTTPInput ノードで指定された URL に書き込みます。 これを実行するユーティリティーがない場合は、いくつかのフリーウェア・ツールが使用できます。

    このサンプルの実行に使用されるすべてのテスト・メッセージは、以下のフォーマットに基づいています。

    <?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 サンプルの実行

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 サンプルを実行するには、以下を行います。

  1. メッセージ・フローは、Web Service Host サンプルが Web Service Client サンプルと同じブローカー上で実行されていること、またブローカーがデフォルトの HTTP ポート番号の 7080 を使用していることを前提とします。 この前提が満たされていない場合は、メッセージ・フローの HTTPRequest ノードのローカル・ホスト、ポート番号、またはその両方を修正し、Web Service Host をアドレス指定してください。 その後、bar ファイル WSCLIENT.bar を再コンパイルし、ブローカーにデプロイする必要があります。 このファイルは、メッセージ・フロー・プロジェクト WSCLIENT_MFP1 にあります。デプロイする前に、これをドメイン・プロジェクトにコピーする必要が生じる場合があります。
  2. まだこれを行っていない場合は、bar ファイル WSHOST.bar をブローカーにデプロイします。 このファイルは、メッセージ・フロー・プロジェクト WSHOST_MFP1 にあります。 デプロイする前に、これをドメイン・プロジェクトにコピーする必要が生じる場合があります。
  3. まだこれを行っていない場合は、Web Service Host サンプルが呼び出すレガシー・アプリケーションを開始します (上記を参照)。
  4. MQInput ノードで定義される WebSphere MQ キューにメッセージを書き込みます (キュー名は WSCLIENT1_IN1 です)。

    このサンプルの実行に使用される入力テスト・メッセージは、以下のフォーマットに基づいています。

    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;

メインページのアイコン   サンプルのホームに戻る