在apachecamel中解析csv数据格式

在apachecamel中解析csv数据格式,csv,apache-camel,camel-ftp,camel-sql,akka-camel,Csv,Apache Camel,Camel Ftp,Camel Sql,Akka Camel,我遵循了《骆驼行动》一书中的一个例子。如何封送和取消封送csv数据格式。但是,我想用(逗号分隔符)和拆分体来解组csv文件。然后,我将使用基于内容的.choice根据所需任务分发消息。 事实上,第一个简单的例子并不适合我。我使用了camel 2.15.6(camel核心、camel上下文、camel csv、commons csv)和java7 public void configure() { CsvDataFormat csv = new

我遵循了《骆驼行动》一书中的一个例子。如何封送和取消封送csv数据格式。但是,我想用(逗号分隔符)和拆分体来解组csv文件。然后,我将使用基于内容的
.choice
根据所需任务分发消息。 事实上,第一个简单的例子并不适合我。我使用了camel 2.15.6(camel核心、camel上下文、camel csv、commons csv)和java7

public void configure()
             {
              CsvDataFormat csv = new CsvDataFormat();
              csv.setDelimiter(",");

              from("file:test?noop=true")
             .unmarshal().csv()
              .split(body())
              .to("file:out");
             } 
请在堆栈跟踪下方查找。

您可以尝试删除noop=true吗?实际上,如果noop为true,则不会以任何方式移动或删除文件。此选项适用于只读数据或ETL类型要求。

将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的标题设置基于包含的路由:I过滤器:

//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();

stacktrace没有任何指示。当你说它不适合你的时候。发生了什么。程序在没有复制文件的情况下终止。到(“文件:输出”);你的文件测试在哪里?检查路径是否正确。路径正确,因为Camel锁定文件(例如test\standard.csv.camelLock),然后程序关闭。我不知道为什么解组不起作用。请尝试不拆分。我认为split函数需要一个您没有指定的标记来分割