【问题标题】:Xerces error: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImplXerces 错误:org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl
【发布时间】:2011-06-11 10:25:33
【问题描述】:

我正在使用 JSF 2.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 扩展 - 我不知道为什么会收到此错误。虽然我最终可以让我的项目运行,但如果我没有收到此错误会更好。

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

【问题讨论】:

  • 我没有。我以为我已经弄清楚了。我在项目中有多个 Xerxes jar 文件。我认为通过删除多余的可以解决问题。我错了。它继续定期给我这个错误。

标签: jsf glassfish jasper-reports xerces


【解决方案1】:

将 Selenium 与 Glassfish 一起使用时出现此错误。我通过将 XML jar (xerces-*, xalan-*, xml-apis*, serialize*) 从 selenium/libs/ 复制到 $AS_HOME/lib/endorsed(对于 Glassfish 2)或复制到 $AS_HOME/glassfish/lib/endorsed 对于 Glassfish 4 来解决这个问题。

【讨论】:

  • 我也有类似的问题。我在我的 WebLogic 应用程序中添加了一些额外的 Spring 内容(消息驱动的 POJO),现在我收到了这个错误。 WL 10.3.4,春季 3.0.5。 (是的,我知道 Spring 至少应该是 3.2.10。我希望在升级 Spring 之前得到改变。)
【解决方案2】:

如果您提供自己的 xerces.jar,则必须通过认可的标准覆盖机制 (java -Djava.endorsed.dirs=/path/to/xerces.jar) 执行此操作,您不能仅将其添加到类路径中(如果迟早会遇到麻烦,如果你做)。让我解释一下。

JAXP 是Java API for XML Processing。 JAXP 对象(如解析器、XSLT 转换器、DOM 文档)的创建是通过factory/factory-method pattern 完成的,因此您可以插入一个新的 JAXP 实现(它必须比 JRE 中提供的更新)。 Xerces 提供(部分)JAXP 实现并包含认可的标准(认可的标准是通过 Java 社区流程以外的标准流程定义的 Java API,请参阅Endorsed Standards Override Mechanism)。不使用ESOM会遇到各种麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多