文件类型上的Apache-Camel选择

时间:2014-01-07 18:17:37

标签: java routing apache-camel

下面列出的代码工作正常,但它的功能是查看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();

2 个答案:

答案 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)时,可能需要捕获一些异常;)。