Domanda

Sto facendo un progetto JBoss Seam e quando ho vista una forma ottengo questo errore.

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

La sua sempre puntuale della stessa classe APP che è legato alla forma che viene mostrato sullo schermo, ma non ha senso per me perché è la stessa classe, sembra impossibile.

È stato utile?

Soluzione

Ciò accade quando due oggetti diversi ClassLoader classi di carico con lo stesso nome. L'uguaglianza di due classi in Java dipende dal nome completo e la classe Loader che lo ha caricato.

Quindi, se due classi caricatori classe di carico indipendenti dalla stessa posizione, quindi gli oggetti di questi tipi, non sarà in grado di essere lanciato ad ogni tipo di altri, anche se le loro classi sono chiamati lo stesso.

Altri suggerimenti

Come Joachim spiegato in precedenza, java.lang.ClassCastException si verifica in genere quando due classloader caricare le classi con lo stesso nome. Tuttavia, mi sono imbattuto in un'altra situazione in cui questo potrebbe accadere.

Ciò potrebbe verificarsi con una certa IDE che automaticamente le classi vengono ricaricati che sono stati modificati. In questi casi ci potrebbero essere versioni più vecchie della classe conservati nella memoria ClassCastException causando.

Ecco alcuni modi si potrebbe risolvere il problema:

  1. Se si sta scrivendo una classe personalizzata caricatore, durante il caricamento di una classe fanno in modo che il caricatore di classe di base / default non dispone già di un'istanza di quella classe caricata.

  2. Fare l'essere di classe caricata una sottoclasse della classe che è già caricato dal caricatore di classe di default.

  3. Fare l'essere di classe caricata implementare un'interfaccia che è già caricato dal caricatore di classe di default.

Maggiori informazioni qui - http://www.jspwiki.org/wiki/A2AClassCastException

Questo è perché la classe è stata caricata da due classloader differenti. Non puoi lanciare tra di loro.

probabilmente hai ottenuto un duplicato del CsiTipoLav nell'applicazione, e le due copie diverse vengono caricati in tempi diversi da diversi classloader. JBoss ha una pletora di diverse classloader in una gerarchia, ed è facile per ottenere le cose in una torsione.

Assicurati di avere una sola copia della classe.

L'oggetto che si sta tentando di fusione, viene caricato da un programma di caricamento classe diversa da quella che ha caricato la classe che si sta tentando di gettare nella.

Nel mio caso ho avuto due diversi .ear * e volevo caricare una classe dall'altra. Così ho dovuto isolare il classloader. Ho usato questa descrizione:

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

Ha funzionato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top