gpt4 book ai didi

java - Apache Camel 文件拆分器示例

转载 作者:行者123 更新时间:2023-11-30 07:12:02 26 4
gpt4 key购买 nike

我得到了一个文件,其中包含由换行符分隔的数字 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com