ブローカーが新規 Web サービスをインプリメントする方法についての詳細

ブローカーが Web サービスをインプリメントする典型的なエンドツーエンドのシナリオについて学びます。

C または COBOL ベースの既存のシステムが、Web サービスとして役に立つように公開できるビジネス・ロジックを提供しています。

ブローカーは既存のシステムで操作を開始することができます。つまり、システムはブローカーにインターフェースを公開します。 通常は、既存のシステムで WebSphere® MQ が使用可能になります。 システムがアプリケーション・データを含む WebSphere MQ メッセージを受け取り、 これらを基礎となるインプリメンテーションにディスパッチしてから、戻り値を WebSphere MQ 応答としてパッケージします。これら既存の操作に提供され、そこから戻されるデータ構造は、C ヘッダー・ファイルまたは COBOL コピーブックで定義されています。

Web サービスは、既存のシステムによってすでに公開された操作に基づくインターフェースを提供します。このインターフェースは、すべての既存の操作、既存の操作または複合操作のサブセット、あるいはその両方によって構成されることがあります。

インターフェースを定義する方法は、以下のとおりです。
  1. 既存のシステムによって提供されるビジネス機能に注目します。
  2. 公開するこのビジネス機能のサブセットを選択します。
  3. サブセットをインターフェース内でどのように表現するかを決定します (つまり、多数の独立した操作としてか、または少数の多目的の操作としてか)。
Web サービス・インターフェースを RPC スタイルまたは文書スタイルのどちらにするかを決定する必要があります。Web サービス、WSDL、およびメッセージ・フローについて詳しくは、WSDL とメッセージ・モデルの関係を参照してください。
  • RPC スタイルのインターフェースは、通常は API によって提供される 基礎となる操作のセットにマップするように設計されていて、個々の操作 (メソッド呼び出し) は 相対的に小さなペイロードを持ちます。
  • 文書スタイルのインターフェースは、操作の数が少なく、それぞれのペイロードは大きくなります。例えば、融資要求を表す文書などに使用されます。
Web Services Interoperability Organization (WS-I) は、文書スタイルの WSDL の仕様を推奨していますが、多くの古い Web サービスでは RPC スタイルを使用しています。

