Проблема сериализации GWT - PullRequest
7 голосов
/ 19 мая 2010

У меня чертовски много времени возвращается ArrayList объектов, которые реализуют IsSerializable через RPC. Pojo IsSerializable содержит одну переменную, String, и имеет конструктор с 0 параметрами. Я удалил файл .gwt.rpc из своей войны, и все равно получаю:

com.google.gwt.user.client.rpc.SerializationException: Type 'com.test.myApp.client.model.Test' 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 = com.test.myApp.client.model.Test@17a9692
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)

Я использую GWT 2.0.2 с jdk 1.6.0_18.

Есть идеи, что может происходить или что я делаю не так?

Вот код класса Test, и удаленный метод возвращает ArrayList. Я даже изменил код так, чтобы он просто возвращал один экземпляр Test с тем же результатом: исключение выше.

package com.test.myApp.client.model;

import com.google.gwt.user.client.rpc.IsSerializable;

public class Test implements IsSerializable{
    private String s;

    public Test() {}

    public Test(String s) {
        this.s = s;
    }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}

Большое спасибо за помощь! Eddy

Ответы [ 8 ]

5 голосов
/ 26 сентября 2010

Это может звучать глупо, но у вас есть код по умолчанию для Test в вашем коде, а не только для версии кода, которую вы разместили здесь? Я столкнулся с той же ошибкой, погуглил, попробовал несколько предложений, таких как очистка / перестройка, добавление serialVersionUID, но ни одно из них не сработало. Затем я искал больше и нашел предложение, чтобы убедиться, что ваш класс, который вы пытаетесь сериализовать, имеет конструктор по умолчанию. Мой не сделал, и как только я добавил один, это сработало. Я не знаю, почему это исправило это, но это произошло.

2 голосов
/ 28 сентября 2010

Я также добавил в свой класс пустой конструктор, в котором возникла проблема, и он работал нормально.

1 голос
/ 12 декабря 2012

У меня тоже была такая же проблема с ArrayList. Я просто добавил пустой конструктор, и это сработало. (Мой класс уже реализован Serializable)

1 голос
/ 21 мая 2010

Я привык использовать объявление интерфейса Serializable, поэтому этот ответ может не применяться.

Eclipse всегда предлагает мне создать элемент serialVersionUID для любого класса Serializable.

private static final long serialVersionUID = 2388319784164372900L;

Одна мысль, которая просто ударила меня, что-то не синхронизировано в ваших сборках. Я предлагаю вам сделать две вещи: а) Проект | Очистите, а затем б) GWT Compile Project.

1 голос
/ 20 мая 2010

Удаленный метод должен возвращать ArrayList<Test>, а не просто ArrayList, так что GWT понимает, что экземпляры Test необходимо будет сериализовать.

0 голосов
/ 18 октября 2010

Я заметил, что ваш класс находится в пакете "com. test .myApp.client.mode", предполагая, что это класс "test" (и не является частью ожидаемого развертывания).

Является ли ваш файл модуля gwt (myApp.get.xml) фактически в com.test.myApp?

Если это так, вы плохо выбрали названия пакетов. Старайтесь не ставить «test» в названиях ваших основных пакетов - соглашение гласит, что это тестовый пакет.

Если нет, попробуйте переместить ваш класс в «основной» пакет, например «com. mycompany .myApp.client.mode» (при условии, что файл вашего модуля get находится в com.mycompany.myApp).

0 голосов
/ 01 октября 2010

В следующих случаях сериализация GWT приводит к ошибке:

1) Ваш класс не реализует Serializable или IsSerializable.2) Нет конструктора по умолчанию. 3) GWT не может добавить ваш класс в «белый список», потому что статический анализ кода не показывает, что ваш класс будет включен в RPC.Для таких случаев я создаю пару RPC «белый список» действие / результат (следуя модели команд) и гарантирую, что у объекта действия есть члены соответствующих классов, которые не работают.Иногда вы можете обнаружить, что объект возвращается как часть вызова RPC в неотобранной коллекции, и GWT не имеет ни малейшего представления о его включении.В этом случае также помогает добавление его в класс действий «Белый список».

0 голосов
/ 23 июня 2010

или его объект класса не может быть загружен

Включен ли в вашу войну com / test / myApp / client / model / Test.class?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...