【问题标题】:How to solve validation error on xsi:noNamespaceSchemaLocation in jdoconfig.xml如何解决 jdoconfig.xml 中 xsi:noNamespaceSchemaLocation 上的验证错误
【发布时间】:2012-09-29 16:46:43
【问题描述】:

自从我今天更新到 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 ...”中的不同行和不同内容

它发生在我开始使用 google 插件中的“新 Web 应用程序项目...”的每个项目中。

那么有人有这个问题吗?有什么办法吗?

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    <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

    【讨论】:

    • 我遇到了类似的问题,并且解决了它。抱歉,它不适合你。你能提供更多关于你在做什么以及为什么你有一个 jdoconfig.xml 文件的背景吗?您使用的是 SOAP 客户端还是什么?这在 1.7.2.1 之前是否有效(如果有,是什么版本)?
    • 是我的错,我实际上并没有这样做。
    • 这个解决方案很容易被忽略的“技巧”是创建新的 GAE Web 应用程序项目时架构位置行的默认值为:xsi:noNamespaceSchemaLocation 并更改为:@987654325 @ 在我第一次观看时滑过我。我认为应该编辑答案以指出这种变化,并且不太容易导致误报。
    • 雷克斯雷姆斯,你的评论有帮助。我正在复制 xsd 位置,但没有将 xsi:noNamespaceSchemaLocation 更改为 xsi:SchemaLocation 继续给出错误。使用 xsd 路径更改为 xsi:SchemaLocation 解决了该错误。
    【解决方案2】:

    这里有几个问题。

    语法问题是您作为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 并提供一个 pair 告诉验证器在哪里可以找到您希望它了解的每个命名空间的架构文档。

    • 过去可能从位置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 的答案,然后再试一次,仔细。如果在您尝试时它不起作用,我的钱说明您尝试了类似但不完全符合他的建议的东西,或者它解决了 this 问题但只是暴露了一些其他 em> 问题,很容易被误认为是失败。

    【讨论】:

    • 非常全面和有教育意义。谢谢,当然,我的错是我没有仔细阅读和尝试@joncalhoun 的回答。
    • 对问题的出色分析。请参阅我对 joncalhoun 关于建议编辑的回答的评论,这可能有助于澄清为什么有人可能不会“看到”他建议的更改。
    【解决方案3】:

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

    详情:
    入口元素:URI
    位置:http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd
    网址:http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd
    键类型:命名空间名称
    密钥:http://java.sun.com/xml/ns/jdo/jdoconfig

    【讨论】:

      【解决方案4】:

      句法和概念问题 C.M.提及是插件和谷歌设置都推荐的问题,

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

      我没有专门使用 jdo,但我仍然收到此命名空间的验证错误。直到最近,这个命名空间还不错。

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

      Oracle 将不得不提供修复。显然,他们的意图是跨 jdo 版本自行解决命名空间问题。

      【讨论】:

        【解决方案5】:

        这是我修复它的方法:

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

          我成功了:

          Right Click Project -> Properties -> Validation -> XML Syntax
          
          1. 启用项目特定设置(如果需要)
          2. 在验证文件下,如果没有指定语法,请选择“警告”
          3. 点击“确定”
          4. 如果您要求验证文件,请单击“是”

          您可以转至Windows -&gt; Preferences,对所有项目执行相同操作。

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

          【讨论】:

            【解决方案7】:

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

            以下是如何仅排除 jdoconfig.xml 文件以消除该讨厌的错误:

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

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

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

            这在 Eclipse Luna 中对我有用。

            【讨论】:

              【解决方案8】:

              您可能已经尝试过以下方法来解决您的问题:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-07-25
                • 2013-02-27
                • 1970-01-01
                • 2019-11-14
                相关资源
                最近更新 更多