骆驼:跳过“固定长度文件”中的多个标题行将返回迭代器对象引用

时间:2019-06-19 13:07:34

标签: java apache-camel

question正是我要的内容。唯一的区别是我正在使用固定长度的文件。

我的问题是使用此方法,我似乎返回了Iterator对象,而不是删除了带有3行标题的文件。

骆驼路线应使用.txt文件,删除前三行,然后将结果发送到文件端点。

我尝试了简单语言的各种变体,但均无济于事。我在书,文档或在线中找不到任何具体案例。

在下面查看我的骆驼路线

    from(inputFilePath).routeId("MyRoute")
            .streamCaching()
            .threads(threadPoolSize)
            .log("${headers.CamelFileName}: Unmarshalling to Java POJO")
            .log("${body} Body Before Transform")
            .convertBodyTo(String.class)
            .transform().simple("skip(3)")
            .log("${body} Body After Transform")
            .to(outputFilePath)

我希望返回一个.txt文件,其中前三行已删除,其余结构未更改。

相反,我得到了对迭代器对象的引用-> 2019-06-19 14:55:30.497 INFO 2868 --- [ad #2 - Threads] MyRoute : org.apache.camel.util.SkipIterator@4d894ea5 Body After Transform

任何帮助或建议将不胜感激!

1 个答案:

答案 0 :(得分:2)

简单功能skip(n)旨在跳过n中的List个项目,但您的身体为String。 您需要获得List<String>行(Tokenize language)才能使用。

要将此列表重新加入String,您可以使用Bean EIP来呼叫org.apache.commons.lang3.StringUtils

from(inputFilePath)
        .transform(body().tokenize("\n"))
        .transform(simple("${skip(3)}"))
        .bean(StringUtils.class, "join(${body}, '\n')")
        .to(outputFilePath);