2015-11-12 3 views
0

Я создаю промежуточное программное обеспечение, основанное на Mule ESB, реализующее Asyncronous Web Services. У меня есть клиент, который отправляет запросы Soap на мою конечную точку ESB, реализованную с помощью службы CXF Jax-ws с включенной функцией WS-Addressing через SoapUI. Я отправляю строку ответа «Привет» и начинаю обработку входных параметров, чтобы сделать асинхронный ответ клиенту, у которого есть конечная точка веб-службы callBack.Ws-Адресация в Mule ESB

Запрос имеет правильный заголовок Soap, с тегом ReplyTo, который имеет адрес конечной точки callBack в клиенте.

Вот мой сервер JAX-WS-код веб-сервис:

@WebService(serviceName = "OrderReceive") 
@Addressing 
public class OrderReceive {  
    public String perform(String id, long creditCardNumber, List<Product> products) { 
     //Save values to process the async reply 
     setSessionVariable(id,creditCardNumber,products); 
     return "Hello, i will send the response soon"; 
    } 
} 

Дело в том, мой веб-сервис autorespoding по адресу ReplyTo и я не имеют никакого контроля над ответом.

Можно ли перехватить этот ответ и установить его правильное тело?

Почему мой веб-сервис автоматически отвечает?

С уважением

ответ

2

вот почему я обожаю stackoverflow. Я никогда не слышал об этом !!!

Ваш «автоматический ответ» может быть вызван поведением в муле:

Если мул обнаруживает reply_to свойства в сообщении, запускает автоматический ответ на эту конечную точку. Это для функции запроса-ответа в jms, но, возможно, это влияет на http-коннектор.

Источник этого:

Automatic response when sending message

------------------- * ------------- -----------

После моего исследовании я обнаружил, что правильное поведение WS-адресации:

client -- SOAP request (on port A) --> server 
client <-- HTTP 202 ("Hello, i will send the response soon" HTTP body) --- server 
client <-- SOAP response ("Response is ready!!" on port B) --- server 

Источник: jax-ws 2.2.8 and ws-addressing

Чтобы сделать это возможным, нам необходимо:

1.- Сервер Endpoint: мул/CXF

2.- Клиент службы: SoapUI

3.- Ответный Endpoint:, чтобы получать ответ асинхронной (я думаю, что это в мул)

Понял это, Offical документация об этом печально:

MULE 3.7 Enabling WS-Addressing

Мне кажется, что вам нужна CallBack Enpoint для создания и выполнения асинхронного ответа. Я ничего не нашел в муле :(.

Вот некоторые ссылки реализации Java, не мул:

Asynchronous web services with WS-Addressing

Invoke a single port async service using JAX-WS and WS-Addressing

------------------- * - ----------------------

альтернативным решением может быть:

1.- Web Service в мул/CXF без адресации.

2.- Внутри метод работы:

public Response operation (Request requestPayload) { 
    MuleClient client = new MuleClient(muleContext); 
    client.dispatch("jms://my.queue", requestPayload , null);// this is async 
    return new Response("Hello, i will send the response soon."); 
} 

Ссылка: Using the Mule Client

3.- Создать JMS въездной конечная точка слушать: JMS: //my.queue

<flow> 
    <jms:inbound-endpoint queue="my.queue" > 
    <do something> 
    <launch a response to client> 
</flow> 

Этот coul d быть:

a.- По электронной почте клиенту

B.- Потребляйте услуги, опубликованный клиентом

уведомление C.- SMS

d.- Whatever

Этот подход может быть более гибким и поддерживать будущее crazy требований.

Если вам нужна помощь в службе mule cxf или jms, дайте мне знать, чтобы помочь вам!

http://jrichardsz.github.io/