Подтвердить что ты не робот

Ошибка SerializationPolicy при выполнении RPC из приложения GWT

Я получаю следующее исключение:

com.google.gwt.user.client.rpc.SerializationException: Тип 'java.lang.Long' не был включен в набор типов, которые могут быть сериализованы этим SerializationPolicy или его объектом класса не могут быть загружены. В целях безопасности этот тип не будет сериализован

с использованием GWT 2.1 и встроенного сервера Jetty. Согласно документам, этот тип определенно сериализуем... Как включить его в SerializationPolicy?

4b9b3361

Ответ 1

Нужно включить избыточный метод в службу RPC, который "белит" для нескольких объектов. Это возникает из-за использования дженериков, GWT не может обязательно определить, какой объект я могу сериализовать для включения в какой-то общий.

Я включил все типы, которые могут быть (un) сериализованы как члены объекта (SerializableWhitelist). Я добавил метод к объекту сервлета RPC, например:

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

Стоит отметить, что вам нужно включать типы данных в белый список как аргумент и как возвращаемый тип, так как GWT, по-видимому, поддерживает две отдельные политики сериализации.

Ответ 2

Здесь ссылка, которая должна решить проблему: http://developerlife.com/tutorials/?p=131

Пользовательский класс сериализуется, если:

  • класс присваивается IsSerializable или java.io.Serializable либо потому, что он реализует один из этих интерфейсов, либо потому, что он получен из суперкласса, который реализует один из этих интерфейсов.
  • все нечетные, непереходные поля экземпляров классов являются сериализуемыми
  • класс имеет конструктор с открытым значением по умолчанию (нулевой аргумент)

Ответ 3

Попробуйте удалить файлы *.gwt.rpc в каталоге war/app, очистите и перестройте.

Одно замечание: вы должны избегать долгого или долгого, если это возможно, потому что они - эмулируется на GWT (потому что нет собственного Javascript long) и очень
медленный. Вместо этого используйте int, где бы вы ни были.

Ответ 5

FWIW, у меня была эта проблема, но мой тип "Объект" был скрыт за генерализованными классами. Само сообщение об ошибке было неправильным.

Итак, если один из ваших методов rpc включает класс:

class Xxx<T> implements IsSerializable {...

Он должен измениться на:

class Xxx<T extends IsSerializable> implements IsSerializable {...

Ответ 6

Проблема также может быть вызвана тем, что код на вашей локальной машине, на которой выполняется хост-режим, не совпадает с кодом на внешнем сервере, с которым вы подключаетесь через RPC. Так что в моем случае я отсутствовал git нажимал на свою локальную машину, чтобы соответствовать тому, что было развернуто на внешнем сервере. Изменения были минимальными, просто новое свойство в одном из классов, которые были включены в gwt.rpc, но это было уже достаточно, чтобы имена файлов gwt.rpc md5 были разными и, следовательно, возникла вышеупомянутая ошибка.

Ответ 7

Вдохновленный http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8

Использование eclipse и maven и gwt 2.1.1

Скомпилируйте и разверните gwt war.

Попробуйте использовать OOPHM, запущенный из Eclipse.

Это не удастся для меня.

Это будет генерировать в журналах сервера:

ОШИБКА: файл политики сериализации 'blah.gwt.rpc' не найден; вы забыли включить его в это развертывание?

ПРЕДУПРЕЖДЕНИЕ: Не удалось получить SerializationPolicy '94DEC228B2828D3A5897FEE3D6845A40' для модуля 'http://blah: 8080/BlahUI/BlahUI/'; будет использоваться политическая политика сериализации, совместимая с 1.3.3. В результате вы можете получить SerializationExceptions.

И тогда

Исключение при отправке входящего вызова RPC com.google.gwt.user.client.rpc.SerializationException: Введите '[LpathToClass;' не был назначен для "com.google.gwt.user.client.rpc.IsSerializable" и не имел настраиваемого поляризатора поля. Для целей безопасности этот тип не будет сериализован.: instance = [LpathToClass; @9d524af   на com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:614)

Теперь, когда были созданы дополнительные файлы gwt.rpc(либо с помощью плагина eclipse/maven, который знает?)

Перекомпилировать (даже чистый компилятор будет работать, потому что файлы gwt.rpc не находятся в целевой папке, мои файлы gwt.rpc OOPHM находятся в той же папке, что и hpoint), и передислоцируются. Этот новый файл войны будет содержать сгенерированные файлы gwt.rpc.

Перезапустите OOPHM из Eclipse.

Работает для меня.

Ответ 8

Другой FWIW: Я считаю, что я выяснил аналогичную проблему в классе enum, изменив модификатор доступа одиночного, одного конструктора аргументов по умолчанию (без модификатора) до 'private'. В любом случае, это не нарушило его, потому что теперь он работает именно так.

Ответ 9

Я столкнулся с этой ошибкой и полностью застрял на 1 день. Затем я пришел к следующему быстрому решению:

Убедитесь, что ваши классы DTO или Entities следуют правилам сериализуемого интерфейса. Это единственное, что вам нужно сделать, потому что остальная часть проблем будет связана с созданием сборки. Поэтому, если вы используете maven, убедитесь, что очистить сборку и очистить весь кеш браузера. Я разрешил свои проблемы с этим. Надеюсь, это поможет. Благодарю!

Ответ 10

Убедитесь, что класс находится в общей папке. Это то, чего я не хватало.