2012-04-05 93 views
2

我想通过GWT RPC(GWT 2.4)发送一个对象。所述对象包括对象,它包括以下字段:GWT RPC SerializationException

@Serialized 
private Map<Class<? extends Foo>, Foo> fooMap = ImmutableMap.of(); 

Foo定义为:

public interface Foo extends Serializable { 

} 

fooMap是空的,它工作正常。当它填充时,GWT RPC将失败,并显示SerializationException。 (服务器从不打)的FoofooMap唯一的类型是从该类:

public class FooImpl implements Foo { 

    private static final long serialVersionUID = 1L; 

    private long bar; 
    private float baz; 
    private int batz; 

    ... 
} 

我在做什么错? FooImpl不应该导致任何问题。每个类都有一个无参数构造函数。对于每个序列化对象的每个私有字段,我不需要getter和setter,对吧?是Class<? extends Foo>有问题吗?

+0

对象本身的定义在哪里?它是否包含除“fooMap”之外的任何内容? – 2012-04-05 01:09:55

+0

对象本身是'Serializable',并且当'fooMap'被移除或为空时工作正常。 – 2012-04-05 01:10:31

+0

我的倾向是看你正在使用的Map实现的GWT序列化特征。 – stickfigure 2012-04-05 03:45:06

回答

2

Class<? extends Foo>很可能是一个问题。据我所知,GWT根本不知道如何序列化反序列化Class实例(它只有序列化普通对象,枚举和数组的代码,并且没有CustomFieldSerializer)。所以尝试使用类名而不是Class实例。