Class Cast Exception "Host cannot be cast to Host"?!
22 respostas
R
Ricardo_Prado
Olá pessoal,
No meu projeto tenho uma entidade (JPA) Host. Devido a algum problema maluco provavelmente no class loader, minha aplicação fica dando uns paus malucos.
Eu carrego uma lista de Hosts mas quando mando faze rum for each, dá um class cast exception!
É a mesma classe, só existe uma no projeto todo!
O que pode ser?
Class cast excption falando q a mesma classe não pode ser casteada pra ela mesmo?!
Tenta em um projeto, só essa classe ai, coloca num main e vê o que é. Tenta isolar o problema, para ver se é na classe, ou no projeto em si
Abraço
R
Ricardo_Prado
Pessoal, identifiquei o bug mas ainda não consigo corrigi-lo.
O Netbeans (6.9.1) está mantendo uma certa “memória” da antiga classe (anterior a esta compilação). Isso faz com que existam dois “registros” de classes iguais. Em algum lugar do código (possivelmente na hora do for) a classe carregada para o objeto Host do for each é diferente da que o método havia retornado (carregada por um outro ClassLoader). Isto faz com que gere um class cast exception (já que para serem iguais elas precisam ter sido carregadas pelo mesmo ClassLoader)
Vou abrir um ticket!
gomesrod
Perguntei sobre o JBoss porque é onde presenciei o problema, e a razão era exatamente essa: a existência de duas cópias da classe, ou seja, o JAR está em dois lugares.
Não sei se é bug (acho que sim), mas ele carrega a mesma classe duas vezes no mesmo classloader. Na hora de fazer uma atribuição qualquer dá erro de cast como se fossem classes diferentes.
Pode ser:
No diretório de libs do servidor e no EAR
no EAR e no WEB-INF/libs do WAR (esse caso é bem comum quando se usa EJB remoto no mesmo servidor, presumimos que cada aplicação precisará do seu jar mas o JBoss carrega todas no mesmo classloader)
etc…
Não sei se no glassfish há o mesmo efeito, mas vale dar uma conferida.
R
Ricardo_Prado
É Então, mas no meu caso é um bug do netbeans mesmo porque a classe não existe mais mas o Netbeans cria 2 identificadores para a mesma classe (o problema é em um arquivo de conffiguração dele)
J
javablue
Por isso que uso Eclipse =)
Agora falando sério, será que se você atualizar para a versão 7.0 resolve? Ou é inviável atualizar ?
R
Ricardo_Prado
Estou atualizando agora. Assim que tiver a resposta coloco aqui.
R
Ricardo_Prado
Gente, atualizei o Netbeans mas não resolveu.
Felizmente conseguir resolver o problema de outra maneira. Mesmo usando o netbeans 7.0 alguns arquivos do netbeans 6.9.1 estavam sendo usados(Eu mandei NÃO importar as configurações qd eu instalei o 7.0)
Alguma coisa estava associando o projeto a este arquivo de configuração podre.
Dei um rm -r na pasta .netbeans/6.9 e tudo voltou ao normal (pelo menos por enquanto)
J
javablue
Maravilha, coloca um resolvido no título do tópico, caso algum desafortunado tenha o mesmo problema que o seu, ver que aqui tem uma possível solução.
R
Ricardo_Prado
Então, não resolveu!
Continuo procurando a solução. Já digo que estou próximo.
vitaaoo
Eu estou com um problema parecido …
Eu tenho um classe A que herda de uma B … em certo momento eu preciso fazer A = (A) B.
O INTERESSANTE é que até pouco tempo isso funcionava normalmente … mas agora eu venho recebendo um erro em tempo de execução
java.lang.ClassCastException: org.cesar.sga.servidor.modelo.ServidorDesignacao cannot be cast to org.cesar.sga.servidor.modelo.ServidorDesignacaoFuncao
at org.cesar.sga.servidor.modelo.Servidor.getServidoresDesignacoesDoTipo(Servidor.java:777)
O erro acontece no cast desse trecho
for (Iterator iter = getServidoresDesignacaoFuncao().iterator(); iter.hasNext();) {
ServidorDesignacaoFuncao designacao = (ServidorDesignacaoFuncao) iter.next();
if (designacao.getAtiva()) {
if (designacao.getFuncao().getId().equals(
servidorDesignacaoFuncao.getFuncao().getId())) {
existente = true;
break;
}
}
}