2008-09-25 17 views
5

Tenemos una aplicación web que se puede implementar en muchos servidores de aplicaciones, incluido Oracle 10g. En esa plataforma, sin embargo, estamos teniendo problemas de classpath. La aplicación web utiliza JAXB 2, pero Oracle 10g se envía con JAXB 1, y esto estaba causando errores. Para evitarlos configuramos Oracle para que prefiera las clases en nuestra aplicación web, pero ahora estamos obteniendo el error anterior al intentar crear una instancia de un contexto JAXB."restricciones de cargador violadas al vincular javax/xml/namespace/QName class" de webapp en Oracle 10g

Buscando la excepción "restricciones de cargador violadas" - parece ser lanzado cuando una clase que ha sido cargada con un cargador de clases intenta acceder a algo que es paquete privado en el mismo paquete pero cargado por un cargador de clases diferente. He intentado eliminar cualquier jar en nuestra aplicación web que incluya javax.xml.namespace.QName, y he verificado que es la instancia incluida en Oracle que se está recogiendo, pero el error aún se produce. ¿Algunas ideas?

(Esta es una continuación de un earlier question respecto 10g y JAXB 2.)

+0

Sé que esto va a regresar, pero ¿encontró una solución viable? – jlpp

+0

¿Qué encontró? –

Respuesta

1

Qué versión de Java está utilizando? Las versiones más recientes se envían con esta clase en rt.jar.

+0

1.5.0_06 Eso parece incluirlo. Sin embargo, no sé cómo evitarlo. Quitarlo tanto de la aplicación web como del oráculo no es una opción. – alexmcchessers

0

Puede ser que no tiene ninguna relación, pero recuerdo un problema que Weblogic tenía con la misma clase. El motivo del problema fue el ID de serie cambiado de la clase (Sun lo cambió accidentalmente). La solución consistía en proporcionar un -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID = 1.0 en la JVM.

¿Podría ser el mismo problema, simplemente mal informado? Intentalo.

Ver aquí: http://forums.bea.com/thread.jspa?threadID=600014563

3

Esta clase está en la mitad de las bibliotecas Java WS por ahí. Es muy fácil cargarlo desde varios cargadores de clase y luego compararlos, lo que provoca un LinkageError.

Una técnica efectiva (pero martillo) para el seguimiento de esto abajo es modificar cargador de clases de la fuente de Java para volcar el cual tarro de esta clase en particular se está cargando desde al tiempo de carga, a continuación, anteponer su bootclasspath con su versión modificada:

-Xbootclasspath/p:/ruta/a/hackedBin

0

¿Puede actualizar el jar JAXB en la carpeta del servidor de aplicaciones lib?

Cuestiones relacionadas