Asynchronous Consumer サンプルでは、非同期ノードを使用して Web サービスを呼び出す方法を示します。 Web サービスの WSDL (Web Services Definition Language) がツールにインポートされ、それを使用して Web サービスで公開される操作を呼び出すように SOAPAsyncRequest ノードが構成されます。 また、このサンプルでは、既存の WebSphere MQ インターフェースを拡張して Web サービス要求を出す方法も例示します。
このサンプルでは、まず HTTP トランスポートが使用されますが、JMS を使用するように変更することが可能です。 「JMS トランスポート使用のための Asynchronous Consumer サンプルの構成」を参照してください。
サンプルの Web サービスは、1 つの操作を公開する単純な注文受け付けサービスです。この Web サービスは、サンプル内でメッセージ・フローとして用意されています。この Web サービスは、注文された部品が使用可能であることを示す応答を常に戻します。 Web サービスを拡張する 1 つのオプションとして、在庫データベースを照会するために Database ノードを使用することが考えられます。
Asynchronous Consumer サンプルでは、以下のタスクを示します。
下の図は、Web クライアント・メッセージ・フローを示しています。
ノード・タイプ | ノード名 |
---|---|
MQInput | MQWSInput |
MQOutput | MQWSOutput |
Compute | Compute Request、Format Response |
SOAPAsyncRequest | SOAP Asynchronous Request |
SOAPAsyncResponse | SOAP Asynchronous Response |
Web サービス要求は、SOAP ドメインの Compute Request ノードを使用して WebSphere MQ メッセージから構成されます。
Web サービス操作は SOAP Asynchronous Request ノードを使用して呼び出され、
その応答は、ペアの SOAP Asynchronous Response ノードが受け取ります。
最後に、Format Response ノードが応答を WebSphere MQ メッセージとしてフォーマットします。
下の図は、Web サービス・メッセージ・フローを示しています。
ノード・タイプ | ノード名 |
---|---|
SOAPInput | SOAP Input |
RouteToLabel | Route WS Operation |
Label | submitPO |
Compute | Compute Response |
SOAPReply | SOAP Reply |
着信 SOAP メッセージは、Route WS Operation ノードを使用して submitPO ノードに経路指定されます。 この例では、サンプル Web サービスによって 1 つの操作だけが公開されます。 Web サービスが複数の操作を公開しているときに、複数の Label ノードを使用すると、さまざまな操作を使用できます。 SOAP 応答が Compute Response ノードで生成されるのは、応答が Web クライアントに戻される前です。
Web クライアント・メッセージ・フローは、WebSphere MQ メッセージによって駆動されます。 サンプルを実行するためのテスト・クライアント・ファイルが用意されています。 そのファイルは、下の画面取りに示すメッセージ・フォーマットを使用します。
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>
サンプルの実行後、無効な要求メッセージを送信するようにサンプルを拡張することもできます。無効な要求メッセージを送信するには、Compute Request ノードを編集して、不良エレメントを SOAP メッセージ本体に追加する必要があります。 Web サービスによって SOAP 障害メッセージが生成されるので、SOAPAsyncRequest ノード上の Failure ターミナルを接続する必要があります。 SOAP 障害について詳しくは、WebSphere Message Broker 資料の SOAP 障害を参照してください。