如何遍历BPEL流程中的int列表

Geo*_*nis 1 loops list bpel netbeans6.8

我正在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>
Run Code Online (Sandbox Code Playgroud)

我希望(如果可能的话 - 不再确定......)迭代所有这些int并为它们中的每一个调用不同的Web服务.

我尝试使用ForEach活动,但我无法弄清楚我的用例.它需要一个启动值和最终值(如果我能以某种方式得到我有多少个整数回来),但即使如此,ForEach活动里面,如果说我把分配活动我如何才能在每个循环列表的当前元素?

war*_*pww 7

我使用以下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>
Run Code Online (Sandbox Code Playgroud)

您可以从以下XPath获取元素的数量

count($input.payload/tns:return)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下XPath访问第i个元素的值

$input.payload/tns:return[round($Counter)]
Run Code Online (Sandbox Code Playgroud)

你可能会摆脱round()函数,但我必须用它来摆脱Apache ODE中的一个问题.