Filter Spring集成SFTP入站适配器未筛选

Filter Spring集成SFTP入站适配器未筛选,filter,sftp,spring-integration,Filter,Sftp,Spring Integration,我一直在尝试让sftp入站适配器使用我的自定义过滤器,甚至使用我在选项中提供的过滤器。出于某种原因,它总是忽略我的过滤器。该模式也非常简单,并且确实与传入的文件名相匹配,如果过滤器被调用的话 有人有什么想法吗 <int-sftp:inbound-channel-adapter id="cobaltInbound" channel="dealerDataInboundChannelAdapterOutputChannel" session-factory="dealerDataSftpSes

我一直在尝试让sftp入站适配器使用我的自定义过滤器,甚至使用我在选项中提供的过滤器。出于某种原因,它总是忽略我的过滤器。该模式也非常简单,并且确实与传入的文件名相匹配,如果过滤器被调用的话

有人有什么想法吗

<int-sftp:inbound-channel-adapter id="cobaltInbound"
channel="dealerDataInboundChannelAdapterOutputChannel"
session-factory="dealerDataSftpSessionFactory"
filter="customInboundFTPFilter"
local-directory="${ftpOutputPath}"
remote-directory="outbound"
delete-remote-files="false"
preserve-timestamp="true"
charset="UTF-8"
local-filter="acceptAllFilter">
<int:poller cron="0 0/5 * * * *" max-messages-per-poll="10" error-channel="logger"/>
</int-sftp:inbound-channel-adapter>

自定义过滤器在大多数情况下是基本的:

public class GenericInboundChannelFilter implements FileListFilter {

    private Pattern pattern;

    public GenericInboundChannelFilter() {
    }

    public GenericInboundChannelFilter(String patternString) {
        this.pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
    }

    @Override
    public List filterFiles(Object[] objects) {
        ArrayList filteredFiles = new ArrayList();

        if (pattern != null && objects != null && objects.length > 0) {
            Object entry = null;
            for (Object file : objects) {
                Matcher matcher;
                if (file instanceof File) {
                    matcher = pattern.matcher(((File) file).getName());
                } else if (file instanceof FileInfo) {
                    matcher = pattern.matcher(((FileInfo) file).getFilename());
                } else {
                    continue;
                }
                if (matcher.find()) {
                    if (entry != null) {
                        //compare the two entries
                        if (file instanceof File) {
                            if (((File) entry).lastModified() < ((File) file).lastModified()) {
                                entry = file;
                            }
                        } else {
                            if (((FileInfo) entry).getModified() < ((FileInfo) file).getModified()) {
                                entry = file;
                            }
                        }
                    } else {
                        entry = file;
                    }
                }
            }
            if (entry != null) {
                filteredFiles.add(entry);
            }
        }

        return filteredFiles;
    }
}
公共类GenericInboundChannelFilter实现FileListFilter{
私有模式;
公共GenericInboundChannelFilter(){
}
公共GenericInboundChannelFilter(字符串模式字符串){
this.pattern=pattern.compile(patternString,pattern.CASE\u不区分大小写);
}
@凌驾
公共列表筛选器文件(对象[]对象){
ArrayList filteredFiles=新的ArrayList();
如果(模式!=null&&objects!=null&&objects.length>0){
对象项=null;
用于(对象文件:对象){
匹配器匹配器;
if(文件的文件实例){
matcher=pattern.matcher(((文件)File.getName());
}else if(FileInfo的文件实例){
matcher=pattern.matcher(((FileInfo)file.getFilename());
}否则{
继续;
}
if(matcher.find()){
if(条目!=null){
//比较这两个条目
if(文件的文件实例){
if(((文件)条目).lastModified()<((文件)文件).lastModified()){
条目=文件;
}
}否则{
if(((文件信息)条目).getModified()<((文件信息)文件).getModified()){
条目=文件;
}
}
}否则{
条目=文件;
}
}
}
if(条目!=null){
filteredFiles.add(条目);
}
}
返回过滤器文件;
}
}

根据您提供的有限信息,看起来还可以;我建议您在调试器中运行它,或者添加一些诊断日志。我想我可能需要添加更多信息。我使用的是SpringInt4.1.2-RELEASE。过滤器实际上是在一个名为customInboundFTPFilter的bean中定义的。我确实添加了一个日志记录通道,并将其提升到调试级别,这样我就可以看到所有可能出错的地方。然而,我没有看到任何错误。它只是跳过过滤器,然后从我指定的目录中检索每个文件。我确实在一个拆分器中捕获了它,所以我能够看到它正在提取所有文件。我还使用了filename regex,以及filename模式。所有这些似乎都被忽略了。很多人都在使用这些标准过滤器,没有任何问题,所以这是另外一回事。我的意思是,您应该将调试日志添加到过滤器中,以记录(或
System.out.println()
)文件名、模式以及匹配是否成功等,以便调试问题所在。确定。我还使用了一个实际的调试器。它从未在过滤器中停止。这基本上就是它令人困惑的原因。