下面列出的代码工作正常,但它的功能是查看XML文件,如果字段是'us',则将其移动到另一个目录;关于使用.choice()函数我想知道的事情:
1)如何指定要路由的特定文件? (将文件名添加到路径末尾不起作用)
2)如何指定要路由的文件类型? (例如:将所有.txt文件路由到“blah”)
3)除了使用.choice还有其他选择可以帮助我做到这一点吗?
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder()
{
public void configure() throws Exception
{
from("file:C:\\camels\\inner?delete=true")
.choice()
.when(xpath("/author/country = 'us'"))
.to("file:C:\\testing");
}
});
context.start();
Thread.sleep(10000);
context.stop();
答案 0 :(得分:5)
以下是一些执行此操作的方法
查看http://camel.apache.org/file-language.html有关camel公开的文件语言,这提供了一些选项,您可以使用它来获取带扩展名的文件名,仅文件名,文件父文件扩展名等。
另请查看http://camel.apache.org/file2.html处的 include 选项,这将有助于仅查看文件名与正则表达式匹配的文件。
from("file:C:\\camels\\inner?delete=true&include=abc")
构建谓词并使用如下所示:
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder()
{
Predicate predicate = PredicateBuilder.and(simple("${file:name.ext} == 'txt'"), XPathBuilder.xpath("/author/country = 'us'"));
public void configure() throws Exception
{
from("file:C:\\camels\\inner?delete=true")
.choice()
.when(predicate)
.to("file:C:\\testing");
}
});
context.start();
Thread.sleep(10000);
context.stop();
答案 1 :(得分:0)
回答你问题的前两点:有可能 - 看看documentation。名为fileName的参数在那里得到了很好的描述,它允许您非常严格地控制文件名和扩展名(实际上是名称的一部分)。
当谈到第3点时,如果你的“选择”仅涉及一个案例,那么我想建议使用过滤器component rather然后选择。
它允许您轻松地建模路径,例如当* xml确实是XML并且包含国家“我们”时,将其路由到“测试”目录。请注意,当出现错误文件(非XML)时,可能需要捕获一些异常;)。