diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/inbound/FtpInboundFileSynchronizer.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/inbound/FtpInboundFileSynchronizer.java index da7f52e5c9..a9ded70385 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/inbound/FtpInboundFileSynchronizer.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/inbound/FtpInboundFileSynchronizer.java @@ -33,6 +33,7 @@ import org.springframework.integration.file.remote.session.SessionFactory; import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer; import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import org.springframework.util.FileCopyUtils; /** @@ -69,27 +70,32 @@ public class FtpInboundFileSynchronizer extends AbstractInboundFileSynchronizer< } public void synchronizeToLocalDirectory(File localDirectory) { + Session session = null; try { - Session session = this.sessionFactory.getSession(); + session = this.sessionFactory.getSession(); Assert.state(session != null, "failed to acquire an FTP Session"); - Collection beforeFilter = session.ls(this.remotePath); - FTPFile[] entries = (beforeFilter == null) ? new FTPFile[0] : - beforeFilter.toArray(new FTPFile[beforeFilter.size()]); - Collection fileList = this.filterFiles(entries); - try { - for (FTPFile ftpFile : fileList) { + Collection files = session.ls(this.remotePath); + if (!CollectionUtils.isEmpty(files)) { + Collection filteredFiles = this.filterFiles(files.toArray(new FTPFile[]{})); + for (FTPFile ftpFile : filteredFiles) { if ((ftpFile != null) && ftpFile.isFile()) { copyFileToLocalDirectory(session, ftpFile, localDirectory); } } } - finally { - session.close(); - } } catch (IOException e) { throw new MessagingException("Problem occurred while synchronizing remote to local directory", e); } + finally { + if (session != null) { + try { + session.close(); + } + catch (Exception ignored) { + } + } + } } private boolean copyFileToLocalDirectory(Session session, FTPFile ftpFile, File localDirectory)