我跟随了Camel一书中的一个例子。如何编组和解组csv数据格式。但是,我想用(逗号分隔分隔符)和分割体来解组csv文件。然后,我将使用基于.choice
的内容根据所需任务分发消息。
事实上,第一个简单的例子对我不起作用。我使用了camel 2.15.6(camel-core,camel-context,camel-csv,commons-csv)和java 7.
public void configure()
{
CsvDataFormat csv = new CsvDataFormat();
csv.setDelimiter(",");
from("file:test?noop=true")
.unmarshal().csv()
.split(body())
.to("file:out");
}
答案 0 :(得分:0)
你能尝试删除noop = true吗?实际上,如果noop为true,则不会以任何方式移动或删除文件。此选项适用于只读数据或ETL类型要求。
答案 1 :(得分:0)
将csv作为参数传递给:
public void configure()throws Exception
{
CsvDataFormat csv = new CsvDataFormat();
csv.setDelimiter(",");
from("file:test?noop=true")
.unmarshal(csv)
.split(body())
.to("file:out");
}
或者它可以帮助您设置基于包含的路由:我根据CSV的标题进行过滤:
//Route 1 for filter CSV based on header
from("file:/home/r2/Desktop/csvFile?noop=true")
.choice().when(body().contains("partyName"))
.to("direct:partyNameCSV")
.when(body().contains("\"stuffName\""))
.to("direct:stuffNameCSV")
.otherwise().endChoice();
//Route 2 partyNameCSV
from("direct:partyNameCSV")
.unmarshal(csv)
.process(new PartyNameCSVProcessor())
.end();
//Route 3 stuffNameCSV
from("direct:stuffNameCSV")
.unmarshal(csv)
.process(new StuffCSVProcessor())
.end();