2012-04-05 4 views
2

GWT RPC (GWT 2.4)에서 개체를 보내려고합니다. 개체는 다음 필드를 포함하는 객체를 포함 fooMap가 비어있는 경우GWT RPC SerializationException

public interface Foo extends Serializable { 

} 

, 그것은 잘 작동 :로

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

Foo가 정의된다. 채워지면 GWT RPC는 SerializationException으로 실패합니다. (. 서버가 충돌되지 않습니다) fooMapFoo의 유일한 유형은이 클래스에서입니다 : 내가 잘못 뭐하는 거지

public class FooImpl implements Foo { 

    private static final long serialVersionUID = 1L; 

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

    ... 
} 

? FooImpl은 문제가되지 않아야합니다. 모든 클래스에는 인수가없는 생성자가 있습니다. 모든 직렬화 된 객체의 모든 private 필드에 getter와 setter가 필요하지 않습니다. Class<? extends Foo>은 문제가됩니까?

+0

개체 자체의 정의는 어디에 있습니까? 'fooMap' 외에도 아무것도 들어 있지 않습니까? –

+0

객체 자체는'Serializable'이며'fooMap'이 제거되거나 비어있을 때 잘 동작합니다. –

+0

제 성향은 사용중인 Map 구현의 GWT 직렬화 특성을 보는 것입니다. – stickfigure

답변

2

Class<? extends Foo>이 문제 일 가능성이 큽니다. 내가 아는 한 GWT는 단순히 Class 인스턴스를 직렬화하는 방법을 알지 못한다 (일반 객체, 열거 형 및 배열을 직렬화하기위한 코드가 있으며 CustomFieldSerializer가 없다). 따라서 Class 인스턴스 대신 클래스 이름을 사용하십시오.