1

我有以下路线:

from("direct:abc")
        // read the file  
        .split(body().tokenize("\n", 3, false)).streaming().stopOnException()
        .unmarshal(new BindyCsvDataFormat(Foo.class))
        .process(new FooListProcessor());

问题是,如果我在文件中有 4 条记录,则第一组作为处理器进入,List而第二组作为单个Foo对象进入。instanceof每次发生这种情况时,我都必须检查正文并创建一个列表。

Foo班级:

@CsvRecord(separator = ",")
public class Foo {
   @DataField(pos = 1)
   private String fooField;
   @DataField(pos = 2, trim = true)
   private String barField;
}

文件内容:

"lorem","ipsum"
"dolorem","sit"
"consectetur","adipiscing"
"eiusmod","incididunt"

有没有办法强制Bindy总是解组为 a List

4

2 回答 2

1

只是一个小点。由于它不受@Claus 所说的支持,因此您可以在这样的路线中进行检查,而不是检查处理器代码,并让骆驼为您处理。

  from("file:///tmp/camel/input")
            // read the file
            .split(body().tokenize("\n", 3, false)).streaming().stopOnException()
            .unmarshal(new BindyCsvDataFormat(Foo.class))
            .choice()
            .when(body().isInstanceOf(List.class))
                .process(exchange -> { // Your logic here for list})
            .otherwise()
                .process(exchange -> {// Your logic here for individual items})
            .endChoice();
于 2018-03-05T10:41:14.373 回答
1

如果有单个实例,则没有绑定返回单个实例。还有更多的清单。

我已经记录了一个改进的票,所以你可以配置这个:https ://issues.apache.org/jira/browse/CAMEL-12321

于 2018-03-05T10:27:58.440 回答