InOut交换模式Out总是为null

时间:2017-09-14 13:49:12

标签: java-ee apache-camel

我正在使用http服务的撰写请求消息。

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

我用上面的代码调用路由。我知道requestBody()方法使用InOut模式。但是当我试图检查最终交换是否有消息时它是假的。

@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}")
}
} 

我能够在In消息而不是Out中获得响应正文。我正在在aggreator类中进行交换。

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

newExchange.hasOut()始终为false.Message在In Messsage中传播。任何人都可以解释如何在Out Message中传播最终响应消息。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如Camel Exchange文档中的Flow of an exchange through a route section所述:

  

每一步的输出消息用作下一步的消息   步骤

这可能就是您遇到问题的原因。根据我的经验,响应几乎从不在out消息中,我只是将其复制到out消息中,如下所示(如果需要):

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

然而,通常没有必要这样做。

答案 1 :(得分:0)

您可能需要在D(..)调用之前将ExchangePattern设置为inOut:

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

另外,您是否尝试过使用recipientList?我只使用它来做你正在尝试做的事情,因为我正在运行旧版本的Camel。为此,您可以使用以下内容替换toD(..):

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

如果这些方法中的任何一种都有效,请告诉我。