如何解决jdoconfig.xml中xsi:noNamespaceSchemaLocation的验证错误

时间:2012-09-29 16:46:44

标签: eclipse google-app-engine jdo xsd-validation

自从我今天更新到GAE 1.7.2.1以来,我在所有jdoconfig.xml文件中都在eclipse中遇到验证错误。

我有默认的jdoconfig.xml内容:

[...]
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
[...]

eclipse验证抛出:

Referenced file contains errors (http://java.sun.com/xml/ns/jdo/jdoconfig).  
For more information, right click on the message in the Problems View and 
select "Show Details..."

点击详细信息时,我可以看到一堆如下行:

s4s-elt-character: Non-whitespace characters are not allowed in schema elements
other than 'xs:appinfo' and 'xs:documentation'. Saw 'var_U = "undefined";'.

“Saw ...”中的不同行和不同内容

它出现在我开始使用谷歌插件中的“新建Web应用程序项目...”的每个项目中。

所有人都有这个问题吗?任何修复?

8 个答案:

答案 0 :(得分:28)

试试这个:

<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd">

根据Validating jdoconfig with incorrect url

的答案
  

xmlns不是真正的文件/目录,更像是命名空间,所以不应该存在!附加版本以获取真实的XSD文件,即http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd

答案 1 :(得分:6)

这里有几个问题。

语法问题是您将xsi:noNamespaceSchemaLocation的值给出的URI重定向到http://www.oracle.com/technetwork/java/index.html并返回HTML文档。您正在使用的XSD验证程序正在尝试解析

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" 
          content="text/html; charset=utf-8" />
    <script type="text/javascript">
      var _U = "undefined";
      var g_HttpRelativeWebRoot = "/ocom/";
      var SSContributor = false;
...

作为XSD架构文档,由于某种原因,它试图解释出现问题的重点是在不希望看到字符数据的地方找到字符串var_U = "undefined"

然后有一些概念问题。

  • 您的文档位于名为http://java.sun.com/xml/ns/jdo/jdoconfig的命名空间中。如果要验证文档,为什么在地球上将模式验证器指向没有目标命名空间的模式(noNamespaceSchemaLocation会这样做?)?鉴于(至少某些)文档的元素是命名空间限定的,您需要(如joncalhoun已经建议的那样)使用xsi:schemaLocation并提供告诉验证器,它可以找到您希望它知道的每个命名空间的架构文档。

  • 以前可能会从位置http://java.sun.com/xml/ns/jdo/jdoconfig提供架构文档,但由于它显然是为您的词汇命名的标准命名空间,因此实际上不太可能。大多数系统在名称空间(抽象和定义不明确的东西)和模式文档之间相当可靠地区分,模式文档通常是为给定名称空间定义特定XSD模式组件的XML文档。将模式文档的URI用作命名空间的名称并不违法,但这很不寻常。

请注意,joncalhoun为架构文档(http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd)提供的URL实际上确实解析(在重定向到http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/jdo/jdoconfig_3_0.xsd之后)到架构文档,该文档指定http://java.sun.com/xml/ns/jdo/jdoconfig作为其目标命名空间。 (这意味着即使您通过将其URI作为xsi:noNamespaceSchemaLocation的值来成功检索此架构文档,您也会收到错误,因为它不是元素的架构文档,没有命名空间的属性。)

这让我觉得你应该再次阅读joncalhoun的回答并仔细再试一次。如果你在尝试它时没有工作,我的钱说要么你尝试了类似但不完全是他建议的东西,要么它解决了这个问题,但这只是暴露了一些其他问题,容易误认为失败。

答案 2 :(得分:4)

一种解决方案是在Eclipse首选项中设置XML Catalog。

详细说明:
输入元素:URI
地点:http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd
URI:http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd
密钥类型:命名空间名称
密钥:http://java.sun.com/xml/ns/jdo/jdoconfig

答案 3 :(得分:0)

句法和概念问题C.M.提及插件和Google的设置都有问题,两者都推荐,

xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig

我没有专门使用jdo,但我仍然得到这个命名空间的验证错误。直到最近才对这个命名空间很好。

我使用了LuboM的方法,它对我有用。 LuboM和joncalhoun都不是答案,因为它将我与jdo 3.0联系起来

Oracle将不得不提供修复程序。显然他们的意图是在不同版本的jdo中解决命名空间问题。

答案 4 :(得分:0)

您可能尝试过此路径来解决问题:

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

答案 5 :(得分:0)

这就是我为解决这个问题而采取的措施:

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd">

答案 6 :(得分:0)

我遇到了同样的问题,并且从Eclipse的验证中仅排除了这个jdoconfig.xml文件。即使你的Eclipse为它抛出错误,它也不会影响能够正确地将项目部署到GAE。

以下是如何排除jdoconfig.xml文件以摆脱那个讨厌的错误:

右键单击Eclipse Project, ->Properties->Validation->XML Validator,单击“...”按钮以获取更多选项。

您应该看到包含组和排除组选项。点击排除组 - >添加规则...-&gt;文件夹或文件名,然后浏览到您的文件。

清理或重建您的项目。验证错误应该消失。

这在Eclipse Luna中对我有用。

答案 7 :(得分:0)

我在这方面取得了成功:

Right Click Project -> Properties -> Validation -> XML Syntax
  1. 启用项目特定设置(如果需要)
  2. 在验证文件下,对于无语法指定选择&#34;警告&#34;
  3. 点击&#34;确定&#34;
  4. 如果您要求验证文件,请单击&#34;是&#34;
  5. 您可以转到Windows -> Preferences

    为所有项目执行相同操作

    确保您正在验证该文件(步骤4)。