我有以下代码
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吗?还是我必须使用处理器?实现我想要的最简单的方法是什么?
答案 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}");