Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Oracle Clob Reader issue: Protocol violation

I'm Using java7, jboss7, ojdbc7,hibernate 4. Table has a CLOB column and in domain class the code is something like this:

@Lob private String MyClob;

I'm getting this strange error while querying and this is not consistent.

Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: IOException occurred reading text
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273)
        at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getResultList(CriteriaQueryCompiler.java:254)
        ...
        ... 102 more
Caused by: org.hibernate.HibernateException: IOException occurred reading text
        at org.hibernate.type.descriptor.java.DataHelper.extractString(DataHelper.java:94)
        at org.hibernate.type.descriptor.java.DataHelper.extractString(DataHelper.java:280)
        at org.hibernate.type.descriptor.java.StringTypeDescriptor.wrap(StringTypeDescriptor.java:89)
        at org.hibernate.type.descriptor.java.StringTypeDescriptor.wrap(StringTypeDescriptor.java:39)
        at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$1.doExtract(ClobTypeDescriptor.java:60)
        at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)
        at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:332)
        at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2912)
        at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1672)
        at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1604)
        at org.hibernate.loader.Loader.getRow(Loader.java:1504)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:712)
        at org.hibernate.loader.Loader.processResultSet(Loader.java:942)
        at org.hibernate.loader.Loader.doQuery(Loader.java:910)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
        at org.hibernate.loader.Loader.doList(Loader.java:2522)
        at org.hibernate.loader.Loader.doList(Loader.java:2508)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2338)
        at org.hibernate.loader.Loader.list(Loader.java:2333)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
        at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1269)
        at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
        ... 104 more
Caused by: java.io.IOException: Protocol violation: [ 14, 47, ]
        at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:264)
        at oracle.jdbc.driver.OracleClobReader.read(OracleClobReader.java:195)
        at org.hibernate.type.descriptor.java.DataHelper.extractString(DataHelper.java:86)
        ... 131 more
Caused by: java.sql.SQLException: Protocol violation: [ 14, 47, ]
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:669)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
        at oracle.jdbc.driver.T4C8TTIClob.read(T4C8TTIClob.java:245)
        at oracle.jdbc.driver.T4CConnection.getChars(T4CConnection.java:3901)
        at oracle.sql.CLOB.getChars(CLOB.java:517)
        at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:245)
like image 325
Amit Yatagiri Avatar asked Apr 01 '14 11:04

Amit Yatagiri


1 Answers

This is a bug in ojdbc7 jar (jdbc7 version 12.1.0.1). If the length of clob is 4193 characters, the driver fails to retrieve.

You can fix this by updating to the new OJDBC7 patch jar (version 12.1.0.2).

like image 131
Amit Yatagiri Avatar answered Nov 03 '22 03:11

Amit Yatagiri