SOA@Oracle
Oracle ESBでのSOAP Headerの設定方法
最終更新:
oraclesoa
-
view
Oracle ESBでのSOAP Headerの設定方法
SOAPサービスからWebサービスを呼出す際に、SOAPヘッダーを付加してサービス
を呼出す方法を紹介します。
を呼出す方法を紹介します。
ルーティング・サービスが以下のようなSOAPメッセージを受信した際に、受信し
たSOAPヘッダをそのまま引き継いで、サービスを呼出す方法を例にとり説明をす
すめます。
たSOAPヘッダをそのまま引き継いで、サービスを呼出す方法を例にとり説明をす
すめます。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns1:User xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username>testuser</ns1:Username>
</ns1:User>
</soap:Header>
<soap:Body xmlns:ns2="http://xmlns.oracle.com/test/">
<ns2:execute>
<ns2:input>1234</ns2:input>
</ns2:execute>
</soap:Body>
</soap:Envelope>
<soap:Header>
<ns1:User xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username>testuser</ns1:Username>
</ns1:User>
</soap:Header>
<soap:Body xmlns:ns2="http://xmlns.oracle.com/test/">
<ns2:execute>
<ns2:input>1234</ns2:input>
</ns2:execute>
</soap:Body>
</soap:Envelope>
設定手順は、以下の通りです。
1. ルーティング・サービスを作成し、ルーティング・ルールを追加。ルーティ
ング先を設定する。
ング先を設定する。
2. トランスフォーメーションの設定で、新規マッパー・ファイルを作成
3. XSLTマッパーの設定画面が開くので、画面右上部にある「<ターゲット>」を
右クリックし、「変数の追加」を選択。
右クリックし、「変数の追加」を選択。
4. ローカル名に任意の名称(ここではINPUT)を入力し、[XPath式]に以下の式を
入力し、OKボタンをクリック
入力し、OKボタンをクリック
ehdr:getRequestHeader('/soap:Header/ns1:User/ns1:Username','ns1=http://xmlns.oracle.com/headertest/;soap=http://schemas.xmlsoap.org/soap/envelope/;')
5. 再度、「<ターゲット>」を右クリックし、「変数の追加」を選択。
ローカル名に任意の名称を入力し、[XPath式]に以下の式を入力し、OKボタンを
クリック
(二番目の引数は$のあとに手順4で設定したローカル名を指定)
ローカル名に任意の名称を入力し、[XPath式]に以下の式を入力し、OKボタンを
クリック
(二番目の引数は$のあとに手順4で設定したローカル名を指定)
ehdr:setOutboundHeader('/ns1:User/ns1:Userbname',$INPUT,'ns1=http://xmlns.oracle.com/headertest/;')
以上で設定が完了です。
それぞれの関数の引数は、以下の意味を持ちます。
getRequestHeader
第一引数 → 取得したいSOAPヘッダー要素を示すXPath式
soap:Headerより開始
第二引数 → セミコロン区切りで第一引数で使用した名前空間の宣言
getRequestHeader
第一引数 → 取得したいSOAPヘッダー要素を示すXPath式
soap:Headerより開始
第二引数 → セミコロン区切りで第一引数で使用した名前空間の宣言
setOutboundHeader
第一引数 → 設定したいSOAPヘッダー要素を示すXPath式
getRequestHeaderと異なり、soap:Headerの子要素から指定
第二引数 → 第一引数で指定した要素に対する設定値
第三引数 → セミコロン区切りで第一引数で使用した名前空間の宣言
第一引数 → 設定したいSOAPヘッダー要素を示すXPath式
getRequestHeaderと異なり、soap:Headerの子要素から指定
第二引数 → 第一引数で指定した要素に対する設定値
第三引数 → セミコロン区切りで第一引数で使用した名前空間の宣言
setOutboundHeaderを使用してSOAPヘッダーを設定する際には、soap:Headerの子
要素を複数もてません。
つまり、以下の例1のような設定は可能ですが、例2のような設定はできません。
soap:Headerに複数の子要素を持つと実行時にエラーになります。
要素を複数もてません。
つまり、以下の例1のような設定は可能ですが、例2のような設定はできません。
soap:Headerに複数の子要素を持つと実行時にエラーになります。
例1)
<soap:Header>
<ns1:User xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username>testuser</ns1:Username>
<ns1:Password>testuser</ns1:Password>
</ns1:User>
</soap:Header>
<soap:Header>
<ns1:User xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username>testuser</ns1:Username>
<ns1:Password>testuser</ns1:Password>
</ns1:User>
</soap:Header>
例2)
<soap:Header xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username >testuser</ns1:Username>
<ns1:Password>testuser</ns1:Password>
</soap:Header>
<soap:Header xmlns:ns1="http://xmlns.oracle.com/headertest/">
<ns1:Username >testuser</ns1:Username>
<ns1:Password>testuser</ns1:Password>
</soap:Header>


