Cóż za udręka. Błąd nie do rozwiązania. Czyż tak nie reagujemy, gdy pojawia się „dziwny” nieprzewidziany błąd? Zdecydowanie. Najgorzej, gdy wujek Google także nic nie wie na temat błędu.
Korzystając z frameworku GWT, w wersji klient-serwer, konieczne jest operacja serializacji/deserializacji. Błąd jest z tym związany, ale o co w nim chodzi?
Przykładowy błąd zaczerpnięty z konsoli:
Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'java.lang.Integer' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = 1
Mamy tutaj do czynienia z obiektem Integer, którego klasa nie jest zidentyfikowana (jest nieznana) w procesie serializacji.
Rozwiązaniem jest dodanie jawne pola typu Integer do serializowanej klasy.
Kompilator musi wiedzieć, jakich obiektów się spodziewać.
Pole klasy POJO
private Map<String, Object> map;
określa, że działania serializacyjne i deserializacyjne odbywają się na typach String i ogólnym Object.
Dlatego wszelkiego rodzaju ‚castowanie’ nie wchodzi w grę.
Na szczęście problem rozwiązuje jawne dodanie pola określonego typu do klasy POJO, np.
private Integer dummyInteger;
którego zadanie w rzeczywistości ogranicza się wyłącznie do ‚informowania’ kompilatora.
Powyższy błąd był jednym z pierwszych podczas rozpoczynania przygody z GWT/GXT przeze mnie. Spędziłem trochę czasu aby zrozumieć mechanizm serializacji/deserializacji i związany z nimi błąd. Mam nadzieję, że poprzez podzielenie się tym tematem przynajmniej jednej osobie pomogę w rozwiązaniu problemu. Pozdrawiam.