Apache Camel - JsonPath&唯一的文件名

时间:2014-04-30 20:18:39

标签: apache-camel

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,但我没有遇到此问题。在我的例子中,输出文件名始终与输入文件名匹配。

如何在每个文件夹中获取唯一的文件名?

谢谢!

1 个答案:

答案 0 :(得分:2)

最后偶然发现了正确的搜索字词,并发现了以下有用的帖子:Camel: Splitting a collection and writing to files

诀窍是在.to()中使用一些逻辑来实现唯一的输出文件名:

.to("file:data/sentence_q?fileName=${header.CamelSplitIndex}.txt");

JsonPathExpression就像魅力一样,不需要处理器()或unmarshal(),正如我之前尝试过的那样。