2012-05-04 6 views
1

GWT의 RPC 메커니즘과 함께 사용하는 Serializable Objects가 있습니다. "id", "revision"등과 같은 공통 필드를 포함하는 Object를 모든 하위 클래스로 만들기로 결정했습니다. 그러나 GWT가 수퍼 클래스 필드를 직렬화하지 않기 때문에 모든 슈퍼 클래스 필드는 클라이언트 측에서 null로 설정됩니다.수퍼 클래스 및 직렬화 가능 클래스의 필드 serialize 방법

각 클래스에 대해 CustomFieldSerializer를 작성하지 않고도 수퍼 클래스 필드를 직렬화 할 수있는 방법은 무엇입니까? 가능한가?

예 :이 클라이언트 측에 GWT의 RPC 메커니즘을 통해 보낼 때

public class Super { 
    private String id; 

    public String getId() { 
     return id; 
    } 

} 

public class Sub extends Super implements Serializable { 
    private String name; 

    // more stuff here 
} 


// on the client side, inside an AsyncCallback 
onSuccess(Sub sub) { 
    assert(sub.getId() != null); 
} 

그래서, 나는 서브의 인스턴스의 'ID'필드에 null 값을 얻는다. 나는 서버에서 ID가 null이 아님을 확인했다. 나 또한 행운을하지 않고 Serializable을 구현하는 수퍼 클래스를 만들려고했다.

모든 조언을 환영합니다.

+0

문제를 신뢰할 수있는 최소한의 코드 스 니펫을 제시하십시오. –

+1

이것은 매우 간단합니다. 나는 그것이 필요하다고 생각하지 않았습니다 ...하지만 어쨌든 그것을 추가 할 것입니다. – Renato

답변

1

gwt의 모든 클래스를 직렬화하려면 수퍼 클래스에서 Serializable을 구현해야합니다. 그것은 않는 슈퍼 클래스에서 파생 직접, 또는 때문에 어느 자바 직렬화 또는 GWT IsSerializable 인터페이스

1.It 구현 :

은 (GWT 사이트에서) 다음과 같은 요구 사항을 충족해야 빈을 전달합니다.

2.Its final이 아닌, 비 transient 인스턴스 필드는 직렬화 자체입니다

3.It는 모든 액세스 수정과 기본 (제로 인수) 생성자 (예 : 개인 푸() {} 작동)가

문제의 원인이 다를 수 있습니다.

1.Verify 클래스는 (인수 없음) 기본 생성자

2.Verify 클래스는 Serializable를 구현 또는 IsSerializable 또는 직렬화 확장하거나 직렬화 구현 클래스를 확장하는 인터페이스를 구현하는이 있는지

클래스가 클라이언트. * 패키지에 있는지 확인하거나 ...

4.Verify, 클래스가 클라이언트. * 패키지에 없으면 GWT xml 모듈 정의에서 컴파일됩니다. 기본적으로 존재합니다. 클래스가 다른 패키지에 있으면 소스에 추가해야합니다. 예를 들어 클래스가 domain. * 아래에있는 경우 xml에 xml을 추가해야합니다. 클래스는 서버 패키지에 속할 수 없다는 점에 유의하십시오!

5. 다른 GWT 프로젝트의 클래스를 포함하려면 XML 모듈 정의에 상속을 추가해야합니다. 예를 들어 클래스 Foo가 com.dummy.domain 패키지에 있으면 모듈 정의에 추가해야합니다.

6. jar로 릴리스 된 다른 GWT 프로젝트의 클래스를 포함하는 경우 GWT는 클라이언트에 전달 된 클래스의 Java 소스도 다시 컴파일하기 때문에 jar에도 소스 코드가 포함되어 있는지 확인하십시오.

+0

작동하지 않는다, 시도했다 .... – Renato

+0

거기에 문제가 해결되었습니다 Serializable ... 만든 그 날 멈추고 슈퍼에서 필드에 문제가 해결 된 후 Super Serializable, 그것은 실제로 일한 ... – Renato

0

Super의 데이터를 직렬화하려면 Serializable로 설정해야합니다.

관련 문제