这是我的路线:
def.convertBodyTo(String.class).split()
.method(splittingProcessor, "split")
.aggregationStrategy(myAggregationStrategy)
.bean(myProcessor, "aMethod")
.end();
我正在尝试将一个交换发送到两个以上不同的HTTPendpoint。
这是我的聚合策略:
@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;
}
}
但是
body 始终等于 “”,inMsg 为 “[body 是 java.io.InputStream 的实例]”
convertBodyTo(String.class)也不起作用(至少是我使用它的方式)。
我到底做错了什么?
PS。路由上的streamCaching()或上下文上的setStreamCache(true)也不起作用。
编辑1:
骆驼版本:2.12.13
在方法中,我使用ProducerTemplate将交换发送到HTTPendpoint:
exchange = producerTemplate.send(uri, exchange);
之后,我对交换体进行一些处理。
我注意到如果我使用直接组件,同样的事情也会起作用。
我认为问题反映在这张骆驼票上:https://issues.apache.org/jira/browse/CAMEL-7787
作为这个bug的一个变通方法,您使用一个定制的处理器,然后您可以在那里将消息体转换成一个字符串,这样这个流就被读入内存,并且可以安全地在聚合策略中使用。