Camel 2.13.0
我正在尝试使用包含多个记录的json字符串,并为每条记录生成一个输出文件。
public void configure() {
from("file:data/input")
// my bean splits the input string and returns a json string via Gson
.bean(new com.camel.Tokenizer(), "getSentences")
.split(new JsonPathExpression("$[*]"))
.convertBodyTo(String.class)
.to("file:data/output");
}
}
示例输入:
“这是字符串#1。这是字符串#2。”
如果我按原样运行上面的代码,我会得到一个包含“This is string#2”的输出文件。如果我删除.split()调用,我会得到一个包含json的输出文件:
[
{
"token": "This is string #1."
},
{
"token": "This is string #2."
}
]
如何实现两个表示两行数据的输出文件?
我突然意识到分裂工作正常,第二个输出文件覆盖了第一个。根据文档,如果未设置 CamelFileName ,则默认行为是创建唯一生成的ID,但我没有遇到此问题。在我的例子中,输出文件名始终与输入文件名匹配。
如何在每个文件夹中获取唯一的文件名?
谢谢!
答案 0 :(得分:2)
最后偶然发现了正确的搜索字词,并发现了以下有用的帖子:Camel: Splitting a collection and writing to files
诀窍是在.to()中使用一些逻辑来实现唯一的输出文件名:
.to("file:data/sentence_q?fileName=${header.CamelSplitIndex}.txt");
JsonPathExpression就像魅力一样,不需要处理器()或unmarshal(),正如我之前尝试过的那样。