【问题标题】:Apache Camel - Empty body inside AggregationStrategyApache Camel - AggregationStrategy 内的空体
【发布时间】:2015-01-23 20:14:58
【问题描述】:

这是我的路线:

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;
    }
} 

但是

body 总是等于 "" 而 inMsg 是 "[Body is instance of java.io.InputStream]"

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

我做错了什么?

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

编辑 1:

骆驼版:2.12.13

在一个方法中,我使用 ProducerTemplate 将交换发送到 HTTP 端点:

    exchange = producerTemplate.send(uri, exchange);

然后我对交换体进行一些处理。

我注意到,如果我使用直接组件,同样的事情会起作用。

【问题讨论】:

  • 你使用什么版本的骆驼?,你在你的myProcessor的aMethod中做了什么
  • 请看我的编辑#1。

标签: java apache split apache-camel aggregate


【解决方案1】:

我认为这个骆驼票报告了问题:https://issues.apache.org/jira/browse/CAMEL-7787

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

【讨论】:

  • 感谢您的回复。这个处理器应该放在哪里?我试图把它放在 .bean(myProcessor, "aMethod").process(readBodyToStringProcessor) 之后并用 IOUtils 读取它,但正文仍然显示为空。 (也尝试在拆分之前使用 convertBodyTo 和使用 streamCaching 但似乎没有任何作用)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多