java - Apache Camel 文件分割器示例

标签 java integration apache-camel splitter

我得到的文件包含由换行符分隔的数字 ID(“\n ”):

123948
939904
129384
234049

等等。我想使用 Camel 将文件转换为以下 POJO 的实例:

public class IDFile {
    private String fileName;    // The name of the file
    private List<Long> ids;     // All the IDs in the file (123948, 939904, etc.)

    // Constructor, getters/setters, etc.
}

我想看看是否可以使用Camel的Splitter我正在使用组件来执行此操作,但感觉就像我试图将圆钉强行插入方孔中:

<route>
    <from uri="file://input/idfile"/>
    <split streaming="true">
        <tokenize token="\n" />
        <to uri="bean://idfileProcessor?method=process"/>
    </split>
</route>

上面的代码看起来会将我的文件分割成 List<Long> ,但我还需要与列表关联的文件名。有什么想法吗?

最佳答案

交易所上有一个 header “CamelFileName”。您的处理器/bean 将传递对交换的引用,您可以从那里获取 header 并将其与您调用的 token 关联起来。

您的路线可能如下所示:

<camel:route id="splitter_test">
    <camel:from uri="file:///home/steppra1/camel_test?delete=true&amp;idempotent=true" />
    <camel:to uri="bean:splitBean?method=init" />
    <camel:split streaming="true">
        <camel:tokenize token="\n" />
        <camel:to uri="bean:splitBean?method=addToken" />
    </camel:split>
    <camel:to uri="bean:splitBean?method=done" />
    <camel:log message="${in.body}" loggingLevel="INFO" logName="split_test" />
</camel:route>

用于维护交换对象状态的 bean:

public class SplitBean {
    public Object init(Exchange exchange) {
        exchange.setProperty("splitTokens", new ArrayList<Integer>());
        return exchange.getIn().getBody();
    }

    public Object addToken(Exchange exchange) {
        ((List<Integer>)exchange.getProperty("splitTokens")).add(Integer.parseInt((String)exchange.getIn().getBody()));
        return null;
    }

    public Tuple done(Exchange exchange) {
        return new Tuple<String, List<Integer>>((String)exchange.getIn().getHeader("CamelFileName"), (List<Integer>)exchange.getProperty("splitTokens"));
    }
}

包含行的文件

1
2
3
5

馈送到名称 splitter.text 和 splitter_2.txt 下的路由会产生以下日志输出:

2013-12-18 18:20:02,081 INFO  split_test - Tuple [first=splitter.txt, second=[1, 2, 3, 5]]
2013-12-18 18:20:46,610 INFO  split_test - Tuple [first=splitter_2.txt, second=[1, 2, 3, 5]]

HTH

关于java - Apache Camel 文件分割器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20661661/

相关文章:

java - 当 session 对象不是静态时无法运行数据库查询?

c - 中点集成优化

compiler-construction - 将 antlr4 与 LLVM 集成

java - Camel ActiveMq 蓝图

java - 在 HashSet 中使用并集和交集方法

java - Vaadin Spring 中的 MVP 结构

Java fx 缓慢移动的图像

matlab - 使用 MATLAB 在 x 上对函数 f(x) 进行数值积分,其中 f(x) 具有另一个参数 y,它是一个向量

java - Camel 文件使用者在使用目录中的大量文件时表现极其缓慢

java - 如何在application.yml中定义bean?