如何使用 Camel 替换 CSV 字段的值?

问题描述 投票:0回答:0

我有以下要求:

  1. 对于 CSV 文件中的每条记录,读取其名为
    startValue
    endValue
    change
    的三个字段中包含的值。
  2. change
    计算为 (endValue-startValue)/startValue
  3. 将计算出的
    change
    与CSV文件中提供的
    change
    进行比较,以备记录。如果小数位数相同,则记录警告。在任何情况下继续第 4 步。
  4. 用步骤 3 中计算的
    change
    替换 CSV 文件中的
    change
    值。否则保持 CSV 文件不变。空行、行终止符、标题和所有其他字段值应保持不变。

我知道两种方法。

方法 1

from("{{route.getCsvFile}}")
.unmarshal(new BindyCsvDataFormat(MyValueChange.class))`
.process(myProcessor) // calculates `change` and replaces CSV `change` value
.to("bean-validator:changeValidator") // does step 3
.marshal(new BindyCsvDataFormat(MyValueChange.class))
.to("{{route.putCsvFile}}");

问题:我不想将所有 CSV 字段解组为 Java 对象。我只需要这三个字段即可使用

change
。 CSV 文件包含 75 个其他字段。

方法 2

from("{{route.getCsvFile}}")
.unmarshal(new CsvDataFormat())
.process(myProcessor)
.marshal(new CsvDataFormat())
.to("{{route.putCsvFile}}");

问题:

myProcessor
现在必须包含代码来解析
List
String
,并且必须包含代码来验证bean(而不是使用Camel对bean验证的调用)。

有没有办法只对三个字段使用 bindy,然后使用该 bean 仅替换原始 CSV 数据中的

change
值?

apache-camel bindy
© www.soinside.com 2019 - 2024. All rights reserved.