You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Brunninger, Martin" <Ma...@ops.de> on 2004/12/21 08:12:10 UTC

AW: [net] FTPClient.retrieveFileStream returns null even when no error is encountered

Seems you forgot to do a completePendingCommand() after closing the streams.
Refer to API-Doc.

Best Regards
Martin Brunninger

> -----Ursprüngliche Nachricht-----
> Von: Tom Werges [mailto:twerges@idc-global.com]
> Gesendet: Dienstag, 21. Dezember 2004 07:45
> An: commons-user@jakarta.apache.org
> Betreff: [net] FTPClient.retrieveFileStream returns null even when no
> error is encountered
> 
> 
> The FTPClient.retrieveFileStream method is returning null on 
> all invocations
> after the first one on the same connection. The javadoc 
> indicates that a
> null will only be returned in case of an error, in which case 
> I can check
> the reply code for the exact problem. But the reply code 
> indicates that
> everything went fine with no errors, and a null is still returned.
> 
> The retrieveFile method works properly even if I call it 
> repeatedly. However
> the retrieveFile method is not suitable for my purposes 
> because I require an
> InputStream for updating a gui.
> 
> I haven't entered this into the bug database yet because I'm 
> assuming I'm
> making an elementary mistake. However I was not able to find 
> any information
> on this issue in the mailing list archives or in the FAQ.
> 
> The code is as follows:
> 
> InputStream is = null;
> OutputStream os = null;
> 
> for (TransferItem item : xferItems) {
> 
>   try {
>  
>     os = new FileOutputStream(new File(item.getLocalPath())); //local
> destination
> 
>     // retrieveFile method WORKS PROPERLY:
>     //
>     //    ftpClient.retrieveFile(item.getServerPath(), os);
> 
> 
>     // however, retrieveFileStream (following) does not work properly:
> 
>     is = ftpClient.retrieveFileStream(item.getServerPath());
>     System.out.printf("Retrieve file [%s], code:%s, reply:%s",
>                       item.getServerPath(),
>                       ftpClient.getReplyCode(),
>                       ftpClient.getReplyString());
>     if (is == null) {
>         System.out.println("InputStream was null! Skipping...");
>         continue;
>     }
>     copyStream(is, os);
> 
>   } finally {
>     if (is != null) is.close();
>     if (os != null) os.close();
>   }
> }
> 
> The initial invocation works fine, after which I always get a 
> null plus a
> message that everything is fine.
> 
> One possibly relevant detail is that the reply codes are not 
> always the
> same. The first invocation has a reply code of 150 ("Opening 
> BINARY mode
> data connection"), whereas the second has 200 ("PORT command 
> successful.
> Consider using PASV."). Subsequent invocations yield 150 once again.
> 
> I'm using jdk1.5 on linux connecting to a vsftp server on linux.
> 
> Thanks for any help,
> Tom W
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org