Sto utilizzando l'ultima versione di DBUnit (2.4.7), su Oracle 11GR2. Sto usando Java 6 (1.6.0_15) e l'ultima versione del jar client di Oracle (jdbc6.jar)DBunit genera java.lang.ClassCastException: java.lang.String non può essere lanciato su oracle.sql.CLOB quando si tenta di caricare un campo CLOB
Non riesco a caricare correttamente tutti i dati a cui fa riferimento un campo Oracle CLOB da un file XML nel Banca dati.
Ho usato tutti i tipi di combinazioni di versioni del:
- JDBC Oracle biblioteca ojdbc5.jar, ojdbc6.jar, Oracle 10 vasetti
Hibernate biblioteca ecc ... Penso che la il problema si trova in DBUnit. Vedi sotto per la traccia dello stack.
<groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-CR-2</version>
e
<groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version>
Io corro Java 6, 1.6.0_15.
ho provato:
1) FlatXmlDataSet usando questa definizione
<MESSAGE msg_id="1" mtp_id="1" msg_detail="asadds" />
2) XmlDataSet usando questa definizione
<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>
Qualsiasi aiuto sarebbe molto apprezzato!
traccia Stack segue:
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, grazie per il suggerimento, ha funzionato davvero. Ho effettivamente visto quella pagina nei miei viaggi ma in genere l'ho rifiutata a causa della sua età e della versione di DBunit referenziata. Giusto FYI, avevo bisogno di ripristinare org.dbunit.ext.oracle.Oracle10DataTypeFactory su org.dbunit.ext.oracle.OracleDataTypeFactory (e apportare altre modifiche) ma ora i Clob caricano con successo in 11G.Non riesco ancora a credere di essere l'unico a esserne colpito (caricamento di CLOB in Oracle 11G) aggiornerò l'ID di BUG sopra elencato non appena il mio ID SourceForge arriverà per posta. Ancora una volta, un grande grazie! – Paul
aggiornato, vediamo cosa ne deriva ... non sembra esserci molta attività su DBUnit in questi giorni purtroppo – Paul
@Paul Grazie mille (per il feedback e lo sforzo). E sì, questo molto sfortunato (mi piace DbUnit molto personalmente). –