Как просмотреть список целых чисел в процессе BPEL

Я создаю процесс BPEL в Netbeans 6.8 и вызываю веб-службу, которая возвращает список целых чисел.

<xs:complexType name="getHotelsResponse">
<xs:sequence>
<xs:element name="return" type="xs:int" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

Я хочу (если возможно - больше не уверен...) перебирать все эти целые числа и вызывать разные веб-службы для каждого из них.

Я попытался использовать действие ForEach, но не могу понять, как его использовать в моем случае. Для этого требуется начальное значение и конечное значение (если бы я мог каким-то образом получить, сколько целых чисел я вернул), но даже тогда внутри действия ForEach, если, скажем, я поместил действие Assign, как мне получить текущий элемент списка в каждом цикле?


person George Kastrinis    schedule 29.03.2012    source источник


Ответы (1)


Я использовал следующий фрагмент 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)

Вы можете получить доступ к значению i-го элемента, используя следующий XPath

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

Вы можете избавиться от функции round(), но мне пришлось использовать ее, чтобы избавиться от проблемы в Apache ODE.

person warunapww    schedule 30.03.2012
comment
Просто небольшое дополнение к отличному ответу Варуны: если вы хотите вызывать другую конечную точку веб-службы в каждой итерации, вам нужно будет объявить партнерскую ссылку в повторяющейся области действия и назначить ей целевой EPR, используя партнерскую ссылку на спецификацию в рамках действия назначения. . - person vanto; 31.03.2012
comment
Вау... это действительно единственный способ перебрать список в bpel? Какой примитивный язык. - person wvdz; 13.04.2015