【问题标题】:Bogus Eclipse warning for web.xml: "No grammar constraints (DTD or XML schema) detected for the document."web.xml 的虚假 Eclipse 警告:“未检测到文档的语法约束(DTD 或 XML 模式)。”
【发布时间】:2010-09-24 05:49:58
【问题描述】:

我的web.xml 文件的顶部如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
    version="2.5">

但我仍然收到来自 Eclipse (Ganymede) 的警告,即没有检测到 XML 模式,并且没有警告模式违规。我项目中的其他 XML 文件(例如Spring Framework 配置文件)没有警告,但确实给出了有关架构违规的正确警告。

如何使架构检查正常工作并希望警告消失?服务器运行正常。这似乎是一个 IDE 问题。

【问题讨论】:

  • 你也可以看到我的回答for similar question on。基本上,只需编写您的 xml 以符合要求的规则

标签: java eclipse xsd warnings


【解决方案1】:

我也讨厌这个警告。特别是因为它出现在您尚未编写的 XML 文件中,但出于任何原因出现在您的项目中(如果您使用 MAVEN,那就太糟糕了)。

使用 Eclipse 3.5+,您可以轻松删除此验证规则。转到 Preferences-->XML-->XML FILES --> Validation 并选择“ignore”。

您可能还需要执行一个项目 -> 清理才能消除验证警告。

【讨论】:

  • 我广泛使用 Maven,除非它们位于目标目录中,否则不会在 Maven 文件上出现此错误。在这种情况下,最好在目标目录中添加一条规则来禁用验证,而不是忽略错误。
  • 这并不能解决问题,只是隐藏症状。
  • 我不会这样做 首选项 | XML | XML 文件 | Eclipse 中的验证,因为这只掩盖/隐藏错误,它不会解决错误。如果你只使用 Eclipse 来构建 Android 应用程序,那么这个“解决方案”是可以接受的。但是,如果您使用 Eclipse 构建其他 Java 项目 - JSF 等 - 如果 XML 验证被“关闭”,它将破坏这些项目。所以要小心。真正的解决方案是甲骨文、谷歌和 IBM 使用更新的 DTD 和模式来更新他们的软件。
  • 我们必须一直处理格式不正确的 3rd 方文件,尤其是 xml 文件,是的,如果他们修复它们会很好,但他们没有,所以我只需要关闭毫无意义警告,以便我可以看到重要的、真实的警告。这个修复对我很有帮助,谢谢。
【解决方案2】:

或许可以试试:

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

代替:

http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd

另外,&lt;!DOCTYPE ...&gt; 不见了:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<web-app
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">
  <!-- ... -->
</web-app>

【讨论】:

  • 您还需要将 xmlns 从:-java.sun.com/xml/ns/j2ee 更改为:-java.sun.com/xml/ns/javaee
  • xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  • ...并且不要忘记在进行更改后“验证”有问题的文件。
【解决方案3】:

清除已存储验证文件的缓存。

Window > Preferences > General > Network Connections > Cache 然后全部删除。现在去验证文件,看看是否可以解决问题。

这发生在我身上,清除缓存以进行验证是让它再次正常运行的唯一方法。清理脏缓存的建议找到了here

【讨论】:

  • 这对我有用。看起来在某个时候我的 Eclipse 缓存了 java.sun.com/xml/ns/javaee/web-app_2_5.xsd 的伪造副本,这导致我所有的 web.xml 文件都无法通过验证。
  • 当我的 Spring bean 文件开始抛出此错误时,这也适用于我。
【解决方案4】:

如果由于您的 XML 编辑器未找到 XSD 文件而出现相同的(误导性)错误消息,您可以添加目录条目。

您选择为架构指定的 URL,用于声明,如

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                      http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"

为命名空间http://java.sun.com/xml/ns/j2ee 指定架构文件的URL (http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd)。您现在可以使用 Eclipse 中的工作区目录重定向文件的位置:

Preferences -> XML -> XML Catalog -> Add..

使用

Key Type = Schema Location
Key = http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd

然后您可以使用文件选择器在文件系统或工作区中实际选择 XSD 文件。

【讨论】:

    【解决方案5】:

    问题有两个方面:

    1. Eclipse 附带了许多知名 XSD 的缓存。您提供的名称空间和/或位置与其中任何一个都不匹配。
    2. 因此 Eclipse 尝试在 Internet 上通过提供的 URI 寻找 XSD(可能正常工作)。不幸的是,在 Oracle 修改 java.sun.com 之后,这种机制似乎在 Eclipse 中超时(显然服务器重定向到主页,而不是简单地说“不存在,抱歉”)。

    当您修改为 Java EE 5 的正确值时,缓存中的条目将被找到并且 Eclipse 会很高兴。

    【讨论】:

      【解决方案6】:

      将此&lt;!DOCTYPE ...&gt; 添加到您的 xml 文件中。请放在&lt;?xml ...&gt;下:

      <!DOCTYPE ??? PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      

      ??? = 您的根元素,现在如果您的子元素名称使用 html 保留字,您可能会遇到一些错误,您所要做的就是将它们更改为非保留字。

      例如:
      如果您当前的子元素是&lt;img&gt;,请将其更改为&lt;pic&gt;...

      【讨论】:

      • 该文件是 web.xml,而不是 xhtml 文件。
      猜你喜欢
      • 2012-10-02
      • 2012-01-02
      • 2013-03-30
      • 2013-06-26
      • 2013-02-15
      • 1970-01-01
      • 2015-02-27
      • 2014-10-02
      相关资源
      最近更新 更多