2015-03-07 4 views
3

Ниже приведена моя конфигурация. Я смог опросить файлы до недавнего времени. Теперь фильтр всегда получает пустой список файлов. Единственное изменение, которое я сделал, это установить антивирус Касперского. Надеюсь, это не проблема. Я могу успешно получить доступ к ftp из командной строки, а также из браузера.Весенняя интеграция не выбраны файлы

конф:

 <int:channel id="ftpChannel"/> 

<int-ftp:inbound-channel-adapter id="ftpInbound1" 
    channel="ftpChannel" 
    session-factory="ftpClientFactory" 
    charset="UTF-8" 
    local-directory="file:${paths.root}" 
    delete-remote-files="false" 
    temporary-file-suffix=".writing" 
    remote-directory="${file.ftpfolder}" 
    preserve-timestamp="true" 
    auto-startup="true" 
    filter="compositeFilterLocal" 
    > 
    <int:poller max-messages-per-poll="10000" fixed-rate="1000" error-channel="errorChannel"/> 
</int-ftp:inbound-channel-adapter> 

    <int-ftp:outbound-channel-adapter id="ftpOutbound" 
    channel="ftpChannel" 
    session-factory="ftpClientFactory" 
    charset="UTF-8" 
    remote-file-separator="/" 
    auto-create-directory="true" 
    remote-directory="DMS" 
    use-temporary-file-name="true" 
    temporary-file-suffix=".writing"> 

    </int-ftp:outbound-channel-adapter> 

<!-- <bean id="acceptAllFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter" /> --> 
<bean id="compositeFilterLocal" class="org.springframework.integration.file.filters.CompositeFileListFilter"> 
     <constructor-arg> 
      <list> 
       <!-- Ensures that the file is whole before processing it --> 
       <bean class="org.springframework.integration.file.filters.AcceptAllFileListFilter" /> 
       <bean class="com.polling.util.CustomFileFilterLocal"/> 
       <!-- Ensures files are picked up only once from the directory --> 

      </list> 
     </constructor-arg> 
    </bean> 

Пожалуйста, скажите мне, если что-то нужно изменить в нем ... Спасибо

Пожалуйста, дайте мне знать, если требуется больше информации!

EDIT :: Update Если я использую Apache commons-net-3.3 для извлечения одного и того же файла из той же папки, он работает нормально и позволяет мне взять файл и загрузить его. Таким образом, это не имеет никакого отношения к доступу jvm к ftp-сайту.

EDIT :: Код для фильтра прост. В настоящее время я использую его только для сопоставления с образцом.

@Override 
public List<File> filterFiles(File[] files) 
{ 
    List<File> ret = new ArrayList<File>(); 
    Pattern pattern = Pattern.compile(".*?~.*?");//(".*[email protected]*[email protected]*?"); 
    DocumentFile documentFile; 
    Matcher matcher; 
    for (File file : files) 
    { 
     matcher = pattern.matcher(file.getName()); 
     if(matcher.find())// matching the input file name pattern 
     { 
      //get key and documentfile 
      //create sha key to check file existance 
      String key = EncodeUtil.generateKey(file); 
      documentFile = documentDaoImpl.getDocumentFile(key,Constants.INPROGRESS); 
      if (documentFile != null) 
      { 
       ret.add(file); 
      } 
     }/*else 
     { 
      file.delete(); 
     }*/ 
    } 
    return ret; 
} 

Я успешно работал с этим, по крайней мере, пару месяцев, и теперь внезапно у меня нет файлов! В настоящее время я использую выражение таймера cron и буду делать ftp, используя apache commons-net в запущенном классе. Кажется, что такой отход должен делать ftp, несмотря на наличие весеннего тега ftp.

+0

любой помощи? Пожалуйста, – kavita

+0

Извините, но на самом деле информации недостаточно. Любые ошибки в журнале? Что делает ваш 'CustomFileFilterLocal'? Можете ли вы отлаживать классы Spring Integration для FTP, чтобы убедиться, что 'FtpSession' возвращает для команды' LS' - 'AbstractInboundFileSynchronizer'? –

+0

В журнале не было ошибок, только сообщение передано 0 файлов. Могу ли я проверить каталог, в котором он работает, в фильтре? – kavita

ответ

1

Я построил проект с конфигурацией, которую вы использовали, и все работает нормально.

Есть несколько штук в коде (не писали здесь), что может привести к отбрасывать файлы в фильтре, и что вы должны проверить (добавление сообщений журнала поможет):

if (matcher.find())// matching the input file name pattern 
{ 
    // get key and documentfile 
    // create sha key to check file existance 

    // TODO: does this call throw any exception? return null? 
    String key = EncodeUtil.generateKey(file); 
    documentFile = documentDaoImpl.getDocumentFile(key, Constants.INPROGRESS); 
    if (documentFile != null) { 
     ret.add(file); 
    } 
    else { 
     // TODO: Log here that your DAO implementation did not return anything for this specific file 
    } 
} 
    else { 
     // TODO: Log here that the file does not meet the naming convention 
} 
Смежные вопросы