SOAP ノードのサンプルについて

SOAP ノードのサンプルでは、SOAPInput、SOAPReply、SOAPRequest の各ノードを使用して、HTTP トランスポートまたは JMS トランスポートに基づく Web サービスを提供する方法とコンシュームする方法の両方を示します。

このサンプルの開始点は、単純化された注文サービスを定義する Web サービス記述言語 (WSDL) ファイルです。WSDL ファイルを参照してください。HTTP バインディングと JMS バインディングの両方を組み込んだ WSDL ファイルでは、WSDL で定義されている操作を参照します。この Web サービスは、注文された部品が使用可能であることを示す応答を常に戻します。 Web サービスを拡張する 1 つのオプションとして、在庫データベースを照会するために Database ノードを使用することが考えられます。

"「WSDL または XSD ファイル (あるいはその両方) から開始」"ウィザードを WSDL ファイルと一緒に使用して、メッセージ・セットを作成し、このサンプルを構成する 2 つのメッセージ・フローを作成します。

SOAP ノードのサンプルは、次のようなタスクを示します。

メッセージ・フロー

このサンプルは、2 つのメッセージ・フローを使用します。 1 つのメッセージ・フローは Web サービスを提供し、もう 1 つは Web サービスをコンシュームします。 HTTP および JMS Web サービスの場合は、要求および応答メッセージは同じままです。 これらのメッセージ・フローについて、このセクションの後半で説明します。

下の図は、Web サービス・プロバイダーのメッセージ・フローを示しています。

Web サービス・プロバイダーのメッセージ・フローの画面取り

次の表は、Web サービス・プロバイダーのメッセージ・フロー内のノードを示しています。

ノード・タイプ ノード名
SOAPInput Input
Subflow OrderService_Extract
Compute Compute Response
SOAPReply Reply

SOAPInput ノードは、着信 SOAP メッセージを受信し、そのメッセージが有効であれば、メッセージ・フローをたどって OrderService_Extract サブフローにそのメッセージを渡します。OrderService_Extract サブフローは、"「WSDL または XSD ファイル (あるいはその両方) から開始」"ウィザードで作成されます。 下の図は、Web サービス・プロバイダーのサブフローを示しています。

Web サービス・プロバイダー・サブフローの画面取り

下の表は、Web サービス・プロバイダー・サブフローのノードを示しています。

ノード・タイプ ノード名
Input Terminal in
SOAPExtract Extract
Output Terminal failure
Label ws_submitPORequest
Output Terminal submitPORequest

SOAPExtract ノードは、SOAP メッセージを取り込んで、SOAP エンベロープを削除します。 このサンプルでは、SOAP エンベロープの削除によって XML メッセージが XMLNSC ドメインに残るので、Mapping ノードや Compute ノードなどでそのメッセージを利用できます。さらに、SOAPExtract ノードは、呼び出し対象の Web サービス操作に基づいて、1 つのラベルにメッセージを送付します。このサンプルでは、使用される操作は 1 つだけです。 開始点として使われる WSDL に複数の操作が存在する場合、"「WSDL または XSD ファイル (あるいはその両方) から開始」"ウィザードでは、複数の操作をインプリメントするオプションが提供されます。 複数の操作を選択した場合、サブフローは複数のラベルを持つため、親メッセージ・フローの中に複数の出力ターミナルが作成されます。

XMLNSC メッセージは、サブフローを出てメイン・プロバイダー・メッセージ・フローに戻ると、Compute ノードに入ります。Compute ノードを使用することによって、元の SOAP 本体を XML として参照し、メッセージ内のデータに対して ESQL 操作を実行できます。このサンプルでは、メッセージ内のデータは無視されて、有効な XML データが初めから作成されます。 その後、このデータは SOAPReply ノードに送られます。そのノードでは、Web サービス呼び出しを開始した Web サービス・コンシューマーに返される SOAP メッセージが作成されます。

下の図は、Web サービス・コンシューマーのメッセージ・フローを示しています。

JMSHeader Node Reply メッセージ・フローの画面取り

次の表は、Web サービス・コンシューマーのメッセージ・フロー内のノードを示しています。

ノード・タイプ ノード名
MQInput SOAPSample_IN
Compute Compute Request
Subflow Invoke_submitPO
Compute Compute Response
MQOutput SOAPSample_OUT
MQOutput SOAPSample_FAULT

Web サービス・コンシューマー・フローは、MQInput ノードによってモニターされるキューに着信する WebSphere MQ メッセージによって開始されます。このメッセージは XMLNSC ドメイン内の XML メッセージです。 このメッセージは、Compute ノードに入ります。そのノードでは、着信データに基づいて、Web サービスに送信される XML データが作成されます。次に、そのメッセージは、フローをたどって Invoke_submitPO サブフローに渡されます。Invoke_submitPO サブフローを作成するには、「WSDL または XSD ファイル (あるいはその両方) から開始」ウィザードを使用します。

下の図は、Web サービス・コンシューマー・サブフローを示しています。

Web サービス・コンシューマー・サブフローの画面取り

下の表は、Web サービス・コンシューマー・サブフローのノードを示しています。

ノード・タイプ ノード名
Input Terminal in
SOAPRequest Request
Output Terminal fault
SOAPExtract Extract
Output Terminal failure
Label ws_submitPOResponse
Output Terminal submitPOResponse

SOAPRequest ノードは、着信 XML データを取り込み、そのデータを使用して、ノードのプロパティーで定義されている Web サービスに送られる有効な SOAP メッセージを作成します。有効な応答が受信されると、その応答は、SOAPExtract ノードに渡されます。そのノードでは、応答から SOAP エンベロープが削除され、メッセージが XMLNSC ドメインに返されます。さらに、そのメッセージは、ws_submitPOResponse Label ノードに送付され、サブフローが終了します。

メイン・コンシューマー・フローでは、指定の WebSphere MQ キューに XML データを書き込む MQOutput ノードに出力メッセージが送られます。障害メッセージは、指定の WebSphere MQ キューに SOAP 障害データを書き込む MQOutput ノードに送られます。

メッセージ

Web クライアント・メッセージ・フローは、WebSphere MQ メッセージによって駆動されます。 以下の XML メッセージを使ってサンプルを実行するためのテスト・クライアント・ファイルが用意されています。

	<OrderMessage>
  	<localElement>
    <FirstName>Message</FirstName>
    <LastName>Broker</LastName>
    <Street>IBM</Street>
    <City>IBM</City>
    <ZipCode>IBM</ZipCode>
    <PartNumber>Some Part</PartNumber>
    <Quantity>1</Quantity>
  	</localElement>
	</OrderMessage>

Web サービス要求メッセージおよび応答メッセージの有効なフォーマットを、以下の編集済みのスキーマ抽出で示します。

	<xsd:element name="submitPORequest">
	...
	<xsd:complexType>
    <xsd:sequence>
	<xsd:element name="partNo" type="xsd:string"/>
    <xsd:element name="partQuantity" type="xsd:int"/>
    <xsd:element name="personName">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="firstName" type="xsd:string"/>
    <xsd:element name="lastName" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="address">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="street" type="xsd:string"/>
    <xsd:element name="city" type="xsd:string"/>
    <xsd:element name="zipCode" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
	</xsd:element>
<xsd:element name="submitPOResponse">
...
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="orderStatus" type="xsd:string"/>
            <xsd:element name="orderAmt" type="xsd:int"/>
            <xsd:element name="partNo" type="xsd:string"/>
            <xsd:element name="partQuantity" type="xsd:int"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>


サンプルのホームに戻る