Hi, I came across with the same problem and found out that if there is no "part" in a variable, the xpath expression is ignored by ode while initializing the assign activity. Tommorrow I can send you a detailed description . By the way I did the same work out to make the flows work sucessfully, using expressions insted of query.
I did not have the time to open a bug, I hope you will.. On Mon, Apr 13, 2009 at 7:02 PM, Ford, Mark <[email protected]> wrote: > You're saying that there is a difference in behavior between an expression > to-spec and a query to-spec. The example you provided looks the same > semantically and only differs in syntax. My suggestion is to produce a > simpler test case that shows this behavior and submit it as a bug if it > still fails. > > The use of the forEach below (and the expressionLanguage attributes and > CDATA nodes) is overly complicated. You may also be running into a subtle > issue (possibly still an open bug) with the use of the forEach counter > variable within a predicate. I believe you need to wrap the variable usage > within a number() function. > > I'm also assuming that the forEach below was only a portion of your actual > process and that you're doing something more than iterating over assigns > with a forEach. For example, you probably have an invoke somewhere in the > real code. While the snippet below is valid BPEL (at least at a quick > glance) it's not a good use case for the forEach. The code below would be > better accomplished in an Xquery FLWOR expression. Again - apologies if it's > just to illustrate the bug - just mentioning it in case it was the real > thing. > > > > On 4/13/09 11:33 AM, "Jonathan Coogan" <[email protected]> > wrote: > > I'm still stuck on this. Does anyone have any suggestions? Should I write > a bug report? > > Thank you. > -Jon > > > On 4/7/09 10:30 AM, "Jon Coogan" <[email protected]> wrote: > > > Here is a similar scenario that doesn't work in either 1.2 or 1.X. In > > this example I iterate over record set and copy each record to an > > intermediate temp variable. Then I assign from the temp variable to the > > output variable. The process should return the value from the last > > record. > > > > The problem occurs when copying from the dataset to the temporary > > variable. If I use a query on the "to" side it won't work. Expressions > > do work. (Look for inline comments below.) > > > > > > <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:sequence name="Sequence"> > > <bpws:assign name="AssignToTempVariable" validate="no"> > > <bpws:copy> > > <bpws:from> > > <!-- Initialize temp variable. --> > > <bpws:literal> > > <tns:Record xmlns:tns="recordsnamespace" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="recordsnamespace records.xsd "> > > <tns:SomeValue/> > > <tns:AnotherValue/> > > </tns:Record> > > </bpws:literal> > > </bpws:from> > > <bpws:to variable="TempRecord"/> > > </bpws:copy> > > > > > > <!-- ********** This does not work. ********** --> > > > > <bpws:copy> > > <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> > > <bpws:to variable="TempRecord"> > > <bpws:query > > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[ > > ns0:SomeValue]]></bpws:query> > > </bpws:to> > > </bpws:copy> > > <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 variable="TempRecord"> > > <bpws:query > > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[ > > ns0:AnotherValue]]></bpws:query> > > </bpws:to> > > </bpws:copy> > > > > <!-- ********** This does work. ********** --> > > > > <bpws:copy> > > <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> > > <bpws:to > > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > > DATA[$TempRecord/ns0:SomeValue]]></bpws:to> > > </bpws:copy> > > <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 > > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > > DATA[$TempRecord/ns0:AnotherValue]]></bpws:to> > > </bpws:copy> > > > > > > </bpws:assign> > > <bpws:assign name="AssignToOutput" validate="no"> > > <bpws:copy> > > <bpws:from variable="TempRecord"> > > <bpws:query > > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[ > > ns0:AnotherValue]]></bpws:query> > > </bpws:from> > > <bpws:to part="payload" variable="output"/> > > </bpws:copy> > > </bpws:assign> > > </bpws:sequence> > > </bpws:scope> > > </bpws:forEach> > > > > -----Original Message----- > > From: Jonathan Coogan [mailto:[email protected]] > > Sent: Tuesday, April 07, 2009 9:56 AM > > To: [email protected]; [email protected] > > Subject: RE: Problem with query expressions > > > > 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 > >> > > > > > > >
