On 18/10/2013 15:34, Gentian Hila wrote: > Documentation says that these events are fired on successful download or > upload.
That would appear to be incorrect. > Is there a way to guarantee that they fire only on success or a some way > that I can check within the methods if the download or upload was complete? Currently these callbacks will get called irrespective of whether the command was successful. One way to detect success/failure would be to write your own Ftplet implementation without sub-classing DefaultFtplet. You will then need to provide your own implementation of:- FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) Which as you can see, is passed the FtpReply that the STOR/RETR commands returned. You can use that to determine if the transfter was successful by looking for a code of 'FtpReply.REPLY_226_CLOSING_DATA_CONNECTION', or simply calling the isPositive() method. You would obviously have to check that the request is one of the file transfer commands. Another option is via the FtpStatistics methods of setUpload and setDownload or the FileObserver notifyUpload/notifyDownload. These are only called upon a successful transfer. The advantage of these is that you will be passed information about the file, that the Ftplet isn't given. Unfortunately setting your own implementation currently requires the use of internal classes and methods, and this won't be possible if you're using an OSGi container. There is an outstanding ticket and fix to remedy this though, if you're not using OSGi or don't mind running a patched version of the code (with no guarantee that the patch will ever make an official release).
