我知道已经提出了许多关于同样的问题,但没有一个对我的案件有所帮助。
在这里,我试图在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,但我是新手,有人能帮帮我吗?
是的,我们可以为此使用聚合策略。我为您的案例创建了一个示例工作路线。它是在爪哇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