2010-11-25 16 views
5

Me llamó la atención un problema en jboss. Cuando intento de desplegar mi .war en el servidor, consigo este error de seguimiento,Excepción de Class Cast: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserF actoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

de la cual, es evidente que hay un choque de bibliotecas. Por lo tanto, eliminé el archivo jar que contiene xerces, que pasó por jaxp-ri-1.4.1.jar. Ahora, cuando intento volver a implementar, consigo este nuevo error,

java.lang.NullPointerException 
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:944) 
    at org.apache.commons.digester.Digester.parse(Digester.java:1765) 
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java 

donde se queja de que no puede encontrar los analizadores XML.

Por lo tanto, ahora mi pregunta es que nadie sabe lo que puede ser una solución. ¿Algún archivo jaxp jar que no contenga el paquete xerces?

actualización

Hice lo que sugiere here y ahora tengo un nuevo error,

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl 

que es una clase de uno de los frascos que he eliminado que contiene SAXParserFactory :(

+0

Hola, hice lo que usted sugirió y ahora tengo un nuevo error, java.lang.NoClassDefFoundError: No se pudo inicializar com.sun clase. xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl que es una clase de uno de los jar que eliminé que contiene SaxParserFactory :( – Ozyman

+0

¿Alguna información que podríamos tener en el JAR recién eliminado? –

Respuesta

2

Parece que ha eliminado el JAR incorrecto. La ClassCastException original se informó cuando una instancia de SAXParserFactoryImpl (que es un subtipo de SAXParserFactory) se está transfiriendo a SAXParserFactory.

La excepción es más probable debido a que hay dos instancias de SAXParserFactory en lugar de dos instancias de SAXParserFactoryImpl cargadas en la JVM. En el momento del envío, se devolvió SAXParserFactory cargado por un cargador de clases diferente, lo que dio como resultado la excepción. La corrección, por lo tanto, es identificar los JAR en su classpath que tienen versiones conflictivas de SAXParserFactory. La eliminación de la implementación del analizador en sí puede no ser prudente, si Commons Digester está buscando una implementación particular.

+0

El jar que eliminé previamente era jaxp -ri-1.4.1.jar que me dio la NullPointerException. Ahora borré el jaxp-api.jar. Utilicé jarfinder.com para encontrar en qué todos los jars Sa xParserFactory está presente y de todos los jarros tengo el jaxp-api. – Ozyman

+0

Creo que sería una buena idea verificar cómo ha heredado estos JAR en su proyecto. No necesita una copia de jaxp-ri-1.4.1.jar o jaxp-api.jar para analizar XML, especialmente cuando usa Sun JDK. El JDK/JRE en sí tiene las API necesarias y la implementación del analizador que podría usarse. En el mejor de los casos, necesitará la biblioteca Xerces (con solo los JAR requeridos), ya que algunos de los JAR de la distribución causan este problema (xml-apis.jar en particular de Xerces 2.x). –

+0

Utilizamos maven para nuestro proyecto. Entonces, debería haber incluido. Sorprendentemente, no hay mención de estos frascos en pom.xml también. Nuestro proyecto es un proyecto de servicios web, así que pensé que podríamos necesitarlos para la clasificación.Trataré de ver qué pasa cuando elimino los archivos jaxp- *. Gracias por los consejos en todo momento ... – Ozyman

2

Supongo ... Estás usando JBoss 5.1. Si es así, es un analizador xml y un problema de carga de clases. Debe definir jboss- classloading.xml

Ver http://www.coderanch.com/t/523519/JBoss/Cast y http://www.mastertheboss.com/jboss-application-ser...oss-5-classloading-issues.html

+0

Sí, probablemente sea un problema del cargador de clases. –

+0

Una cosa más: usar jboss-classloading.xml es simple y nos permite resolver nuestros problemas muy rápido, pero a veces es necesario analizar nuestra aplicación con más cuidado. Debemos asegurarnos de que no se trate de libs/class copnflict. No es fácil, pero si no lo hacemos, podemos caer en problemas. Los problemas de carga de clases causan errores extraños. P.ej. en mi caso, pude implementar mi aplicación como una guerra explosiva, pero no como una guerra archivada. ¿Qué resultó ser una solución? Eliminando jboss-classloading.xml y algunas librerías :) – patrycja