java - Obtener una excepción de cast de clase donde ambas clases son exactamente iguales
illegalargumentexception (5)
Estoy haciendo un proyecto de JBoss SEAM y cuando veo un formulario obtengo este error.
java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav
Siempre es la misma clase de JPA que está relacionada con la forma que se muestra en la pantalla, no tiene sentido para mí por qué es la misma clase, parece imposible.
Como Joachim explicó anteriormente, java.lang.ClassCastException normalmente ocurre cuando dos cargadores de clases cargan las clases con el mismo nombre. Sin embargo, me he encontrado con otra situación cuando esto podría ocurrir.
Esto podría ocurrir con algunos IDE que recargan automáticamente las clases que se han modificado. En tales casos, es posible que existan versiones anteriores de la clase retenida en la memoria que provoque ClassCastException.
Aquí hay algunas maneras en que puede resolver este problema:
Si está escribiendo un cargador de clases personalizado, mientras carga una clase, asegúrese de que el cargador de clases base / predeterminado aún no tenga una instancia de esa clase cargada.
Haga que la clase se cargue como una subclase de la clase que ya está cargada por el cargador de clases predeterminado.
Haga que la clase que se está cargando implemente una interfaz que ya esté cargada por el cargador de clases predeterminado.
Más información aquí - http://www.jspwiki.org/wiki/A2AClassCastException
El objeto que intentas lanzar es cargado por un cargador de clases diferente del que ha cargado la clase en la que intentas lanzar.
En mi caso, tuve dos años diferentes y quería cargar una clase desde el otro. Así que tuve que aislar el cargador de clases. Usé esta descripción:
http://www.thorgull.be/wiki/index.php?title=ClassLoader_isolation_in_JBOSS
Funcionó para mí
Esto ocurre cuando dos objetos diferentes de ClassLoader
cargan clases con el mismo nombre. La igualdad de dos clases en Java depende del nombre completo y del cargador de clases que lo cargó.
Por lo tanto, si dos cargadores de clases independientes cargan clases desde la misma ubicación, los objetos de esos tipos no se podrán convertir a los demás, incluso si sus clases se llaman igual.
Esto se debe a que la clase ha sido cargada por dos cargadores de clases diferentes. No puedes lanzar entre ellos.
Es probable que tenga una copia duplicada de CsiTipoLav
en su aplicación, y las dos copias diferentes se cargan en diferentes momentos de diferentes cargadores de clases. JBoss tiene una plétora de diferentes clasificadores en una jerarquía, y es fácil hacer que las cosas cambien.
Asegúrate de tener solo una copia de la clase.