针对web.xml的Bogus Eclipse警告:“没有检测到文档的语法约束(DTD或XML模式)。”

时间:2008-11-26 21:04:12

标签: java eclipse xsd warnings

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问题。

7 个答案:

答案 0 :(得分:46)

我也讨厌这个警告。特别是因为它出现在XML文件中,你没有写,但出于任何原因出现在你的项目中(如果你使用MAVEN它是地狱)。

使用Eclipse 3.5+,您可以轻松删除此验证规则。转到首选项 - &gt; XML - &gt; XML文件 - &gt;验证并选择“忽略”。

你可能还需要做一个项目 - &gt;清理验证警告即可消失。

alt text

答案 1 :(得分:26)

也许试试:

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

而不是:

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

此外,<!DOCTYPE ...>缺失:

<?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>

答案 2 :(得分:10)

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

窗口&gt;偏好&gt;一般&gt;网络连接&gt;缓存然后删除所有。现在去验证文件,看看是否能解决问题。

这对我而言,清除缓存以进行验证是让它再次正常运行的唯一方法。找到了清除脏缓存的建议here

答案 3 :(得分:2)

如果您的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文件。

答案 4 :(得分:0)

问题是双重的:

  1. Eclipse附带了许多着名的XSD缓存。您提供的名称空间和/或位置与其中任何一个都不匹配。
  2. 因此Eclipse试图在提供的URI上寻找互联网上的XSD(可能正常工作)。不幸的是,在Oracle修改java.sun.com之后,这种机制似乎只是在Eclipse中超时(显然服务器重定向到主页而不是简单地说“不存在,抱歉”)。
  3. 当您修改Java EE 5的正确值时,将找到缓存中的条目,Eclipse将很高兴。

答案 5 :(得分:0)

您还可以看到我的回答for similar question on

基本上,只需编写xml以符合所需规则

答案 6 :(得分:-5)

将此<!DOCTYPE ...>添加到您的xml文件中。请把它放在<?xml ...>

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

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

例如:
如果您当前的子元素为<img>,请将其更改为<pic> ...