mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dave Roberts <dave.robe...@saaconsultants.com>
Subject Re: onDownloadEnd, onUploadEnd firing when aborting the transfer
Date Mon, 21 Oct 2013 10:27:00 GMT
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).

View raw message