この章では、Oracle Service Busコンソールを使用してパイプラインまたはメッセージ・フローを作成および構成する方法について説明します。この項には、パイプライン・ペア、条件付きブランチ、ステージ、オペレーション・ブランチおよびルート・ノードの作成および構成が含まれます。
パイプラインおよびそれらのコンポーネントの詳細は、「Oracle Service Busでのメッセージ・フローの作成」を参照してください。
パイプライン・デザイナでは、アクションを作成および構成する際、メッセージ・フローがグラフィカルに表示されます。
「メッセージ・フローの編集」ページを使用して、パイプラインのメッセージ・フローを作成します。
「メッセージ・フローの編集」ページの左側のナビゲーション・ペインに、パイプライン内のノードとオブジェクトのツリー・ビューが表示されます。オブジェクトの詳細が別のページで定義されている場合は、オブジェクトの名前をクリックして、関連付けられているページを表示できます。
右側のペインには、パイプラインを作成するためのフィールドが表示されます。メッセージ・フローがまだ定義されていない場合、ペインには、パイプラインの開始ノードを示す1つの「パイプライン」アイコンがあります。アイコンをクリックして、サービスのパイプライン・ペア・ノード、ルート・ノード、条件付きブランチ、操作ブランチ、およびエラー処理を追加します。
ページにオブジェクトを追加すると、そのオブジェクトを示すアイコンがページに表示されます。オブジェクト間の関係は、線と境界を示す四角形で示されます。「メッセージ・フローの編集」ページのアイコンをクリックすると、そのオブジェクトで実行できるアクションのメニューが表示されます。メニューに含まれるオプションは、コンテキストに応じて異なります。アイコンとオプションの完全なリストについては、表13-1を参照してください。
表13-1 「メッセージ・フローの編集」ページのアイコンとオプション
アイコン | 説明 | メニュー・オプション |
---|---|---|
![]() パイプライン |
パイプラインの開始ノード。 |
|
![]() パイプライン・ペア・ノード |
パイプライン・ペア・ノードはリクエスト・パイプラインとレスポンス・パイプラインから成ります。 |
|
![]() レスポンス・パイプライン |
前述のパイプライン・ペア・ノードを参照してください。 |
|
![]() リクエスト・パイプライン |
前述のパイプライン・ペア・ノードを参照してください。 |
|
![]() エラー・ハンドラのあるパイプライン |
エラー・ハンドラが定義されているパイプライン。 |
|
![]() ルート・ノード |
ルート・ノード・アクションは、ルート・ノードを通過する際のメッセージの処理を定義します。 |
|
![]() エラー・ハンドラがあるルート・ノード |
エラー・ハンドラが定義されているルート・ノード。 |
|
![]() ステージ・ノード |
ステージ・ノードは、アクションのコンテナです。 |
|
![]() エラー・ハンドラがあるステージ・ノード |
エラー・ハンドラが定義されているステージ・ノード。 |
|
![]() 条件付きブランチ・ノード |
条件付きブランチ・ノードを使用すると、可能ないくつかのパスのうちの1つに限定して処理を進ませることができます。 |
|
![]() 操作ブランチ・ノード |
オペレーション・ブランチ・ノードでは、指定された操作に基づいてどのブランチに進むかが判断されます。 |
|
![]() RESTブランチ・ノード |
RESTブランチ・ノードでは、使用されたメディア・タイプ、相対URI、またはHTTP動詞に基づいてどのブランチに進むかが判断されます。 |
|
![]() ブランチ・ノード |
ブランチ・ノードは、条件付きブランチ・ノード、操作ブランチ・ノードまたはRESTブランチ・ノードによって定義される代替ノードの1つです。 |
|
![]() エラー・ハンドラ |
エラー・ハンドラは、パイプラインでエラーを再送するロジックを提供します。 |
|
「ステージ構成の編集」ページを使用して、パイプラインのパイプライン・ステージ、エラー・ハンドラ・ステージおよびルート・ノードにアクションを追加します。
「ステージ構成の編集」ページでまだ何も定義されていない場合、表示されるオブジェクトは「アクションの追加」アイコンのみです。アイコンをクリックして作業を開始します。
ステージまたはルート・ノードがすでに構成されている場合は、そのステージまたはルート・ノードに対して定義されているアクションとオブジェクトがページに表示されます。必要に応じて、既存のアクションを編集するか、または、アクションを表すアイコンのいずれかをクリックして、ステージにアクションを追加します。
ステージに追加できるすべての種類のアクションの操作手順については、「コンソールでのパイプライン・アクションの追加と編集」を参照してください。
Oracle Service Busコンソールからパイプライン・デザイナを起動すると、パイプライン・デザイナは新しいブラウザ・ウィンドウで開かれます。
Oracle Service Busコンソールからパイプライン・デザイナにアクセスするには、次の手順を実行します。
コンソールでパイプラインを表示および編集するには:
1つのコール・チェーン内の2つのパイプラインで同じ共有変数を宣言する場合、これらは呼出しコール・チェーンの範囲内の同じ変数を読み取り、変更します。つまり、パイプラインP1で共有変数var
を宣言し、パイプラインP1が、同様に共有変数var
を宣言するパイプラインP2を呼び出す場合、P1のvar
の変更はP2に表示され、逆も当てはまります。共有変数は、文字列、ブールまたはXMLのデータ型にする必要があります。
パイプラインでメッセージを受信して処理する場合、共有変数を使用する呼び出されたすべてのパイプラインは、その変数に対して同じ値を読書きします。プロキシで受信する以降のメッセージにより、呼び出されたパイプラインに共有変数の新しいインスタンスが作成されます。
共有変数は、ローカル・プロキシの呼出しと分割-結合コンポーネントの呼出しで機能します。たとえば、パイプラインP1およびP2で共有変数を宣言するとします。ここで、P1がローカル・プロキシ・サービスまたは分割-結合コンポーネントを呼び出し、このサービスまたはコンポーネントが同様にP2を呼び出す場合、P1とP2は引き続き共有変数を共有します。
次の制限事項が共有変数の使用に適用されます。
システム変数($body、$attachments、$operation、$inbound、$outbound
など)は共有できません。
変数は、ローカル以外のプロキシ呼出しで共有できません。たとえば、パイプラインでHTTPプロキシ・サービスを呼び出す場合、共有変数はこのコール間で伝播されません。
変数は、パイプラインと分割-結合リソース間で共有できません。
Javaとバイナリ・コンテンツ・タイプを使用する変数はサポートされません。たとえば、XML構造に<ctx:java-content/>
があるXML型変数は、共有変数としてサポートされません。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインに共有変数を追加するには:
パイプラインには、パイプライン・ペア・ノード(パイプライン(またはサービスの処理用)のリクエストおよびレスポンス・パイプライン)と、ステージ、パイプラインおよびサービスに対して定義できるエラー・ハンドラ・パイプラインをゼロ個以上含めることができます。パイプラインは、1つまたは複数のステージを持つことができ、ステージはアクションを持ちます。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインにパイプライン・ペアを追加するには:
「パイプライン」アイコンをクリックし、「パイプライン・ペアの追加」をクリックします。
パイプライン・ペア・ノードのデフォルト名を変更して説明を追加するには、次の操作を行います。
パイプライン・ペア・ノード・アイコンをクリックし、「名前とコメントの編集」をクリックします。
必要に応じて名前と説明を変更します。
「保存」をクリックします。
注意:
パイプライン名やルート・ノード名を変更すると、パイプライン・カウンタがゼロにリセットされるので、「モニター」モジュールの「ダッシュボード」ページに表示されるメッセージの数と他のコンポーネントのメッセージ数との相関関係がなくなる可能性があります。これは、Service Busでは、いったん削除して再作成するアクションとして名前の変更を処理しているためです。これらのメッセージ数は、サービスのモニター間隔と同じ時間が経過した後に再び関連付ける必要があります。
パイプラインにステージを追加するには、「コンソールでのパイプラインへのステージの追加方法」を参照してください。
パイプラインのステージにアクションを追加するには、「コンソールでのパイプライン・アクションの追加と編集」を参照してください。
「保存」をクリックして、現在のセッションで更新をコミットします。
セッションを終了して構成をランタイムにデプロイするには、Oracle Service Busコンソール・ウィンドウの右上隅にある「アクティブ化」をクリックします。
ブランチ・ノードを使用すると、可能ないくつかのパスのうちの1つに限定して処理を進めることができます。分岐は、XPathベースの切替え表に基づいて実行されます。表の各ブランチは、条件(たとえば、<500
)を指定し、これが単一のXPath式(たとえば、$body
の./ns: PurchaseOrder/ns:totalCost
)に対してパイプラインの降順に評価されます。最初に満たされた条件によって、進むべきブランチが決定されます。満たされる分岐条件がない場合は、デフォルトのブランチに進みます。ブランチ・ノードでは、パイプライン内にいくつかの子孫を持つことができます(デフォルトのブランチを含め各ブランチに1つずつ)。
プロキシ・サービスがWSDLファイルに基づいておらず、複数のドキュメント・タイプを入力として受信する場合は、条件付きブランチ・ノードを使用することを検討してください。
条件付きブランチ処理は、単純でありながらユニークな文字列値のタグが付いたブランチをまとめたルックアップ表を基準に行われます。メッセージ・コンテキストの変数をそのノードのルックアップ変数として指定し、実行時に、この値を使用してどのブランチに進むかが判断されます。ルックアップ変数に一致するブランチがない場合は、デフォルトのブランチに進みます。ブランチ・ノードに到達する前にルックアップ変数の値が設定されるように、パイプラインを設計する必要があります。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインに条件付きブランチを追加するには:
「パイプライン・ペア・ノード」アイコンまたは「ブランチ・ノード」アイコンをクリックして、「条件付きブランチ・ノードの作成」をクリックします。条件付きブランチ・ノードが追加され、挿入したブランチ・ノードの後の既存のノードが、新しい条件付きブランチ・ノードのデフォルト・ブランチに移動します。
ブランチ・ノードのデフォルト名を変更して説明を追加するには、次を行います:
「条件付きブランチ」アイコンをクリックし、「名前とコメントの編集」をクリックします。
必要に応じて名前と説明を変更します。
「保存」をクリックします。
ブランチ定義を追加するには、「条件付きブランチ」アイコンをクリックし、「ブランチの編集」をクリックします。「ブランチ・ノードの編集」ページが表示されます。
次を実行します。
「選択したパス」フィールドで「編集」をクリックして、XPath式を追加し、パスを指定します。インラインXQueryおよびXPath式の作成と編集を参照してください。
「変数」フィールドにコンテキスト変数を入力します。
「演算子」フィールドから、比較演算子を選択します。
「値」フィールドにブランチの値を入力します。
「ラベル」フィールドにブランチのラベルを入力します。
(オプション)「オプション」で次のようにします。
「新しいブランチの追加」をクリックして、このブランチ・ノードに新しいブランチ定義を追加します。
「このブランチを削除」をクリックして、ブランチ定義を削除します。
「ブランチを上に移動」または「ブランチを下に移動」をクリックして、ブランチ定義の位置を変更します。このオプションは、複数のブランチ定義が存在する場合にのみ表示されます。
「保存」をクリックして、現在のセッションで更新をコミットします。
「メッセージ・フローの編集」ページで、「コンソールでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
「保存」をクリックして、現在のセッションで更新をコミットします。
セッションを終了して構成をランタイムにデプロイするには、「Oracle Service Busコンソール」ウィンドウの左上隅にある「アクティブ化」をクリックします。
パイプラインでWeb Services Description Language (WSDL)ベースのプロキシ・サービスを定義する場合、操作固有の処理が必要になります。Service Busでは、操作に基づくブランチ・ノードを手動で構成するかわりに、操作に基づいて自動的に分岐するように構成された、最小限のブランチ・ノードが用意されています。つまり、操作ブランチ・ノードをパイプラインに作成すると、Oracle Service Busコンソールでは、WSDLに定義された操作がブランチ・ノード構成ページに表示されるため、これらの操作に基づいて分岐ロジックをすばやく構築できます。
ブランチ・ノードを使用すると、可能ないくつかのパスのうちの1つに限定して処理を進めることができます。分岐は、XPathベースの切替え表に基づいて実行されます。表の各ブランチは、条件(たとえば、<500
)を指定し、これが単一のXPath式(たとえば、$body
の./ns: PurchaseOrder/ns:totalCost
)に対してパイプラインの降順に評価されます。最初に満たされた条件によって、進むべきブランチが決定されます。満たされる分岐条件がない場合は、デフォルトのブランチに進みます。ブランチ・ノードでは、パイプライン内にいくつかの子孫を持つことができます(デフォルトのブランチを含め各ブランチに1つずつ)。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインに操作ブランチを追加するには:
「パイプライン・ペア・ノード」アイコンまたは「ブランチ・ノード」アイコンをクリックして、「操作ブランチ・ノードの作成」をクリックします。操作ブランチ・ノードが追加され、挿入したブランチ・ノードの後の既存のノードが、新しい操作ブランチ・ノードのデフォルト・ブランチに移動します。
ブランチ・ノードのデフォルト名を変更して説明を追加するには、次を行います:
「操作ブランチ」アイコンをクリックして、「名前とコメントの編集」をクリックします。
必要に応じて名前と説明を変更します。
「保存」をクリックします。
ブランチ定義を追加するには、「操作ブランチ」アイコンをクリックし、「ブランチの編集」をクリックします。「ブランチ・ノードの編集」ページが表示されます。
「操作ブランチ定義」パネルで、サービス操作を選択します。
(オプション)「オプション」で次のようにします。
「新しいブランチの追加」をクリックして、このブランチ・ノードに新しいブランチ定義を追加します。
「このブランチを削除」をクリックして、ブランチ定義を削除します。
「ブランチを上に移動」または「ブランチを下に移動」をクリックして、ブランチ定義の位置を変更します。このオプションは、複数のブランチ定義が存在する場合にのみ表示されます。
「保存」をクリックします。
「メッセージ・フローの編集」ページで、「コンソールでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
「保存」をクリックして、現在のセッションで更新をコミットします。
セッションを終了して構成をランタイムにデプロイするには、「Oracle Service Busコンソール」ウィンドウの左上隅にある「アクティブ化」をクリックします。
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインにステージを追加するには:
必要に応じて、「パイプライン・ペア・ノード」アイコンの左側にあるプラス記号クリックしてパイプライン・ペア・ノードを展開します。パイプライン・ペアには、「リクエスト・パイプライン」および「レスポンス・パイプライン」が含まれています。
ステージに追加するパイプラインをクリックしてから、「ステージの追加」をクリックします。
ステージのデフォルト名を変更して説明を追加するには、次を行います:
「ステージ」アイコンをクリックして、「名前とコメントの編集」をクリックします。
必要に応じて名前と説明を変更します。
「保存」をクリックします。
ステージにアクションを追加するには、「ステージ」アイコンをクリックし、「ステージの編集」をクリックします。「コンソールでのパイプライン・アクションの追加と編集」を参照してください。
ステージにエラー処理を追加するには、「ステージ」アイコンをクリックし、「ステージ・エラー・ハンドラの追加」をクリックします。「コンソールでのエラー・ハンドラの追加」を参照してください。「メッセージ・フローの編集」ページが表示されます。
「コンソールでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
「保存」をクリックして、現在のセッションで更新をコミットします。
セッションを終了して構成をランタイムにデプロイするには、Oracle Service Busコンソール・ウィンドウの右上隅にある「アクティブ化」をクリックします。
始める前に
この手順は、「コンソールでのパイプラインの表示と編集」の説明に従って、すでに「メッセージ・フローの編集」ページでパイプラインを編集していることを前提としています。
パイプラインにルート・ノードを追加するには:
ステージおよびルート・ノードの切り取り、コピー、貼付けが行えます。
ステージまたはルート・ノードを切り取るには、そのアイコンをクリックし、「切取り」または「コピー」を選択します。
このパイプラインのメッセージ・フロー内の異なるパイプライン・ペアから、または異なるパイプラインのメッセージ・フローから切り取ったりコピーしたステージを貼り付けるには、次のいずれかを行います。
「リクエスト・パイプライン」または「レスポンス・パイプライン」アイコンをクリックして、「ステージの貼付け」をクリックします。
パイプラインの「ステージ」アイコンをクリックして、「貼付け」をクリックします。
別のパイプラインから切り取った、またはコピーしたルート・ノードを貼り付けるには、パイプライン・ペアのパイプライン・ペア・ノード・アイコンをクリックして、「ルートの貼付け」をクリックします。
Service Busのリシーケンサは、関連はあるが順序どおりではないメッセージのストリームを連続した順序に並べ替えます。受信メッセージが到着すると、それらはランダムな順序になっています。リシーケンサは、順次または時系列の情報に基づきメッセージを順序付け、メッセージをターゲット・サービスに対して正しい手順で送信します。順序付けは、選択した順序付け戦略に基づき実行されます。
リシーケンサは、パイプライン・コンポーネント内で構成できます。次のサービス・タイプのパイプラインがサポートされます。
WSDL: リシーケンスは、リクエスト・タイプのみの操作に利用できます。
メッセージ・タイプ: リクエスト・メッセージ・タイプは「XML」、レスポンス・メッセージ・タイプは「なし」にします。
注意:
リシーケンサでは、「任意のXML」と「任意のSOAP」のサービス・タイプはサポートされません。WSDLベースのサービスでは、WSDLファイルは一方向であることが必要です。つまり、これに出力要素を含めることはできません。リシーケンス・パイプラインでの生成WSDLファイルの使用については、「コンソールでのWSDLファイルのエクスポート方法」を参照してください。
この項では、Oracle Service Busコンソールを使用してパイプラインでリシーケンサを構成する方法について説明します。
パイプライン・コンポーネントでリシーケンスを有効にするには:
リシーケンスは、パイプライン・レベルまたは操作レベルのいずれかで定義できます。リシーケンス・レベルの値は、次のとおりです。
パイプライン: コンポーネント・レベルで指定した共通構成を使用してすべてのメッセージをリシーケンスします。コンポーネントに複数の操作がある場合、各操作のメッセージは、共有コンポーネント構成を使用して個別に順序付けられます。
コンポーネント・レベルのリシーケンスは、パイプライン・コンポーネントのすべての操作でリクエスト一方向メッセージをサポートする場合のみ許可されます。操作のサブセットのみがリクエスト一方向メッセージをサポートする場合、これらの操作に操作レベルのリシーケンスを個別に指定できます。
操作: WSDLベースのパイプラインの場合、リシーケンスは操作レベルで構成できます。各操作には異なるリシーケンサ構成を設定できます。リクエスト一方向メッセージをサポートする操作のみをリシーケンスできます。WSDL以外のパイプラインでは、操作レベルでリシーケンサを構成できません。
この項では、様々なリシーケンス・モードの構成方法を示します。各種リシーケンス・モードの詳細は、『Oracle SOA SuiteでのSOAアプリケーションの開発』のリシーケンス順序に関する項を参照してください。デフォルトでは、グループIDの文字数制限は1000、IDの文字数制限は100です。
標準リシーケンサを構成するには:
表13-2 標準リシーケンスのオプション
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
グループ式 |
グループ化が行われる受信メッセージのフィールドを指し示すXQuery式。値を入力しない場合、すべてのメッセージが1つのデフォルト・グループに配置されます。 右側の「式ビルダー」アイコンをクリックして、XQuery/XSLT式エディタを呼び出します。 |
N/A |
N |
ID式 |
リシーケンスが行われる受信メッセージのフィールドを指し示すXQuery式。 右側の「式ビルダー」アイコンをクリックして、XQuery/XSLT式エディタを呼び出します。 |
N/A |
Y |
開始 |
ID順序の開始番号。 |
1 |
N |
増分 |
ID順序の増分。 |
1 |
N |
タイムアウト |
予期されているメッセージを待機する期間(秒単位)。タイムアウトが発生すると、再シーケンサはグループをタイムアウトとしてロックします。 デフォルト値の0の場合、デフォルトではグループに対してタイムアウトが発生することはありません。 |
0 |
N |
次の項では、様々なタイプの変数の構造のマッピングを作成する方法について説明します。
このサンプルWSDLドキュメントは、この項のほとんどの例で使用します。このWSDLドキュメントをリソースとして構成に保存してください。詳細は、「例で必要なリソースの作成」を参照してください。
例 - サンプルWSDLドキュメント
<definitions name="samplewsdl" targetNamespace="http://example.org" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:s0="http://www.oracle.com" xmlns:s1="http://example.org" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <types> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.oracle.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="PO" type="s0:POType"/> <xs:complexType name="POType"> <xs:all> <xs:element name="id" type="xs:string"/> <xs:element name="name" type="xs:string"/> </xs:all> </xs:complexType> <xs:element name="Invoice" type="s0:InvoiceType"/> <xs:complexType name="InvoiceType"> <xs:all> <xs:element name="id" type="xs:string"/> <xs:element name="name" type="xs:string"/> </xs:all> </xs:complexType> </xs:schema> </types> <message name="POTypeMsg"> <part name="PO" type="s0:POType"/> </message> <message name="InvoiceTypeMsg"> <part name="InvReturn" type="s0:InvoiceType"/> </message> <portType name="POPortType"> <operation name="GetInvoiceType"> <input message="s1:POTypeMsg"/> <output message="s1:InvoiceTypeMsg"/> </operation> </portType> <binding name="POBinding" type="s1:POPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetInvoiceType"> <soap:operation soapAction="http://example.com/GetInvoiceType"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> </definitions>
この後の例を利用するには、サンプルWSDLドキュメントをリソースとして構成に保存し、サンプルWSDLドキュメントを使用するサンプルのビジネス・サービスとプロキシ・サービスを作成します。
以下の手順に従って、Oracle Service Busコンソールでタスクを実行します。
次の手順を実行します。
SampleWSDL
と入力します。これは必須フィールドです。次の手順を実行します。
PipelinewithSampleWSDL
をクリックして開きます。PipelinewithSampleWSDL
アイコンをクリックし、「パイプライン・ペアの追加」をクリックします。PipelinePairNode1が表示されます。ここには、リクエスト・パイプラインとレスポンス・パイプラインが含まれています。PipelinewithSampleWSDL
パイプラインの基本的なメッセージ・フローが作成されます。 この例では、プロキシ・サービスProxyWithSampleWSDL
を使用して事前定義された変数の構造を選択します。このサービスのタイプは、SampleWSDL
のバインディングPOBindingを使用するWSDL Webサービスです。
パイプラインのメッセージ・フローが、処理するメッセージの構造を認識している必要があります。このために、Service Busでは事前定義された構造が自動的に提供されます。この構造は、インタフェースのすべてのメッセージで、プロキシ・サービスのWSDLファイルでの定義に従って、body
変数をSOAP本体の構造にマップします。この事前定義された構造のマッピングのラベルはbody
です。
注意:
この事前定義された構造は、型付きインタフェースを備えたメッセージング・サービスのためにもサポートされています。
事前定義された変数の構造の選択
XQuery式エディタ・ページの「変数の構造」パネルで、組込み構造のリストから「body」を選択します。
変数の構造body
は、図13-3のように表示されます。
プロキシ・サービスProxyWithSampleWSDL
が、ビジネス・サービスBusinessWithSampleWSDL
へのサービス・コールアウトを呼び出すとします。このビジネス・サービスも、サービスのタイプはSampleWSDLのバインディングPOBindingを使用するWSDL Webサービス
です。操作GetInvoiceType
が呼び出されます。
この例では、パイプラインが、処理するレスポンス・パラメータの構造を認識する必要があります。このためには、レスポンス・パラメータ変数を型InvoiceType
にマップする新しい変数の構造を作成します。
変数を型にマップするには:
「変数の構造」パネルで「新しい構造の追加」をクリックします。追加フィールドが図13-4のように表示されます。
「XMLタイプ」を選択します。
「構造ラベル」フィールドに、作成する変数の構造の表示名として「InvoiceType
」と入力します。この表示名を使用すると、実行時には影響を及ぼさず設計時に構造を認識できるように、構造に意味のある名前を付けることができます。
「構造パス」フィールドに、実行時の変数の構造のパスとして「$InvoiceType
」と入力します。
タイプ「InvoiceType」を選択するには、次のようにします。
「タイプ」フィールドで、該当するラジオ・ボタンを選択し、リストから「WSDLタイプ」を選択します。
「参照」をクリックします。WSDLブラウザが表示されます。
WSDLブラウザで「SampleWSDL」を選択してから、「WSDL定義の選択」ペインの「タイプ」で「InvoiceType」を選択します。
「発行」をクリックします。選択した「WSDLタイプ」の下に「InvoiceType」が表示されます。
「追加」をクリックします。新しい変数の構造「InvoiceType」が変数の構造のリストの「XMLタイプ」の下に追加されます。
変数の構造InvoiceTypeは、図13-5のように表示されます。
一時変数には、SampleWSDL
WSDLファイルで記述された要素Invoiceが含まれているとします。この例では、ProxyWithSampleWSDL
パイプラインが、この変数にアクセスする必要があります。このためには、変数を要素Invoiceにマップする新しい変数の構造を作成します。
変数を要素にマップするには
「変数の構造」パネルで「新しい構造の追加」をクリックします。
「XMLタイプ」を選択します。
「構造ラベル」フィールドに、作成する変数の構造の名前として、表示されたときに意味がわかるように「Invoice
」と入力します。
「構造パス」フィールドに、実行時の変数の構造のパスとして「$Invoice
」と入力します。
要素「Invoice」を選択するには、次のようにします。
「タイプ」フィールドで、該当するラジオ・ボタンを選択していることを確認します。「WSDL要素」を選択します。
「参照」をクリックします。
WSDLブラウザで「SampleWSDL
」を選択してから、「WSDL定義の選択」ペインの「要素」で「Invoice」を選択します。
「発行」をクリックします。選択した「WSDL要素」の下に「Invoice」が表示されます。
「追加」をクリックします。新しい変数の構造「Invoice」が変数の構造のリストの「XMLタイプ」の下に追加されます。
変数の構造Invoiceは、図13-6のように表示されます。
プロキシ・サービスProxyWithSampleWSDL
は、ドキュメント・スタイルがAny SOAP
であるビジネス・サービスにルーティングします。このビジネス・サービスは、SOAP
本体の発注書を返します。この例では、ProxyWithSampleWSDL
パイプラインがレスポンスを処理する必要があります。このためには、body変数をPO
要素にマップする新しい構造を作成し、PO
要素を変数の子要素として指定します。body変数にはSOAP Body要素が格納され、PO
要素はBody要素の子であるため、子要素として指定する必要があります。
変数を子要素にマップするには:
「変数の構造」パネルで「新しい構造の追加」をクリックします。
「XMLタイプ」を選択します。
「構造ラベル」フィールドに、作成する変数の構造の名前として、表示されたときに意味がわかるように「body to
PO
」と入力します。
「構造パス」フィールドに、実行時の変数の構造のパスとして「$body
」と入力します。
PO要素を選択するには、次のようにします。
「タイプ」フィールドで、該当するラジオ・ボタンを選択していることを確認します。「WSDL要素」を選択します。
「参照」をクリックします。
WSDLブラウザで「SampleWSDL
」を選択してから、「WSDL定義の選択」ペインの「要素」で「PO」を選択します。
「発行」をクリックします。
PO要素を
body to PO変数の構造の子として設定するために、
「子として設定」チェックボックスを選択します。
「追加」をクリックします。新しい変数の構造「body to PO」が変数の構造のリストの「XMLタイプ」の下に追加されます。
変数の構造body to POは、図13-7のように表示されます。
プロキシ・サービスProxyWithSampleWSDL
は、ビジネス・サービスBusinessWithSampleWSDL
にメッセージをルーティングします。このビジネス・サービスも、サービスのタイプはSampleWSDLのバインディングPOBinding
を使用するWSDL Webサービス
です。この例では、パイプラインがレスポンスを処理する必要があります。このためには、body変数をBusinessWithSampleWSDL
ビジネス・サービスにマップする新しい構造を定義します。これにより、サービスのWSDLインタフェースで、すべてのメッセージのSOAP本体にbody変数がマップされます。
注意:
このマッピングは、型付きインタフェースを備えたメッセージング・サービスのためにもサポートされています。
変数をビジネス・サービスにマップするには
「変数の構造」パネルで「新しい構造の追加」をクリックします。
「サービス・インタフェース」を選択します。
「構造ラベル」フィールドに、変数の構造の名前として、表示されたときに意味がわかるように「BusinessService
」と入力します。
「構造パス」フィールドには、デフォルトとしてすでに$body
が設定されています。これは、実行時の変数の構造のパスになります。
このビジネス・サービスを選択するには、次の操作を実行します。
「サービス」フィールドで、「参照」をクリックします。サービス・ブラウザが表示されます。
サービス・ブラウザでBusinessWithSampleWSDL
ビジネス・サービスを選択し、「発行」をクリックします。ビジネス・サービスが「サービス」フィールドの下に表示されます。
「操作」フィールドで、「すべて」を選択します。
「追加」をクリックします。新しい変数の構造BusinessService
が変数の構造のリストの「サービス・インタフェース」の下に追加されます。
変数の構造BusinessService
は、図13-8のように表示されます。
ProxyWithSampleWSDL
プロキシ・サービスが単一の添付ファイルを受信するように、SampleWSDL
を変更します。添付ファイルは発注書です。この例では、パイプラインが注文書を処理する必要があります。このためには、$attachmentsの
body要素を、子要素として指定されているPO
要素にマップする新しい構造を定義します。body要素は、次の形式の変数パスとして指定されます。
$attachments/ctx:attachment/ctx:body
事前定義されたattachments構造のbody要素を選択してコピーし、新しいマッピング定義でマップされる変数パスとして貼り付けます。
子要素を別の子要素にマップするには:
「変数の構造」パネルで、組込み構造のリストから「attachments」を選択します。
変数の構造attachmentsは、図13-9のように表示されます。
attachments構造でbody
子要素を選択します。ページの右側にあるプロパティ・インスペクタにbody要素の変数パスが表示されます。
$attachments/ctx:attachment/ctx:body
body
要素の変数パスをコピーします。
「変数の構造」パネルで「新しい構造の追加」をクリックします。
「XMLタイプ」を選択します。
「構造ラベル」フィールドに、この変数の構造の名前として、表示されたときに意味がわかるように「PO
attachment
」と入力します。
「構造パス」フィールドに、body要素の変数パスを貼り付けます。
$attachments/ctx:attachment/ctx:body
これは、実行時の変数の構造のパスになります。
PO
要素を選択するには、次のようにします。
「タイプ」フィールドで、該当するラジオ・ボタンを選択していることを確認し、「WSDL要素」を選択します。
「参照」をクリックします。
WSDLブラウザで「SampleWSDL
」を選択してから、「WSDL定義の選択」ペインの「要素」で「PO」を選択します。
「発行」をクリックします。
body要素の子としてPO要素を設定するために、「子として設定」チェックボックスを選択します。
「追加」をクリックします。新しい変数の構造「PO attachment」が変数の構造のリストの「XMLタイプ」の下に追加されます。
複数の添付ファイルを使用する場合は、この構造化変数のフィールドをXQueryで使用するときに、索引を参照に追加します。たとえば、POフィールドをXQueryフィールドにドラッグしてPOを2番目の添付にする場合は、挿入した値を変更します。
$attachments/ctx:attachment/ctx:body/oracle:PO/oracle:id
次のように変更します。
$attachments/ctx:attachment[2]/ctx:body/oracle:PO/oracle:id