4.2.5. Depuração e Resolução dos ClassCastExceptions
Os ClassCastExceptions acontecem com frequência uma vez que a classe está sendo carregada por um carregador de classe que eles estendem. Eles podem também ser o resultado da mesma classe existente em JARs múltiplos.
Procedimento 4.10.
- Busque pelo aplicativo para encontrar todos os JAR(s) que contém a classe nomeada pelo
ClassNotFoundException
. Caso exista um módulo definido para a classe, encontre e remova os JAR(s) duplicados a partir do WAR ou EAR do aplicativo. - Encontre o módulo do JBoss contendo a classe e defina claramente a dependência no arquivo
MANIFEST.MF
ou no arquivojboss-deployment-structure.xml
. Refira-se ao Class Loading and Subdeployments no capítulo Class Loading and Modules do Development Guide para o JBoss Enterprise Application Plataform 6 no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ para maiores informações. - Caso você não esteja apto a resolver isto usando as etapas acima, você pode normalmente determinar a causa do problema imprimindo a informação do carregador da classe ao log. Por exemplo, você observará o seguinte
ClassCastException
no log:java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
- No seu código, imprima a informação do carregador das classes nomeados pelo
ClassCastException
ao 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());
- A informação no log apresenta quais módulos são carregados nas classes e, baseado no seu aplicativo, você precisa remover ou mover os JAR(s) em conflito.