シナリオをインプリメントする方法は、以下のとおりです。

  1. C インポーターを使用するなどして、既存の API データ構造をインポートします。 文書スタイルの WSDL を使用する場合、インポーター・ウィザードを使用して、必要なグローバル・エレメントをブローカー・モデル内に作成する必要があります。 WS-I は、Web サービス・ペイロードがネーム・スペースで修飾されることを勧めているので、ユーザーはインポートの際にターゲットのネーム・スペースを指定する必要があります。

    この時点で、既存の操作を開始するときに使用するデータのメッセージ・モデルを持つことになります。

  2. WSDL 定義を生成します。 必要なメッセージ・カテゴリーをすでに作成しているのでなければ、公開する Web サービス操作ごとにメッセージ・カテゴリーを作成して、既存のブローカー・メッセージを適切な SOAP 役割 (入力、出力、または障害) に関連付けます。詳しくは、メッセージ・カテゴリー・ファイルの処理を参照してください。
    • 文書スタイルの WSDL を選択した場合、メッセージ・セット自体は変更されません。
    • RPC スタイルの WSDL を選択した場合、各 WSDL 操作の要求および応答に対応するメッセージが、 自動的に作成されてメッセージ・セットに追加されます。
  3. WSDL 生成ステップにより、適切な SOAP mxsd ファイル (メッセージ定義ファイル) が メッセージ・セットに自動的に組み込まれます。これには、SOAP エンベロープ mxsd ファイルおよび (WSDL のスタイルが RPC でエンコードされている場合) SOAP エンコード mxsd ファイルが含まれます。
  4. 新規の Web サービス・クライアントを作成する場合、選択した Web サービス・クライアント・テクノロジーと共に、生成された WSDL を使用します。WebSphere Message Broker 以外のツール (Rational® Application Developer または .NET など) を使用することができます。
  5. Web サービス要求を受け取るため、つまり Web サービス・プロバイダーとして機能するための、メッセージ・フローをインプリメントします。エンドポイント・ノードは、クライアントが使用するトランスポートに応じて、HTTP または WebSphere MQ となります。 入力ノード・プロパティーは、以下のとおりです。
    • メッセージ・ドメイン: MRM
    • メッセージ・セット: SOAP エンベロープ定義を含むメッセージ・セット
    • メッセージ・タイプ: エンベロープ
    • メッセージ形式: XML1
  6. フローによって開始されると、パーサーは事前に準備された SOAP mxsd ファイルによって 定義された SOAP エンベロープから構成される論理ツリーを作成します。構文解析は、SOAP エンベロープ (SOAP 本体およびヘッダー) 内の接続ポイント で自動的に続行して、メッセージ・セット内の他のメッセージ定義に対する突き合わせを試行します。 必要に応じて、入力ノードでの妥当性検査を適用することができます。

    この時点では、論理ツリーはありますが、どの SOAP ペイロードが受信されたかは分かりません。 HTTP SOAPAction アクション・フィールドを調べて、可能性のある内容を判別することはできますが、この確認ができるのは HTTP だけです。 (SOAPAction の使用は、WS-I では勧められていません。)

  7. 許可されたペイロード・メッセージから既存のシステムにある必要なメッセージへのマッピングを提供できます。 例えば、メッセージ message1amessage1b の両方が 同じターゲット message2 にマップする、単一のマッピング定義を使用できます。
    その代わりに、各メッセージ・タイプ、または関連するメッセージ・タイプのグループに対して、別々のマッピングを提供することもできます。 このアプローチにより、より管理可能で再使用可能なマッピング定義を作成できます。 欠点は、どのペイロードを受け取ったかを判別してからでなければ、マッピングを適用できないことです。 以下のように ESQL を使用することによって、どのペイロードを受け取ったかを判別できます。
     
     DECLARE SOAPENV NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
     SET contentType = FIELDNAME(InputBody.SOAPENV:Body.*[<]);
     IF (contentType = 'foo') ...
     
    または、以下のようにフィールド参照を使用することもできます。
     
     DECLARE R REFERENCE TO InputRoot.MRM.SOAPENV:Body.*[<];
     IF (FIELDNAME(R) = "foo") ...
     
    ペイロードを判別した後は、フローを分岐に適切にマップして (例えば、RouteToLabel ノードを使用)、各分岐に内容固有の Mapping ノードと Compute ノードのいずれかまたは両方を配置できます。簡単なフローでは、必要に応じてすべての論理を 1 つの Compute ノードにコーディングしてもかまいません。

    ここで、既存のシステムを (通常は WebSphere MQ を介して) 始動して、予期される応答を取得してから、Web サービス応答を伝搬します。メッセージ・フロー設計者は、ビジネス・アプリケーションが適当な時間内に期待される応答を送信しない 可能性について責任を持つ必要があります。

類似したシナリオについては、以下のサンプルを参照してください。 サンプルは、Message Brokers Toolkit と統合されているインフォメーション・センターを使用する場合にのみ表示できます。
関連概念
XML ドメインのメッセージ・フロー
ブローカーによる既存の Web サービスの呼び出し
ブローカーによる新規 Web サービス・インターフェースのインプリメント
ブローカーによる既存の Web サービス・インターフェースのインプリメント
ブローカーによる新規 Web サービスに対する Web サービス以外のインターフェースのインプリメント
WSDL とメッセージ・モデルの関係
関連タスク
ブローカーが既存の Web サービス・インターフェースをインプリメントする方法についての詳細
ブローカーによる既存の Web サービスの呼び出し - 詳細
メッセージ・カテゴリー・ファイルの処理
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:43:03

ac34570_