序列化从 GWT 应用程序内执行 RPC 时的策略错误

2022-09-02 02:24:00

我得到以下异常:

com.google.gwt.user.client.rpc.SerializationException:类型 'java.lang.Long' 未包含在可由此 SerializationPolicy 序列化的类型集中,或者无法加载其 Class 对象。出于安全考虑,此类型将不会被序列化

使用GWT 2.1和内置的Jetty服务器。根据文档,这种类型绝对是可序列化的...如何将其包含在序列化策略中?


答案 1

以下是应该可以解决问题的链接:http://developerlife.com/tutorials/?p=131

在以下情况下,用户定义的类是可序列化的:

  1. 该类可分配给 IsSerializable 或 java.io.Serializable,要么是因为它实现了这些接口之一,要么是因为它派生自实现其中一个接口的超类。
  2. 类的所有非最终、非瞬态实例字段都是可序列化的
  3. 该类具有公共默认值(零参数)构造函数

答案 2

需要在 RPC 服务中包含一个多余的方法,该方法将许多对象“列入白名单”。这是因为使用了泛型,GWT无法确定我可能正在序列化以包含在某些泛型中的对象。

我包括了所有可能需要(取消)序列化为对象成员的类型()。我在 RPC servlet 对象中添加了一个方法,如下所示:SerializableWhitelist

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

值得注意的是,您需要将白名单数据类型作为参数和返回类型包括在内,因为GWT显然维护着两个单独的序列化策略。