Conseguir excepción de difusión clase en la que ambas clases son exactamente los mismos

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

  •  24-09-2019
  •  | 
  •  

Pregunta

Estoy haciendo un proyecto JBoss Seam y cuando veo una forma consigo este error.

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

Su todos los días a la misma clase de la APP que se relaciona con la forma que se muestra en la pantalla, no tiene sentido para mí por qué es de la misma clase, parece imposible.

¿Fue útil?

Solución

Esto sucede cuando dos ClassLoader diferentes objetos clases de carga con el mismo nombre. La igualdad de las dos clases en Java depende del nombre completo y el cargador de clases que lo ha cargado.

Así que si dos clases de carga cargadores de clases independientes desde el mismo lugar, entonces los objetos de ese tipo no podrá ser echado a cada tipo de los demás, incluso si sus clases se llaman de la misma.

Otros consejos

Como Joachim explicó anteriormente, java.lang.ClassCastException se produce normalmente cuando dos cargadores de clases cargar las clases con el mismo nombre. Sin embargo, me he encontrado con otra situación en la que esto podría ocurrir.

Esto podría ocurrir con algunos de IDE que automáticamente vuelve a cargar las clases que han sido modificados. En tales casos puede ser versiones más antiguas de la clase retienen en la memoria ClassCastException causando.

Aquí hay algunas maneras que usted podría resolver este problema:

  1. Si usted está escribiendo un cargador de clases personalizadas, durante la carga de una marca de clase asegurarse de que el cargador de clases de base / default no tiene ya una instancia de esa clase cargado.

  2. Hacer el ser clase carga una sub-clase de la clase que ya está cargado por el cargador de clase por defecto.

  3. Hacer el ser cargado clase implementar una interfaz que ya está cargado por el cargador de clase por defecto.

Más información aquí - http://www.jspwiki.org/wiki/A2AClassCastException

Esto se debe a que la clase ha sido cargado por dos cargadores de clases diferentes. No se puede emitir entre ellos.

Usted probablemente tiene una copia duplicada de CsiTipoLav en su aplicación, y las dos copias diferentes se están cargando en diferentes momentos de diferentes cargadores de clases. JBoss tiene una plétora de diferentes cargadores de clases en una jerarquía, y es fácil de hacer las cosas en un giro.

Asegúrese de que sólo tienen una copia de la clase.

El objeto que está tratando de fundición, es cargado por un cargador de clases diferente de la que ha cargado la clase que usted está tratando de echar en.

En mi caso tenía dos .ear diferente * y quería cargar una clase de la otra. Así que tuve que aislar el cargador de clases. He utilizado esta descripción:

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

Se trabajó para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top