Web Services using HTTP nodes サンプルの実行

サンプルのインポート時に、属性、CWF メッセージ、エレメント、および MRM ドメインに関するいくつかの警告を Toolkit で受け取ることがあります。 そのような警告は、メッセージ・セットに関連するものであり、サンプルの実行には影響しません。

Web Services using HTTP nodes サンプルには、以下の 2 つの部分が含まれます。

サンプルの実行時に問題を検出した場合は、 WebSphere Message Broker 資料の『サンプル実行時の問題の解決』を参照してください。

Web Service Host サンプルの実行

Web Service Host サンプルを実行すると、ブローカーは HTTP プロトコルを使用して SOAP/XML メッセージを受信し、返送します。ブローカーは、Web サービス・ホストとして動作します。

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

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

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

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

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

    このサンプルは、ブローカーで使用されてデフォルト構成ウィザードで作成されるキュー・マネージャー (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 ファイルで提供されています。 このヘッダー・ファイルには、他の構造体も含まれています。

  2. SOAP メッセージを WSHOST_WSHOST1.msgflow HTTPInput ノードで指定された URL に書き込みます。 このタスクを実行するユーティリティーがなくても、Web サービスのテストや SOAP メッセージの送信でいくつかのフリーウェア・ツールを使用できます。 サンプル・メッセージは、プロジェクト WSHOST1_MFP1 の WSHOST1IN.xml ファイルにあります。 ブローカーがご使用の HTTP ユーティリティーと同じマシン上にある場合は、 http://localhost:7080/samplebrokerwshost にメッセージを書き込みます。同じマシン上にない場合は、必要に応じて、ローカル・ホストおよびポート番号を修正します。

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

    <?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 メッセージとして受信し、WebSphere MQ を使用してレガシー応答メッセージを送り返します。 ブローカーは、Web サービス・クライアントとして動作します。

ブローカーはレガシー・メッセージからデータを取り出します。これは C ヘッダー・ファイルにマップされます。 このデータは、WSDL ファイルの XML スキーマにマップされる SOAP/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 を使用していることを前提とします。 それが同じブローカーまたは HTTP ポート番号上で実行されていない場合は、メッセージ・フローの HTTPRequest ノードのローカル・ホスト、ポート番号、またはその両方を修正し、Web Service Host をアドレス指定してください。 その後、BAR ファイル WSCLIENT.bar を再コンパイルし、ブローカーにデプロイする必要があります。このファイルは、ブローカー・アーカイブ下のメッセージ・ブローカー・プロジェクト WSCLIENT_MFP1 内にあります。 デプロイする前に、そのファイルをドメイン・プロジェクトにコピーする必要が生じる場合があります。
  2. まだこれを行っていない場合は、BAR ファイル WSHOST.bar をブローカーにデプロイします。このファイルは、メッセージ・ブローカー・プロジェクト WSHOST_MFP1 にあります。 デプロイする前に、これをドメイン・プロジェクトにコピーする必要が生じる場合があります。
  3. まだこれを行っていない場合は、Web Service Host サンプルが呼び出すレガシー・アプリケーションを開始します。 このトピックの『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 メッセージ・フローは、前述のメッセージを 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;

レガシー・アプリケーションを閉じます。 これで、「サンプルの準備」ウィザードを使用して、サンプルをワークスペースから除去できます。

サンプルのホームに戻る