GWT RPC сериализация и циклические ссылки - проблема курицы и яйца - PullRequest
2 голосов
/ 17 февраля 2011

Я использую GWT 2.1.1 и клиент-серверное соединение, используя AsyncService (не RequestFactory).У меня есть объект, который возвращает объект «фонд».У фонда есть ссылка на объект «дистрибьютор», который сам имеет коллекцию объектов «фонд».

В одном сценарии я возвращаюсь с сервера, фонд «foo», у которого ссылка дистрибьютора имеет «foo»фонды "," бар "и" джо ".Это распространенный бизнес-сценарий.При десериализации на стороне клиента я получаю сообщение об ошибке, поскольку ссылка «foo» в сборе средств у дистрибьютора заканчивается без заполнения значений.В частности, идентификатор фонда (строка) не заполняется, и это используется в реализации хэш-кода.Во время десериализации на стороне клиента средства «bar» и «joe» десериализуются должным образом, но foo не выполняется, т. Е. Десериализуется только с несколькими свойствами.

В данном случае происходит то, что когда «foo»будучи десериализованным, он имеет несколько десериализованных свойств и затем gwt пытается десериализовать дистрибьютора.Свойство Foo с идентификатором фонда еще не десериализовано.Таким образом, когда сбор средств у дистрибьютора десериализован и обнаружен «foo», десериализатор возвращает ссылку на текущий десериализованный «foo», у которого нет идентификатора фонда.Поэтому, когда GWT пытается добавить его в Set (HashSet) в распространителе, реализация хэш-кода завершается неудачей.

Поэтому мой вопрос в том, есть ли способ заставить GWT сериализовать определенные свойства (в этомcase fund-id, от которого зависит hashCode) сначала?

1 Ответ

2 голосов
/ 17 февраля 2011

Обнаружено, что это на самом деле известная проблема.Для всех, кто сталкивается с этим и находит этот вопрос с помощью поиска:

http://code.google.com/p/google-web-toolkit/issues/detail?id=3577

Я опубликую информацию о том, как реализовать собственный сериализатор, как только я прочитаюна этом так у людей есть более полная картина.Я приглашаю других сделать то же самое.

...