4.2.5. Depuração e Resolução de ClassCastExceptions

ClassCastExceptions acontece com frequência quando uma classe é carregada por um carregador de classe diferente da classe que estende. Também pode ser o resultado da mesma classe existindo em múltiplos JARs.
  1. Procure pelo aplicativo para encontrar todo(s) JAR(s) que contém a classe nomeada pela ClassCastException. Caso exista um módulo definido para a classe, encontre e remova os JAR(s) duplicados do WAR ou EAR do aplicativo.
  2. Localize o módulo do JBoss contendo a classe e defina explicitamente a dependência no arquivo MANIFEST.MF ou no arquivo jboss-deployment-structure.xml. Para mais informações, consulte Class Loading and Subdeployments no capítulo entitulado Class Loading and Modules no Development Guide para o JBoss EAP 6 em https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
  3. Caso não consiga resolver isto seguindo as etapas acima, geralmente é possível determinar a causa do problema imprimindo a informação do carregador de classe no log. Por exemplo, você encontrará o seguinte ClassCastException no log:
    java.lang.ClassCastException: com.example1.CustomClass1 não foi possível converter ao com.example2.CustomClass2
    1. No seu código, imprima a informação do carregador de classe para as classes nomeadas pela ClassCastException no log, por exemplo:
      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. A informação no log mostra quais módulos estão carregando as classes e, baseado no seu aplicativo, será necessário remover ou mover o(s) JAR(s) em conflito.