bpws:如果未找到xpath匹配,则getVariableData()会导致错误

时间:2011-05-20 12:42:49

标签: oracle soa bpel

我想使用“bpws:getVariableData()”仅在xpath表达式找到匹配时才分配值。如果没有,什么都不应该发生。不幸的是,如果xpath表达式找不到匹配,则bpel处理会因故障而停止。有没有办法实现这种行为?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我发现oracle BPEL引擎提供了一种忽略数据丢失的功能。可以按如下方式将此标志添加到复制元素中:

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

有关如何在JDeveloper中设置它的更多信息:http://download.oracle.com/docs/cd/E17904_01/integration.1111/e10224/bp_manipdoc.htm#SOASE87087

这解决了引发的错误消息的问题。但是它仍然没有显示想要的行为。我的意思是如果无法评估xpath表达式,则不进行任何赋值。然而,使用bpelx:ignoreMissingFromData标志将空字符串“”分配给目标。

在我的用例中,我想合并两个XML文档。我想仅在元素显示在document2中时为document1中的元素分配一个新值。如果没有,请保持document1中的元素不变。

我使用转换而不是BPEL分配解决了问题。在xsl中我使用以下语句。转换将两个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>

我知道它的丑陋,但解决了这个问题。如果有人有更好的解决方案,请告诉我。

答案 1 :(得分:0)

不,BPEL标准要求引擎在这种情况下抛出selectionFailure。要避免这种情况,请确保已根据模式正确初始化变量和/或验证变量。此外,您可以使用if / switch活动保护assign活动,以在访问之前检查元素是否存在。您还可以考虑编写一个自定义XPath函数,该函数返回一个默认值,以防变量中不存在所需元素。但是,我不确定Oracle BPEL引擎是否支持它。

答案 2 :(得分:0)

您可以围绕assign活动创建一个范围,并在范围上使用异常处理程序捕获selectionFailure,该项目将继续进行处理。

在异常处理程序中,您可以根据需要指定默认值。

为了澄清Vanto的声明,Oracle BPEL引擎确实支持自定义XPath函数,这将允许您这样做。