DBunit throws java.lang.ClassCastException: java.lang.String cannot be passed to oracle.sql.CLOB when trying to load the CLOB field

I am using the latest version of DBUnit (2.4.7), on Oracle 11GR2. I am using Java 6 (1.6.0_15) and the latest version of Oracle client jar (jdbc6.jar)

I could not successfully load any data referenced by the Oracle CLOB field from the XML file into the database.

I used all kinds of combinations of versions:

  • Oracle JDBC library ojdbc5.jar, ojdbc6.jar, oracle 10 cans
  • Hibernate library, etc. I think the problem lies in DBUnit. See below stack trace.

    <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-CR-2</version> 

    and

     <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version> 

I am running Java 6, 1.6.0_15.

I tried:

1) FlatXmlDataSet using this definition

 <MESSAGE msg_id="1" mtp_id="1" msg_detail="asadds" /> 

2) XmlDataSet using this definition

 <table name="MESSAGE"> <column>MSG_ID</column> <column>MTP_ID</column> <column>MSG_DETAIL</column> <row> <value>1</value> <value>1</value> <value>dsad</value> </row> </table> 

Any help would be greatly appreciated!

The stack trace follows:

         at org.apache.maven.surefire.booter.SurefireBooter.main (SurefireBooter.java:980)
 ERROR [10032010 14: 15: 13,031] - exception creating EntityManager: [] (MessageDAOTest.java:97)
 java.lang.RuntimeException: Exception in JpaDBTestCase
         at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles (JpaDBTestCase.java:97)
         at com.ert.ertmon.dao.ejb.impl.MessageDAOTest.setUpBeforeClass (MessageDAOTest.java:94)
         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∗97)
         at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:44)
         at org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:15)
         at org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:41)
         at org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:27)
         at org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31)
         at org.junit.runners.ParentRunner.run (ParentRunner.java:236)
         at org.apache.maven.surefire.junit4.JUnit4TestSet.execute (JUnit4TestSet.java:62)
         at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet (AbstractDirectoryTestSuite.java:140)
         at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute (AbstractDirectoryTestSuite.java:127)
         at org.apache.maven.surefire.Surefire.run (Surefire.java:177)
         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∗97)
         at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess (SurefireBooter.java data34)
         at org.apache.maven.surefire.booter.SurefireBooter.main (SurefireBooter.java:980)
 Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to oracle.sql.CLOB
         at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical (OraclePreparedStatement.java:7898)
         at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal (OraclePreparedStatement.java:7511)
         at oracle.jdbc.driver.OraclePreparedStatement.setObject (OraclePreparedStatement.java:7984)
         at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject (OraclePreparedStatementWrapper.java:237)
         at org.dbunit.dataset.datatype.ClobDataType.setSqlValue (ClobDataType.java:71)
         at org.dbunit.database.statement.SimplePreparedStatement.addValue (SimplePreparedStatement.java:73)
         at org.dbunit.database.statement.AutomaticPreparedBatchStatement.addValue (AutomaticPreparedBatchStatement.java:63)
         at org.dbunit.operation.AbstractBatchOperation.execute (AbstractBatchOperation.java:186)
         at org.dbunit.AbstractDatabaseTester.executeOperation (AbstractDatabaseTester.java:190)
         at org.dbunit.AbstractDatabaseTester.onSetup (AbstractDatabaseTester.java:103)
         at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFile (JpaDBTestCase.java:136)
         at com.ert.commons.junit4.hibernate.JpaDBTestCase.loadDbunitFiles (JpaDBTestCase.java:92)
         ... 21 more
+7
java orm hibernate clob dbunit
source share
3 answers

Using org.dbunit.ext.oracle.Oracle10DataTypeFactory

in the datafactory configuration.

+3
source share

It looks like Error ID 1984596 , and I really do not understand the status (it is closed, but ... I do not if the problem is fixed). Could you try with DbUnit 2.2.1 as suggested in this problem (it seems that the change introduced in version 2.2.2 is causing the problem). If this works, you should definitely reopen the problem.

+2
source share

I also ran into this problem the other day using Ant and DBUnit. I am using Ant version 1.7.1, DBUnit 2.4.5., With Oracle 10g. The "workaround" I found was to specify database dialogs in Ant. Task:

 <dbunit driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin@127.0.0.1:1521:MyOracleDb" userid="[userid]" password="[password]" schema="[MySchema]"> <dbconfig> <property name="datatypeFactory" value="org.dbunit.ext.oracle.OracleDataTypeFactory"/> </dbconfig> <operation type="CLEAN_INSERT" src="MY_DATA.xml" /> </dbunit> 

As soon as I added the dbconfig property, the problem with printing String / CLOB disappeared. Hope this helps anyone who has seen this error with Ant.

+2
source share

All Articles