2014-09-22 98 views
0

將as3對象反序列化爲java時。 GraniteDS拋出這個Exeption:錯誤反序列化graniteds amf對象

java.lang.ClassNotFoundException: org.hibernate.collection.PersistentSet 

我認爲一些依賴項應該在pom.xml中。有任何想法嗎 ?

回答

0

GraniteDS在序列化/反序列化時,除了原始類型和集合外,並不知道有關hibernate /任何pojos的任何信息。所以,就你的情況而言,即使圖書館已經到位org.hibernate.collection.PersistentSet花崗岩並不尋找它。

解決方案:

使用INT GraniteDS的創建休眠對象的副本,讓你 將有一個版本用於發送AMF對象和另一個 處理休眠。此外,有兩個 副本是一個好習慣。

+0

對不起,我不明白你的建議。通過創建不同的副本,你的意思是什麼? – 2014-09-22 22:10:11

+0

@SamiJmii含義,請勿使用hibernate對象將數據發送到UI。如果在Hibernate中有Person對象,則在另一個包中創建另一個名爲Person的對象,但具有相同的屬性,並使用此對象發送到UI。 – Zeus 2014-09-22 23:04:40

+0

好的,但是當我從flex客戶端發送數據到服務器時發生這種throwble(類未找到)。它在將我的'人員'數據反序列化爲相應的java類型時會以某種方式發生。我的個人數據甚至沒有任何收集數據只是原始類型。 – 2014-09-22 23:16:22

0

調試後,這似乎GraniteDS的(版本:3.1.0.GA)提出了這個類作爲externalizer

org.granite.hibernate.HibernateExternalizer 

至極依賴於Hibernate依賴:

import org.hibernate.collection.PersistentCollection; 
import org.hibernate.collection.PersistentList; 
import org.hibernate.collection.PersistentMap; 
import org.hibernate.collection.PersistentSet; 
import org.hibernate.collection.PersistentSortedMap; 
import org.hibernate.collection.PersistentSortedSet; 

這些依賴都OK在休眠版本(3.X)。但是包命名空間不再的Valide休眠4:

import org.hibernate.collection.internal.PersistentBag; 
import org.hibernate.collection.internal.PersistentList; 
import org.hibernate.collection.internal.PersistentMap; 
import org.hibernate.collection.internal.PersistentSet; 
import org.hibernate.collection.internal.PersistentSortedMap; 
import org.hibernate.collection.internal.PersistentSortedSet; 

的解決方法:我們可以定義我們的歐文externalizer具有相同的實現HibernateExternalizer,改變進口。那麼我們在granite-config.xml中使用這個自定義外部化器。

希望graniteDS可以從外部依賴關係中解耦出來,這可能會導致重大更改,如下所示。