GWT - 无法为类获取类型签名

jpy*_*ams 9 java gwt

我正在开发一个应用程序GWT,它可以搜索不同服务器上的文件.我在名为Search的类中的服务器包中有我的搜索代码.为了帮助搜索找到服务器,我将服务器位置放在名为Login的类中,该类位于共享包中.登录包含身份验证对象,用于存储单个服务器的信息.

调用Search的代码如下:

SearchInterfaceAsync search = GWT.create(SearchInterface.class);
AsyncCallback<Void> callback = new AsyncCallback<Void>() {
    @Override
    public void onFailure(Throwable caught) {
        System.out.println("Error: " + caught.getMessage());
    }
    @Override
    public void onSuccess (Void results) {
        System.out.println("Success!");
    }
};

search.initialize(serverName, login, callback);
search.searchServers(search, variousSearchParameters, callback);
Run Code Online (Sandbox Code Playgroud)

当我运行程序并尝试搜索时,程序打印Error: could not get type signature for class [Lcom.example.test.shared.Authentication;.

身份验证的代码如下:

public class Authentication implements Serializable {

    private static final long serialVersionUID = 5326256122438445301L;

    private String server;
    private String userName;
    private String password;

    public Authentication(String serverName){
        server = serverName;
    }

    public Authentication(String serverName, String user, String pass){
        server = serverName;
        userName = user;
        password = pass;
    }

    public String getServer(){
        return server;
    }

    public String getUserName(){
        return userName;
    }

    public String getPassword() {
        return password;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过更改类型声明,添加序列化,切换到IsSerializible,没有任何作用!

Col*_*rth 12

我试过更改类型声明,添加序列化,切换到IsSerializible,没有任何作用!

您错过了一个:您必须具有默认(零参数)构造函数,否则无法创建新实例.反序列化过程创建一个对象,然后分配字段.

我相信你可以使这个构造函数受到保护,这样开发人员就不会意外地使用它.

  • 我想你甚至可以把它变成'私人'. (3认同)

Pau*_*ett 7

如果它有助于其他人,这些是我最近遇到的这个错误的原因.从客户端向服务器发送对象:

  1. 缺少no-args构造函数 public MyObject() {}
  2. 将成员变量定义为Object(对象无法序列化)
  3. 忘记实现Serializable界面
  4. 使用泛型,其中类型未确定(我认为它<?>导致了问题).
  5. 导入了"标准"类的错误"版本".例如,导入的外部"List"而不是java.util.List.
  6. 拥有java.io.Serializable类型的成员变量.成员变量可以传输客户端 - 服务器正常,但发送回失败.原来这个成员被一个不可序列化的GWT类包裹起来("ServerSerializationStreamReader $ BoundedList").
  7. 具有上述这些问题之一的子对象(成员变量).

GWT中的这些错误可以简单地显示为"500服务器错误",这很难调试.

希望节省一些拉毛.

  • 8.清理并重新编译 (3认同)