Obtendo a exceção de elenco da classe onde ambas as classes são exatamente iguais

StackOverflow https://stackoverflow.com/questions/2371967

  •  24-09-2019
  •  | 
  •  

Pergunta

Estou fazendo um projeto de costura jboss e, quando vejo um formulário, recebo esse erro.

java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav

Sua mesma classe JPA, que está relacionada à forma que é mostrada na tela, não faz sentido para mim por que é a mesma classe, parece impossível.

Foi útil?

Solução

Isso acontece quando dois diferentes ClassLoader Objetos carregam classes com o mesmo nome. A igualdade de duas classes em Java depende do nome totalmente qualificado e o carregador de classe que o carregou.

Portanto, se duas carregadeiras de classe independentes carregam classes do mesmo local, os objetos desses tipos não poderão ser lançados para um outro, mesmo que suas classes sejam chamadas de mesma forma.

Outras dicas

Como Joachim explicou anteriormente, Java.lang.classCastException ocorre normalmente quando dois carregadores de classe carregam as classes com o mesmo nome. No entanto, encontrei outra situação quando isso pode ocorrer.

Isso pode ocorrer com alguns IDEs que recarregam automaticamente as aulas que foram modificadas. Nesses casos, pode haver versões mais antigas da classe retida na memória causando o ClassCastException.

Aqui estão algumas maneiras de resolver esse problema:

  1. Se você estiver escrevendo um carregador de classe personalizado, enquanto carrega uma classe, verifique se o carregador de classe base/padrão ainda não possui uma instância dessa classe carregada.

  2. Faça da classe ser carregada uma subclasse da classe que já está carregada pelo carregador de classe padrão.

  3. Faça a classe que está sendo carregada implementar uma interface que já está carregada pelo carregador de classe padrão.

Mais informações aqui - http://www.jspwiki.org/wiki/a2aclassCastException

Isso ocorre porque a classe foi carregada por dois carregadores de classe diferentes. Você não pode lançar entre eles.

Você provavelmente tem uma cópia duplicada de CsiTipoLav No seu aplicativo, as duas cópias diferentes estão sendo carregadas em momentos diferentes de diferentes carregadores de classe. Jboss tem uma infinidade de diferentes carregadores de classe em uma hierarquia, e é fácil colocar as coisas em uma reviravolta.

Certifique -se de ter apenas uma cópia da classe.

O objeto que você está tentando lançar é carregado por um carregador de classe diferente daquele que carregou a classe em que você está tentando lançar.

No meu caso, eu tinha dois diferentes *.ear e queria carregar uma classe da outra. Então eu tive que isolar o carregador de classe. Eu usei esta descrição:

http://www.thorgull.be/wiki/index.php?title=classloader_isolation_in_jboss

Funcionou para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top