GWT - 无法获得 class 的类型签名
GWT - Could not get type signature for class
我正在开发一个在不同服务器上搜索文件的应用程序 GWT。我在名为 Search 的 class 中的服务器包中有我的搜索代码。为了帮助搜索找到服务器,我将服务器位置保存在一个名为 Login 的 class 中,它位于共享包中。 Login 包含 Authentication 对象,它存储单个服务器的信息。
调用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);
当我 运行 程序并尝试搜索时,程序打印 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;
}
}
我试过更改类型声明、添加序列化、切换到 IsSerializible,但没有任何效果!
I have tried changing the type declaration, adding Serialization, switching to IsSerializible, and nothing works!
你错过了一个:你必须有一个默认的(零参数)构造函数,否则无法创建新实例。反序列化过程创建一个对象,然后分配字段。
我相信你可以保护这个构造函数,这样开发人员就不会无意中使用它。
为了帮助其他人,这些是我最近 运行 遇到此错误的原因。将对象从客户端发送到服务器:
- 缺少无参数构造函数
public MyObject() {}
- 将成员变量定义为
Object
(对象无法序列化)
- 忘记实现
Serializable
接口
- 在类型未确定的情况下使用泛型(我认为这是
<?>
引起的问题)。
- 导入了 "standard" class 的错误 "version"。例如一个外国 "List" 进口而不是 java.util.List.
- 有一个java.io.Serializable类型的成员变量。成员变量可以传输客户端-服务器 ok,但发回失败。原来该成员在上升过程中被 GWT class 包装,该 GWT class 不可序列化 ("ServerSerializationStreamReader$BoundedList")。
- 子对象(成员变量)存在上述问题之一。
GWT 中的这些错误可以简单地显示为“500 个服务器错误”,很难调试。
希望这样可以省去一些麻烦。
我的问题是错误中指定的 class 上缺少 'IsSerializable' 标志接口。
我正在开发一个在不同服务器上搜索文件的应用程序 GWT。我在名为 Search 的 class 中的服务器包中有我的搜索代码。为了帮助搜索找到服务器,我将服务器位置保存在一个名为 Login 的 class 中,它位于共享包中。 Login 包含 Authentication 对象,它存储单个服务器的信息。
调用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);
当我 运行 程序并尝试搜索时,程序打印 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;
}
}
我试过更改类型声明、添加序列化、切换到 IsSerializible,但没有任何效果!
I have tried changing the type declaration, adding Serialization, switching to IsSerializible, and nothing works!
你错过了一个:你必须有一个默认的(零参数)构造函数,否则无法创建新实例。反序列化过程创建一个对象,然后分配字段。
我相信你可以保护这个构造函数,这样开发人员就不会无意中使用它。
为了帮助其他人,这些是我最近 运行 遇到此错误的原因。将对象从客户端发送到服务器:
- 缺少无参数构造函数
public MyObject() {}
- 将成员变量定义为
Object
(对象无法序列化) - 忘记实现
Serializable
接口 - 在类型未确定的情况下使用泛型(我认为这是
<?>
引起的问题)。 - 导入了 "standard" class 的错误 "version"。例如一个外国 "List" 进口而不是 java.util.List.
- 有一个java.io.Serializable类型的成员变量。成员变量可以传输客户端-服务器 ok,但发回失败。原来该成员在上升过程中被 GWT class 包装,该 GWT class 不可序列化 ("ServerSerializationStreamReader$BoundedList")。
- 子对象(成员变量)存在上述问题之一。
GWT 中的这些错误可以简单地显示为“500 个服务器错误”,很难调试。
希望这样可以省去一些麻烦。
我的问题是错误中指定的 class 上缺少 'IsSerializable' 标志接口。