GWT сериализация на обект

Опитвам се да върна arrayList от моята база данни mysql, за да го използвам в GWT cellList, но се натъквам на проблем със сериализацията.

Типът „com.cbs.ioma.client.Order“ не беше включен в набора от типове, които могат да бъдат сериализирани от тази SerializationPolicy, или неговият обект Class не можа да бъде зареден. От съображения за сигурност този тип няма да бъде сериализиран.: instance = Order [orderNumber=1001, orderer=test, assembler=1, dateCompleted=1969-12-31, dateSubmitted=1969-12-31, notes=rer, isComplete= false, type=erer]

Имам клас Order, но когато се опитам да го променя на

public class Order implements java.io.Serializable

програмата се срива и не се показва съобщение за грешка. Не знам много за сериализацията вътре в GWT, така че как да отида да сериализирам клас, който да използвам в GWT? Имам правилните имена на функции в услугата и класа 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) в com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) в java.lang.Thread. стартиране (Неизвестен източник)

Не съм сигурен защо иска да хвърли поръчка към низ. Чувствам, че има нещо фундаментално за сериализацията, което пропускам тук, може ли някой да ме насочи в правилната посока.


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, ако това е, което имате предвид. Имам ли нужда от втори? и моята поръчка.java е вътре в com.cbs.ioma.client   -  person john    schedule 19.04.2013


Отговори (2)


Опитайте да внедрите IsSerializable вместо Serializable. Но като цяло вашият код трябва да работи. Тази грешка възниква понякога (по време на отстраняване на грешки), но в повечето случаи работи след повторно компилиране.

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

За да позволите вашите типове данни да се прехвърлят от/към клиент към/от сървър с помощта на GWT-RPC, трябва да ги маркирате като сериализирани чрез имплементиране на интерфейса IsSerializable или Serializable. Също така трябва да осигурите възможността за сериализиране на полетата на класа (с изключение на крайните/преходните полета, които изобщо няма да бъдат сериализирани) и наличието на конструктор с нулев аргумент по подразбиране (или никакъв).

РЕДАКТИРАНЕ: Сериализацията на крайните полета всъщност е в процес на преглед.

Ако по някаква причина не можете да изпълните тези изисквания, трябва да използвате DTOs, попълнени с вашите обектни данни, за да ги транспортирате до/от клиента/сървъра. Или можете да опитате да внедрите свой собствен персонализиран сериализатор за този клас .

Разгледайте документите за GWT сериализация и към поддръжка на java.io.Serializable, ако желаете. И също така изчистете всички *.gwt.rpc файлове във вашия war dir, за да принудите повторното създаване на политиката за сериализация.

person Andrea Boscolo    schedule 19.04.2013