FTPClient在Apache Wicket中不可序列化

时间:2012-12-11 20:21:34

标签: wicket apache-commons serializable ftp-client apache-commons-net

我正在使用Apache Wicket和Apache Commons Net。 但是当我定义

new FTPClient(); //apache commons net library

我得到了一个例外

org.apache.commons.net.ftp.FTPClient at.erpel.as2connector.testtool.protocols.FTP.client
[class=org.apache.commons.net.ftp.FTPClient] <----- field that is not serializable

我该怎么办?

2 个答案:

答案 0 :(得分:3)

我不认为在多个请求中存储FTPClient实例是一个好主意。您应该创建FTPClient,使用它,然后立即丢弃它。这意味着您可以将其存储在局部变量中,而不必担心它不可序列化。 (顺便说一下,这是有道理的,因为它有一个复杂的状态,包括活动的TCP连接。)

答案 1 :(得分:0)

感谢您的建议!

我也用2个可能性来解决它:

1)你可以使场瞬态:

transient FTPClient() client;

2)创建一个使用FTPClient的父类的单例

public class AnyClass implements Serializable {

    private static AnyClass instance;

    private AnyClass() {

    }

    public static AnyClass getInstance() {
        if (instance == null) {
            instance = new AnyClass();
        }
        return instance;
    }

    FTPClient client = new FTPClient();
    ...
}

3)正如biziclop所建议的那样:仅为FTP通信创建一个自己的类。