2017-09-14 6 views
1

httpサービス用の合成要求メッセージを使用しています。InOut交換パターンが常にnullになっています

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

私は私が最終的に交換が、それは偽与えているメッセージを持っているかどうかを確認しようとしていたときにrequestBody()メソッドはInOutのpattern.Butを使用しています知っている上記code.andでルートを呼び出しています。

@Override 
    public void configure() throws Exception { 

     /*onException(Exception.class) 
     .handled(true);*/ 

     from("direct:processRequests") 
       .split(body().method("getItems"), new GroupedBodyAggregationStrategy()) 
       .parallelProcessing() 
       .to("direct:processRequest") 
       .end() 
     .end(); 


     from("direct:processRequest") 
     .choice() 
     .when(body().method("getHttpDetails").method("getCallType").isEqualTo("POST")) 
      .setHeader(Exchange.HTTP_METHOD, body().method("getHttpDetails").method("getCallType")) 
      .setProperty("sendTo",body().method("getEndPointUri")) 
      .setBody(body().method("getPayload")) 
      .toD("${exchangeProperty.sendTo}") 
} 
} 

私はOutの代わりにInメッセージで応答本文を取得できました。私はaggreatorクラスの交換を処理しています。

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

newExchange.hasOut()は常にfalse.Messageは、いずれかがアウトメッセージに最終応答メッセージを伝播する方法について説明しMesssage .Canでで伝播しているです。 ありがとうございます。

+0

このFAQを参照してください:http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html –

+1

応答してくれてありがとうございます。しかし、私はそれをどのようにルートを作成するInOutパターンを使用します。私は最終メッセージをOutメッセージで利用できるようにしたい。 – sasidhar

答えて

0

あなたは右のあなたの前にINOUTにExchangePatternを設定する必要があるかもしれませんTODは(..)ので、のように呼び出します。

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

また、あなたがrecipientListを使用してみましたが?私はキャメルの古いバージョンを実行しているので、あなたがやろうとしていることをするためにこれを使っただけです。これらのアプローチのいずれかが動作している場合、私に教えてください

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

:これを行うには、あなたのような何かをあなたのTOD(..)を置き換えます。

+0

私は両方のアプローチを試みましたが、うまくいかなかった。 – sasidhar

0

キャメル取引所の資料にFlow of an exchange through a route sectionで述べたように:各ステップのうち、メッセージが次のステップ

のためのメッセージのように使用されている

あなたは、なぜこれがかもしれあなたの問題を経験している。私の経験では、応答が出メッセージになることはほとんどありませんし、次のように(必要な場合)、私はちょうどメッセージにコピー:

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

しかしこれは、通常は必要ありません。

関連する問題