我正在Netbeans 6.8中构建一个BPEL流程,并调用一个返回int列表的Web服务。
<xs:complexType name="getHotelsResponse">
<xs:sequence>
<xs:element name="return" type="xs:int" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
我希望(如果可能的话-不再确定…)遍历所有这些int,并为它们中的每一个调用不同的Web服务。
我尝试使用ForEach活动,但我不知道我的案例的用法。它需要一个开始值和结束值(如果我能以某种方式得到我得到的int数),但即使在ForEach活动中,如果说我放了一个Assign活动,我如何在每个循环中获得列表的当前元素?
我使用以下BPEL片段将列表的内容连接到逗号分隔的字符串中。您可以将相同的代码与调用一起使用来调用外部服务。
<bpel:forEach parallel="no" counterName="Counter" name="ForEach">
<bpel:startCounterValue>
<![CDATA[1]]>
</bpel:startCounterValue>
<bpel:finalCounterValue><![CDATA[count($input.payload/tns:return)]]></bpel:finalCounterValue>
<bpel:scope>
<bpel:assign validate="no" name="AppendItem">
<bpel:copy>
<bpel:from>
<![CDATA[concat($Response, $input.payload/tns:return[round($Counter)], ", ")]]>
</bpel:from>
<bpel:to variable="Response"></bpel:to>
</bpel:copy>
</bpel:assign>
</bpel:scope>
</bpel:forEach>
您可以从以下XPath 中获得元素的计数
count($input.payload/tns:return)
您可以使用以下XPath 访问第i个元素的值
$input.payload/tns:return[round($Counter)]
您可能会去掉round()函数,但我不得不使用它来解决ApacheODE中的一个问题。