2012-04-05 3 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 пуст, он работает нормально. Когда он заполняется, RPC GWT выходит из строя с SerializationException. (. Сервер никогда не попал) Единственный тип Foo в fooMap из этого класса:

public class FooImpl implements Foo { 

    private static final long serialVersionUID = 1L; 

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

    ... 
} 

Что я делаю неправильно? FooImpl не должно вызывать никаких проблем. Каждый класс имеет конструктор no-arg. Мне не нужны геттеры и сеттеры для каждого частного поля каждого сериализованного объекта, не так ли? Есть Class<? extends Foo> проблема?

+0

Где находится определение объекта? Он содержит что-либо помимо вашего 'fooMap'? –

+0

сам объект является 'Serializable' и отлично работает, когда' fooMap' удален или пуст. –

+0

Моя склонность - посмотреть характеристики GWT-сериализации используемой вами карты. – stickfigure

ответ

2

Class<? extends Foo>, скорее всего, проблема. Насколько я знаю, GWT просто не знает, как сериализовать-десериализовать экземпляр Class (он имеет код только для сериализации обычных объектов, перечислений и массивов и нет CustomFieldSerializer). Поэтому попробуйте использовать имена классов вместо Class экземпляров.