我遇到以下异常:
com.google.gwt.user.client.rpc.SerializationException:类型'java.lang.Long'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化
使用GWT 2.1和内置的Jetty服务器。根据文档,这种类型绝对是可序列化的...如何将它包含在SerializationPolicy中?
答案 0 :(得分:28)
以下是应该解决问题的链接: http://developerlife.com/tutorials/?p=131
如果符合以下条件,则用户定义的类是可序列化的:
- 该类可分配给IsSerializable或java.io.Serializable,因为它实现了这些接口之一,或者因为它是从实现其中一个接口的超类派生的。
- 所有类的非最终非瞬态实例字段都是可序列化的
- 该类具有公共默认(零参数)构造函数
醇>
答案 1 :(得分:20)
需要在RPC服务中包含一个多余的方法,它将许多对象“白名单”。这是因为泛型的使用,GWT无法确定哪些对象可能序列化以包含在一些通用中。
我包含了可能需要(非)序列化为对象成员的所有类型(SerializableWhitelist
)。我在RPC servlet对象中添加了一个方法,如:
public SerializableWhitelist junk(SerializableWhitelist l) { return null; }
值得注意的是,需要将白名单数据类型包括为参数和返回类型,因为GWT显然维护了两个单独的序列化策略。
答案 2 :(得分:8)
尝试删除war / app目录中的* .gwt.rpc文件,清理并重建。
有一点需要注意:如果可能的话,你应该避免长或长,因为它们是
在GWT上模拟(因为没有本地Javascript长)并且非常多
慢。尽可能使用int。
答案 3 :(得分:4)
仅供参考我将此作为GWT错误提出:http://code.google.com/p/google-web-toolkit/issues/detail?id=5811
我们会看到他们说的话。
答案 4 :(得分:3)
FWIW,我遇到了这个问题,但我的“对象”类型隐藏在一般化的类之后。错误消息本身是错误的。
因此,如果你的一个rpc方法涉及一个类:
class Xxx<T> implements IsSerializable {...
需要更改为:
class Xxx<T extends IsSerializable> implements IsSerializable {...
答案 5 :(得分:1)
问题也可能是因为您运行托管模式的本地计算机上的代码与通过RPC连接的外部服务器上的代码不同。所以在我的情况下,我错过了本地机器上的git pull,以匹配外部服务器上部署的内容。这些变化很小,只是gwt.rpc中包含的一个类中的一个新属性,但这已经足够gwt.rpc md5文件名不同,因此发生了上述错误。
答案 6 :(得分:0)
受http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8启发
使用eclipse和maven以及gwt 2.1.1
编译并部署gwt war。
尝试使用从Eclipse启动的OOPHM。
这对我来说不会。
这将在服务器日志中生成:
错误:找不到序列化策略文件'blah.gwt.rpc';你忘了把它包含在这个部署中吗?
警告:无法获取模块'http:// blah:8080 / BlahUI / BlahUI /'的SerializationPolicy'94DEC228B2828D3A5897FEE3D6845A40';将使用遗留的1.3.3兼容的序列化策略。您可能会遇到SerializationExceptions。
然后
调度传入的RPC调用时发生异常 com.google.gwt.user.client.rpc.SerializationException:输入'[LpathToClass;'不能分配给'com.google.gwt.user.client.rpc.IsSerializable'并且没有自定义字段序列化程序。出于安全考虑,此类型不会被序列化:instance = [LpathToClass; @ 9d524af 在com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:614)
现在已经生成了额外的gwt.rpc文件(通过eclipse / maven插件谁知道?)
重新编译(即使是干净的编译也可以,因为gwt.rpc文件不在目标文件夹中,我的OOPHM gwt.rpc文件与入口点html在同一个文件夹中)并重新部署。这个新的war文件将包含生成的gwt.rpc文件。
从Eclipse重新启动OOPHM。
适合我。
答案 7 :(得分:0)
另一个FWIW:我相信我通过改变在枚举类中解决了类似的问题 默认情况下单个,一个参数构造函数的访问修饰符(无修饰符) '私人'。无论如何,这样做并没有打破它,因为它现在正在以这种方式运作。
答案 8 :(得分:0)
我遇到了这个错误,完全被困了1天。然后我开始关注以下快速解决方案:
确保遵循可序列化接口规则的DTO或实体类。 它是您唯一需要做的事情,因为其余的问题将与您的构建创建有关。 因此,如果您正在使用maven,请确保清理构建并清除所有浏览器缓存。 我用这个解决了我的问题。我希望它会有所帮助。谢谢!
答案 9 :(得分:0)
确保该课程位于共享文件夹中。 这就是我的失踪。