Apache camel getbody 作为自定义 class
Apache camel getbody as custom class
问题比较简单,可能是我在这个过程中有点迷糊。
我正在尝试做的事情显示在代码示例中:
cc.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file://files?noop=true")
.split()
.tokenize("\n")
.split()
.method(SplitToken.class, "hashTokens")
和:
class SplitToken {
@SuppressWarnings("unchecked")
public static List<HashMap<String, Integer>> hashTokens(final Exchange exchange) {
List<String> oldstr = exchange.getIn().getBody(List<String>);
//Create a key value hashmap from accumulated string list
}
}
但 returns 错误:
expression required.
关于我们如何实现具有所需 class 的 getbody 的任何想法? (因为第一个拆分方法 returns 是一个字符串列表,但我无法在第二个拆分中检索它,我可以吗?)
据我所知,您无法使用 getBody
获得通用列表。这可能有效:
List<String> oldstr = (List<String>)exchange.getIn().getBody(List.class);
或者更好的是,您可以使用 @Body
注释为您制作骆驼提取体:
public static List<HashMap<String, Integer>> hashTokens(final Exchange exchange, @Body List<String> oldStr) {
//Create a key value hashmap from accumulated string list
return new ArrayList<>();
}
关于你的最后一个问题,请查看 "Using POJOs as AggregationStrategy"/"Different body types" 小节,来自 http://camel.apache.org/aggregator2.html
您可以尝试以下操作:
.pollEnrich("seda:foo", 1000, AggregationStrategies.beanAllowNull(MyUserAppender.class, "addUsers"))
public static final class MyUserAppender {
public List addUsers(List<String> names, User user) {
if (names == null) {
names = new ArrayList();
}
names.add(user.getName());
return names;
}
问题比较简单,可能是我在这个过程中有点迷糊。 我正在尝试做的事情显示在代码示例中:
cc.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file://files?noop=true")
.split()
.tokenize("\n")
.split()
.method(SplitToken.class, "hashTokens")
和:
class SplitToken {
@SuppressWarnings("unchecked")
public static List<HashMap<String, Integer>> hashTokens(final Exchange exchange) {
List<String> oldstr = exchange.getIn().getBody(List<String>);
//Create a key value hashmap from accumulated string list
}
}
但 returns 错误:
expression required.
关于我们如何实现具有所需 class 的 getbody 的任何想法? (因为第一个拆分方法 returns 是一个字符串列表,但我无法在第二个拆分中检索它,我可以吗?)
据我所知,您无法使用 getBody
获得通用列表。这可能有效:
List<String> oldstr = (List<String>)exchange.getIn().getBody(List.class);
或者更好的是,您可以使用 @Body
注释为您制作骆驼提取体:
public static List<HashMap<String, Integer>> hashTokens(final Exchange exchange, @Body List<String> oldStr) {
//Create a key value hashmap from accumulated string list
return new ArrayList<>();
}
关于你的最后一个问题,请查看 "Using POJOs as AggregationStrategy"/"Different body types" 小节,来自 http://camel.apache.org/aggregator2.html
您可以尝试以下操作:
.pollEnrich("seda:foo", 1000, AggregationStrategies.beanAllowNull(MyUserAppender.class, "addUsers"))
public static final class MyUserAppender {
public List addUsers(List<String> names, User user) {
if (names == null) {
names = new ArrayList();
}
names.add(user.getName());
return names;
}