Сериализация объекта GWT

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

Тип 'com.cbs.ioma.client.Order' не был включен в набор типов, которые могут быть сериализованы этой SerializationPolicy, или его объект Class не может быть загружен. В целях безопасности этот тип не будет сериализован. ложь, тип=erer]

У меня есть класс Order, но когда я пытаюсь изменить его на

public class Order implements java.io.Serializable

программа вылетает и сообщение об ошибке не отображается. Я мало что знаю о сериализации внутри GWT, так как же мне сериализовать класс для использования в GWT? Я считаю, что у меня есть правильные имена функций в классе service и serviceAync. Благодарю.

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

12:55:49.793 [ОШИБКА] [ioma] Экранировано неперехваченное исключение

java.lang.ClassCastException: com.cbs.ioma.client.Order не может быть приведен к java.lang.String в com.google.gwt.text.shared.SimpleSafeHtmlRenderer.render(SimpleSafeHtmlRenderer.java:1) в com.google. gwt.cell.client.AbstractSafeHtmlCell.render(AbstractSafeHtmlCell.java:80) в com.google.gwt.user.cellview.client.CellList.renderRowValues(CellList.java:527) в com.google.gwt.user.cellview. client.AbstractHasData$View.renderRowValues(AbstractHasData.java:337) на com.google.gwt.user.cellview.client.AbstractHasData$View.replaceAllChildren(AbstractHasData.java:239) на com.google.gwt.user.cellview. client.HasDataPresenter.resolvePendingState(HasDataPresenter.java:1351) на com.google.gwt.user.cellview.client.HasDataPresenter.access$3(HasDataPresenter.java:1062) на com.google.gwt.user.cellview.client.HasDataPresenter $2.execute(HasDataPresenter.java:984) в com.google.gwt.core.client.impl.SchedulerImpl$Task$.executeScheduled$(SchedulerImpl.java:50 ) по адресу com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:228) по адресу com.google.gwt.core.client.impl.SchedulerImpl.flushFinallyCommands(SchedulerImpl.java:327) по адресу com. google.gwt.core.client.impl.Impl.exit(Impl.java:266) в com.google.gwt.core.client.impl.Impl.entry0(Impl.java:257) в sun.reflect.GeneratedMethodAccessor24. invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) в java.lang.reflect.Method.invoke(неизвестный источник) в com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java: 103) в com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) в com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) в com.google.gwt .dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) в com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547) в co m.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) на java.lang.Thread.run(неизвестный источник)

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


person john    schedule 18.04.2013    source источник
comment
У вас есть файл .gwt.xml в папке com/cbs/ioma/? это включено в вашу банку вместе с файлами .java для com.cbs.ioma.client.Order?   -  person appbootup    schedule 19.04.2013
comment
У меня есть файл xml внутри файла WAR, если вы это имеете в виду. Мне нужен второй? и мой order.java находится внутри com.cbs.ioma.client   -  person john    schedule 19.04.2013


Ответы (2)


Попробуйте реализовать IsSerializable вместо Serializable. Но в целом ваш код должен работать. Эта ошибка возникает иногда (во время отладки), но в большинстве случаев она проходит после перекомпиляции.

person sidney3172    schedule 19.04.2013
comment
Да, вы должны реализовать gwt rpc isSerializable вместо java serializable. - person Suresh Atta; 19.04.2013

Чтобы разрешить передачу ваших типов данных с/на клиент на/с сервер с помощью GWT-RPC, вам необходимо пометить их как сериализуемые путем реализации интерфейса IsSerializable или Serializable. Вы также должны обеспечить сериализуемость полей класса (кроме полей final/transient, которые вообще не будут сериализованы) и наличие конструктора по умолчанию с нулевым аргументом (или вообще его не будет).

РЕДАКТИРОВАТЬ: Сериализация конечных полей фактически находится на проверке.

Если по какой-то причине вы не можете выполнить эти требования, вам нужно использовать DTO, заполненные данными вашего объекта, чтобы транспортировать их на/с клиента/сервера. Или вы можете попробовать реализовать свой собственный пользовательский сериализатор для этого класса. .

Ознакомьтесь с документами по сериализации GWT и поддержка java.io.Serializable, если хотите. А также очистите все файлы *.gwt.rpc в вашем боевом каталоге, чтобы принудительно воссоздать политику сериализации.

person Andrea Boscolo    schedule 19.04.2013