ConnectionInfo is a JAXB Bean. I just have seen that thunderbird messed up some lines during copy/paste

The connectionInfo is fully initialized, here is a short part of it:

public class ConnectionInfo {

@XmlElement(name = "Name")
private String name;
@XmlElement(name = "Host")
private String host;
@XmlElement(name = "Port")
private int port;
@XmlElement(name = "Username")
private String username;
@XmlElement(name = "Password")
...

The connection to the FTP Server works. The FTP Client is logged in, CWD works, its just the transfer where i have problems.

Am 28.08.2016 um 16:55 schrieb Martin Gainty:
where is connectionInfo initialised?

-M

To: user@commons.apache.org
From: oliver.zem...@gmail.com
Subject: NPE in getRemoteAdress
Date: Sun, 28 Aug 2016 15:50:36 +0200

Hi

i am trying to get some files from a FTP Server. When i use
retrieveFile(), it works, but i would like to add some listeners to it
(how many bytes got transfered etc.) so i used retrieveFileStream().
Now i get some exceptions and no files are downloaded.

This is the part of the code:

@Override public void run() {

      try {
          new File(destDir).mkdirs();
          final File outFile =new File(destDir,ftpFile.getName());
          final FileOutputStream fos =new FileOutputStream(outFile);
          final InputStream inputStream =client.retrieveFileStream(sourceDir 
+ftpFile.getName());
          byte b[] =new byte[4096];//todo: would be nice to have such stuff in 
the appl conf so users can
config it long bytesWritten =0;
          while (inputStream.read(b) != -1) {
              fos.write(b);
              bytesWritten += b.length;
              informDetailListeners(sourceDir +ftpFile.getName(), bytesWritten);
              bytesTransferedTotal += b.length;
              informListeners(bytesTransferedTotal);
          }
          client.completePendingCommand();
          informListenersWeFinishedOneFile(sourceDir +ftpFile.getName(), 
bytesWritten);
          fos.flush();
          fos.close();
          System.out.println(client.getReplyString());
      }catch (Exception ex) {
          System.out.println(client.getReplyString());
          ex.printStackTrace();
      }
}

The NullpointerException occurs in retrieveFileStream() - when i step
into it i will get to FTPClient.java where it says:

final boolean isInet6Address =getRemoteAddress()instanceof Inet6Address;

getRemoteAddress() has this:return _socket_.getInetAddress();
When i try to debug into this, it just jumps into my catch block with a 
NullPointerException.
When i add this method as watch, it says socket not connected - but it must be 
connected ?!

The initialisation of the ftp Client is here:
private void downloadTo(String destinationDir)throws IOException {

      //first, create the destination directory so we can write into that final File file 
=new File(destinationDir +"/" +sfdlFile.getDescription());
      file.mkdirs();

      //set up the connection and go to the directory we want final 
ConnectionInfo connectionInfo =sfdlFile.getConnectionInfo();
      final String sourceDir =sfdlFile.getRemoteSourceDir();

      final FTPClient client =new FTPClient();

      client.connect(connectionInfo.getHost(), connectionInfo.getPort());
      System.out.println(client.getReplyString());
      client.enterLocalPassiveMode();
      System.out.println(client.getReplyString());
      client.login(connectionInfo.getUsername(), connectionInfo.getPassword());
      System.out.println(client.getReplyString());
      client.setFileType(FTP.BINARY_FILE_TYPE);
      System.out.println(client.getReplyString());
      client.changeWorkingDirectory(sourceDir);
      System.out.println(client.getReplyString());

      //now retrieve all files, recursive final ScheduledExecutorService 
scheduledExecutorService = 
Executors.newScheduledThreadPool(sfdlFile.getMaxThreads());
      downloadDirectory(client, sourceDir, destinationDir +"/" 
+sfdlFile.getDescription(), scheduledExecutorService);

      client.disconnect();
      System.out.println(client.getReplyString());
      //inform our downloader we finished }

The FTP Client is connected, the login worked, i get a lot of output from the 
Server which seems to be fine.
Can someone tell me whats wrong with that code? Is there something i did not 
read in handling recursive downloads of (bigger) files ?

The output in my intellij:
220 >>>>>>>>>>>>>>>>>>>>>>>>>

230 User logged in, proceed.

200 Type set to I.

250 Directory changed to /somedirectory

null
null
java.lang.NullPointerException
        at 
org.apache.commons.net.SocketClient.getRemoteAddress(SocketClient.java:672)
        at 
org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:819)
        at 
org.apache.commons.net.ftp.FTPClient._retrieveFileStream(FTPClient.java:1984)
        at 
org.apache.commons.net.ftp.FTPClient.retrieveFileStream(FTPClient.java:1971)
        at 
de.trustserv.jsfdl.app.sfdl.SFDLFileDownloader$DownloadRunnable.run(SFDLFileDownloader.java:145)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

                                        

Reply via email to