文件轮询器 FileListFilter 转换异常
File Poller FileListFilter cast exception
喝苦艾酒前做探索性工作。
我正在尝试创建一个简单的入站通道适配器来监视新 ZIP 文件的目录。
为了处理一直存在的 "is it complete?" 问题,我正在尝试调整发布的示例 here 以合并一个检查文件修改时间的 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;
}
}
您的 FileFilterOnLastModifiedTime
bean 应该使用 filter
属性提供给入站适配器。
<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>
内联 <filter/>
元素是一个简单的 POJO,它接受一些参数和 returns 一个布尔值。
由于您提供了一个 AbstractFileListFilter
,框架正在尝试调用 filterFiles
,它接受一个数组和 returns 一个 List
,而不是一个布尔值。
喝苦艾酒前做探索性工作。
我正在尝试创建一个简单的入站通道适配器来监视新 ZIP 文件的目录。
为了处理一直存在的 "is it complete?" 问题,我正在尝试调整发布的示例 here 以合并一个检查文件修改时间的 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;
}
}
您的 FileFilterOnLastModifiedTime
bean 应该使用 filter
属性提供给入站适配器。
<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>
内联 <filter/>
元素是一个简单的 POJO,它接受一些参数和 returns 一个布尔值。
由于您提供了一个 AbstractFileListFilter
,框架正在尝试调用 filterFiles
,它接受一个数组和 returns 一个 List
,而不是一个布尔值。