0

我遵循了 Camel in action 一书中的一个例子。如何编组和解组 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");
             } 

请在堆栈跟踪下方找到。
在此处输入图像描述

4

2 回答 2

0

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

于 2017-06-26T15:25:27.073 回答
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();
于 2018-01-30T05:47:25.567 回答