Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-4278

byte[] saved to Oracle BLOB can not be read back

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major Major
    • None
    • 8.2.0.Final
    • JPA / Hibernate
    • None
    • Linux 64bit, Oracle JDK 7 or 8, WildFly 8.2.0.Final

    • Hide

      0. Build attached wildfly-testcase using maven, should produce wildfly-testcase.war
      1. On WildFly 8.2.0.Final create datasource songsDS pointing to Oracle 11g2 database
      2. Deploy wildfly-testcase.war to WildFly, it will create table SONG in the database
      3. Run RESTful web method e.g. http://localhost:8080/testcase/service/test?id=1&data=WildFly-8.2
      4. The output goes to server.log

      Show
      0. Build attached wildfly-testcase using maven, should produce wildfly-testcase.war 1. On WildFly 8.2.0.Final create datasource songsDS pointing to Oracle 11g2 database 2. Deploy wildfly-testcase.war to WildFly, it will create table SONG in the database 3. Run RESTful web method e.g. http://localhost:8080/testcase/service/test?id=1&data=WildFly-8.2 4. The output goes to server.log

      Since upgrading to Wildfly (Hibernate 4.3.7) we are experiencing problems persisting certain entities to an Oracle database.
      The entity contains an attribute of type java.lang.Serializable and is mapped to an Oracle BLOB column.
      When the value of the Serializable attribute is a byte[] then this is not properly serialized to the database.
      The value stored does not correspond to the Java Object Serialization Specification, instead the exact contents of the byte array are saved, without the usual header information associated with Java Object Serialization.

      When we try to read this back from the database into our entity we get the exception shown below, so basically Hibernate cannot read what it wrote.

      We have attached a test case to demonstrate this problem.

      Caused by: org.hibernate.type.SerializationException: could not deserialize
      at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:262) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:155) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:130) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:44) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:71) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:324) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:251) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:107) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:255) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:129) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.loader.entity.plan.LegacyBatchingEntityLoaderBuilder$LegacyBatchingEntityLoader.load(LegacyBatchingEntityLoaderBuilder.java:130) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:503) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:468) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:213) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2551) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
      ... 183 more
      Caused by: java.io.StreamCorruptedException: invalid stream header: 63726561
      at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804) [rt.jar:1.7.0_71]
      at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) [rt.jar:1.7.0_71]
      at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:237) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
      ... 214 more

              smarlow1@redhat.com Scott Marlow
              lubosh_jira Lubos Pechac (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: