2016-02-10 4 views
1

Я новичок в Spring интеграции. Я пытаюсь внедрить фильтр sftp клиента, чтобы перечислить файлы на SFTP-сервере. Я получаю «Пустое поле, которое, возможно, не было инициализировано» в конструкторе. Можете ли вы предложить мне получить список имен файлов с сервера sftp.Как реализовать пользовательский SftpSimplePatternFileListFilter?

Я не знаю, что пошло не так в моем коде.

Заранее спасибо

код Java

public class SFTPFileFilter extends SftpSimplePatternFileListFilter { 






    public SFTPFileFilter(String pattern) { 
     super(pattern); 
     // TODO Auto-generated constructor stub 
    } 


    final static Logger logger = LoggerFactory.getLogger(SFTPFileFilter.class); 

    private final Queue<File> seen; 

    private final Set<File> seenSet = new HashSet<File>(); 

    private final Object monitor = new Object(); 

    public static int fileCount = 0; 

    @Autowired 
    private SourcePollingChannelAdapter sftpInbondAdapter; 



    public List<File> filterFiles(File[] files) 
    { 
     List<File> accepted = new ArrayList<File>(); 
      for (File file : files) { 
       System.out.println(file.getName()); 
       accepted.add(file); 
      } 
      return accepted; 
    } 


    public boolean accept(File file) { 
     synchronized (this.monitor) { 
      if (this.seenSet.contains(file)) { 
       logger.info(file.getName()+" is already copied earlier"); 
       return false; 
      } 
      if (this.seen != null) { 
       if (!this.seen.offer(file)) { 
        File removed = this.seen.poll(); 
        this.seenSet.remove(removed); 
        this.seen.add(file); 
       } 
      } 
      this.seenSet.add(file); 
      return true; 
     } 
    } 


} 

ответ

0
private final Queue<File> seen; 

Вы не инициализирует это поле в конструкторе.

Вы не можете расширять его таким образом; просто переопределите метод, подобный этому ...

public List<File> filterFiles(File[] files) { 
     for (File file : files) { 
      System.out.println("received:" + file.getName()); 
     } 
     List<File> filtered = super.filterFiles(files); 
     for (File file : flteredFiles) { 
      System.out.println("after filter:" + file.getName()); 
     } 
     return filteredFiles; 
} 
Смежные вопросы