#web-services #oracle11g #soa #bpel
#веб-службы #oracle11g #soa #bpel
Вопрос:
У меня есть асинхронный процесс BPEL, и я хочу вызвать его из моего веб-приложения Java EE. Как я могу это сделать? Я использую Oracle SOA-Suite 11g для PS3.
Ответ №1:
Асинхронный отправитель SOAP / HTTP в основном такой же, как синхронный клиент SOAP / HTTP, просто он отбрасывает ответ. Проверяйте только HTTP-статус ответа, чтобы убедиться, что получатель понял ваше сообщение.
Асинхронный приемник — это, по сути, сервер SOAP / HTTP, прослушивающий адрес, отправленный в поле «ReplyTo / Adress» запроса. После получения сообщения он отправляет пустой ответ с кодом состояния «200».
Отправленные и полученные сообщения сопоставляются с использованием полей заголовка SOAP с WS-адресацией «MessageId» (запрос) и «RelatesTo» (ответ).
Если вас устраивает «низкотехнологичное» решение, вы можете отправлять / получать запросы SOAP в асинхронном режиме просто как XML через HTTP. Следующий HTTP-запрос будет понят процессом BPEL «AsynchDummy» как асинхронный запрос. AsynchDummy — это асинхронный процесс BPEL по умолчанию, созданный с помощью JDeveloper:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" env:encodingStyle="">
<env:Header>
<ReplyTo xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
<Address>http://localhost:3333/my/j2ee/servlet</Address>
<PortType xmlns:ptns="http://xmlns.oracle.com/AsynchDummy">ptns:AsynchDummyCallback</PortType>
<ServiceName xmlns:snns="http://xmlns.oracle.com/AsynchDummy">snns:AsynchDummyCallbackService</ServiceName>
</ReplyTo>
<MessageID xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing" ans1:rootId="610005" xmlns:ans1="http://schemas.oracle.com/bpel" ans1:parentId="160005" ans1:priority="0">ABC123</MessageID>
</env:Header>
<env:Body>
<AsynchDummyProcessRequest xmlns="http://xmlns.oracle.com/AsynchDummy">
<input>this is the request</input>
</AsynchDummyProcessRequest>
</env:Body>
</env:Envelope>
Не забудьте установить для HTTP-заголовка SOAPAction значение «инициировать» (включая кавычки).
Аналогичное сообщение можно ожидать от шага клиента обратного вызова процесса BPEL:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:add="http://schemas.xmlsoap.org/ws/2003/03/addressing" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<add:RelatesTo>ABC123</add:RelatesTo>
<add:MessageID ans1:rootId="" ans1:parentId="" ans1:priority="0" xmlns:ans1="http://schemas.oracle.com/bpel">ABC456</add:MessageID>
</soap-env:Header>
<soap-env:Body>
<AsynchDummyProcessResponse xmlns="http://xmlns.oracle.com/AsynchDummy">
<result>this is the result</result>
</AsynchDummyProcessResponse>
</soap-env:Body>
</soap-env:Envelope>