Hello. I have confirmed that using a relative query fixes the problem
in my Ode 1.X build, but this still does not work for me in Ode 1.2.
After switching to a relative query I am no longer getting a selection
failure, but the process is returning erroneous output. It returns the
entire dataset instead of just the element I was trying to query.
<bpws:forEach counterName="Counter" name="ForEach" parallel="no">
<bpws:startCounterValue
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C
DATA[1]]></bpws:startCounterValue>
<bpws:finalCounterValue
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C
DATA[count($Data/ns0:Record)]]></bpws:finalCounterValue>
<bpws:scope>
<bpws:assign validate="no">
<!-- This does not work in Ode 1.2 but it does work in Ode 1.X -->
<bpws:copy>
<bpws:from variable="Data">
<bpws:query
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[
ns0:Record[$Counter]/ns0:AnotherValue]]></bpws:query>
</bpws:from>
<bpws:to part="payload" variable="output"/>
</bpws:copy>
<!-- This works.. -->
<bpws:copy>
<bpws:from
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C
DATA[$Data/ns0:Record[$Counter]/ns0:AnotherValue]]></bpws:from>
<bpws:to part="payload" variable="output"/>
</bpws:copy>
</bpws:assign>
</bpws:scope>
</bpws:forEach>
Is there something else I could be missing?
Thanks.
-Jon
-----Original Message-----
From: Matthieu Riou [mailto:[email protected]]
Sent: Friday, April 03, 2009 8:07 AM
To: [email protected]
Subject: Re: Problem with query expressions
On Thu, Apr 2, 2009 at 2:46 PM, Jonathan Coogan <
[email protected]> wrote:
> Hi. I'm having a problem when copying data from one variable to
> another within a forEach loop. When I use a query to copy data out of
> a variable I get a selection failure fault at runtime. This works
> correctly when I copy from an expression instead of a query.
>
> I have attached an example that demonstrates the problem. The
> expected output of the attached BPEL process is the string "five". It
> works correctly when using an expression, but fails when using a
> query. Here is the relevant snippet:
>
BPEL assignment doesn't provide any context node to the XPath engine,
everything is always relative to a variable. Which means that your query
should be relative and not absolute.
Matthieu
>
> <bpws:forEach counterName="Counter" name="ForEach" parallel="no">
> <bpws:startCounterValue
>
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C
DATA[1]]></bpws:startCounterValue>
> <bpws:finalCounterValue
>
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C
DATA[count($Data/ns0:Record)]]></bpws:finalCounterValue>
> <bpws:scope>
> <bpws:assign validate="no">
> <bpws:copy>
> <!--
> ----------------------------------------------------------------------
> ------
> -->
> <!-- This generates a selection failure at runtime. -->
> <bpws:from variable="Data">
> <bpws:query
>
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[
/ns0:Record[$Counter]/ns0:SomeValue]]></bpws:query>
> </bpws:from>
>
> <!-- This works. -->
> <!-- <bpws:from
> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><!
> [CDATA[$Data/ns0:Record[$Counter]/ns0:SomeValue]]></bpws:from>
> -->
> <!--
> ----------------------------------------------------------------------
> ------
> -->
>
> <bpws:to part="payload" variable="output"/>
> </bpws:copy>
> </bpws:assign>
> </bpws:scope>
> </bpws:forEach>
>
> I have tested this with Ode 1.2 and a recent build of Ode 1.X and both
> behave the same. Can someone tell me if I am doing something wrong?
> Or should I write a bug report for this?
>
> Thanks for your time.
> -Jon
>