Apache camel getbody作为自定义类

时间:2016-01-05 09:08:14

标签: java apache-camel javabeans

问题很简单,也许是因为我在这个过程中有点困惑。 我尝试做的事情在代码示例中显示:

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

但返回错误:

expression required.

关于我们如何能够在一般情况下获得所需课程的任何想法? (因为第一个split方法返回一个字符串列表,但我无法在第二次拆分中检索它,或者我可以吗?)

2 个答案:

答案 0 :(得分:3)

据我记得,您无法使用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<>();
}

答案 1 :(得分:2)

关于您的上一个问题,请查看子部分&#34;使用POJO作为AggregationStrategy&#34; /&#34;不同的身体类型&#34;,来自MDN article

你可以尝试像:

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