0

「bpws:getVariableData()」を使用して、xpath 式が一致する場合にのみ値を割り当てたいと考えていました。そうでなければ、何も起こらないはずです。残念ながら、xpath 式が一致しない場合、bpel 処理はエラーで停止します。この動作を実現する方法はありますか?

ご協力いただきありがとうございます。

4

3 に答える 3

3

Oracle BPEL エンジンには、データの欠落を無視する機能があることがわかりました。このフラグは、次のように copy 要素に追加できます。

<copy bpelx:ignoreMissingFromData="yes|no"/>

JDeveloper で設定する方法の詳細: http://download.oracle.com/docs/cd/E17904_01/integration.1111/e10224/bp_manipdoc.htm#SOASE87087

これにより、スローされる障害メッセージの問題が解決されます。ただし、それでも必要な動作は表示されません。私の意図は、xpath式を評価できない場合、割り当てが行われないということでした。ただし、bpelx:ignoreMissingFromData フラグを使用すると、空の文字列 "" がターゲットに割り当てられます。

私の使用例では、2 つの XML ドキュメントをマージしたいと考えています。要素が document2 に表示される場合にのみ、document1 の要素に新しい値を割り当てたいと考えています。そうでない場合は、document1 の要素を変更せずに残します。

BPEL 割り当ての代わりに変換を使用して問題を解決しました。xsl では、次のステートメントを使用します。変換は、2 つの XML ドキュメントを入力として取得します。Document1 は、パラメーター $parameter_referenceDocument1 を介して参照されます。

<elementName>
  <xsl:if test="xpathInDocument2">
    <xsl:value-of select="xpathInDocument2"/>
  </xsl:if>
  <xsl:if test="not(xpathInDocument2)">
    <xsl:value-of select="$parameter_referenceDocument1.xpathInDocument1"/>
  </xsl:if>
</elementName>

私はそれが醜いことを知っていますが、問題を解決します。誰かがより良い解決策を持っている場合は、私に知らせてください。

于 2011-05-23T08:28:33.300 に答える
0

いいえ、BPEL 標準では、エンジンがこの場合 selectionFailure をスローする必要があります。このような状況を回避するには、変数が適切に初期化されていること、および/またはスキーマに対して変数を検証していることを確認してください。また、if/switch アクティビティを使用して assign アクティビティを保護し、アクセスする前に要素の存在を確認することもできます。要求された要素が変数に存在しない場合に備えて、デフォルト値を返すカスタム XPath 関数を作成することも検討してください。ただし、Oracle BPEL エンジンがそれをサポートしているかどうかはわかりません。

于 2011-05-22T12:49:26.313 に答える
0

assignアクティビティの周りにスコープを作成し、スコープで例外ハンドラーを使用して、selectionFailureをキャッチし、その後処理を続行することができます。

例外ハンドラでは、必要に応じてデフォルト値を割り当てることができます。

Vantoの声明を明確にするために、Oracle BPELエンジンは、それを可能にするカスタムXPath関数をサポートしています。

于 2011-05-22T19:11:35.640 に答える