2012-04-05 132 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實例。