このシナリオでは、ブローカーが新規の Web サービス・インターフェースをインプリメントします。Web サービス用の WSDL は、メッセージ・セットから生成されてから、クライアントでの使用が可能になります。 この WSDL およびメッセージ・セットをベースとするメッセージ・フローは、要求を受信してから、既存の Web サービス以外のアプリケーションから得たデータを使用して、応答メッセージを作成します。
次の図は、現在は Web サービスとしてアクセス可能ではない既存のアプリケーションのインターフェース定義 (例えば、ヘッダー・ファイル) から作成されたメッセージ・セットを示しています。 WSDL ファイルは、メッセージ・セットから生成されて、Web サービス・クライアントが使用できるようにエクスポートされます。 アプリケーションを呼び出すために、メッセージ・セットおよび WSDL を使用するメッセージ・フローが作成されます。 メッセージ・フローとメッセージ・セットは、ブローカーにデプロイされて、元のアプリケーションに対して Web サービス・インターフェースを提供します。
記号を理解する手掛かり:
このシナリオは、Web サービス・ファサードと呼ばれることもあります。 Web サービス・インターフェースの設計は、通常いくらかの再グループ化や既存のインターフェースの制限または強化が含まれ、既存の WSDL 定義には制約されません。
メッセージ・フローは Web サービス要求を受け取り、それを既存のアプリケーションが予期する形式に変換して、既存のアプリケーションを呼び出します。既存のアプリケーションからの応答は、有効な Web サービス応答に変換されます。
この例では、既存のメッセージ・フローを変更して、Web サービスを提供します。 既存のメッセージ・フローが、メッセージ・セット内のデータをモデル化する場合、そのメッセージ・セットから WSDL 定義を生成して、クライアントが使用できるようにすることができます。
入力または出力用に現在 WebSphere® MQ を使用しているほとんどのメッセージ・フローは、置換または追加のプロトコルとして Web サービスをサポートするのに適しています。
SOAP ドメインを使用する場合、論理ツリーの形状は元のドメインのものとは異なるため、メッセージ・フローではその点を考慮に入れておく必要があります。 元のドメインで HTTP ノードを使用する場合、論理ツリーの形状は変わりません。 ドメインの選択の詳細は、WebSphere Message Broker と Web サービスを参照してください。
この例では、WebSphere MQ アプリケーションへの非同期アクセス用のメッセージ・フローが作成されます。
どの場合も、最初のメッセージ・フローは、Web サービス・クライアントからインバウンド要求を受信します。 Compute1 ノードは、要求を変換し、MQOutput ノードは、変更後の要求を既存アプリケーションに送信します。
2 番目のメッセージ・フローでは、MQInput ノードがアプリケーションから応答を受信します。 その後 Compute2 ノードは、メッセージを変換してから、元の Web サービス・クライアントに応答する Reply ノードにそのメッセージを伝搬します。
Compute1 ノードは、Compute2 ノードによって検索される特定の相関情報も保存する必要があります。それによって、WebSphere MQ アプリケーションからの応答は、元の要求を送信したクライアントに必ず返送されます。
HTTPInput および MQOutput ノードをアウトバウンド・メッセージとして使用し、MQInput および HTTPReply ノードを応答メッセージとして使用する場合:
相関情報を保存する方法の 1 つとして、Compute1 ノードがアウトバウンド・メッセージ内で相関 ID をエンコードする方法があります。(別の方法として、ID をデータベースに保管することもできます。) SOAPInput および HTTPInput ノードは、ローカル環境ツリー内のフィールドとして ID を入れます。これにより、Compute1 ノードは、その値を読み取って保管することができます。以下のセクションで説明されているように、ID の位置は SOAPInput ノードと HTTPInput ノードで異なります。
SOAP ノード
SET OutputRoot.XMLNS.A.MessageID =
CAST(InputLocalEnvironment.Destination.SOAP.Reply.ReplyIdentifier AS CHARACTER);
Compute2 ノードの ESQL モジュールに、以下のステートメントのようなコード・ステートメントを組み入れます。
SET OutputLocalEnvironment.Destination.SOAP.Reply.ReplyIdentifier =
CAST(InputRoot.XMLNS.A.MessageID AS BLOB);
HTTP ノード
SET OutputRoot.XMLNS.A.MessageID =
CAST(InputLocalEnvironment.Destination.HTTP.RequestIdentifier AS CHARACTER);
Compute2 ノードの ESQL モジュールに、以下のステートメントのようなコード・ステートメントを組み入れます。
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier =
CAST(InputRoot.XMLNS.A.MessageID AS BLOB);