我有一个包含一组用户的大型CSV文件。我正在寻找一种简单的方法来读取文件,映射到Java对象并将此Object传递给处理器,该处理器将对Object执行某些操作。 所以我标记了一个带有代表CSV文件的注释的Java bean:
@CsvRecord(separator = ",")
public class User {
@DataField(pos = 1)
private String username;
@DataField(pos = 2)
private String group;
}
然后我开始编写Camel Route的代码,但是我无法找到如何将CSV作为Java Object传递给端点:
CamelContext context = new DefaultCamelContext();
final DataFormat bindy = new BindyCsvDataFormat("com.sample.model");
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:/usr/camel/in?noop=true").
unmarshal(bindy)
.to("??????");
}
});
目标端点应该是接收用户对象的java类。有可能这样做吗?感谢
答案 0 :(得分:1)
您可以使用Processor
的实例来处理POJO:
Processor myProcessor = new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// do something here
}
};
from("file:/usr/camel/in?noop=true")
.unmarshal(bindy)
.process(myProcessor);
解决方案2:您可以使用bean。首先,添加这个" bean"类:
public class MyBean {
public void process(List<String> list) {
System.out.println("list contains " + list.size() + " elements.");
}
}
现在,Camel Bean Binding接受&#34; In&#34;在交换机上的主体并将其作为参数提供给您的bean(避免整个exchange.getIn().getBody()
部分)。
from("file:/usr/camel/in?noop=true")
.unmarshal(bindy)
.bean(new MyBean())
如果要对bean使用不同的参数,可以使用带simple
表达式的方法调用,如下所示:
.bean(new MyBean(), "process(${body.get(0).etc...})")