サンプルでは、操作が SOAP 要求メッセージから抽出され、Web サービス・プロバイダーの URL を取得するためにユーザー定義の構成可能サービスが使用されます。
サンプル・ウィザードは、コンシューマー・フローの bar ファイル内の SOAPRequest ノードの URL をオーバーライドします。 bar ファイルを再作成することを選択した場合、これらの設定はクリアされ、ゲートウェイ・フローが呼び出されないことがあります。
Web Services Gateway サンプルでは、以下のタスクを示します。
開始する前に、このサンプルが構築される基になった既存のサンプルに精通している必要があります。
下の図は、Web Services Gateway のメッセージ・フローを示しています。
次の表は、メッセージ・フロー内のノードを示しています。
ノード・タイプ | ノード名 |
---|---|
SOAPInput | GatewayInput |
JavaCompute | ComputeURL |
SOAPRequest | SOAP Request |
SOAPReply | GatewayReply |
SOAPInput ノードは、ゲートウェイ・モードで作動し、Address Book サンプルまたは SOAP ノードのサンプルのコンシューマー・フローからの要求を受け入れます。
JavaCompute ノードは、着信要求メッセージから操作名を取得し、これを csName に格納します。 サンプル・セットアップ・ウィザードは、Gateway と呼ばれるユーザー定義の構成可能サービスを作成し、既存のサンプルから 2 つのコンシューマー・フローの操作名と一致するプロパティーを作成します。 BrokerProxy は、構成可能サービスの値を取得し、要求の URL をローカル環境で設定するために使用されます。
List nodeset = (List)message.getRootElement().evaluateXPath("SOAP/Body/*[1]"); String csName=((MbElement)(nodeset.get(0))).getName(); String URL = null; try { //Get the broker proxy BrokerProxy bp = BrokerProxy.getLocalInstance(); //Find the URL from a configurable service URL = bp.getConfigurableServiceProperty("UserDefined/Gateway/"+csName); } catch (Exception e) { URL="/"; } //Set the WebServiceURL creating the path if it doesn't exist le.getRootElement().evaluateXPath("?Destination/?SOAP/?Request/?Transport/?HTTP/?WebServiceURL[set-value('"+URL+"')]");
SOAPRequest ノードは、適切なプロバイダー・フローに要求を送信します。
SOAPReply ノードは、呼び出し側のコンシューマー・フローに応答を返します。
SOAP メッセージは、既存のコンシューマー・フローおよびプロバイダー・フローによって生成されます。 ゲートウェイ・フローは、操作名を使用して、それを正しいプロバイダーに経路指定します。
サンプルの実行後、別の Web サービス・プロバイダーを追加することによって、サンプルを拡張することもできます。 構成可能サービスを使用してプロバイダーの URL を保管しているので、必要なことは既存のサービス操作の名前を持つプロパティー、および URL に設定された値を追加することだけです。