2012-08-22 4 views
0

은 여기에 보내려고 클래스의 :클래스가 GWT-RPC를 사용하여 직렬화되지 않습니까?

public class DummyClass implements Serializable, IsSerializable { 

    private Map<String, Object> properties = new HashMap<String, Object>(); 


    public DummyClass() { 
    // stuff 
    } 
    public Object getValue(String key) { 
    return properties.getValue(key); 
    } 
    public void setValue(String key, Object value) { 
    properties.put(key, value); 
    } 
} 

하지만 GWT RPC의 메서드에 매개 변수로 보내려고 할 때, 나는 우산 예외를 얻을.

DummyClass dummy = new DummyClass(); 
    dummy.setValue("foo", "bar"); 
    ServiceImpl impl = Gwt.create(SampleService.class).doSomething(dummy); 

나는 Map properties에 지정된 일반 유형을 제거 할 수 있습니다 ...하지만 다른 Object보다 나 Serializable 프로퍼티 맵에 저장 될 수 있는지에 대한 제한은 없다.

클래스의 인스턴스는 Java의 표준 직렬화를 사용하여 잘 직렬화됩니다.

또한 GWT 컴파일러에서 경고 또는 오류가 표시되지 않습니다.

내가 작동하도록 시도 할 수있는 사람이 있습니까?

+0

Java 직렬화의 기본 사항 : Object 유형을 직렬화하도록 Java에 요청하는 것은 은행원에게 수표를주고 수표에 은행원에게 말하기를 말한 것과 같습니다. RPC 데이터 전송 객체 내에 무기한 객체를 캡슐화/포함하지 마십시오. –

+0

그렇다면 어떻게 문자열 키 맵을 다양한 값 (날짜, 문자열, 정수와 같은 유형)으로 보낼 수 있습니까? 이것은 자바 직렬화를 사용하여 잘 정리합니다 ... – Cuga

답변

0

반환 유형 getValue() 및 매개 변수 유형 setValue()을 좀 더 구체적으로 (예 : java.io.Serializable) 바꿀 수 있습니다.

개체가 Serializable 만 구현하는 경우에도 괜찮습니다.이 외에도 IsSerializable을 구현할 필요가 없습니다.

+0

Serializable은 매우 일반적이며 컴파일러가 Serializable을 구현하는 _all_ 클래스를 찾고 sourcepath에있게합니다. 이것에 의해, 모든 필드 및 모든 서브 클래스에 대해서 필드 직렬자가 생성됩니다. 이 특별한 브랜드의 팽창을 일으키기 전에 이것이 정말로 원하는 것인지 확인하십시오. –

+0

오른쪽 - 사실 더 구체적인 유형을 제공해야합니다. –

+0

이것은 도움이되지 않았다 .... 일반 매개 변수 'Object'를 'Serializable'로 바꾸십시오 ... – Cuga

관련 문제