1

bpelx:exec を介して BPEL から Java クラスを呼び出しています。クラスが特定の障害 (パートナー リンクの 1 つから BPEL に認識されている) をスローできれば、物事は大幅に簡素化されます。これを AdapterFault と呼びましょう。AdapterFault は、wsimport とサブクラスの Exception によって生成されます。

Embedded Java ブロック内のコードは次のとおりです。

Object wfr = getVariableData("inputVariable","request");
Object req = getVariableData("V_CreateServiceRequest","createTNRequestPart");

somepackage.EndpointIterator it =
new somepackage.EndpointIterator();

it.setWFRequest(wfr);
it.setPlatformName("MMSC");
it.setOperationName("createTN");
it.setRequest(req);

Object reply = it.invoke();

setVariableData("V_CreateServiceResponse","createTNResponsePart",reply);

Java メソッドが AdapterFault をスローするものとして宣言すると、BPEL は例外が捕捉されていないと不平を言ってデプロイを拒否します。Java コールアウト ステップは BPELFault のみを宣言しているようです。

catch(AdapterFault) の代わりに CatchAll ブロッ​​クに送られる RuntimeException しかスローできません。

Java コールアウトからチェック済みの Fault をスローする簡単な方法はありますか?

4

2 に答える 2

1

WSIF バインディングの場合は、「例外処理」の見出しの下に説明がありますが、その記事はかなり古いものです

bpelx:exec の場合 (私が思うに)、ブロック内で例外をキャッチし、変数をそのように更新する必要があります

try {
... やること

} catch(例外例) {

addAuditTrailEntry("例外メッセージ: " + ex.getMessage());

setVariableData("V_CreateServiceException",...

}

}

于 2011-06-14T13:51:49.160 に答える
1

BPELFault のみをスローできます。

http://forums.oracle.com/forums/thread.jspa?threadID=547192

ただし、必要に応じて、Catch ブロックで抽出して再スローできる「実際の」例外であるネストされた部分を含めることができます。

今日実装しました。

落とし穴:

  • Catch ブロックは、remoteFault などのシステム例外の 1 つをキャッチする必要があります。
  • RuntimeFault.wsdl をパートナー WSDL の 1 つにインポート (wsdl:import) する必要があります。そうしないと、BPELFault が見つからないという厄介なエラーがスローされます。

BPELFault は、すべてプレーン テキストのコード、メッセージ、および詳細要素しか持てないという点でかなり制限されています。bpelFault.setPart("myname",obj) を介して複雑なネストされた障害タイプを BPEL に渡すことは可能ですが、BPEL は「動的」部分を認識しないため、BPELFault からそれを抽出する方法がわかりません。ただし、私の目的にはコードとメッセージで十分です。

于 2011-06-14T15:45:56.527 に答える