Hello Alexey,
"[number(string($signer))]" :-)
And in your case, it seems this problem doesn't occur in from-spec, and
only occurs in to-spec, isn't it?
So, there must be a bug here, I think.
Regards.
Wenfeng
======= 2009-01-22 13:56:07 您在来信中写道:=======
>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
>>
>>
>
>
= = = = = = = = = = = = = = = = = = = =
致
礼!
ZHAO Wenfeng
[email protected]
2009-01-22