gpt4 book ai didi

java - 如何在 Camel split 中获取交换值

转载 作者:行者123 更新时间:2023-12-02 02:19:12 25 4
gpt4 key购买 nike

我知道已经提出了很多相同的问题,但没有一个对我的案子有帮助。

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

代码: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");

}

Camel 路线:

<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 的其他一些问题,但我对这些是新手,有人可以帮助我吗?

最佳答案

是的,我们可以使用 AggregationStrategy 来实现这一点。我为您的案例创建了一个示例工作路线。它是java dsl 中的。但策略是一样的。

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

在 XML 中

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

关于java - 如何在 Camel split 中获取交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com