【问题标题】:org.xml.sax.SAXParseException: Document is invalid: no grammar found.org.xml.sax.SAXParseException:文档无效:未找到语法。
【发布时间】:2012-04-26 19:32:21
【问题描述】:

我在我的开发机器上的 Struts 应用程序中遇到错误,显然我的配置文件有错误(我已经检查过并且看起来没问题):

org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 3 column 15: Document is invalid: no grammar found.
    org.xml.sax.SAXParseException: Document is invalid: no grammar found.


org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 3 column 15: Document root element "struts-config", must match DOCTYPE root "null".
    org.xml.sax.SAXParseException: Document root element "struts-config", must match DOCTYPE root "null".

显然,在开发机器上,应用程序设法运行。但是,在部署服务器上,我收到以下错误,我不知道是否可能相关:

    org.apache.struts.action.ActionServlet handleConfigException 
SEVERE: Parsing error processing resource path /WEB-INF/struts-config.xml java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

我的 struts-config.xml 文件:http://pastebin.com/i0XanZZt 我的 web.xml 文件:http://pastebin.com/jMPAdSUm

这里可能有什么问题?缺少一些库?不正确的库版本(使用最新的 Struts 1 版本)?

提前致谢!

【问题讨论】:

  • 你可以删除文档类型并测试吗?
  • 嘿,我已经测试过,我得到了同样的错误:S
  • FWIW,我最近在我正在开发的应用程序的控制台中引入了类似于前 2 个错误。但是,一切似乎都运行良好,所以我认为这是一个警告,而不是错误。 (不过,修复导致警告的任何原因都很好。我仍在谷歌搜索这个问题。)你列出的第三个错误是不相关的,我很确定。
  • 嘿@Rui,你找到解决这个问题的方法了吗?我现在正在苦苦挣扎..

标签: java exception struts struts-config


【解决方案1】:

刚刚经历了一些非常相似的事情。还收到 org.xml.sax.SAXParseException: Document is invalid: no syntax found。原始开发人员为 Digester 设置了 setValidation(true),然后尝试使用模式进行验证。当验证设置为 true 时,它​​期望 XML 的 DOCTYPE 声明中有一个 DTD。因此,当找不到一个时,就会发生异常。

解决方案:在使用模式进行验证时,请勿在 Digester 上将验证设置为 true。

下面是一个很好的链接,它显示了如何设置 Digester,它定义了 Digester 使用的架构。当然如果在 xml 中定义了 schema,那么 Digester 就不需要定义 schema,验证会自动进行。

http://alvinalexander.com/java/jwarehouse/commons-digester/src/test/java/org/apache/commons/digester/XMLSchemaTestCase.java.shtml

希望这会有所帮助...

【讨论】:

  • 在我的情况下,我必须在 SAXParserFactory 的实例上使用 setValidating(false) 并且它有效。
【解决方案2】:

对于那些做JPOS的人,将这两行添加到xml文件中

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd">

【讨论】:

    【解决方案3】:

    只需检查struts.xml,更正以下内容并运行您的程序。

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
    

    【讨论】:

      【解决方案4】:

      尝试使用 SAX 进行 XSD 验证:

      Caused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 30; Document is invalid: no grammar found.
          at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
      

      修复似乎是添加这个:

       saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
      

      参考:https://docs.oracle.com/javase/tutorial/jaxp/sax/validation.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 2017-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        相关资源
        最近更新 更多