0

We have upgraded some old Spring code to Spring boot 2.7.x. There was the following statement that is not compilable anymore:

jdbcTemplate.setNativeJdbcExtractor(new org.springframework.jdbc.support.nativejdbc.OracleJdbc4NativeJdbcExtractor());
map = (new SimpleJdbcCall(jdbcTemplate)).withSchemaName(schemaName).withCatalogName(packageName)
.withProcedureName(procedureName).execute(sqlParameterSource);

When I run the app without the first line (setNativeJdbcExtractor), it fails on:

java.lang.ClassCastException: class com.zaxxer.hikari.pool.HikariProxyConnection cannot be cast to class oracle.jdbc.OracleConnection (com.zaxxer.hikari.pool.HikariProxyConnection and oracle.jdbc.OracleConnection are in unnamed module of loader 'app')
        at oracle.sql.TypeDescriptor.setPhysicalConnectionOf(TypeDescriptor.java:805) ~[ojdbc8-19.6.0.0.jar:19.6.0.0.0]
        at oracle.sql.TypeDescriptor.<init>(TypeDescriptor.java:587) ~[ojdbc8-19.6.0.0.jar:19.6.0.0.0]
        at oracle.sql.ArrayDescriptor.<init>(ArrayDescriptor.java:273) ~[ojdbc8-19.6.0.0.jar:19.6.0.0.0]
        at org.springframework.data.jdbc.support.oracle.SqlArrayValue.createTypeValue(SqlArrayValue.java:90) ~[spring-data-oracle-1.2.1.RELEASE.jar:na]
        at org.springframework.jdbc.core.support.AbstractSqlTypeValue.setTypeValue(AbstractSqlTypeValue.java:60) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:298) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:237) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:152) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:209) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1188) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1245) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:412) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:395) ~[spring-jdbc-5.3.26.jar:5.3.26]
        at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:193) ~[spring-jdbc-5.3.26.jar:5.3.26]

I found some questions about a removal of org.springframework.jdbc.support.nativejdbc package in Spring 5. This question looks similar

What is the Spring 5 JDBC approach when nativeJdbcExtractor is needed?

I use jdbcTemplate, so I cannot unwrap the native Connection. And the overloaded method AbstractSqlTypeValue.setTypeValue() - where does it belong? How can I provide my implementation?

Leos Literak
  • 8,805
  • 19
  • 81
  • 156

0 Answers0