2012-04-18 34 views
3

在Windows上使用ColdFusion 9.0.1我遇到了以下問題。將二進制數據反序列化爲對象時出現StackOverflowError

我有一些相當大和複雜的對象(嵌套對象與嵌套對象與嵌套對象...等)序列化爲二進制數據,所以我可以把它放到我的數據庫。這就像一個魅力,但是當我從數據庫中檢索這樣的二進制數據,然後嘗試使用objectLoad()功能反序列化數據,我得到一個堆棧overlfow錯誤:

Caused by: java.lang.StackOverflowError 
at java.lang.Exception.(Exception.java:77) 
at java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:54) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:47) 
at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
at java.util.HashMap.readObject(HashMap.java:1030) 
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
at 

重複一些!!!!

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at coldfusion.runtime.TemplateProxyWrapper.readExternal(TemplateProxyWrapper.java:48) 
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
    at org.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:244) 
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:306) 
    at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105) 
    at org.hibernate.type.SerializableType.get(SerializableType.java:62) 
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:186) 
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:175) 
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2267) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1423) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1351) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1251) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:619) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:745) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) 
    at org.hibernate.loader.Loader.doList(Loader.java:2294) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172) 
    at org.hibernate.loader.Loader.list(Loader.java:2167) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:448) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 
    at coldfusion.orm.hibernate.HibernatePersistenceManager._executeHQL(HibernatePersistenceManager.java:822) 
    at coldfusion.orm.hibernate.HibernatePersistenceManager.executeHQL(HibernatePersistenceManager.java:751) 
    at coldfusion.orm.hibernate.HibernatePersistenceManager.executeQueryWithNamedParams(HibernatePersistenceManager.java:626) 
    at coldfusion.orm.ORMUtils._executeQuery(ORMUtils.java:332) 
    at coldfusion.orm.ORMUtils.executeQuery(ORMUtils.java:320) 
    at coldfusion.runtime.CFPage.ORMExecuteQuery(CFPage.java:7805) 

沒有無限循環或任何東西,因爲當我在JVM設置中增加堆棧大小時,它一切正常。但我不想在生產服務器上增加我的堆棧大小。

那麼有沒有人知道一種方法來反序列化二進制數據到對象而不創建如此龐大的堆棧?

+0

創建一個嵌套較少的對象結構。嵌套層次反映了對象結構的複雜性。如果你有一個像樹的集合,你可以編寫自己的自定義序列化,它可以優化數據如何遍歷。這個最簡單的解決方案可能是增加最大堆棧大小。 – 2012-04-18 09:40:57

+0

我知道,但數據已經在您看到的數據庫中。 – 2012-04-18 09:43:37

+1

在這種情況下,您需要更大的堆棧來讀取數據。我很驚訝你能寫出對象,因爲通常你需要大約相同的堆棧大小。 – 2012-04-18 09:46:30

回答

2

原來,解決這個問題的唯一方法是增加JVM的堆棧大小或重構我的對象。