Hello everybody.

I'm trying to iterate over a sequence (which came from a third-party partner response message), filling the output of a process I'm writing.


here is my forEach loop definition :

<bpws:forEach
  counterName="Counter"
  name="IterateOverResults"
  parallel="no">

  <bpws:startCounterValue>
    <![CDATA[1]]>
  </bpws:startCounterValue>
  <bpws:finalCounterValue>
<![CDATA[count($feedReaderResponse.parameters/xsd:return/xsd:content)]]>
  </bpws:finalCounterValue>

    <bpws:scope>
    <bpws:assign name="AddResultToOutput" validate="no">
      <bpws:copy>
<bpws:from><![CDATA[$feedReaderResponse.parameters/xsd:return/xsd:content[$Counter]/xsd:content]]></bpws:from>
<bpws:to><![CDATA[$output.payload/tns:result[$Counter]/tns:htmlContent]]></bpws:to>
      </bpws:copy>
    </bpws:assign>
  </bpws:scope>
</bpws:forEach>

I'm quite not sure of my XPath Expressions as I'm (really) far from an expert, but as far as I understand BPEL specification, the counter variable (basically $Counter) should be implicitly accessible inside the loop.

Or, when I 'bpel-compile' my process, the compiler fails :
[exec] null:90: error: [UndeclaredVariable] Attempt to reference undeclared variable "Counter". [exec] null:95: error: [UndeclaredVariable] Attempt to reference undeclared variable "Counter".
     [exec] java org.apache.ode.tools.bpelc.cline.BpelC: null
     [exec] java.lang.NullPointerException
[exec] at org.apache.ode.bpel.o.OForEach.toString(OForEach.java:41)
     [exec]     at java.lang.String.valueOf(String.java:2615)
     [exec]     at java.lang.StringBuilder.append(StringBuilder.java:116)
[exec] at org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:839) [exec] at org.apache.ode.bpel.compiler.SequenceGenerator.compileChildren(SequenceGenerator.java:47) [exec] at org.apache.ode.bpel.compiler.SequenceGenerator.compile(SequenceGenerator.java:41) [exec] at org.apache.ode.bpel.compiler.BpelCompiler$7.run(BpelCompiler.java:882) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:1045) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compileActivity(BpelCompiler.java:878) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:831) [exec] at org.apache.ode.bpel.compiler.BpelCompiler$5.run(BpelCompiler.java:708) [exec] at org.apache.ode.bpel.compiler.BpelCompiler$8.run(BpelCompiler.java:1139) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:1045) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compileScope(BpelCompiler.java:1089) [exec] at org.apache.ode.bpel.compiler.BpelCompiler.compile(BpelCompiler.java:688) [exec] at org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:260) [exec] at org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:330) [exec] at org.apache.ode.tools.bpelc.BpelCompileCommand.execute(BpelCompileCommand.java:121) [exec] at org.apache.ode.tools.bpelc.cline.BpelC.main(BpelC.java:99)

So, I guess that my XPath is wrong, but It should be possible to access to $Counter inside it however ...

Any ideas ?

Cheers,

--
 Sebastian

Reply via email to