У меня есть асинхронный процесс BPEL, и я хочу вызвать его из моего веб-приложения Java EE.Как я могу это сделать?Я использую Oracle SOA-Suite 11g PS3.
Асинхронный отправитель SOAP / HTTP в основном такой же, как и синхронный клиент SOAP / HTTP, только он отбрасывает ответ.Проверяйте только HTTP-статус ответа, чтобы убедиться, что получатель понял ваше сообщение.
Асинхронный получатель - это сервер SOAP / HTTP, который прослушивает адрес, отправленный в поле «ReplyTo / Adress» запроса.После получения сообщения он отправляет пустой ответ с кодом состояния «200».
Отправленные и полученные сообщения коррелируются с использованием полей заголовка SOAP WS-Addressing «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 значение "initiate" (включая кавычки).
Можно ожидать аналогичное сообщение от шага клиента обратного вызова процесса 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>