开发者社区 问答 正文

部署SSH项目时报错org.apache.xerces.impl.dv.DVFactoryException异常

部署ssh项目出现org.apache.xerces.impl.dv.DVFactoryException异常,google也没有结果,有人遇到过没有
'''2013-6-13 22:18:27 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
org.apache.xerces.parsers.ObjectFactory$ConfigurationError: Provider org.apache.xerces.parsers.XML11Configuration could not be instantiated: org.apache.xerces.impl.dv.DVFactoryException: DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory.

at org.apache.xerces.parsers.ObjectFactory.newInstance(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.<init>(SAX2DOM.java:69)
at com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:187)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:392)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.setResult(TransformerHandlerImpl.java:137)
at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.setup(DomHelper.java:205)
at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:190)
at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:181)
at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:167)
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:107)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:885)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:144)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:111)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:164)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3693)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4340)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

2013-6-13 22:18:27 org.apache.catalina.core.StandardContext start
严重: Error filterStart‘’‘
‘’‘<?xml version="1.0" encoding="UTF-8" ?>








method="wsnStrutsCheck">


method="wsnNodeControl">


method="serialCommControl">


method="queryDetail">




'''

展开
收起
小旋风柴进 2016-02-29 14:33:06 4198 分享 版权
阿里云 AI 助理回答

问题分析

根据您提供的异常信息,org.apache.xerces.impl.dv.DVFactoryException 异常表明在解析 XML 文件时,Xerces 解析器无法正确实例化 DTDDVFactoryImpl 类。这通常是由于以下原因之一导致的:

  1. 类冲突:项目中可能存在多个版本的 Xerces 库,导致类加载器加载了错误的实现类。
  2. 依赖冲突:某些第三方库可能引入了与 Xerces 不兼容的依赖。
  3. JDK 版本问题:JDK 自带的 XML 解析器可能与项目中使用的 Xerces 库发生冲突。

此问题通常出现在使用 Struts2 框架的项目中,因为 Struts2 在初始化时会解析 XML 配置文件。


解决方案

1. 检查并排除重复的 Xerces 依赖

  • 步骤
    1. 使用 Maven 或 Gradle 的依赖树命令检查项目中是否存在多个版本的 Xerces 库。
      • Maven 命令:mvn dependency:tree
      • Gradle 命令:gradle dependencies
    2. 如果发现多个版本的 Xerces 库,请通过 exclusion 排除冲突的依赖。例如:
      <dependency>
       <groupId>org.apache.struts</groupId>
       <artifactId>struts2-core</artifactId>
       <version>2.x.x</version>
       <exclusions>
           <exclusion>
               <groupId>xerces</groupId>
               <artifactId>xercesImpl</artifactId>
           </exclusion>
       </exclusions>
      </dependency>
      
    3. 确保项目中只保留一个版本的 Xerces 库,并且该版本与 JDK 兼容。

2. 强制指定 Xerces 实现

  • 步骤
    1. 在项目的 pom.xml 中显式添加 Xerces 依赖,并确保其版本为最新稳定版(如 2.12.2):
      <dependency>
       <groupId>xerces</groupId>
       <artifactId>xercesImpl</artifactId>
       <version>2.12.2</version>
      </dependency>
      
    2. 如果使用的是非 Maven 项目,请手动下载 Xerces JAR 文件并将其添加到项目的 lib 目录中。

3. 调整类加载顺序

  • 原因:JDK 自带的 XML 解析器可能会优先加载,导致与 Xerces 冲突。
  • 解决方案
    1. 在启动参数中添加以下 JVM 参数,强制优先加载 Xerces:
      -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
      -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
      
    2. 如果使用的是 Tomcat 容器,可以在 catalina.properties 文件中配置类加载顺序:
      common.loader="${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar"
      

4. 检查 JDK 版本兼容性

  • 原因:低版本的 JDK 可能不支持高版本的 Xerces 库。
  • 解决方案
    1. 确保项目使用的 JDK 版本为 7 或以上(推荐使用 JDK 8)。
    2. 如果必须使用低版本 JDK,请降级 Xerces 库版本以匹配 JDK。

5. 验证 XML 配置文件格式

  • 原因:XML 文件格式错误可能导致解析失败。
  • 解决方案
    1. 检查 struts.xml 和其他相关配置文件,确保其符合 XML 标准。
    2. 使用在线 XML 验证工具验证文件格式是否正确。

重要提醒

  • 类冲突排查:请务必仔细检查项目的依赖树,避免因第三方库引入的 Xerces 版本冲突。
  • JVM 参数配置:如果问题仍未解决,建议在启动参数中显式指定 Xerces 实现类,以避免 JDK 自带解析器的干扰。
  • 升级依赖:尽量使用最新版本的 Struts2 和 Xerces 库,以减少兼容性问题。

总结

通过上述步骤,您可以有效解决 org.apache.xerces.impl.dv.DVFactoryException 异常。如果问题仍然存在,请提供更详细的依赖树信息或配置文件内容,以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答