4.2.5. Depurar y resolver ClassCastExceptions
ClassCastExceptions con frecuencia tienen lugar ya que una clase está siendo cargada por medio de un cargador de clase diferente de la clase que extiende. También pueden ser el resultado de la misma clase existente en múltiples JARs.
- Busque la aplicación para encontrar todas las JAR(s) que contienen la clase nombrada por la
ClassCastException. Si hay un módulo definido para la clase, encuentre y borre las JAR(s) duplicadas del WAR o EAR de la aplicación. - Busque el módulo JBoss que contiene la clase y defina explícitamente la dependencia en el archivo
MANIFEST.MFo en el archivojboss-deployment-structure.xml. Para mayor información consulte Class Loading and Subdeployments en el capítulo titulado Class Loading and Modules en la Development Guide para JBoss EAP 6 en https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/. - Si no puede resolverlo usando los pasos anteriores, con frecuencia puede determinar la causa del problema imprimiendo la información del cargador de clases en el registro. Por ejemplo, puede ver la siguiente
ClassCastExceptionen el registro:java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - En su código imprima la información del cargador de clases para las clases nombradas por la
ClassCastExceptionpara el registro, por ejemplo:logger.info("Class loader for CustomClass1: " + com.example1.CustomClass1.getClass().getClassLoader().toString()); logger.info("Class loader for CustomClass2: " + com.example2.CustomClass2.getClass().getClassLoader().toString());logger.info("Class loader for CustomClass1: " + com.example1.CustomClass1.getClass().getClassLoader().toString()); logger.info("Class loader for CustomClass2: " + com.example2.CustomClass2.getClass().getClassLoader().toString());Copy to Clipboard Copied! Toggle word wrap Toggle overflow - La información en el registro muestra qué módulos están cargando las clases y con base en su aplicación necesitará borrar o mover las JAR(s) que causan conflictos.