在apache Camel中解析csv数据格式

时间:2017-06-08 09:32:42

标签: csv apache-camel camel-ftp camel-sql akka-camel

我跟随了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");
             } 

请在下面找到堆栈跟踪 enter image description here

2 个答案:

答案 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();