Estoy utilizando la última versión de DBUnit (2.4.7), en Oracle 11GR2. Estoy usando Java 6 (1.6.0_15) y la última versión del contenedor de Oracle (jdbc6.jar)DBunit genera java.lang.ClassCastException: java.lang.String no se puede convertir a oracle.sql.CLOB al intentar cargar un campo CLOB
No he podido cargar correctamente los datos referenciados por un campo CLOB Oracle desde un archivo XML en el base de datos.
que he usado todo tipo de combinaciones de versiones del:
- JDBC de Oracle biblioteca ojdbc5.jar, ojdbc6.jar, Oracle 10 frascos
biblioteca Hibernate, etc ... Creo que la problema radica en DBUnit. Vea a continuación el trazado de la pila.
<groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-CR-2</version>
y
<groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version>
estoy corriendo Java 6, 1.6.0_15.
He intentado:
1) FlatXmlDataSet utilizando esta definición
<MESSAGE msg_id="1" mtp_id="1" msg_detail="asadds" />
2) XmlDataSet utilizando esta definición
<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>
Cualquier ayuda sería muy apreciada!
Seguimiento de la pila siguiente:
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:597) 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:597) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:334) 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
Wow, gracias por la pista, realmente funcionó. De hecho, vi esa página en mis viajes pero la rechacé por su edad y la versión de DBunit a la que se hace referencia. Solo FYI, necesitaba revertir org.dbunit.ext.oracle.Oracle10DataTypeFactory a un org.dbunit.ext.oracle.OracleDataTypeFactory (y hacer otros cambios) pero ahora Clobs carga correctamente en 11G.Todavía no puedo creer que soy el único cuyo éxito sobre esto (CLOB cargando en Oracle 11G) Actualizaré la IDENTIFICACIÓN DE ERROR que figura arriba tan pronto como mi ID de SourceForge llegue por correo. De nuevo, ¡realmente un gran agradecimiento! – Paul
actualizado, veamos qué sucede ... parece que no hay mucha actividad en DBUnit actualmente desafortunadamente – Paul
@Paul Muchas gracias (por los comentarios y el esfuerzo). Y sí, esto es muy desafortunado (me gusta mucho DbUnit personalmente). –