SerializationException:可序列化类型集中不包括类型
在我的Google Web Toolkit项目中,我遇到以下错误: com.google.gwt.user.client.rpc.SerializationException:类型“your.class.Type”未包含在此可由此序列化策略序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型SerializationException:可序列化类型集中不包括类型,serialization,gwt-rpc,Serialization,Gwt Rpc,在我的Google Web Toolkit项目中,我遇到以下错误: com.google.gwt.user.client.rpc.SerializationException:类型“your.class.Type”未包含在此可由此序列化策略序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型 此错误的可能原因是什么?GWT跟踪一组可以序列化并发送到客户端的类型your.class.Type显然不在此列表中。类似的列表存储在.gwt.rpc文件中。这些列表是生成的,因此编辑这些列
此错误的可能原因是什么?GWT跟踪一组可以序列化并发送到客户端的类型
your.class.Type
显然不在此列表中。类似的列表存储在.gwt.rpc
文件中。这些列表是生成的,因此编辑这些列表可能是无用的。这些列表是如何生成的还不清楚,但您可以尝试以下方法:
- 确保
实现your.class.Type
java.io.Serializable
- 确保
具有公共的无参数构造函数您的.class.Type
- 确保.class.Type的
成员也这样做
- 检查您的程序是否不包含不可序列化类型的集合,例如
。如果此类集合包含.class.Type,并且已序列化,则会发生此错误ArrayList
- 使
实现成为您的.class.Type
。此标记接口专门用于应发送到客户端的类。这对我来说不起作用,但我的类还实现了可序列化的可序列化
,
,所以这两个接口可能不能很好地协同工作
- 另一个选项是使用
作为成员创建一个伪类,并向RPC接口添加一个获取并返回该伪类的方法。这迫使GWT编译器将伪类及其成员添加到序列化白名单中your.class.Type
非静态成员类在GWT2.4中遇到SerializationException,我在类似这样的远程服务中遇到了同样的问题
public List<X> getX(...);
成功了。有趣的是,唯一的参数是一个列表,Y是一个接口,一点问题都没有…我遇到了这个问题,如果您使用JPA或Hibernate,这可能是因为尝试返回查询对象而没有创建新对象,并将相关字段复制到新对象中。看看下面,这是我在谷歌集团看到的
@SuppressWarnings("unchecked")
public static List<Article> getForUser(User user)
{
List<Article> articles = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
Query query = pm.newQuery(Article.class);
query.setFilter("email == emailParam");
query.setOrdering("timeStamp desc");
query.declareParameters("String emailParam");
List<Article> results = (List<Article>) query.execute(user.getEmail
());
articles = new ArrayList<Article>();
for (Article a : results)
{
a.getEmail();
articles.add(a);
}
}
finally
{
pm.close();
}
return articles;
}
@SuppressWarnings(“未选中”)
公共静态列表getForUser(用户用户)
{
列表文章=空;
PersistenceManager pm=PMF.get().getPersistenceManager();
尝试
{
Query Query=pm.newQuery(Article.class);
query.setFilter(“email==emailParam”);
query.setOrdering(“timeStamp desc”);
declareParameters(“字符串emailParam”);
List results=(List)query.execute(user.getEmail
());
articles=新的ArrayList();
(a条:结果)
{
a、 getEmail();
加入(a);
}
}
最后
{
pm.close();
}
归还物品;
}
这对我帮助很大,希望它为其他人指明了正确的方向。当您的类有JDO注释时,这为我修复了它(除了bspoel答案中的要点):这意味着异步调用的返回类型没有序列化。要对此进行排序,请在返回类型类中实现java.io.seriablizable接口。太棒了!我没有添加默认构造函数。。。不知道序列化类型的构造函数的用途。。。。但我的老板在修好后给我解释了--再次感谢:)你是个救命恩人。。刚刚在链接中获得了更多信息这是否可能不适用于
enum
类型?谢谢!我也有类似的问题。我有一个签名,看起来像集合foo();我用一个实现(ArrayList)替换了集合,它成功了。将类移到外部是另一种选择。
public X[] getX(...);
@SuppressWarnings("unchecked")
public static List<Article> getForUser(User user)
{
List<Article> articles = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
Query query = pm.newQuery(Article.class);
query.setFilter("email == emailParam");
query.setOrdering("timeStamp desc");
query.declareParameters("String emailParam");
List<Article> results = (List<Article>) query.execute(user.getEmail
());
articles = new ArrayList<Article>();
for (Article a : results)
{
a.getEmail();
articles.add(a);
}
}
finally
{
pm.close();
}
return articles;
}