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.

-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
>>> 
> 
> 
> 
> 
> 
> 

Reply via email to