我有一段时间返回通过RPC实现IsSerializable的对象的ArrayList。 IsSerializable pojo包含一个变量,一个String,并且有一个0参数构造函数。我从战争中删除了.gwt.rpc文件,但仍然得到:
com.google.gwt.user.client.rpc.SerializationException: Type 'com.test.myApp.client.model.Test' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = com.test.myApp.client.model.Test@17a9692
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)
我正在使用GWT 2.0.2和jdk 1.6.0_18。
关于可能发生的事情或我做错了什么的任何想法?
以下是Test类的代码,远程方法返回ArrayList。我甚至修改了它的代码,只返回一个Test的实例,结果相同:上面的例外。
package com.test.myApp.client.model;
import com.google.gwt.user.client.rpc.IsSerializable;
public class Test implements IsSerializable{
private String s;
public Test() {}
public Test(String s) {
this.s = s;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
}
非常感谢帮助!涡
答案 0 :(得分:5)
这可能听起来很愚蠢,但您的代码中是否有Test的默认构造函数,而不仅仅是您在此处发布的代码版本?我遇到了同样的错误,谷歌搜索它,尝试了几个像干净/重建的建议,添加serialVersionUID,没有一个工作。然后我搜索了更多,并找到了一个建议,以确保您尝试序列化的类具有默认构造函数。我没有,我一加了一个,就行了。我不知道为什么修复它,但确实如此。
答案 1 :(得分:2)
我还在我的类中添加了一个空构造函数,但是它运行正常。
答案 2 :(得分:1)
远程方法需要返回ArrayList<Test>
,而不仅仅是ArrayList
,以便GWT了解Test
的实例需要序列化。
答案 3 :(得分:1)
我习惯使用Serializable接口声明,因此这个答案可能不适用。
Eclipse总是提示我为任何Serializable类创建一个serialVersionUID成员。
private static final long serialVersionUID = 2388319784164372900L;
有人认为只是打了我,你的版本中有些东西不同步。我建议你做两件事:a)项目|清洁,然后b)GWT编译项目。
答案 4 :(得分:1)
我也遇到了与ArrayList相同的问题。我刚刚添加了一个空构造函数,它工作正常。 (我的课程已经实现了Serializable)
答案 5 :(得分:0)
无法加载或其Class对象
你的战争中是否包含com / test / myApp / client / model / Test.class?
答案 6 :(得分:0)
这些情况会导致GWT序列化引发错误:
1)您的类没有实现Serializable或IsSerializable。 2)没有默认构造函数 3)GWT无法将您的类添加到“白名单”,因为对代码的静态分析并未显示您的类将包含在RPC中。对于这种情况,我创建一个“WhiteList”操作/结果RPC对(遵循命令模型)并确保操作对象具有失败的相关类的成员。有时您可能会发现一个对象作为RPC调用的一部分返回到非泛化集合中,而GWT没有提供包含它的线索。在这种情况下,将其添加到“WhiteList”动作类也有帮助。
答案 7 :(得分:0)
我注意到您的类位于“com。 test .myApp.client.mode”包中,表明它是一个“测试”类(并不属于您预期的部署) 。
你的gwt模块文件(myApp.get.xml)实际上是在com.test.myApp吗?
如果是这样,您选择的包裹名称很差。避免在主包名称中加入“test” - 惯例规定这意味着它是一个测试包。
如果没有,请尝试将您的类移动到“主”包,例如“com。 mycompany .myApp.client.mode”(假设您的get模块文件位于com.mycompany.myApp中)