フィルタおよび割当てのためのヘッダー・アクセス方法
フィルタを定義するため、または割当てソースや割当てターゲットを定義するためにメディエータから式ビルダーを起動すると、WSDLファイルが解析されます。その際に、図20-34
に示すように、現在のルーティング・ルール操作のSOAPヘッダーが自動的に検出され、このSOAPヘッダーが変数として、in
フォルダまたはout
フォルダにheader./ns_elementName/のように表示されます。ここで、ns
はネームスペース接頭辞、elementName
はヘッダー・スキーマのルート要素名です。
次のシナリオで詳細を説明します。
シナリオ1: ネームスペース接頭辞wsseおよびns1がすでに定義されている場合
ネームスペース接頭辞wsse
およびns1
がWSDLファイルまたは.mplan
ファイルにすでに定義されているとします。この場合、XPath式は次のように記述できます。
$in.header.wsse_Security/wsse:Security/ns1:Foo/Priority
シナリオ2: WSDLファイルにネームスペースが事前定義されていないスキーマの場合
WSDLファイルにネームスペースが事前定義されていないスキーマを使用するとします。この場合、式ビルダーでは、接頭辞のかわりに{full_namespace}
を入力できる機能が提供されます。さらに、式ビルダーによって一意の接頭辞が生成され、接頭辞の定義が.mplan
ファイルに追加されます。
たとえば、式ビルダーに次の例に示す式を入力するとします。
$in.header.{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sec ext-1.0.xsd}_Security/ {"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xs d"}: Security/{"http://www.globalcompany.com/ns/OrderBooking"}:Foo/Priority
.mplan
ファイルには、次の例に示すコンテンツが含まれています。
xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- secext-1.0.xsd" xmlns:ns2="http://www.globalcompany.com/ns/OrderBooking" ... expression="$in.header.ns1_Security/ns1:Security/ns2:Foo/Priority"
デフォルトでは、SOAPヘッダーはメディエータを介して渡されません。passThroughHeader
エンドポイント・プロパティを、対応するメディエータ・ルーティング・サービスに追加する必要があります。
<property name="passThroughHeader">true</property>
たとえば、このプロパティを追加するには、composite.xml
ファイルを次の例に示すように変更できます。
<component name="Mediator1"> <implementation.mediator src="Mediator1.mplan"/> <property name="passThroughHeader">true</property> </component>
ヘッダーを渡すには、ソースとターゲットのQName(名前とネームスペース)が同じである必要があります。ソースとターゲットのQNameが異なる場合は、トランスフォーメーションまたはパートレベルの割当てのいずれかを実行する必要があります。
(トランスフォーメーションまたはassignを使用しない)passthrough
メディエータの場合、ソースとターゲットのパートQNameが同じでない場合は、メディエータがメッセージ・ペイロードをターゲット・サービスに渡す際にエラーが発生していない点に注意する必要があります。ただし、この処理はターゲット・サービスでエラーになる場合があります。これは、メッセージ・ペイロードはターゲット・サービスのメッセージ構造に従って再構築されていないためです。
ノート:
-
このユーザー・インタフェースはSOAP 1.1およびSOAP 1.2の両方をサポートします。
-
自動ヘッダー検出のためには、メディエータ・サービス・コンポーネントの作成時に具体的なWSDLファイルを使用する必要があります。
-
割当てはフィルタの後に実行されます。このため、カスタム・ヘッダーで値を割り当てている場合、特定の割当てはフィルタに対して表示されません。