如何在Apache Camel中记录csv的内容?

时间:2018-07-10 13:17:29

标签: java apache-camel

我有以下代码

DataFormat bindy = new BindyCsvDataFormat(Employee.class);
from("file:src/main/resources/csv2?noop=true").routeId("route3").unmarshal(bindy).to("mock:result").log("${body[0].name}");

我正在尝试记录csv文件的每一行,目前我只能对其进行硬编码以进行打印。

即使我不知道csv的行数,也必须使用Loop吗?还是我必须使用处理器?实现我想要的最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

解组步骤正在生成一个交换,其主体为元组列表。因此,您可以简单地使用骆驼分割器将原始交换切成1-N子交换(列表的每行/每项一个),然后记录以下各行:

from("file:src/main/resources/csv2?noop=true")
.unmarshal(bindy)
.split().body()
.log("${name}");

如果您不想更改原始消息,则可以使用窃听模式来记录交易所的副本

from("file:src/main/resources/csv2?noop=true")
    .unmarshal(bindy)
    .wireTap("direct:logBody")
    .to("mock:result");

from("direct:logBody")
    .split().body()
    .log("Row# ${exchangeProperty.CamelSplitIndex} : ${name}");