首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件Poller FileListFilter强制转换异常

文件Poller FileListFilter强制转换异常
EN

Stack Overflow用户
提问于 2015-05-12 12:51:45
回答 1查看 839关注 0票数 1

在我喝助兴酒之前做些探索性工作。

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

为了应付永远存在的“它完成了吗?”问题是,我正在尝试修改发布的这里示例,使其包含一个检查文件修改时间的FileListFilter。

但是,我得到了以下例外:

代码语言:javascript
复制
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)

我用一个基于文件扩展名的简单路由器可以很好地工作,但是当我用这个过滤器替换它时,它就崩溃了。似乎实际的文件列表是断言试图转换为布尔值的内容。

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

下面是配置:

代码语言:javascript
复制
<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;

代码语言:javascript
复制
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;
   }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 13:27:31

您的FileFilterOnLastModifiedTime bean应该使用filter属性提供给入站适配器。

代码语言:javascript
复制
<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,它接受一些参数并返回一个布尔值。

因为您提供了一个AbstractFileListFilter,所以框架试图调用filterFiles,它接受一个数组并返回一个List,而不是一个布尔值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30191451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档