防止Apache骆驼将不合格的文件移动到.camel

时间:2018-09-04 13:23:50

标签: apache apache-camel

我正在创建一个简单的文件传输实用程序,其中,根据用户输入,我在文件夹中搜索文件并将匹配的文件传输到目标位置。问题 是骆驼正在移动所有与.camel文件夹不匹配的文件,我不希望在下面出现这是我的摘录。

        from("file:C:\\input?noop=true;").
        filter(header(Exchange.FILE_NAME)
       .contains("xyz")).split(body().tokenize("\n")).
        streaming().bean(LineParser.class, "process").
        to("file:"+ Constants.getMapping().get(argumentName)+"? 
         fileExist=Append");

谢谢!

2 个答案:

答案 0 :(得分:1)

签出文件组件使用者选项:http://camel.apache.org/file2.html。您应该能够使用uri中的“过滤器”或“ filterFile”选项。如上所述,这些将在端点处过滤。如果您能够使用简单语言,则filterFile将更加简洁:

from("file:C:\\input?filterFile=...

否则,您可以创建一个过滤bean来处理过滤,并使用filter选项引用该bean。请注意,不再需要filter()。contains():

from("file:C:\\input?filter=#someFileFilter")
    .split(body().tokenize("\n"))
    .streaming()
    .bean(LineParser.class, "process")
    .to("file:"+ Constants.getMapping().get(argumentName)+"?fileExist=Append");

public class SomeFileFilter<T> implements GenericFileFilter<T> {
    @Override
    public boolean accept(GenericFile<T> file) {
        // return true if file should be included, false if excluded
    }
}

答案 1 :(得分:0)

在noop = true之后删除分号,该属性将开始工作,不赞成将已处理的文件移动到.camel

已处理的文件是所有无例外处理的文件,因此即使匹配的文件也将保留在C:\ input目录中。当使用noop = true时,默认幂等存储库在内存中。因此,在您重启应用后,已经处理过的文件将再次被处理。因此,您需要创建自己的非内存幂等存储库。