2015-05-12 2 views
1

Выполнение поисковых работ до того, как я выпью kool-aid.File Poller FileListFilter cast exception

Я пытаюсь создать простой входящий адаптер канала для контроля каталога для новых ZIP-файлов.

Для того, чтобы иметь дело с вездесущим «все в порядке?» вопрос, я пытаюсь адаптировать приведенный пример 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) 

Я это хорошо работает с простой маршрутизатор на основе расширения файла, но когда я заменил его с этим фильтром она развалилась. Кажется, фактический список файлов - это то, что Assert пытается передать в Boolean.

Невозможно ли иметь фильтр, подключенный между входящим и исходящим адаптерами? Или я должен сам переместить файл в пункт назначения в фильтр? (Как это делается в связанном примере)

Вот конфигурации:

<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; 
    } 

} 

ответ

0

Ваш FileFilterOnLastModifiedTime боб должен быть предоставлен въездного адаптера с помощью атрибута 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, который принимает некоторый аргумент и возвращает логическое значение.

Поскольку вы обеспечиваете AbstractFileListFilter, структура пытается вызвать filterFiles, который принимает массив и возвращает List, а не логическое.