4.2.5. Fehler- und Problembehebung von ClassCastExceptions

Es kommt oft zu ClassCastExceptions, da eine Klasse von einem anderen Klassenlader geladen wird als die Klasse, die sie erweitert. Sie können auch auftreten, wenn dieselbe Klasse in mehreren JARs existiert.
  1. Durchsuchen Sie die Applikation, um alle JAR(s) zu finden, die die Klasse namens ClassCastException enthalten. Falls ein Modul für die Klasse definiert ist, so suchen und entfernen Sie die doppelten JAR(s) aus dem WAR oder EAR der Applikation.
  2. Suchen Sie das die Klasse enthaltende JBoss Modul und definieren Sie die Abhängigkeit explizit in der MANIFEST.MF-Datei oder in der jboss-deployment-structure.xml-Datei. Weitere Informationen finden Sie unter Class Loading and Subdeployments im Kapitel Class Loading and Modules im Development Guide für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
  3. Falls Sie sie nicht mittels der Schritte oben auflösen können, so lässt sich die Ursache des Problems oftmals bestimmen, indem man die Klassenladerinformationen im Protokoll nachsieht. Wenn Sie zum Beispiel die folgende ClassCastException im Protokoll sehen:
    java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
    1. Drucken Sie in Ihrem Code die Klassenladeinformationen für die von der ClassCastException genannten Klassen ins Protokoll, zum Beispiel:
      logger.info("Class loader for CustomClass1: " + 
            com.example1.CustomClass1.getClass().getClassLoader().toString());
      logger.info("Class loader for CustomClass2: " + 
            com.example2.CustomClass2.getClass().getClassLoader().toString());
      
    2. Die Informationen im Protokoll zeigen, welche Module die Klassen laden und Sie müssen - je nach Ihrer Applikation - in Konflikt stehende JAR(s) entfernen oder verschieben.