jsf - Error de Xerces: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl
glassfish jasper-reports (2)
Obtuve este error cuando uso Selenium con Glassfish. Lo xerces-*, xalan-*, xml-apis*, serialize*
copiando XML jars ( xerces-*, xalan-*, xml-apis*, serialize*
) de selenium/libs/
a $AS_HOME/lib/endorsed
(para Glassfish 2) o a $AS_HOME/glassfish/lib/endorsed
por Glassfish 4.
Estoy desarrollando una aplicación web usando JSF 2.0, NetBeans 6.9.1, GlassFish Server 3.1, mojarra 2.0.3 y JasperReports 3.7.6. Incluido en mi biblioteca de proyectos está el archivo jar "xerces-2.8.0.jar". Este archivo se importó como parte de la biblioteca de archivos jar JasperReports. Cada vez que trato de implementar, ejecutar o depurar mi proyecto a través de NetBeans, recibo este error:
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory.
Después de cualquier cambio en mi proyecto, mi compilación falla y recibo el error anterior cuando intento implementarlo, ejecutarlo o depurarlo. Tengo que reiniciar el servidor y ejecutar / depurar por segunda vez. He buscado en Internet y no puedo encontrar una solución a este problema. He examinado el archivo jar en cuestión, y DTDDVFactoryImpl se extiende desde DTDDVFactory. No sé por qué estoy recibiendo este error. Aunque eventualmente puedo ejecutar mi proyecto, sería mucho mejor si no recibiera este error.
¿Alguien puede decirme cómo puedo solucionar esto? ¿Debo eliminar este archivo de la biblioteca de mi proyecto? ¿Debo actualizar este archivo con una versión más nueva / versión anterior?
Si proporciona su propio xerces.jar, debe hacerlo a través del Mecanismo de anulación de estándares endosados ( java -Djava.endorsed.dirs=/path/to/xerces.jar
), no tiene permitido agregarlo en el classpath (y tarde o temprano se encontrará con problemas si lo hace). Dejame explicar.
JAXP es la API de Java para procesamiento de XML . La creación de objetos JAXP (como analizadores sintácticos, transfusiones XSLT, documentos DOM) se realiza mediante el patrón de fábrica / método de fábrica para que pueda agregar una nueva implementación JAXP (tiene que ser más nueva que la proporcionada en su JRE). Xerces proporciona (parte de) una implementación de JAXP y contiene estándares endosados (un estándar endosado es una API de Java definida a través de un proceso de estándares que no sea el Proceso de comunidad de Java, consulte el Mecanismo de anulación de estándares endosados ). Te enfrentarás a todo tipo de problemas si no usas el ESOM.