martes, 7 de marzo de 2023

DelegatingCallableStatement cannot be cast to class OracleCallableStatement

java.lang.ClassCastException 


Hola.

Estoy obteniendo el siguiente error al intentar ejecutar mi aplicación de TIBCO BusinessWorks 6

java.lang.ClassCastException: class org.apache.commons.dbcp2.DelegatingCallableStatement cannot be cast to class oracle.jdbc.OracleCallableStatement (org.apache.commons.dbcp2.DelegatingCallableStatement and oracle.jdbc.OracleCallableStatement are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @71cea1b8)

La siguiente linea causa el error:

rs = ((OracleCallableStatement)stmt).getCursor(3);

Esta aplicación fue migrada de la versión 5 y utilizaba una actividad Get Connection que ya no existe en la versión 6 por lo que se han auto generado clases de Java para proveer la misma funcionalidad.

Dentro de estas clases se utilizan clases de conexión a base de datos genéricas en forma de wrapper ya que la aplicación puede manejar diversos maneadores de base de datos. Esta es la razón del error al intentar hacer cast de un objeto de tipo DelegatingCallableStatement a un objeto de tipo OracleCallableStatement

Esto aplica para variables de tipo conexión y statement del paquete Java.sql

Solución

Lo que hay que hacer es quitar el wrapper al objeto utilizando el método unwrap para dejarla en su tipo de clase original la cual hay que especificar como parámetro del mismo método.
 
rs=((OracleCallableStatement)stmt.unwrap(OracleCallableStatement.class)).getCursor(3);


Espero les sirva.

No hay comentarios.:

Publicar un comentario