ヘッダーをスキップ
Oracle Web Services Manager管理者ガイド
10g(10.1.3.4)
B50834-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

4 Oracle Web Services Manager Gatewayでのコンテンツ・ルーティング

この章では、メッセージのコンテンツに基づいて、ゲートウェイにメッセージをルーティングする方法について説明します。この章では次の項について説明します。

Oracle Web Services Manager(Oracle WSM) Gatewayのコンテンツ・ルーティング・ルールを使用すると、実際のメッセージのコンテンツに基づいて、各メッセージを異なるWebサービス・プロバイダに送信するようにメッセージ・ルーティングをカスタマイズできます。Oracle WSM Gatewayのディスパッチ論理では、受信SOAPメッセージの宛先URLに基づいて、異なるパイプライン(つまり、異なるサービス・エンドポイント)に受信メッセージをルーティングします。受信メッセージがSOAPメッセージではない場合でも、メッセージはSOAPに正規化(ラップ)されるため、このディスパッチ論理が同様に適用されます。

クライアントが認識する必要があるのは、ゲートウェイへのメッセージの送信に使用するクライアント・アクセスURLのみです。ゲートウェイは、メッセージをWebサービスURLにルーティングします。クライアントはWebサービスのURLを把握する必要はありません。多くの場合、このURLはクライアントからはわからないようにするのが賢明です。これは次の理由によります。

コンテンツ・ルーティングを使用すると、クライアントは、特定の転送サービス・アドレスを指定せずにメッセージをゲートウェイに送信します。ルーティングは、SOAPエンベロープ(ヘッダーまたはボディ)やSOAP添付ファイルのXMLコンテンツ、および指定したコンテンツ・ルーティング・ルールに基づきます。コンテンツ・ルーティングは、すべてのトランスポート・プロトコルで受信するSOAPメッセージに適用できます。また、ゲートウェイに登録されているサービスにルーティングできます。

