I personally have only observed this behavior in the forEach. I'll play around with this a little more and try to come up with a test case.
Thanks. -Jon On 4/13/09 11:41 AM, "Matthieu Riou" <[email protected]> wrote: > On Mon, Apr 13, 2009 at 9:55 AM, Jonathan Coogan < > [email protected]> wrote: > >> Thank you. I'm not actually trying to use the process for anything >> meaningful. I was trying to illustrate the behavior I noticed when using >> query expressions within a forEach loop. It's entirely possible that there >> is something wrong with my process, but I do know that one snippet works >> and >> the other doesn't. I'll see if I can come up with a simpler example. >> > > Looking at the compiler I haven't found anything obvious that could explain > your behavior so yes, a test case would help identifying the problem. Also > does it only happen within a forEach or do you get the same problem when you > use the query element outside of a forEach? > > Thanks, > Matthieu > > >> >> -Jon >> >> >> On 4/13/09 9:02 AM, "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 >>>>> >>> >>> >>> >>> >>> >>> >> >>
