Skip to content

ClassCastException when using Hikari Database Pool #110

Description

@fin-midcom

Our Code to run the tests:

    protected void runPlSqlTest(String testName) throws SQLException {
        try (Connection con = getDataSource().getConnection()) {
            Reporter documentationReporter = new DocumentationReporter().init(con);
            try {
                TestRunner tr = new TestRunner();
                tr.addPath(testName);
                tr.failOnErrors(true);
                tr.addReporter(documentationReporter);
                tr.run(con);
            } finally {
                documentationReporter.getOutputBuffer().setFetchSize(1).printAvailable(con, System.out);
            }
        }
    }

We're using these dependencies:

com.zaxxer:HikariCP:7.1.0
org.utplsql:utplsql-java-api:3.2.5
com.oracle.database.jdbc:ojdbc11:19.32.0.0

From the finally-Block, the following exception is thrown:

java.lang.ClassCastException: java.lang.ClassCastException: class com.zaxxer.hikari.pool.HikariProxyCallableStatement cannot be cast to class oracle.jdbc.OracleCallableStatement (com.zaxxer.hikari.pool.HikariProxyCallableStatement and oracle.jdbc.OracleCallableStatement are in unnamed module of loader 'app')
java.lang.ClassCastException: class com.zaxxer.hikari.pool.HikariProxyCallableStatement cannot be cast to class oracle.jdbc.OracleCallableStatement (com.zaxxer.hikari.pool.HikariProxyCallableStatement and oracle.jdbc.OracleCallableStatement are in unnamed module of loader 'app')
	at org.utplsql.api.outputBuffer.DefaultOutputBuffer.getLinesCursorStatement(DefaultOutputBuffer.java:37)
	at org.utplsql.api.outputBuffer.AbstractOutputBuffer.fetchAvailable(AbstractOutputBuffer.java:91)
	at org.utplsql.api.outputBuffer.AbstractOutputBuffer.printAvailable(AbstractOutputBuffer.java:73)
	at org.utplsql.api.outputBuffer.AbstractOutputBuffer.printAvailable(AbstractOutputBuffer.java:62)
	at testhelper.DbTest.runPlSqlTest(DbTest.java:128)
[...]

Looking at the DefaultOutputBuffer, the casting is not needed at all:

Subject: [PATCH] Remove unnecessary cast to OracleConnection in DefaultOutputBuffer
---
Index: src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java b/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java
--- a/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java	(revision f443528adeadb6fa080ceca68ac65440040b51cf)
+++ b/src/main/java/org/utplsql/api/outputBuffer/DefaultOutputBuffer.java	(date 1790924811678)
@@ -1,6 +1,5 @@
 package org.utplsql.api.outputBuffer;
 
-import oracle.jdbc.OracleCallableStatement;
 import oracle.jdbc.OracleTypes;
 import org.utplsql.api.reporter.Reporter;
 
@@ -34,7 +33,7 @@
                 "  l_rep.set_reporter_id(:reporter_id); " +
                 "  :lines_cursor := l_rep.get_lines_cursor(); " +
                 "end;";
-        OracleCallableStatement cstmt = (OracleCallableStatement) conn.prepareCall(plsql);
+        CallableStatement cstmt = conn.prepareCall(plsql);
         cstmt.setString("reporter_id", reporter.getId());
         cstmt.registerOutParameter("lines_cursor", OracleTypes.CURSOR);
         return cstmt;

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions