6.2. BPELInvoke ESB アクションの利用

BPELInvoke ESB アクションを jboss-esb.xml ファイル内で使用して、BPEL 内で実行中の BPEL プロセスで呼び出しをリクエストします。唯一の制限は、同じ Java 仮想マシン上に BPEL をインストールし、リクエストしたプロセスがローカルの BPEL エンジンにデプロイされている必要があるという点のみです。
以下の例では、bpel_helloworld quick-start と合わせて使用するアクションについて説明しています。

例6.1 サンプル例

<action name="action2" class="org.jboss.soa.esb.actions.bpel.BPELInvoke">
    <property name="service" value="{http://www.jboss.org/bpel/examples/wsdl}HelloService"/>
    <property name="port" value="HelloPort" />
    <property name="operation" value="hello" />
    <property name="requestPartName" value="TestPart" />
    <property name="responsePartName" value="TestPart" />
</action>
ESB アクションクラスは、org.jboss.soa.esb.actions.bpel.BPELInvoke です。
このアクションのプロパティは以下のとおりです。

表6.1 プロパティ

プロパティ 説明
service
必須プロパティ。これは、デプロイされた BPEL プロセスと関連付けられた WSDL に登録されるサービス名を定義します。
port
任意のプロパティ。WSDL に登録するデプロイ済みの BPEL プロセスに関連付けられたポート名を定義します。このパラメーターは、ポート固有のエンドポイント設定情報が、BPEL プロセスデプロイメントの一部として登録されている場合のみ必要です。
operation
必須プロパティ。呼び出される WSDL 操作を表します。
requestPartName
この任意プロパティを使い、ESB 受信メッセージのマッピング先となるWSDL メッセージの部分を定義します。ESB メッセージがすでにマルチパートメッセージを表現していない場合のみ、今プロパティを使用します。
responsePartName
この任意のプロパティを使用して、 WSDL 応答メッセージのコンテンツを抽出し、パイプラインの次のアクションに渡される ESB メッセージに設定します (このプロパティが定義されていない場合、完全なマルチパートメッセージの値が ESB メッセージに設定されます)。
abortOnFault
この任意のオプションを使用して、BPEL プロセスの呼び出し時に発生したフォルトをメッセージとして処理するか (このプロパティの値が false の場合)、ESB サービスを中断する例外として処理します。デフォルト値は true で、サービスを中断させます。
この ESB アクションは、受信メッセージに対応しています。これらのメッセージの内容は以下のいずれかとして定義する必要があります。

表6.2 プロパティ

アイテム 説明
DOM
メッセージのコンテンツが DOM ドキュメントまたは要素の場合、完全なマルチパートメッセージとして利用するか、requestPartName プロパティを使って定義したメッセージ部のコンテンツとして利用できます。
Java String
メッセージのコンテンツは XML ドキュメントの文字列表現である場合、requestPartName は任意です。指定されていない場合、ドキュメントはマルチパートメッセージを表現する必要があります。
メッセージコンテンツが XML ドキュメントを表現していない文字列の場合、requestPartName を指定する必要があります。
メッセージコンテンツがマルチパートメッセージの各パートを表現している場合、トップレベルの要素として定義する必要があります (どのような名前でもつけることができる)。その子要素は、各メッセージパートを表現するため、直後に置く必要があります。代わりに、子要素は、それぞれの子要素を持つようになります。この要素は、名前部分の値を表現します。
マルチパートメッセージの構造の記述例を以下に示しています。

例6.2 サンプル例

<message>
	<TestPart>
		Hello World
	</TestPart>
</message>
トップの要素 (メッセージタグ) は重要ではありません。次の要素は、パート名を表現します。ここでは、TestPart というパートのみとなっています。この部分はテキストノードで、ここでは Hello World となっています (しかし、より複雑な XML 値の root ノードを表現する要素の場合もあります)。

6.2.1. フォルト処理

WSDL オペレーションが実行されている場合、応答メッセージは通常、BPELInvoke アクションから返されます。このメッセージは、アクションパイプラインに置かれ、次のアクションによる処理が可能になります (これ以上アクションが定義されていない場合、サービスクライアントに返されます)。
フォルトは少し違う方法で処理します。システムの設定方法に従い、ESB メッセージとしてフォルトを受信するか、アクションパイプラインを中断する例外を発生させることができます。どの動作を使用すべきか決定する設定プロパティは abortOnFault と呼ばれています。このプロパティのデフォルト値は、 true です。Loan Fault quick-start を使ったサンプルを以下に示しています。

例6.3 サンプル例

<action name="action2" class="org.jboss.soa.esb.actions.bpel.BPELInvoke">
 	<property name="service" value="{http://example.com/loan-approval/wsdl/}loanService"/>
	<property name="operation" value="request" />
	<property name="abortOnFault" value="true" />
</action>
WSDL フォルトは、フォルトの詳細とタイプといった 2 種の情報をレポートします。それぞれ、メッセージボディの別部分で返されます。
  1. フォルトコード: javax.xml.namespace.QName
    ESB メッセージボディの部分: org.jboss.soa.esb.message.fault.detail.code
    このボディ部分は、BPEL プロセスにより返される固有の WSDL フォルトを指定します。

    警告

    QName used by the JBoss Enterprise SOA Platform サーバーで使用する QName の固有バージョンは lib/endorsed/stax-api.jar ファイルに置かれています (このファイルがない場合、クラスバージョンの例外が発生します)。
  2. フォルトコード (QName のテキスト表現)
    ESB メッセージボディの部分: org.jboss.soa.bpel.message.fault.detail.code
    このボディの部分はフォルトコードの QName のテキスト表現を返します。このテキスト表現は、{namespace}localpart という形式をとります (QName に変換し直す場合は、javax.xml.namespace.QName.valueOf(String) メソッドを使います)。
  3. フォルトの詳細
    ESB メッセージボディの部分: org.jboss.soa.esb.message.fault.detail.detail
    このボディの部分には、フォルトと関連付いているメッセージコンテンツのテキスト表現が含まれています。