0

いくつかの属性を持つ単純なPOJOがあり、そのうちの1つは列挙型です。これは正常に機能しましたが、enum属性を列挙型のリストに変更すると、GWTでシリアル化例外が発生します。「応答を逆シリアル化できませんでした」。

これは機能します:

public class Report implements Serializable, Comparable<Report> {

    private static final long serialVersionUID = 1L;

    private long id;
    //some more attributes, all serialize fine
    private ReportCategory category; // the enumeration 

    public ReportSVO(){
    }
        //.. generated getters and setters
}

に変更するprivate ReportCategory category;private List<ReportCategory> categories;、(逆)シリアル化の例外が発生しました。

思い切って、列挙型を内部クラスに変更しました:(public enum ReportCategory{...}からpublic class ReportCategory{ private Name categoryName; public enum Name{...}})そして魔法のように、それは機能します。この問題は私に2つの質問を導きます:

  1. これはGWTのバグですか?それとも私は何かが足りないのですか?
  2. この問題を解決するためのより良い方法はありますか?

列挙型自体は以前は機能していたので問題にはならないはずです(列挙型はデフォルトでシリアル化可能です)。また、他のGWTクラスで引数なしのコンストラクターを忘れた場合、またはシリアル化できない属性がある場合、シリアル化例外メッセージは次のようになりました: "com.google.gwt.user.client.rpc.SerializationException:Type'...'このSerializationPolicyによってシリアル化できるタイプのセットには含まれていませんでした。」

GWT2.4を使用しています

4

1 に答える 1

0

結局のところ、私の問題の原因は、サーバー側の POJO クラス (レポート) とクラスの Javascript にコンパイルされたバージョンとの間の不一致でした。これは、クラスを変更してサーバーに再公開したが、クライアント側のコードを再コンパイルするのを忘れていたためです...

したがって、サーバー側では属性はリストであり、クライアント側ではまだ列挙型であり、デシリアライゼーションはもちろん失敗しました。

全体として、かなりの顔の手のひらですが、このスレッドが将来誰かを助けることを願っています.

于 2012-09-25T09:30:53.737 に答える