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

时间:2012-03-29 23:53:54

标签: list loops netbeans6.8 bpel

我正在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>

我希望(如果可能的话 - 不再确定......)遍历所有这些内容并为每个内容调用不同的Web服务。

我尝试使用ForEach活动,但我无法弄清楚我的用例。 它需要一个起始值和一个结束值(如果我能以某种方式得到我得到了多少个整数)但是即使这样,在ForEach活动中,如果说我放置了一个Assign活动,我如何获得每个循环中列表的当前元素?

1 个答案:

答案 0 :(得分: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>

您可以从以下XPath中获取元素数

count($input.payload/tns:return)

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

$input.payload/tns:return[round($Counter)]

你可以摆脱round()函数,但我不得不用来摆脱Apache ODE中的一个问题。