首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Camel文件拆分器示例

问Apache Camel文件拆分器示例
EN

Stack Overflow用户
提问于 2013-12-18 23:09:34
回答 1查看 15K关注 0票数 2

我得到了一个文件,其中包含由换行符(“\n”)分隔的数字I:

代码语言:javascript
复制
123948
939904
129384
234049

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

代码语言:javascript
复制
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组件在我的表单中执行此操作,但感觉就像是在将一个圆钉强行插入方孔中:

代码语言:javascript
复制
<route>
    <from uri="file://input/idfile"/>
    <split streaming="true">
        <tokenize token="\n" />
        <to uri="bean://idfileProcessor?method=process"/>
    </split>
</route>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-18 23:49:25

在交换机上有一个标题"CamelFileName“。将向您的处理器/bean传递一个对交换的引用,您可以从那里获取头部,并将其与调用时使用的令牌相关联。

您的路由可能如下所示:

代码语言:javascript
复制
<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>

用于维护exchange对象状态的bean:

代码语言:javascript
复制
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"));
    }
}

包含行的文件

代码语言:javascript
复制
1
2
3
5

在名为splitter.text和splitter_2.txt的路由上输入将生成以下日志输出:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20661661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档