当前位置: 首页 > 知识库问答 >
问题:

Apache Camel-Aggregation战略中的空身体

周枫涟
2023-03-14

这是我的路线:

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

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

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

共有1个答案

阎星华
2023-03-14

我认为问题反映在这张骆驼票上:https://issues.apache.org/jira/browse/CAMEL-7787

作为这个bug的一个变通方法,您使用一个定制的处理器,然后您可以在那里将消息体转换成一个字符串,这样这个流就被读入内存,并且可以安全地在聚合策略中使用。

 类似资料:
  • 为每个任务实例化具体策略,并在不是时实现“虚拟”策略(如下所示)。代码中到处都有奇怪的可为空的和变量,在本例中... 在不计划任务的情况下具有IPlanningStrategy变量,并且只有当任务“提升”为时才使用具体策略实例化。 备选方案(1)应该是这样的: 现在我看到了不同的**非常重要的**问题。除了algorithm(当然实现该算法的所有任务都共享)之外,我的每个具体策略类还包含附加参数,

  • 测试数据 solarSystem(太阳系) solarSystem collection 中包括太阳系中所有恒星和行星的的信息,每个星球包含的具体属性有名称、类型、半径,重量,距离太阳的距离等。示例:查询地球的详细信息 db.solarSystem.find({"name" : "Earth"}).pretty() { "_id" : ObjectId("59a06674c8df9f3cd2ee

  • Here are my current thoughts on the gradual migration to .NET development tools at Fog Creek. 下面就是我关于FogCreek公司慢慢转移到.NET开发工具的想法。 The status quo: Most of CityDesk is written in Visual Basic 6.0, with p

  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 在日常的开发过程中,短信的发送经常使用(尤其是中小型的外包公司),毕竟不是每个公司都有阿里腾讯一样的实力, 也不是每个都像银行联通等公司一样有内部的短信规程。第三方的短信往往是最常见的解决方案,但是市面上第三方短信服务商众多, 各家都有不同的方式和标准,每次需要使用时候,都需要花费时间去阅读文档和编写相应的工具,为一个短信浪费了太多的精力和时间。 这个工具的目的就是为了统一下各个厂商的短信发送工具

  • 我正在使用apache camel cxf开发一个Web服务(肥皂),我遇到了这个错误。 Java . lang . illegalargumentexception:Part { http://blue print . camel . ngt . TN/}返回的类型应为[ltn . ngt . camel . blue print . WB _ subscriptions;,而不是org . A