2013-01-07 2 views
0

J'essaie de stocker un objet Java personnalisé (ProjectData) défini dans un fichier FTP. La classe ProjectData implémente l'interface Sérialisable. J'utilise le client FTP net apache Commons. J'ai une classe personnalisée FtpClient, qui a une instance de Commons FTP Client. Je me connecte, télécharge un fichier, télécharge un fichier, storeFileStream en utilisant cette classe. Quand j'essaie d'appeler la fonction saveProjectData , il lance une exception lors de l'exécution de save.writeObject (data).Stocker ObjectOutputStream dans FTP provoque java.net.SocketException: connexion causée par le logiciel interrompue: erreur d'écriture du socket

java.net.SocketException: Software caused connection abort: socket write error 
at java.net.SocketOutputStream.socketWrite0(Native Method) [:1.6.0_23] 
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) [:1.6.0_23] 
at java.net.SocketOutputStream.write(SocketOutputStream.java:136) [:1.6.0_23] 
at org.apache.commons.net.io.SocketOutputStream.write(SocketOutputStream.java:72) [:2.2] 
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847) [:1.6.0_23] 
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1792) [:1.6.0_23] 
at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:699) [:1.6.0_23] 

Alors quel est le problème dans le code, je prêt que la connexion est déjà fermée, en attendant de sauver object.But je ne pouvais pas trouver où le bug.

public void saveProjectData(ProjectData data, String filePath) { 
    ftpClient = new FtpClient(ftpConfig, logger); 
    ObjectOutputStream save = null; 
    try { 
     ftpClient.connect(); 
     save = new ObjectOutputStream(ftpClient.storeFileStream(filePath)); 
    } catch (Exception e) { 
     // ignore 
    } 
    try { 
     if (save == null) { 
      ftpClient.reconnect(); 
      save = new ObjectOutputStream(ftpClient.storeFileStream(filePath)); 
     } 
     save.writeObject(data); 
     save.flush(); 
    } catch (IOException e) { 
     logger.error("Error creating file:" + filePath); 
     throw new FileTransferException("Could not create file:" + filePath, e); 
    } finally { 
     if (save != null) { 
      try { 
       save.close(); 
      } catch (Exception e) { 
       logger.warn("Error closing writer of file:" + filePath, e); 
      } 
      save = null; 
     } 
     if (ftpClient != null) { 
      try { 
       ftpClient.disconnect(); 
      } catch (Exception e) { 
       // ignore 
      } 
      ftpClient = null; 
     } 
    } 
} 

    /** 
* Stores the file in FTP 
* @param filePath 
* @return 
*/ 
public OutputStream storeFileStream(String filePath) { 
    try { 
     client.setFileType(FTP.BINARY_FILE_TYPE); 
     return client.storeFileStream(filePath); 
    } catch (Exception ioe) { 
     log.warn("Could not store file:" + filePath, ioe); 
     return null; 
    } 
} 

Répondre

0

Je lis que la connexion est déjà fermée

Non, vous avez bien lu (ou vous devez avoir lu) que la connexion est déjà fermée par les pairs.

Vous avez peut-être dépassé une limite de téléchargement.

Questions connexes