Hello!
I also encountered this bug. This is very strange and unexpected bug. After some debugging time I found a workaround, and I think this worth reporting in JIRA. Here is piece of my process:

<?xml version="1.0" encoding="UTF-8"?>
<bpws:forEach counterName="signer" name="ForEachSignerUserName"
   parallel="no">
   <bpws:startCounterValue><![CDATA[1]]></bpws:startCounterValue>
<bpws:finalCounterValue><![CDATA[count($processingData/pdata:signer)]]></bpws:finalCounterValue>
   <bpws:scope name="CheckSignerRolesScope">
       <bpws:sequence name="CheckSignerRoles">
           <bpws:assign name="prepareGetSignerDbId" validate="no">
               <bpws:copy>
<!-- *this works fine!* -->
<bpws:from><![CDATA[$processingData/pdata:signer[$signer]/@name]]></bpws:from> <bpws:to><![CDATA[$getUsers.parameters/ps:nameFilter]]></bpws:to>
               </bpws:copy>
           </bpws:assign>
           <bpws:assign name="ExtractSignerInfo" validate="no">
               <bpws:copy>
<bpws:from><![CDATA[$getUserMembershipsResponse.parameters]]></bpws:from>
<!-- *this don't work!* -->
<bpws:to><![CDATA[$processingData/pdata:signer[$signer]/pdata:memberships/*[1]]]></bpws:to>
               </bpws:copy>
           </bpws:assign>
       </bpws:sequence>
   </bpws:scope>
</bpws:forEach>

As I said after some tricks, I made it work without temporary variable as Wenfeng mentioned.
<?xml version="1.0" encoding="UTF-8"?>
<bpws:forEach counterName="signer" name="ForEachSignerUserName"
   parallel="no">
   <bpws:startCounterValue><![CDATA[1]]></bpws:startCounterValue>
<bpws:finalCounterValue><![CDATA[count($processingData/pdata:signer)]]></bpws:finalCounterValue>
   <bpws:scope name="CheckSignerRolesScope">
       <bpws:sequence name="CheckSignerRoles">
           <bpws:assign name="prepareGetSignerDbId" validate="no">
               <bpws:copy>
<!-- *this works fine!* -->
<bpws:from><![CDATA[$processingData/pdata:signer[$signer]/@name]]></bpws:from> <bpws:to><![CDATA[$getUsers.parameters/ps:nameFilter]]></bpws:to>
               </bpws:copy>
           </bpws:assign>
           <bpws:assign name="ExtractSignerInfo" validate="no">
               <bpws:copy>
<bpws:from><![CDATA[$getUserMembershipsResponse.parameters]]></bpws:from>
<!-- *this works also* -->
<bpws:to><![CDATA[$processingData/pdata:signer[number(string($signer))]/pdata:memberships/*[1]]]></bpws:to>
               </bpws:copy>
           </bpws:assign>
       </bpws:sequence>
   </bpws:scope>
</bpws:forEach>

Regards,
Alexey Ousov

Hi Alex,

         Thanks. But I had checked the issues you mentioned. The problem must 
be in elsewhere. Notice that when I simply replace $i with a normal unsignedInt 
variable $_i1, turning the piece above into:
  <forEach counterName="i" parallel="no">
    <startCounterValue>1</startCounterValue>
    <finalCounterValue>2</finalCounterValue>
    <scope>
      <assign>
        <copy>
          <from variable="i" />
          <to variable="_i1"/>
        </copy>
        <copy>
          <from>$i</from>
          <to>$output0.body/xsd0:field1[position()=$_i1]</to>     <!-- note this 
line -->
        </copy>
      </assign>
    </scope>
  </forEach>
it works fine!

The attachements is the process files and you can try it. My environment is: 
ODE 2.0 Build #87 (2009-1-8 2:25:04).

Thanks&Regards.
Wenfeng
======= 2009-01-21 23:36:47 您在来信中写道:=======

"No result for expression ... " does not mean "$i does not work in XPath
predicate expression".

http://ode.apache.org/faq.html

*Q.* *My process fails with a selectionFailure; What can I do?*
*A.* BPEL expects a *single* element to be selected when evaluating <to> and
<from> expressions, and a selectionFailure fault is thrown if zero or more
than one element are selected.

If you get zero element, double-check your namespace prefix and bindings.
Also, remember that you must initialize your variables (most often with
<literal>'s) before assigning into them, unless your are reassigning the
whole variable (e.g. directly into $variable, or $variable.part). To debug
assignments, you can set the "org.apache.ode" logging category to DEBUG in
order to see the content of variables as the process executes.


2009/1/21 ZHAO Wenfeng <[email protected]>

Hi all,
 I found another BUG-like problem in  ODE 2.0 Build #87 (2009-1-8 2:25:04).
That is: the counterName variable can't be used in the position expression
of XPath as normal variables are. For example, the following BPEL piece
         <forEach counterName="i" parallel="no">
                 <startCounterValue>1</startCounterValue>
                 <finalCounterValue>2</finalCounterValue>
                 <scope>
                   <assign>
                     <copy>
                       <from>$i</from>
                       <to>$output0.body/xsd0:field1[position()=$i]</to>
  <!-- note this line -->
                     </copy>
                   </assign>
                 </scope>
               </forEach>
will incur such ERROR in ODE:

ERROR - GeronimoLog.error(104) | Assignment Fault: {
http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure,lineNo=149,faultExplanation={http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure<http://docs.oasis-open.org/wsbpel/2.0/process/executable%7DselectionFailure,lineNo=149,faultExplanation=%7Bhttp://docs.oasis-open.org/wsbpel/2.0/process/executable%7DselectionFailure>:
No results for expression: {OXPath10Expression
$output0.body/xsd0:field1[position()=$i]}
12:39:37,781 ERROR [ASSIGN] Assignment Fault: {
http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure,lineNo=149,faultExplanation={http://docs.oasis-open.org/wsbpel/2.0/process/executable}selectionFailure<http://docs.oasis-open.org/wsbpel/2.0/process/executable%7DselectionFailure,lineNo=149,faultExplanation=%7Bhttp://docs.oasis-open.org/wsbpel/2.0/process/executable%7DselectionFailure>:
No results for expression: {OXPath10Expression
$output0.body/xsd0:field1[position()=$i]}


But when I simply replace $i with a normal unsignedInt variable $_i1,
turning the piece above into:
         <forEach counterName="i" parallel="no">
                 <startCounterValue>1</startCounterValue>
                 <finalCounterValue>2</finalCounterValue>
                 <scope>
                   <assign>
                     <copy>
                       <from variable="i" />
                       <to variable="_i1"/>
                     </copy>
                     <copy>
                       <from>$i</from>
                       <to>$output0.body/xsd0:field1[position()=$_i1]</to>
    <!-- note this line -->
                     </copy>
                   </assign>
                 </scope>
               </forEach>
it works fine! How strange! The expression language and query language used
are both the default one, i.e. XPath 1.0.

Need I commit a bug report to the developers of ODE? :-)

Thanks & Regards.
Wenfeng



ZHAO Wenfeng
[email protected]
2009-01-21


= = = = = = = = = = = = = = = = = = = =
                        

        致
礼!
        ZHAO Wenfeng
        [email protected]
          2009-01-22


Reply via email to