/fsを含むURL接頭辞(http://host:port/gateway/fs/crouterなど)付きでメッセージがゲートウェイに届くと、ゲートウェイは、次の事項に基づいて、特定のWebサービスにメッセージを転送します。

このサービスは、HTTP(S)、JMSおよびMQなどの使用可能なトランスポートで、次の方法を使用して起動できます。

ゲートウェイのコンテンツ・ルーティング・ルールの概要

管理者は、コンテンツベースのルールを構成して、ゲートウェイに送信するメッセージの宛先を指定します。ゲートウェイは、これらのルールに基づいてメッセージを評価します。

次に、実際の簡単な適用例を示します。

ある大手保険会社には、保険契約の受信見積依頼書(RFQ)を処理する2つのWebサービスがあります。

この保険会社は、これら2つのサービスのURLを、クライアント・アプリケーションに直接公開しないことにしました。かわりに、クライアントには1つのURLのみを公開し、RFQのclientTypeフィールドに基づいて、メッセージがゲートウェイでWebサービス1またはWebサービス2にルーティングされるようにすることを決定しました。

システム管理者はゲートウェイ用に次のルールを作成します。

メッセージがゲートウェイに届くと、ゲートウェイは各ルールを順番に評価し、一致する最初のルールに従って、メッセージをルーティングします。

コンテンツ・ルーティング・ルールは、単純な条件一致によるXPath1式の作成に基づきます。ルールは、trueまたはfalse値を返す条件、およびアクションによって構成されます。さらに複雑な条件のルールを作成するには、単純な条件を複数作成し、ブール式のANDで結合して使用してください。

表4-1 ルール作成の要素

要素 説明

ルール

ルールは条件とアクションで構成されます。条件は1つ以上の単純な条件のセットです。評価されると、trueまたはfalse値を返します。アクションは、関連する条件がtrueの場合に実行される1つのルーティング操作を示します。

条件

条件は、ブール式のANDで結合された1つ以上の単純な条件から構成され、trueまたはfalse値を返します。単純な条件は次の演算子を使用して定義できます。EQUALS: XML要素の値はX(文字列の一致のみ)と同じです。NOT_EQUALS: XML要素の文字列値は一致しません。XEXISTS: XML要素はSOAPヘッダーやボディ、または添付ファイルに存在します。NOT_EXISTS: XML要素はSOAPヘッダーやボディ、または添付ファイルに存在しません。

アクション

関連する条件がtrueの場合、アクションは指定したWebサービスにメッセージをルーティングまたは転送します。


Web Services Manager Controlを使用して、次の操作を実行できます。

コンテンツ・ルーティング・ルールでは、次の構文を使用します。

条件: IF <variable> <EQUALS/EXISTS> <value>

ネームスペース: WHERE <prefix> = <namespace_url>

アクション: THEN Route To <serviceId>

ネームスペース

アプリケーション・ネームスペースはアプリケーションごとに異なり、全体としてアプリケーションの設計ガイドラインに依存します。

  • SOAP-ENVは、http://schemas.xmlsoap.org/soap/envelope/を指し示すネームスペースです。

サンプルSOAPメッセージ

次のコード・サンプルは、典型的なSOAPメッセージを示しています。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <r:RFQ xmlns:r="http://businessdocs.com/RFQ">
         <clientType>HOMEOWNER</clientType>
         <clientID>12345</clientID>
      </r:RFQ>
   </soap:Body>
</soap:Envelope>

サンプル・コンテンツ・ルーティング・ルール

次に示すのは、前述のサンプルSOAPメッセージ用に定義できる、2つのコンテンツ・ルーティング・ルールのサンプルです。

  1. /soap:Envelope/soap:Body/r:RFQ/clientTypeHOMEOWNERと等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/rネームスペースがhttp://businessdocs.com/RFQである場合、Service1にルーティングします。

  2. /soap:Envelope/soap:Body/r:RFQ/clientTypeAUTOOWNERと等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/rネームスペースがhttp://businessdocs.com/RFQである場合、Service2にルーティングします。

コンテンツ・ルーティングを使用したWebサービスへのアクセス

この項では、コンテンツ・ルーティングを使用してWebサービスにアクセスする方法について説明します。

コンテンツ・ルーティングを使用してWebサービスにアクセスするには

  1. Web Services Manager Controlのナビゲーション・ペインから、「ツール」を選択して、「テスト・ページ」をクリックします。

  2. ゲートウェイに登録されているWebサービスのURLを入力して、「問合せの発行」をクリックします。

    「Webサービスのテスト」ページが更新され、設定可能なエンドポイントURLとその他のパラメータが表示されます。

  3. エンドポイントURLを次のURLで置き換えます。

    http://host_name:port/gateway/fs/crouter

  4. 「起動」をクリックします。

Oracle WSMコンテンツ・ルーティングのルールの作成

次の手順では、サンプルSOAPメッセージのコンテンツ・ルーティング・ルールを作成します。

/soap:Envelope/soap:Body/r:RFQ/clientTypeHOMEOWNERと等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/rネームスペースがhttp://businessdocs.com/RFQである場合、Service1にルーティングします。

Oracle WSMコンテンツ・ルーティングのルールを作成するには

  1. コンテンツ・ルーティング・ルールを定義するゲートウェイのコンポーネント管理者としてログインし、Web Services Manager Controlを起動します。

  2. ナビゲーション・ペインで、「ポリシー管理」を選択して、「ポリシーの管理」を選択します。

    Web Services Manager Controlに、ゲートウェイなどの、現在登録されているOracle WSMコンポーネントのリストが表示されます。

  3. コンテンツ・ルーティングを追加するゲートウェイの「編集」をクリックします。

    Web Services Manager Controlには、そのゲートウェイ・コンポーネントに現在割り当てられているプロパティのリストを示す「コンポーネント・プロパティの編集」ページが表示されます。

    図4-1 「コンポーネント・プロパティの編集」ページ

    図4-1の説明が続きます
    「図4-1 「コンポーネント・プロパティの編集」ページ」の説明

  4. 「コンテンツ・ルーティング」をクリックします。

    Web Services Manager Controlには、そのゲートウェイに現在定義されているコンテンツ・ルーティング・ルールのリストが表示されます(1つ以上定義されている場合)。

    図4-2 コンテンツ・ルーティング詳細のページ

    図4-2の説明が続きます
    「図4-2 コンテンツ・ルーティング詳細のページ」の説明

    Oracle WSMは、条件No matchに基づいてデフォルトのコンテンツ・ルーティング・ルールを提供します。条件No matchは他のコンテンツ・ルーティングの条件が一致しない場合に起動します。

  5. 「追加」をクリックします。

    Web Services Manager Controlに、空の「ルールの追加/編集」ページが表示されます。このページで、新しいコンテンツ・ルーティング・ルールに条件とアクションを指定します。デフォルトでは、SOAP ENVELOPEオプションが選択されています。

  6. 「If」フィールドにSOAPメッセージのIF条件を入力して、「Then」フィールドにメッセージのルーティング先のWebサービスを入力します。


    注意:

    特定のサービスの場所にメッセージをルーティングするために、そのサービス名(サービスの登録時に指定)またはサービスID番号(SID)を指定できます。

  7. 「参照先」をクリックして、ルールのIF条件に含まれるXPath変数のネームスペースを指定します(図4-3)。

    保険会社の例では、最初のコンテンツ・ルーティング・ルールは次のようになります。/soap:Envelope/soap:Body/r:RFQ/clientTypeHOMEOWNERと等しく、SOAPネームスペースがhttp://schemas.xmlsoap.org/soap/envelope/rネームスペースがhttp://businessdocs.com/RFQである場合、Service1にルーティングします。

    図4-3 「コンテンツ・ルーティング」ページ

    図4-3の説明が続きます
    「図4-3 「コンテンツ・ルーティング」ページ」の説明

  8. エントリを完了したら、「保存」をクリックします。

    Web Services Manager Controlにコンテンツ・ルーティング・ルールが一覧表示され、追加した新しいルールも表示されます。

    ルールの表示順序は、ゲートウェイに送信されるメッセージにコンテンツ・ルーティング・ルールが適用される順序です。受信メッセージは、Oracle WSM Gatewayがtrueとして検証した最初のルールに従ってルーティングされます。ルールの表示順序は、使用する環境に最適な選択基準になるように変更できます。

  9. ルールの順序を変更するには、上矢印または下矢印をクリックします。

「ネームスペース」をクリックすると、このゲートウェイに定義されたすべてのルールで使用するすべてのXMLネームスペースを表示するウィンドウが開きます。

図4-4 コンテンツ・ルーティング・ルールのネームスペース・マッピング

図4-4の説明が続きます
「図4-4 コンテンツ・ルーティング・ルールのネームスペース・マッピング」の説明

ゲートウェイのすべてのコンテンツ・ルーティング・ルールの中で、1つの接頭辞は1つのネームスペースに対してのみマッピングできます。図4-4には、rおよびsoapという2つの接頭辞があります。たとえば、どちらもsoapという名前の同じ接頭辞がある場合、これらを別々のネームスペースにマッピングすることはできません。

添付ファイルのXPathコンテンツを使用したルールの作成

SOAPメッセージのXMLコンテンツに基づいてコンテンツ・ルーティング・ルールを定義する以外に、SOAP添付ファイルのXPathコンテンツに基づくルールを定義することもできます。

添付ファイルのXPathコンテンツを使用してルールを作成するには

  1. コンテンツ・ルーティング・ルールを定義するゲートウェイのコンポーネント管理者としてログインし、Web Services Manager Controlを起動します。

  2. ナビゲーション・ペインで、「ポリシー管理」をクリックして、「ポリシーの管理」をクリックします。

    Web Services Manager Controlに、ゲートウェイなどの、現在登録されているOracle WSMコンポーネントのリストが表示されます。

  3. コンテンツ・ルーティングを追加するゲートウェイの「編集」をクリックします。

    Web Services Manager Controlには、そのゲートウェイ・コンポーネントに現在割り当てられているプロパティのリストを示す「コンポーネント・プロパティの編集」ページが表示されます。

  4. 「コンテンツ・ルーティング」をクリックします。

    Web Services Manager Controlには、そのゲートウェイに現在定義されているコンテンツ・ルーティング・ルールのリストが表示されます(1つ以上定義されている場合)。

  5. 「追加」をクリックして、ATTACHMENT XPATHオプションを選択します。

    Web Services Manager Controlには、「ルールの追加/編集」ページが表示されます。

  6. メッセージに対して添付ファイルを特定する、関連のXPath変数(SOAPメッセージに含まれる)を指定します。たとえば、次のようになります。

    /soap:Envelope/soap:Body/source/@href
    
  7. 添付ファイルのコンテンツと一致する、1つ以上のルール条件を入力します。「If」フィールドに、添付ファイルにあるXPath変数を指定します。たとえば、次のようになります。

    IF /policy/model EQUALS lexus

  8. 「参照先」をクリックして、ルールのIF条件に含まれるXPath変数のネームスペースを指定します。たとえば、次のようになります。

    http://schemas.xmlsoap.org/envelope

  9. 「Then」フィールドに、メッセージのルーティング先のWebサービスを指定します。

  10. 「保存」をクリックします。

    新しい添付ファイルのXPathルールが、定義されたゲートウェイのコンテンツ・ルーティング・ルールに表示されます。


    注意:

    添付ファイルのXPathコンテンツ・ルーティング・ルールは、XMLコンテンツを含む添付ファイルの場合にのみ定義できます。これらの添付ファイルは、SOAP-with-Attachments仕様を使用して、SOAPメッセージ内で参照する必要があります。

コンテンツ・ルーティングの例

次に、SOAPメッセージおよびSOAP添付ファイルの例を示します。

例4-1 SOAPメッセージ

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd=http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns0= http://soap11ws/types/
xmlns:ns1 "http://ws-i.org/profiles/basic/1.1/xsd">
<env:Header>
  <wsse:Security env:mustUnderstand="1"
xmlns:wsse= http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
xmlns= http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
xmlns:env= "http://schemas.xmlsoap.org/soap/envelope/"/>
</env:Header>
<env:Body>
   <ns0:sendAttachmentElement>
     <ns0:claimDetail>cid:ID1@claimDetail</ns0:claimDetail>
  </ns0:sendAttachmentElement>
</env:Body>
</env:Envelope>

例4-2 SOAP添付ファイル

 <?xml version="1.0"?>
<lmt-instructions>
    <transferable-objects>
        <component>C0003002</component>
    </transferable-objects>
</lmt-instructions>

表4-2では、例4-1および例4-2を使用して、SOAP添付ファイルのXPathコンテンツに基づいてSOAPメッセージをルーティングするために、「コンテンツ・ルーティング」ページのフィールドに入力する内容を示します。

表4-2 SOAPメッセージのXPathコンテンツに基づいたSOAPメッセージのルーティング

フィールド 説明

Then

メッセージをルーティングするWebサービスを指定します。

SID0003001

If

添付ファイルに含まれるXPath変数を指定します。

IF /lmt-instructions/transferable-objects/component EQUALS C0003002

ATTACHMENT XPATH

メッセージの添付ファイルを特定する、XPath変数(SOAPメッセージに含まれる)を指定します。

SOAPメッセージに指定されているとおりに、構文および大文字を一致させてXPathを指定します。

/env:Envelope/env:Body/ns0:sendAttachmentElement/ns0:claimDetail

参照先

IF条件に含まれる変数のネームスペースを指定します。

env : http://schemas.xmlsoap.org/soap/envelope/ ns0 : http://soap11ws/types/