【问题标题】:Struts 1.3.10 Digester.getParser() UnsupportedOperationExceptionStruts 1.3.10 Digester.getParser() UnsupportedOperationException
【发布时间】:2010-01-20 15:39:58
【问题描述】:

我正在尝试使用 OC4J 版本 10.1.3.5 启动 Struts 1.X(版本 1.3.10)应用程序。应用程序设法初始化所有 Spring bean,包括在 action-servlet.xml 中定义的 Struts Actions。然而,一旦所有的 bean 都被初始化,我在日志中得到了一个相当丑陋的异常。

我怀疑 xalan (2.7.1)、xercesImpl (2.9.1) 或 xml-apis (1.3.04) 中存在问题,但所有这些都使用最新版本。异常表示可能缺少依赖项,但我无法确定它可能是什么。

感谢任何帮助。 (注意:我目前无法更新到 Struts 2.X。该应用程序是旧版应用程序,可能会被替换)。

 Digester.getParser:                                                                             08:18:10,794 ERROR Digester(789)
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
    at javax.xml.parsers.SAXParserFactory.setXIncludeAware(SAXParserFactory.java:390)
    at org.apache.commons.digester.Digester.getFactory(Digester.java:534)
    at org.apache.commons.digester.Digester.getParser(Digester.java:786)
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
    at org.apache.commons.digester.Digester.parse(Digester.java:1887)
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1785)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:349)
    at javax.servlet.GenericServlet.init(GenericServlet.java:256)
    at com.evermind.server.http.HttpApplication.loadServlet(HttpApplication.java:2528)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:5006)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:4930)
    at com.evermind.server.http.HttpApplication.initPreloadServlets(HttpApplication.java:5118)
    at com.evermind.server.http.HttpApplication.initDynamic(HttpApplication.java:1283)
    at com.evermind.server.http.HttpApplication.<init>(HttpApplication.java:848)
    at com.evermind.server.ApplicationStateRunning.getHttpApplication(ApplicationStateRunning.java:435)
    at com.evermind.server.Application.getHttpApplication(Application.java:592)
    at com.evermind.server.http.HttpSite$HttpApplicationRunTimeReference.createHttpApplicationFromReference(HttpSite.java:2280)
    at com.evermind.server.http.HttpSite$HttpApplicationRunTimeReference.<init>(HttpSite.java:2199)
    at com.evermind.server.http.HttpSite.initApplications(HttpSite.java:701)
    at com.evermind.server.http.HttpSite.setConfig(HttpSite.java:308)
    at com.evermind.server.http.HttpServer.setSites(HttpServer.java:280)
    at com.evermind.server.http.HttpServer.setConfig(HttpServer.java:180)
    at com.evermind.server.ApplicationServer.initializeHttp(ApplicationServer.java:2541)
    at com.evermind.server.ApplicationServer.setConfig(ApplicationServer.java:1058)
    at com.evermind.server.ApplicationServerLauncher.run(ApplicationServerLauncher.java:131)
    at java.lang.Thread.run(Thread.java:595)
Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency. 08:18:10,802 ERROR ActionServlet(398)
java.lang.NullPointerException
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
    at org.apache.commons.digester.Digester.parse(Digester.java:1887)
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1785)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:349)
    at javax.servlet.GenericServlet.init(GenericServlet.java:256)
    at com.evermind.server.http.HttpApplication.loadServlet(HttpApplication.java:2528)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:5006)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:4930)
    at com.evermind.server.http.HttpApplication.initPreloadServlets(HttpApplication.java:5118)
    at com.evermind.server.http.HttpApplication.initDynamic(HttpApplication.java:1283)
    at com.evermind.server.http.HttpApplication.<init>(HttpApplication.java:848)
    at com.evermind.server.ApplicationStateRunning.getHttpApplication(ApplicationStateRunning.java:435)
    at com.evermind.server.Application.getHttpApplication(Application.java:592)
    at com.evermind.server.http.HttpSite$HttpApplicationRunTimeReference.createHttpApplicationFromReference(HttpSite.java:2280)
    at com.evermind.server.http.HttpSite$HttpApplicationRunTimeReference.<init>(HttpSite.java:2199)
    at com.evermind.server.http.HttpSite.initApplications(HttpSite.java:701)
    at com.evermind.server.http.HttpSite.setConfig(HttpSite.java:308)
    at com.evermind.server.http.HttpServer.setSites(HttpServer.java:280)
    at com.evermind.server.http.HttpServer.setConfig(HttpServer.java:180)
    at com.evermind.server.ApplicationServer.initializeHttp(ApplicationServer.java:2541)
    at com.evermind.server.ApplicationServer.setConfig(ApplicationServer.java:1058)
    at com.evermind.server.ApplicationServerLauncher.run(ApplicationServerLauncher.java:131)
    at java.lang.Thread.run(Thread.java:595)
