Solved

net.sf.hibernate.type.SerializationException: could not deserialize

Posted on 2004-09-14
20
2,229 Views
Last Modified: 2012-05-05
hi experts,

when I try to select a row from database using hibernate I get the net.sf.hibernate.type.SerializationException: could not deserialize exception. When I try to fetch a row it returns a null value normally but it cannot "deserialize" exiting data into a class. All my classes implement Serializable.

the part where I do the operation is here:

    try {
      session = openSession();
      Query q = session.createQuery("fromXxxDTO d where d.xno = :xno");
      q.setParameter("xno",xNo);
      result = (XxxDTO) q.uniqueResult();
    } catch (HibernateException ex) {
      log.error("hibernate error", ex);
      throw new DAOException("hibernate error:" + ex.toString());
    } finally {
      closeSession(session);
    }

Here is the full text of exception.

net.sf.hibernate.type.SerializationException: could not deserialize
      at net.sf.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:197)
      at net.sf.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:220)
      at net.sf.hibernate.type.SerializableType.fromBytes(SerializableType.java:73)
      at net.sf.hibernate.type.SerializableType.get(SerializableType.java:38)
      at net.sf.hibernate.type.NullableType.nullSafeGet(NullableType.java:62)
      at net.sf.hibernate.type.NullableType.nullSafeGet(NullableType.java:53)
      at net.sf.hibernate.type.AbstractType.hydrate(AbstractType.java:66)
      at net.sf.hibernate.loader.Loader.hydrate(Loader.java:680)
      at net.sf.hibernate.loader.Loader.loadFromResultSet(Loader.java:621)
      at net.sf.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:580)
      at net.sf.hibernate.loader.Loader.getRow(Loader.java:495)
      at net.sf.hibernate.loader.Loader.prepareResultSetRow(Loader.java:209)
      at net.sf.hibernate.loader.Loader.doQuery(Loader.java:282)
      at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
      at net.sf.hibernate.loader.Loader.doList(Loader.java:1027)
      at net.sf.hibernate.loader.Loader.list(Loader.java:1018)
      at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
      at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1544)
      at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
      at net.sf.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:550)
      at com.tsk.beyanname.dao.hibernate.this.findByTcKimlikNo(this.java:32)
      at test.tsk.beyanname.dao.hibernate.TestThis.testFindByTcKimlikNo(TestThis.java:37)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at junit.framework.TestCase.runTest(TestCase.java:154)
      at junit.framework.TestCase.runBare(TestCase.java:127)
      at junit.framework.TestResult$1.protect(TestResult.java:106)
      at junit.framework.TestResult.runProtected(TestResult.java:124)
      at junit.framework.TestResult.run(TestResult.java:109)
      at junit.framework.TestCase.run(TestCase.java:118)
      at junit.framework.TestSuite.runTest(TestSuite.java:208)
      at junit.framework.TestSuite.run(TestSuite.java:203)
      at junit.framework.TestSuite.runTest(TestSuite.java:208)
      at junit.framework.TestSuite.run(TestSuite.java:203)
      at com.borland.jbuilder.unittest.JBTestRunner.run(JBTestRunner.java:210)
      at com.borland.jbuilder.unittest.JBTestRunner.initiateTest(JBTestRunner.java:252)
      at com.borland.jbuilder.unittest.JBTestRunner.main(JBTestRunner.java:558)
Caused by: java.io.StreamCorruptedException: invalid stream header
      at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737)
      at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
      at net.sf.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:189)
      ... 38 more

any ideas?
0
Comment
Question by:alikoank
  • 9
  • 6
  • 5
20 Comments
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Does "XxxDTO" implement Serializable?
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Ahhh...sorry...didn't read the question properly ;-)
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Is this right:

      Query q = session.createQuery("fromXxxDTO d where d.xno = :xno");

Shouldn't it be:

      Query q = session.createQuery("from XxxDTO as d where d.xno = :xno");
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
I always use fully qualified classnames in the queries....not sure if that helps:

      Query q = session.createQuery( "from org.your.package.XxxDTO as d where d.xno = :xno");
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
If the query doesn't normally return a unique result, try just operating on the first one instead of calling uniqueResult
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
@TimYates
     its just a typo I am not getting SQL Exceptions :-) and giving fully qualified name has not changed anything.

@CEHJ
    using q.list() instead of q.uniqueResult() gave me an empty list when it should contain one XxxDTO.

0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
>     at com.tsk.beyanname.dao.hibernate.this.findByTcKimlikNo(this.java:32)
 
Which line is line 32?
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
I guess: result = (XxxDTO) q.uniqueResult();

Does list() throw the exception?
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
32: throw new DAOException("hibernate error:" + ex.toString());
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
and yes list() throws the exception too
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
>>using q.list() instead of q.uniqueResult() gave me an empty list when it should contain one XxxDTO.

I can't think how you can get anything more than null back then, if you get an empty list without the uniqueness
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 250 total points
Comment Utility
Might be worth checking that your mapping is correct
0
 
LVL 35

Assisted Solution

by:TimYates
TimYates earned 250 total points
Comment Utility
Are you sure that the same version of XxxDTO exists in hibernate and your client?

This is a confusing error :-(

I guess it is getting null back as it is failing with a SerializationException...  Which implies it is trying to return something, but it cannot deserialize it...
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
>  Are you sure that the same version of XxxDTO exists in hibernate and your client?

I meant:

 Are you sure that the same version of XxxDTO.class exists in hibernate and your client?  Compiled with the same JDK?
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
ok. guys thank for your effort. it probably has something to do with mu mapping
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
8-)
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
yep. I solved it,
I had declared a many-to-one relation as a property in hbm file.
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Cool :-)

After a week of trying hibernate/jboss/xdoclet out, I have to say that the Hibernate exceptions could be a little bit more descriptive ;-)

Good luck with it :-)

Tim
0
 
LVL 4

Author Comment

by:alikoank
Comment Utility
>>  Hibernate exceptions could be a little bit more descriptive ;-)

could not agree more.
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Glad you got it fixed
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
The viewer will learn how to implement Singleton Design Pattern in Java.
This video teaches viewers about errors in exception handling.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now