
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
14.05.2012, 14:15:56
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
Привет! Совсем недавно столкнулся с достаточно странной ситуацией. Суть проблемы заключается в том, что GWT отказывается сериализовать родительский класс моей DTO-сущности, при том, что саму эту сущность он вполне себе успешно сериализует и добавляет в whitelist RPC. Из-за этого, очевидно, часть полей сущности выбрасывается, потому что getDeclaredFields() делается только для неё, а parent-класс по каким-то причинам считается забаненым. Пытаясь решить проблему, я пришёл к решению со стороны серверного сериализатора, написав кастомную политику сериализации и всё стало нормально. Но, тут внезапно всплыл другой косяк, а именно разница CRC - поскольку версия сущности на клиента сгенерирована без полей parent-класса! И вот сейчас я немного в замешательстве, что делать дальше :-) Структура проекта следующая: Framework -> persistence -> Peristence.gwt.xml Project -> domain -> Domain.gwt.xml <- Persistence.gwt.xml web -> App.gwt.xml <- domain Сборка осуществляется через Maven GWT. P.S 1. Использовать AbstractDTO в качестве return value для одного из методов сервиса пробовал. 2. Все зависимости указаны корректно (<compileArtifactSource/>) 3. Все зависимости деплоятся как source-jars и в них точно есть необходимые для компиляции сущности. 4. Сначала думал, что проблема из-за косвенной зависимости web от persistence, но прямое добавление последней в качестве <inherits> - не помогло. 5. Все сущности Serializable 6. Сделать AbstractDTO - IsSerializable - не выход, потому что persistence не должен иметь зависимости от GWT Помогите мне кто-то! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.05.2012, 14:25:10
|
|||
|---|---|---|---|
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
Cyril A. Karpenko, Вы бы лучше, чем писать столько букв, сам класс, который не сериализуется показали, и исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.05.2012, 14:51:57
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
wessen, Если бы причина могла быть в нём, я бы его сразу же добавил! Но, если вам это поможет: Entity -> JPA entity (добавляется как <super-source/>) /** Модуль persistnce **/ interface IDTO extends Entity, Serializable { public Long getId(); public void setId( Long id ); } public abstract class AbstractDTO extends IDTO { private Long id; public void setId( Long id ) { this.id = id; } public Long getId() { return this.id; } } Persistence.gwt.xml <module> <source path="persistence"/> </module> /** Модуль /persistence **/ /** Модуль domain **/ public interface ICategoryDTO extends IDTO { public String getName(); public void setName( String name ); } public class CategoryDAO extends AbstractDTO implements ICategoryDTO { private String name; public void setName( String name ) { this.name = name; } public String getName() { return this.name; } } Domain.gwt.xml <module> <inherits name="com.somename.Persistence" /> <source path="persistence"/> </module> /** /Модуль domain **/ /** Модуль web **/ @RemoteServiceRelativePath("../rpc/main.do") public interface ApplicationAccessService extends RemoteService { public AbstractDTO loadCategories(); } Web.gwt.xml <module rename-to="Application"> <inherits name='com.google.gwt.user.User' /> <inherits name="com.google.gwt.rpc.RPC"/> <inherits name='com.google.gwt.inject.Inject'/> <inherits name="com.somename.Domain"/> <!-- Specify the app entry point class. --> <entry-point class='com.somename.Application' /> <source path="client"/> <source path='service'/> <super-source path="client/jre"/> </module> /** /Модуль web **/ ----- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.05.2012, 14:52:28
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
Cyril A. Karpenko, Забыл добавить форматирование. Простите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.05.2012, 15:10:12
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
Cyril A. Karpenko, попробуй для CategoryDAO и для его родителя добавить пустой конструктор по-умолчанию. Код: java 1. 2. Пальцем в небо конечно, но я сталкивался с ситуацией когда именно это помогало (т.к. gwt создает js на основе исходников, а не бинарных class файлов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.05.2012, 16:20:45
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
marx_freedom, Ну, у CategoryDTO, в действительности, есть конструктор публичный: Код: java 1. 2. 3. Вот у AbstractDTO его нету. У него есть только закрытый следующего вида: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 21:17:38
|
|||
|---|---|---|---|
|
|||
Проблемы с сериализацией в GWT RPC |
|||
|
#18+
Решил проблему путём использования адаптеров. Проблем, в случае с данным подходом - куча. Но проблема решается. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Для того, чтобы полноценно использовать данный подход, необходимо проксировать все методы вашего RemoveService (см. InvocationHandler) и возможностями рефлексии обходить всю иерархию свойств возвращаемых ими объектов (конечно, если есть необходимость в применении данной логики к ним) и "оборачивать" их в адаптер подобный приведённому выше. Самое сложное, с чем столкнулся в процессе - обработка циклических зависимостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2131372]: |
0ms |
get settings: |
12ms |
get forum list: |
24ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
47ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
86ms |
get tp. blocked users: |
5ms |
| others: | 317ms |
| total: | 532ms |

| 0 / 0 |
