Как просмотреть список целых в процессе 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, если, скажем, я поместил действие "Назначить", как получить текущий элемент списка в каждом цикле?
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.