Spring integration 文件轮询器FileListFilter强制转换异常

Spring integration 文件轮询器FileListFilter强制转换异常,spring-integration,Spring Integration,在我喝可乐之前做一些探索性的工作 我正在尝试创建一个简单的入站通道适配器来监视目录中的新ZIP文件 为了处理经常出现的“是否完成了?”问题,我正在尝试调整发布的示例,以合并一个FileListFilter,它检查文件的修改时间 但是,我得到以下例外情况: a boolean result is requiredclass java.util.ArrayList is not assignable to class java.lang.Boolean at org.springframework.

在我喝可乐之前做一些探索性的工作

我正在尝试创建一个简单的入站通道适配器来监视目录中的新ZIP文件

为了处理经常出现的“是否完成了?”问题,我正在尝试调整发布的示例,以合并一个FileListFilter,它检查文件的修改时间

但是,我得到以下例外情况:

a boolean result is requiredclass java.util.ArrayList is not assignable to class java.lang.Boolean
at org.springframework.util.Assert.isAssignable(Assert.java:368)
at org.springframework.integration.filter.AbstractMessageProcessingSelector.accept(AbstractMessageProcessingSelector.java:61)
at org.springframework.integration.filter.MessageFilter.handleRequestMessage(MessageFilter.java:103)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:134)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)
我用一个基于文件扩展名的简单路由器很好地解决了这个问题,但当我用这个过滤器替换它时,它就崩溃了。似乎实际的文件列表是断言试图转换为布尔值的

是否不可能在入站适配器和出站适配器之间连接筛选器?或者我必须自己在筛选器中将文件移动到目标吗?(链接示例中的操作方式)

以下是配置:

<int-file:inbound-channel-adapter id="filePoller" directory="file:input" channel="filesChannel" filename-pattern="*.zip">
   <int:poller fixed-rate="2000" max-messages-per-poll="10" />
</int-file:inbound-channel-adapter>
<int:filter input-channel="filesChannel" ref="lastModifiedFileFilter" output-channel="zipFilesOut"/>

<bean id="lastModifiedFileFilter" class="FileFilterOnLastModifiedTime">
    <property name="timeDifference" value="10000"/>     
</bean>
<int-file:outbound-channel-adapter id="zipFilesOut" directory="file:target/output/zip" delete-source-files="true" />

以下是过滤器: 导入java.io.File

import org.springframework.integration.file.filters.AbstractFileListFilter;

public class FileFilterOnLastModifiedTime extends AbstractFileListFilter<File> {

Long timeDifference = 1000L;

@Override
protected boolean accept(File file) {

    long lastModified = file.lastModified();
    long currentTime = System.currentTimeMillis();

    return (currentTime - lastModified) > timeDifference ;
}

public void setTimeDifference(Long timeDifference) {
    this.timeDifference = timeDifference;
   }

}
import org.springframework.integration.file.filters.AbstractFileListFilter;
公共类FileFilterOnLastModifiedTime扩展了AbstractFileListFilter{
长时差=1000L;
@凌驾
受保护的布尔接受(文件){
long lastModified=file.lastModified();
长currentTime=System.currentTimeMillis();
返回(currentTime-lastModified)>时差;
}
公共无效设置时差(长时差){
这个。时差=时差;
}
}

应该使用
过滤器
属性将
文件过滤器上次修改时间
bean提供给入站适配器

<int-file:inbound-channel-adapter id="filePoller" directory="file:input" channel="zipFilesOut" filename-pattern="*.zip"
        filter="lastModifiedFileFilter">
   <int:poller fixed-rate="2000" max-messages-per-poll="10" />
</int-file:inbound-channel-adapter>

内联
元素是一个简单的POJO,它接受一些参数并返回一个布尔值

由于您提供的是一个
AbstractFileListFilter
,因此框架试图调用
FilterFile
,它接受一个数组并返回一个
列表,而不是布尔值