Справочная информация:
Я использую net.schmizz.sshj.sftp.SFTPClient
для ежедневного SFTP-доступа к многочисленным файлам - все по разным адресам. Все файлы передаются без ошибок, за исключением одного файла, который, кажется, передает и затем генерирует прерванную транспортную исключительную ситуацию после отправки файла (поэтому он был проигнорирован).
Проверка журналов выглядит следующим образом Файл - и только этот файл - каждый день вызывает исключения из-за разорванных транспортных соединений. Однако файл все еще отправляется (поскольку в журналах об этом говорится, и клиент получил файл).
Проблема:
Вчера клиент заявил, что не получил файл. Поэтому мне интересно, если проблема заканчивается, или, возможно:
Может ли сбой очистки сеанса SFTP привести к тому, что файл не будет отправлен - даже после успешного завершения PUT? Что может Я делаю, чтобы предотвратить это исключение?
Код (упрощенный):
Этот блок кода отлично работает для всех файлов, кроме вышеупомянутого файла.
try {
sftpClient = sshClient.newSFTPClient();
// Transfer the file(s)
if (getPut == SFTP.ACTION_PUT) {
sftpClient.put(srcFilename, dstFilename);
log.info("file sent");
}
} catch (Throwable t) {
log.error("failure", t);
} finally {
try {
if (sftpClient != null) { sftpClient.close(); }
} catch (Throwable t) {
log.error("could not clean up SFTP session", t);
}
}
Журналы:
Журналы показывают, что файл был отправлен и что sftpClient.put(srcFilename, dstFilename);
выполнено:
2020-03-04 17:38:36,398 [main] INFO com.myPackage.SFTP - file sent
2020-03-02 17:42:04,690 [main] ERROR com.myPackage.SFTP - Could not clean up SFTP session
net.schmizz.sshj.connection.ConnectionException: Broken transport; encountered EOF
at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:32)
at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:26)
at net.schmizz.concurrent.Promise.deliverError(Promise.java:95)
at net.schmizz.concurrent.Event.deliverError(Event.java:74)
at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
at net.schmizz.sshj.connection.channel.AbstractChannel.notifyError(AbstractChannel.java:238)
at net.schmizz.sshj.connection.channel.direct.SessionChannel.notifyError(SessionChannel.java:229)
at net.schmizz.sshj.common.ErrorNotifiable$Util.alertAll(ErrorNotifiable.java:35)
at net.schmizz.sshj.connection.ConnectionImpl.notifyError(ConnectionImpl.java:258)
at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:601)
at net.schmizz.sshj.transport.Reader.run(Reader.java:65)
Caused by: net.schmizz.sshj.transport.TransportException: Broken transport; encountered EOF
at net.schmizz.sshj.transport.Reader.run(Reader.java:57)