Jsf Xerces错误:org.apache.Xerces.impl.dv.dtd.DTDDVFactoryImpl

Jsf Xerces错误:org.apache.Xerces.impl.dv.dtd.DTDDVFactoryImpl,jsf,glassfish,jasper-reports,xerces,Jsf,Glassfish,Jasper Reports,Xerces,我正在使用JSF2.0、NetBeans 6.9.1、GlassFish Server 3.1、mojarra 2.0.3和JasperReports 3.7.6开发一个web应用程序。我的项目库中包括jar文件“xerces-2.8.0.jar”。此文件作为JasperReports jar文件库的一部分导入。每当我试图通过NetBeans部署、运行或调试我的项目时,我都会收到以下错误: java.lang.Exception: java.lang.IllegalStateException:

我正在使用JSF2.0、NetBeans 6.9.1、GlassFish Server 3.1、mojarra 2.0.3和JasperReports 3.7.6开发一个web应用程序。我的项目库中包括jar文件“xerces-2.8.0.jar”。此文件作为JasperReports jar文件库的一部分导入。每当我试图通过NetBeans部署、运行或调试我的项目时,我都会收到以下错误:

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.
在我的项目中进行任何更改之后,当我尝试部署、运行或调试它时,我的构建失败,并收到上述错误。我必须重新启动服务器并再次运行/调试。我在网上搜索过,找不到解决这个问题的办法。我已经查看了讨论中的jar文件,DTDDVFactoryImpl确实是从DTDDVFactory扩展而来的-我不知道为什么会收到这个错误。虽然我最终可以让我的项目运行,但如果我没有收到这个错误,那就更好了


谁能告诉我怎么解决这个问题?是否需要从项目库中删除此文件?我需要用新版本/旧版本更新这个文件吗?

如果你提供你自己的xerces.jar,你必须通过认可的标准覆盖机制(
java-Djava.annowed.dirs=/path/to/xerces.jar
),你不能只在类路径上添加它(如果你这样做,迟早会遇到麻烦)。让我解释一下


JAXP是最新的。JAXP对象(如解析器、XSLT转换器、DOM文档)的创建是通过插件完成的,因此您可以插入新的JAXP实现(它必须比JRE中提供的更新)。Xerces提供(部分)JAXP实现并包含认可的标准(认可的标准是通过标准过程而不是Java社区过程定义的Java API,请参阅)。如果不使用ESOM,您将遇到各种各样的麻烦。

我在将Selenium与Glassfish一起使用时遇到了这个错误。我通过将XML JAR(
xerces-*、xalan-*、XML API*、serialize*
)从
selenium/libs/
复制到
$AS_HOME/lib/annocated
(对于Glassfish 2)或
$AS_HOME/Glassfish/lib/annocated
(对于Glassfish 4)来解决这个问题。

我没有。我以为我已经弄明白了。我在项目中有多个Xerxes jar文件。我想通过去掉多余的一个可以解决问题。我错了。它经常给我这个错误,我也有类似的问题。我在我的WebLogic应用程序中添加了一些额外的Spring内容(消息驱动的POJO),现在我遇到了这个错误。WL 10.3.4,弹簧3.0.5。(是的,我知道Spring应该至少升级到3.2.10。我希望在升级Spring之前进行更改。)