2017-09-14 5 views
1

J'utilise un message de requête composé pour les services http.Le motif d'échange InOut a toujours la valeur

Order finalOrder = (Order) producerTemplate.requestBody("direct:processRequests", myOrder); 

J'appelle la route avec code.and ci-dessus, je sais méthode requestBody() utilise InOut pattern.But quand je suis en train de vérifier si l'échange final a des message qu'il donne de faux. J'ai pu obtenir le corps de la réponse dans le message In au lieu de Out. Je suis en train de traiter les échanges dans la classe aggreator.

@Override 
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
    if (oldExchange == null) { 
     System.out.println("hasout "+newExchange.hasOut()); 
     // remaining code 

newExchange.hasOut() est toujours false.Message se propage dans Messsage En .Peut tout expliquer comment propager un message de réponse finale message. Merci d'avance.

+0

Voir cette FAQ: http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html –

+1

Merci d'avoir répondu.Mais je ne comprends pas comment faire les routes mentionnées ci-dessus pour utiliser le motif InOut. Je souhaite que la réponse finale soit disponible dans le message Out. – sasidhar

Répondre

0

Vous devrez peut-être régler le ExchangePattern INOUT juste avant TOD (..) appelez comme ceci:

.setExchangePattern(ExchangePattern.InOut) 
.toD("${exchangeProperty.sendTo}") 

Aussi, avez-vous essayé d'utiliser recipientList? Je l'ai seulement utilisé pour faire ce que vous essayez de faire depuis que je cours une ancienne version de Camel. Pour ce faire, vous devez remplacer votre TOD (..) avec quelque chose comme:

.setExchangePattern(ExchangePattern.InOut) 
recipientList(simple("${exchangeProperty.sendTo}")) 

Permettez-moi de savoir si l'une de ces approches fonctionnent.

+0

J'ai essayé les deux approches, mais elles n'ont pas fonctionné. – sasidhar

0

Comme indiqué dans le Flow of an exchange through a route section dans la documentation Camel échange:

Le message de chaque étape est utilisé comme dans le message pour la prochaine étape

Cela peut être la raison pour laquelle vous êtes éprouver le problème que vous êtes. Dans mon expérience, la réponse est presque jamais dans le message, et je copiez simplement le message comme suit (le cas échéant):

.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     exchange.setOut(exchange.getIn()); 
    } 
}) 

Cela est toutefois généralement pas nécessaire,.