2013-04-18 67 views
1

我想從我的MySQL數據庫返回的ArrayList在GWT cellList使用,但我遇到一個序列化的問題。GWT對象序列化

類型「com.cbs.ioma.client.Order」沒有被包括在該組 類型可以由本SerializationPolicy或其 類對象被序列不能被加載的。爲了安全起見,這個類型不會被序列化爲 :instance = Order [orderNumber = 1001,orderer = test, assembler = 1,dateCompleted = 1969-12-31,dateSubmitted = 1969-12-31, notes = rer ,isComplete =假,類型= 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無法在com.google.gwt.text.shared.SimpleSafeHtmlRenderer.render(SimpleSafeHtmlRenderer.java:1) 處com.google.gwt.cell.client.AbstractSafeHtmlCell上投射 至java.lang.String 。渲染(AbstractSafeHtmlCell.java:80) 在com.google.gwt.user.cellview.client.CellList.renderRowValues(CellList.java:527) 在com.google.gwt.user.cellview.client.A bstractHasData $ View.renderRowValues(AbstractHasData.java:337) at com.google.gwt.user.cellview.client.AbstractHasData $ View.replaceAllChildren(AbstractHasData.java:239) at com.google.gwt.user.cellview。 client.HasDataPresenter.resolvePendingState(HasDataPresenter.java:1351) at com.google.gwt.user.cellview.client.HasDataPresenter.access $ 3(HasDataPresenter.java:1062) at com.google.gwt.user.cellview.client .HasDataPresenter $ 2.execute(HasDataPresenter.java:984) 在com.google.gwt.core.client.impl.SchedulerImpl $任務$ .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) 在陽光下.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.dev.shell。 MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler。 java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) at com.google.gwt.dev.shell.BrowserChannelServer。processConnection(BrowserChannelServer.java:547) 在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) 在java.lang.Thread.run(來源不明)

我我不確定它爲什麼要將訂單投入字符串。我覺得這裏有一些基本的關於序列化的東西,有人能指出我正確的方向。

+0

你有.gwt.xml文件@ com/cbs/ioma /文件夾嗎?是否包含在jar文件中以及com.cbs.ioma.client.Order的.java文件中? – SSR

+0

如果這是你所指的,我有WAR文件裏面的xml文件。我需要第二個嗎?和我的order.java是在com.cbs.ioma.client裏面 – john

回答

2

嘗試執行IsSerializable而不是Serializable。但通常你的代碼應該可以工作。有時會出現此錯誤(在調試期間),但在大多數情況下,它會在重新編譯後生效。

+0

是的,你應該實現gwt rpc的isSerializable,而不是java序列化。 –

1

爲了讓您的數據類型從/到/從服務器使用GWT-RPC傳送到客戶端,需要通過實施無論是IsSerializableSerializable接口來將它們標記爲序列。您還必須確保類字段的可序列化(除final/transient字段外,它們將不會被序列化)以及存在默認的零參數構造函數(或根本沒有)。

編輯:最終字段的序列化實際上是在review下。

如果出於某種原因無法滿足這些要求,則需要使用充滿對象數據的DTO,以便將它們傳輸到客戶端/服務器或從客戶端/服務器傳輸它們。或者您可以嘗試爲該課程實施您自己的custom serializer

如果需要,請查看docs for GWT serializationjava.io.Serializable support。還要清除戰爭目錄中的所有* .gwt.rpc文件,以強制執行序列化策略的重新創建。