2011-11-14 44 views
0

我有幾個實現序列化的Java類以及實現IExternalizable的相應AS對象(由GAS自我生成)。BlazeDs Java對象的序列化

這是沒有問題從服務器接收的對象,但是當我嘗試將對象發送到服務器 - 它拋出一個異常:

[BlazeDS]Class 'xxx' must implement java.io.Externalizable to receive client 
IExternalizable instances. flex.messaging.io.SerializationException: Class 'xxx' must 
implement java.io.Externalizable to receive client IExternalizable instances. 

真的,我必須實現外部化將對象發送到Java服務器?

+0

好吧,把它作爲答案比,我會回去工作... – Assaf

回答

1

實際上,我不必實現Externalizable,甚至不需要Serializable。 相反,我只需要在flex一側指定它是一個具有指向完整java類路徑的別名的遠程類。我還應該確保屬性名稱(或getter和setter)等於java對象屬性名稱。最後,我應該確保對象/屬性類型被很好地匹配或轉換(數字java對象爲Flex中的數字等)。

+0

複雜的數據類型如果你從另一個類聲明一個受保護的變量呢? –

0

您必須實現Externalizable。

http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6eab8-7ffdUpdate.html

使用ActionScript和Java

之間的自定義序列化。如果客戶端和服務器端Java不符合您的需求上的ActionScript之間的序列化和反序列化數據的標準機制,你可以編寫你自己的序列化方案。您可以在客戶端上實現基於ActionScript的flash.utils.IExternalizable接口,並在服務器上實現相應的基於Java的java.io.Externalizable接口。

+0

它並不是說我們必須實現,它只是說,如果你不滿意序列化,你可以做到這一點... – Assaf

+1

您至少必須爲BlazeDS序列化程序實現Serializable才能獲取序列化的類。實現Externalizable將允許您爲自定義序列化編寫自定義讀取和寫入方法。 –

+0

該文檔指出_flash.utils.IExternalizable_的默認數據轉換爲_java.io.Externalizable_,這意味着AS類的Java對應方必須實現Externalizable。 –