首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Aggregator追加Exchange标头

如何使用Aggregator追加Exchange标头
EN

Stack Overflow用户
提问于 2018-02-20 14:32:28
回答 1查看 338关注 0票数 0

我正在编写一个Aggregator Strategy类,其中我需要旧交换的头部,而新交换应该相互附加,以便将集合头部传递给下一个处理器类。

我尝试过putAll newHeader,但它没有附加到旧的exchange。

代码语言:javascript
复制
Map<String, Object> newHeader = newExchange.getIn().getHeaders();
oldExchange.getIn().getHeaders().putAll(newHeader);
return oldExchange;

有什么建议吗?我如何才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-02-26 17:47:28

代码语言:javascript
复制
public class AggregateHeaders implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    Map<String, Object> newHeaders = newExchange.getIn().getHeaders();
    oldExchange.getIn().getHeaders().putAll(newHeaders);
    return oldExchange;
}}

你的代码应该像预期的那样工作...

写了一个小测试

代码语言:javascript
复制
@Test
public void test() {
    DefaultCamelContext context = new DefaultCamelContext();
    AggregateHeaders aggregator = new AggregateHeaders();
    DefaultExchange newExchange = new DefaultExchange(context);
    newExchange.getIn().setHeader("newName", "newValue");
    DefaultExchange oldExchange = new DefaultExchange(context);
    oldExchange.getIn().setHeader("oldName", "oldValue");
    Exchange aggregated = aggregator.aggregate(oldExchange, newExchange);
    assertThat(aggregated.getIn().getHeader("oldName"), is("oldValue"));
    assertThat(aggregated.getIn().getHeader("newName"), is("newValue"));
}

另请参阅https://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Message.html#setHeaders(java.util.Map)

重要提示:如果要将邮件头从另一封邮件复制到此邮件,请使用getHeaders().putAll(other)复制邮件头,其中是其他邮件头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48879208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档