Apache Camel - AggregationStrategy中的空体

时间:2015-01-22 14:15:01

标签: java apache split apache-camel aggregate

这是我的路线:

def.convertBodyTo(String.class).split()
                    .method(splittingProcessor, "split")
                    .aggregationStrategy(myAggregationStrategy)
                    .bean(myProcessor, "aMethod")
                    .end();

我正在尝试将一个交换发送到两个以上的不同HTTP端点。

这是我的聚合策略:

    @Override 
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
    Message inMsg = newExchange.getIn();
    String body = inMsg.getBody(String.class);

    String oldBody= "";
    if (oldExchange == null) {
        return newExchange;
    }
    else {
        oldBody = oldExchange.getIn().getBody(String.class);
        oldExchange.getIn().setBody(oldBody + " "+body);
        return oldExchange;
    }
} 

但是

身体总是等于""和inMsg是" [Body是java.io.InputStream的实例]"

convertBodyTo(String.class)也不起作用(至少我使用它的方式)。

我做错了什么?

PS。路径上的streamCaching()或上下文中的setStreamCache(true)也不起作用。

编辑1:

骆驼版:2.12.13

在aMethod中我使用ProducerTemplate将交换发送到HTTP端点:

    exchange = producerTemplate.send(uri, exchange);

然后我对交易所做了一些处理。

我注意到如果我使用直接组件,同样的事情也有效。

1 个答案:

答案 0 :(得分:0)

我认为此问题已在此骆驼票证中报告:https://issues.apache.org/jira/browse/CAMEL-7787

作为此错误的解决方法,您使用自定义处理器,然后您可以将消息正文转换为字符串,以便将流读入内存并可以安全地用于聚合策略。