Digester.getParser:                                                                             08:18:20,228 ERROR Digester(789)
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
    at javax.xml.parsers.SAXParserFactory.setXIncludeAware(SAXParserFactory.java:390)
    at org.apache.commons.digester.Digester.getFactory(Digester.java:534)
    at org.apache.commons.digester.Digester.getParser(Digester.java:786)
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
    at org.apache.commons.digester.Digester.parse(Digester.java:1887)
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1785)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:349)
    at javax.servlet.GenericServlet.init(GenericServlet.java:256)
    at com.evermind.server.http.HttpApplication.loadServlet(HttpApplication.java:2528)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:5006)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:4930)
    at com.evermind.server.http.HttpApplication.getRequestDispatcher(HttpApplication.java:3139)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:775)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458)
    at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:226)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:127)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:116)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:234)
    at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:29)
    at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:879)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)
Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency. 08:18:20,231 ERROR ActionServlet(398)
java.lang.NullPointerException
    at org.apache.commons.digester.Digester.getXMLReader(Digester.java:1058)
    at org.apache.commons.digester.Digester.parse(Digester.java:1887)
    at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1785)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:349)
    at javax.servlet.GenericServlet.init(GenericServlet.java:256)
    at com.evermind.server.http.HttpApplication.loadServlet(HttpApplication.java:2528)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:5006)
    at com.evermind.server.http.HttpApplication.findServlet(HttpApplication.java:4930)
    at com.evermind.server.http.HttpApplication.getRequestDispatcher(HttpApplication.java:3139)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:775)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:458)
    at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:226)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:127)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:116)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:234)
    at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:29)
    at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:879)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)

【问题讨论】:

    标签: java struts


    【解决方案1】:

    当我尝试使用 xml 架构验证 xml 文件时,我遇到了这个问题。我用谷歌搜索并找到了这个问题的根本原因。

    像 xerces-2.6.2.jar、crimson.jar、xalan.jar 这样的 Jar 文件 使用 jaxp.jar 具有旧版本的 SAXParserFactory。所以上面所有的罐子 文件应该从类 parh 中删除。

    根据正确版本的 jar 删除或更新 jar。

    【讨论】:

    • 是的,这是我的旧版本,但自从切换到 Weblogic 后,我遇到了同样的问题。基本上,首先要尝试的往往是将 xml-apis 设置为在 pom.xml 中具有 provided
    • 这真的很有帮助!谢谢。
    【解决方案2】:

    如果它对任何人有帮助:我遇到了类似的问题,并且提供 SaxParserFactory 作为 JVM 选项有效

    -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
    

    【讨论】:

    【解决方案3】:

    没关系,我没有将 OC4J 的 global-web-application.xml 配置为首先搜索本地类或创建自定义的 orion-web.xml 文件来做同样的事情。

    如果你遇到这个问题,最简单(大锤)的方法是将此行添加到(oc4j dir)\j2ee\home\config\global-web-application.xml:

    &lt;web-app-class-loader search-local-classes-first="true"/&gt;

    问题是,如果您尝试使用 Xerces 或其他一些最新的 SAX 解析器,您将遇到一个类路径问题,因为 Oracle 试图强行压住您的喉咙(与他们的任何产品相同) )。

    【讨论】:

      【解决方案4】:

      使用 Commons Digester 1.7,而不是 JDeveloper 附带的 Commons Digester。 http://jakarta.apache.org/commons/digester/

      【讨论】:

        【解决方案5】:

        就我而言,我有从 2.1 到 1.8 的降级 commons-digester 并且工作正常。

        【讨论】:

          猜你喜欢
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多