2012-04-05 4 views
2

Ich versuche, ein Objekt über GWT RPC (GWT 2.4) zu senden. Der Gegenstand umfasst ein Objekt, das das folgende Feld umfasst:GWT RPC SerializationException

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

Foo ist definiert als:

public interface Foo extends Serializable { 

} 

Wenn fooMap leer ist, es funktioniert gut. Wenn es ausgefüllt wird, schlägt der GWT RPC mit einem SerializationException fehl. (. Der Server ist nie getroffen) Die einzige Art von Foo in fooMap ist von dieser Klasse:

public class FooImpl implements Foo { 

    private static final long serialVersionUID = 1L; 

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

    ... 
} 

Was mache ich falsch? FooImpl sollte keine Probleme verursachen. Jede Klasse hat einen Konstruktor ohne Argumente. Ich brauche keine Getter und Setter für jedes private Feld jedes serialisierten Objekts, oder? Ist Class<? extends Foo> ein Problem?

+0

Wo ist die Definition des Objekts selbst? Enthält es etwas außer deiner 'fooMap'? –

+0

Das Objekt selbst ist 'Serializable' und funktioniert gut, wenn 'fooMap' entfernt oder leer ist. –

+0

Meine Neigung ist es, die GWT-Serialisierungsmerkmale der von Ihnen verwendeten Map-Implementierung zu betrachten. – stickfigure

Antwort

2

Class<? extends Foo> ist höchstwahrscheinlich ein Problem. Soweit ich weiß, GWT einfach nicht wissen, wie serialisieren-deserialize Class Instanz (es hat nur Code zum Serialisieren von normalen Objekten, Enums und Arrays und es gibt keine CustomFieldSerializer). Versuchen Sie also, Klassennamen anstelle von Class Instanzen zu verwenden.