Прочие особенности WSCI
В таблице 1 перечислен ряд других полезных возможностей WSCI. Полный список доступен в документации по WSCI.
Таблица 1. Элементы WSCI
Название элемента | Краткое описание | Пример | |
Выбор (selector) | Элемент выбирает значение свойства из сообщения. Он полезен для преобразования сложного сообщения в набор свойств. | Элемент выбора может быть использован для получения общего числа акций из сообщения обо всех акциях (getAllStocksResponse):
<selector property = "tns:stockCount" |
|
Вызов (call) | Элемент вызывает произвольную операцию (например, вызов стороннего Web-сервиса) в процессе выполнения действия. Это атомарный элемент, и действие не может быть выполнено, если не выполняется вызываемый процесс. | Если приложение должно записать все транзакции для операций аудита и согласования, то для этого может быть вызван произвольный процесс: <process name = "DebitMoney" instantiation = "other"> <action name = "debitMoney"
</action> <call process = "auditTransactions"/> </action> </process> | |
Все действия (all activity) | Этот элемент похож на элемент последовательности. Все операции, определенные в элементе последовательности, выполняются, но операции, определенные в этом элементе, могут быть выполнены непоследовательно. | В этом примере заказ на покупку и снятие денег могут быть выполнены в любом порядке:
<all> <operation name="confirmBuyOrder"> <input message="buySellOrderResponse"/> <output message="buySellOrderResponse"/> </operation> <operation name="debitMoney"> <input message="creditCardDetails"/> <output message="debitMoneyResponse"/> </operation> </all> |
|
Для каждого (foreach) | Элемент выполняет действия в условном цикле. Он похож на элемент цикла в языке Java. | Элемент выполняет операцию размещения заказа на продажу (PlaceSellOrder) для каждого набора акций в общем списке (arrayOfStocks): <foreach select="ns1:arrayOfStockList/leg[position()>1]"> <process name = "PlaceSellOrder" instantiation = "other"> <action name = "PlaceSellOrder"= "tns:trader"= "tns:placeSellOrder"> </action> </process> </foreach> | |
Переход (switch) | Элемент осуществляет условный выбор действия из списка действий. Порядок условий очень важен; первым выполняется условие, значение которого истинно. Элемент похож на условный элемент языка Java (case statement). | Элемент выполняет соответствующее действие, когда значение условия истинно. Если условие не выполняется, элемент осуществляет операцию отказа. <switch> <case> <condition>tns:reverseBuyOrder</condition> <action name = "reverseBuyOrder"
</case> <default> <action name = "confirmBuyOrder" role = "tns:trader" operation = "tns:confirmBuyOrder"/> </default> </switch> | |
До того, как (until) | Элемент выполняет все действия на основе значения оператора Boolean. Он выполняет эти действия как минимум один раз. Элемент похож на элемент языка Java "делай пока" (do while). | <until>
<condition>tns:creditCardProcessed</condition> <process name = "DebitMoney" instantiation = "other"> <action name = "debitMoney"
</action> </process> </until> | |
Пока (while) | Элемент выполняет все действия на основе значения оператора Boolean. При этом они могут быть выполнены как один или более раз, так и ни одного. Элемент похож на элемент языка Java "пока" (while). | <while>
<condition>tns:creditCardProcessed</condition> <process name = "DebitMoney" instantiation = "other"> <action name = "debitMoney"
</action> </process> </while> | |
Задержка (delay) | Элемент выполняет действие с определенным периодом задержки. Если в процессе выполнения этого действия возникает исключительная ситуация, то оно может быть завершено раньше указанного времени. | <exception>
<delay property = "tns:delayTime"
</delay> </exception> | |
Вызов (call) | Элемент инициирует процесс и ждет окончания его выполнения. Он полезен для вызова внутренних процессов. | <call process = "tns:audit" /> | |
Генерирование (spawn) | Элемент инициирует процесс, но не ждет его окончания. | <Spawn process = "tns:logBuyTransaction" /> | |
Объединение (join) | Элемент ждет окончания выполнения генерированного процесса. Если нет никаких экземпляров или все они уже выполнены, действие завершается. | <join process = "tns:logBuyTransaction" /> |