2012-03-30 74 views
2

我第一次使用commons-net軟件包,並使用下面的代碼通過SSL從FileZilla服務器上ftp文件。我在運行程序時遇到錯誤。代碼中有什麼錯誤?commons-net Java代碼中的FTPSClient錯誤

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import org.apache.commons.net.PrintCommandListener; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPReply; 
import org.apache.commons.net.ftp.FTPSClient; 

public class CommonsNetFTPSTest { 
public static void main(String[] args) throws Exception { 
    System.setProperty("javax.net.debug", "ssl"); 

    String server = "XXX.XXX.XXX.XXX"; 
    String username = "USER_TEST"; 
    String password = "ABCD1234"; 
    String remoteFile = "/Data/Input/PH240819"; 
    String localFile = "PH240819"; 
    String protocol = "SSL"; // TLS/null (SSL) 
    int port = 990; 
    int timeoutInMillis = 10000; 
    boolean isImpicit = true; 

    FTPSClient client = new FTPSClient(protocol, isImpicit); 

    client.setDataTimeout(timeoutInMillis); 
    client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); 

    System.out.println("################ Connecting to Server ################################"); 

    try 
    { 
     int reply; 
     System.out.println("################ Connect Call ################################"); 
     client.connect(server, port); 

     client.login(username, password); 

     System.out.println("################ Login Success ################################"); 

     //client.setFileType(FTP.BINARY_FILE_TYPE); 
     client.setFileType(FTP.NON_PRINT_TEXT_FORMAT); 
     client.execPBSZ(0); // Set protection buffer size 
     client.execPROT("P"); // Set data channel protection to private 
     client.enterLocalPassiveMode(); 

     System.out.println("Connected to " + server + "."); 
     reply = client.getReplyCode(); 

     if (!FTPReply.isPositiveCompletion(reply)) 
     { 
      client.disconnect(); 
      System.err.println("FTP server refused connection."); 
      System.exit(1); 
     } 

     client.listFiles(); 
     boolean retrieved = client.retrieveFile(remoteFile, new FileOutputStream(localFile)); 
    } 
    catch (Exception e) 
    { 
     if (client.isConnected()) 
     { 
      try 
      { 
       client.disconnect(); 
      } 
      catch (IOException ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
     System.err.println("Could not connect to server."); 
     e.printStackTrace(); 
     return; 
    } 
    finally 
    { 
     //client.disconnect(); 
     client.logout(); 
     System.out.println("# client disconnected"); 
    } 
} 
} 

錯誤是如下─

main, WRITE: SSLv3 Handshake, length = 56 
main, READ: SSLv3 Change Cipher Spec, length = 1 
JsseJCE: Using cipher RC4 from provider TBD via init 
CipherBox: Using cipher RC4 from provider from init IBMJCE version 1.2 
JsseJCE: Using MessageDigest MD5 from provider IBMJCE version 1.2 
main, READ: SSLv3 Handshake, length = 56 
*** Finished 
verify_data: { 7, 71, 60, 4, 21, 222, 78, 66, 166, 137, 172, 57, 64, 131, 115, 89, 94, 128, 164, 80, 172, 124, 246, 14, 224, 91, 88, 128, 21, 44, 149, 161, 130, 112, 250, 11 } 
*** 
cached session [Session-1, SSL_RSA_WITH_RC4_128_MD5] 
%% Cached client session: [Session-1, SSL_RSA_WITH_RC4_128_MD5] 
Exception in thread "main" java.lang.NullPointerException 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:441) 
    at org.apache.commons.net.ftp.FTPSClient.sendCommand(FTPSClient.java:535) 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:520) 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:569) 
    at org.apache.commons.net.ftp.FTP.quit(FTP.java:781) 
    at org.apache.commons.net.ftp.FTPClient.logout(FTPClient.java:706) 
    at CommonsNetFTPSTest.main(CommonsNetFTPSTest.java:85) 

看起來不會超過該登錄調用點吧。用戶名和密碼都是正確的。我有一個SSL證書,這是由託管FileZilla服務器的人給我的,在使用openSSL將證書解壓到certfile.txt文件後,我使用下面的命令將它安裝在我的java/jre/lib/security/cacerts中 -

keytool -import -alias "cert" -file certfile.txt -keystore /usr/java5/jre/lib/security/cacerts 

我仍然無法確定錯誤的原因。根據錯誤文本之前的執行日誌,它看起來像是成功連接和握手,但之後出現了問題。我正在從Unix機器(AIX 5.3)(這是客戶端機器)運行程序。

幫助!

+0

我找到了解決方案。我的類路徑指向一箇舊版的commons-net jar文件。 – Annjawn 2012-03-30 21:40:02

回答

1

我的類路徑指向舊版的commons-net jar文件。