2012-04-18 103 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的堆栈大小或重构我的对象。

相关问题