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

如何在驼峰分割中获取交换值

袁翔
2023-03-14

我知道已经提出了许多关于同样的问题,但没有一个对我的案件有所帮助。

在这里,我试图在Split的第一次迭代中将一些值设置到Header中,然后在拆分的第二次迭代中,我需要旧的交换值将其附加到当前值。

代码:SomeDummyClass2.java

List<String> valueHeader = (List<String>) exchange.getIn().getHeader(SOME_HEADER_KEY);

// first iteration it will be null
if (CollectionUtils.isEmpty(valueHeader)) {

    exchange.getIn().setHeader(SOME_HEADER_KEY, "dummyValue");

} else { 
   // in the second iteration it should come here , but it is not comming as 'valueHeader' is null.
   someValue.addAll(valueHeader);
   exchange.getIn().setHeader(SOME_HEADER_KEY, "dummyValue");

}

骆驼路线:

<routes xmlns="http://camel.apache.org/schema/spring" id="route_id">
       <route>
          <from uri="somedummy_route" />
          <to uri="SomeDummyClass1" />
          <split>
             <simple>${body}</simple>
             <to uri="bean:SomeDummyClass2" />
          </split>
       </route>
    </routes>

我已经通过了其他一些问题,他们要求使用CamelSplitIndex或AggregationStrategy,但我是新手,有人能帮帮我吗?

共有1个答案

何晗昱
2023-03-14

是的,我们可以为此使用聚合策略。我为您的案例创建了一个示例工作路线。它是在爪哇dsl中。但策略是一样的。

 from("direct://somedummy_route").to("bean:SomeDummyClass1?method=SomeDummyMethod")
            .split(simple("${body}"))
            .aggregationStrategy(new MyStrategy())
            .to("bean:SomeDummyClass2?method=SomeDummyMethod2")
            ;

在断续器中

<routes xmlns="http://camel.apache.org/schema/spring" id="route_id">
   <route>
      <from uri="somedummy_route" />
      <to uri="bean:SomeDummyClass1?method=SomeDummyMethod" />
      <split>
         <simple>${body}</simple>
         <aggregate strategyRef="aggregatorStrategy">
             <to uri="bean:SomeDummyClass2?method=SomeDummyMethod2" />
         </aggregate>
      </split>
   </route>
</routes>

<bean id="aggregatorStrategy" class="org.own.package.MyStrategy"/>

战略课就会是这样的

public class MyStrategy implements AggregationStrategy {

  @Override
  public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    List<String> someValue  = Lists.newArrayList();

    if(oldExchange == null) {
      List<String> valueHeader = (List<String>) newExchange.getIn().getHeader("SomeKey");
      if (CollectionUtils.isEmpty(valueHeader)) {
        newExchange.getIn().setHeader("SomeKey", Lists.newArrayList("dummyValue"));
      }
      return newExchange;
    }
    List<String> valueHeader = (List<String>) oldExchange.getIn().getHeader("SomeKey");
    someValue.addAll(valueHeader);
    return oldExchange;
  }
}
 类似资料:
  • 我正在尝试以骆驼路线记录交换或尸体,如下所示: 这张照片是空白的,比如“身体:”。但是,通过传递以下参数,在同一路径中调用某些处理器: 如果要查看exchange的内容,如何从camel路由记录exchange/body?

  • 将字符串转换为驼峰格式(camelcase)。 将字符串分解成单词,并将它们每个单词的第一个字母大写,重新拼接。使用一个正则表达式。 const toCamelCase = str => { let s = str && str .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0

  • 转换驼峰拼写的字符串为特定格式。 使用 String.replace() 去除下划线,连字符和空格,并将驼峰拼写格式的单词转换为全小写。省略第二个参数 separator ,默认使用_分隔符。 const fromCamelCase = (str, separator = '_') => str .replace(/([a-z\d])([A-Z])/g, '$1' + separato

  • 问题内容: 在我公司,我们有两种针对Java和sql的样式指南。在Java中,我有一个名为的字段,当我编写sql时,我想为其命名。当我突出显示该短语时,是否有键盘快捷键可以从一个切换到另一个?还是可以做到这一点的插件? 当我问,我也不妨问,如果有办法把到。从Java到clojure风格。 问题答案: 我使用一个名为String Manipulation 的插件,该插件具有您正在寻找的功能(以及更多

  • 我正在使用Camel的RESTendpoint来实现HTTPendpoint。我想在响应上启用HTTP有效负载压缩,但还没有找到实现它的方法。如果我向路由中添加位,它确实会压缩有效负载,但我最终会得到一个压缩文件! 有人设法在Camel中实现HTTP压缩吗? 非常感谢。 美联社

  • 我试图在camel中获取请求/回复jms消费者,收到了传入消息,我可以看到camel也发送了回复,但消息没有被封送。 我正在使用拦截器封送所有来自activemqendpoint的消息 (我扩展了JacksonDataFormat,以便在封送消息时填充JMSType。) 对于正常的单向交换,这是可行的(例如) 但是当我走这条路的时候 并将带有JMSReplyTo消息的消息发送到测试队列(使用act