Java AcceptOnceFileFilter阻止其他筛选器在CompositeFileListFilter中工作

Java AcceptOnceFileFilter阻止其他筛选器在CompositeFileListFilter中工作,java,spring,spring-integration,Java,Spring,Spring Integration,在这个问题上,我已经碰壁很久了,并且通过多种方式对它进行了测试,再加上对源代码的深入研究,我无法找出它为什么不起作用 我需要一个复合过滤器,这样我可以过滤并提供其他行业标准的轮询检查。下面的代码是问题的核心部分,它位于入站通道适配器中 如果代码中没有addFilternew AcceptOnceFileListFilter,则代码可以正常工作。一旦你把它放进去,就找不到任何文件。如果我将regexpaterFileListFilter从场景中移除,它将起作用 CompositeFileListF

在这个问题上,我已经碰壁很久了,并且通过多种方式对它进行了测试,再加上对源代码的深入研究,我无法找出它为什么不起作用

我需要一个复合过滤器,这样我可以过滤并提供其他行业标准的轮询检查。下面的代码是问题的核心部分,它位于入站通道适配器中

如果代码中没有addFilternew AcceptOnceFileListFilter,则代码可以正常工作。一旦你把它放进去,就找不到任何文件。如果我将regexpaterFileListFilter从场景中移除,它将起作用

CompositeFileListFilter<File> compositeFileListFilter= new CompositeFileListFilter<File>();
compositeFileListFilter.addFilter(new RegexPatternFileListFilter(".*_CLAIM_.*[.]txt"));
compositeFileListFilter.addFilter(new AcceptOnceFileListFilter<File>());
compositeFileListFilter.addFilter(lastModifiedFilter());

FileReadingMessageSource pollDirectory = new FileReadingMessageSource();    
pollDirectory.setDirectory(new File(pollingDirectory)); 
pollDirectory.setAutoCreateDirectory(false);
pollDirectory.setFilter(compositeFileListFilter);
pollDirectory.setLocker(new NioFileLocker());
更新日期:2016年9月21日: 显示此问题的示例Spring引导应用程序已上载到:
嗯,看来我知道问题出在哪里了

再次查看您的代码:

CompositeFileListFilter<File> compositeFileListFilter= new CompositeFileListFilter<File>();
compositeFileListFilter.addFilter(new RegexPatternFileListFilter("(?i).*_CLAIM_.*[.]txt"));
compositeFileListFilter.addFilter(new AcceptOnceFileListFilter<File>());
compositeFileListFilter.addFilter(lastModifiedFilter());
compositeFileListFilter.addFilter(new IgnoreHiddenFileListFilter());
所以,如果文件足够年轻,我们将跳过它。最终该文件会变旧,但是!!!。您还记得我们以前有AcceptOnceFileListFilter吗?因此,即使该文件已准备好由LastModifiedFileListFilter进行处理,我们也不会通过,因为它已经由AcceptOnceFileListFilter进行了过滤

因此,解决问题的方法是将AcceptOnceFileListFilter移动到链的末尾

更新


另外,请注意从4.3.7版开始提供的ChainFileListFilter:

好吧,您是否很难从我们这边开发一些Spring引导应用程序?或者至少提供Spring集成类别的调试日志。我如何将代码直接打包给Pivotal的你们呢?目前它在一个私有的Git存储库中,如果这是一个足够简单的通用Spring引导应用程序,那么您可以将其公开。如果你的应用程序非常大,我们不打算挖掘到目前为止。尽管您可以授予我的用户查看您的私人回购的权限:我看到了您的代码,谢谢。但正如我所说:这是一个非常大且复杂的应用程序。我没有足够的时间调查所有领域。既然您声称FileReadingMessageSource上的AcceptOnceFileListFilter存在问题,只需尝试本地化代码并提供简单的测试。我已经创建了一个应用程序并对其进行了测试。已上载到GitHub。我已确认您是正确的。我自己也在想order,但在文档或Java文档中找不到任何可以让我得出这个结论的东西。也许这是一种特殊的边缘情况,但也许在AcceptOnceFileListFilter的代码中添加注释会有所帮助。感谢您的快速回复。我面临同样的问题,更改顺序没有帮助,并且检查CompositeFileListFilter.filterFiles方法显示所有文件都发送到所有筛选器您是否介意开始一个新的SO问题,其中包含更多上下文,可能还有一些我们这边的代码?
* The {@link FileListFilter} implementation to filter those files which
* {@link File#lastModified()} is less than the {@link #age} in comparison
* with the current time.
* <p>
* The resolution is done in seconds.