gpt4 book ai didi

java - 使用带有 xml.xsd 导入 : "Failed to read schema document ' xml. xsd 的 XJC 时出错”

转载 作者:数据小太阳 更新时间:2023-10-29 02:08:06 25 4
gpt4 key购买 nike

我正在尝试在第三方的模式文件(它是 Amazon.com 的产品 API)上运行 xjc。好吧,我遇到了麻烦,因为对于其中一个文件 default.xsd,xjc 对以下导入感到厌烦(它是模式声明之后的第一个导入):

<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" />

我不是 XML 方面的专家,但我认为 xml.xsd 是“核心”XML/XSD 库的一部分,并且 XJC 默认情况下会知道该库的详细信息。但是当我运行任务时,我得到了这个错误:

[WARNING] schema_reference.4: Failed to read schema document 'xml.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not . line 9 of file:/C:/temp/amazon/default.xsd

[ERROR] src-resolve: Cannot resolve the name 'xml:lang' to a(n) 'attribute declaration' component. line 119 of file:/C:/temp/amazon/default.xsd

我尝试从 http://www.w3.org/2001/03/xml.xsd 下载 xml.xsd 文件到包含这些模式文件的目录并再次运行命令,但 xml.xsd 不验证:

[ERROR] schema_reference.4: Failed to read schema document 'file:/C:/temp/amazon/xml.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not . unknown location

我正要开始探究为什么这不会被验证,但决定推迟,因为我认为我遗漏了一些非常简单或小的东西。我是否需要手动包含 xml.xsd 导入,或者我是否遗漏了其他内容?

我正在使用的架构的 url 当前位于此处:

http://g-ecx.images-amazon.com/images/G/01/mwsportal/doc/en_US/products/default.xsd

这里

http://g-ecx.images-amazon.com/images/G/01/mwsportal/doc/en_US/products/ProductsAPI_Response.xsd

我只是在使用:

xjc 目录名一起或xjc 文件名尝试一个一个地解析它们

最佳答案

我下载了您的 XSD 文件来模拟错误,事实上,当按原样下载时,它们给出了您报告的错误。

目前还不清楚发生了什么。是的,XML 命名空间 http://www.w3.org/XML/1998/namespace 是特殊的和保留的。您不必为了它的存在而声明它,但是 xml.xsd 文件用于 Schema compliance,因此这些预定义类型也在 XSD Schema 中定义,因此类型可用于使用模式。

所以我的第一个想法是需要将 XML 命名空间声明为 xmlns:xml="http://www.w3.org/XML/1998/namespace"(通常这永远不会需要)才能使 XJC 正常运行,但这并没有太大改变。

在反复考虑之后,我决定运行带有选项-nvxjc,这会改变某些严格的验证规则。这次,我收到的错误更清楚了,并立即指出了原因,以及显而易见的解决方案:

[ERROR] failed to retrieve 'file:/D:/Projects/xyz/XMLSchema.dtd': java.io.FileNotFoundException: D:\Projects\xyz\XMLSchema.dtd (The system cannot find the file specified) line 2 of file:/D:/Projects/xyz/xml.xsd

显然,XJC 尝试下载 DOCTYPE 声明引用的 DTD:

<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >

实际上,这不是 XJC,而是 XSD 验证之前的 XML 解析器。使用的 XML 解析器是一个验证解析器,这意味着它会尝试找到 DTD,如果找不到,它就会中断。您收到的错误不是很有用,但是正确的,就 XML 而言,指向 DTD 的 XML 文件不是有效的 XML 文件(但它可以是格式正确的 XML 文件和非验证 XML 处理器,不是与 XSD 模式验证混淆,将简单地加载 XML)。

解决方案

但是,要将 XML 视为正确,不需要 DTD。您可以 download the XMLSchma DTD ,或者更简单,只需删除该行,处理就会成功,无论是否使用 -nv 开关。

关于java - 使用带有 xml.xsd 导入 : "Failed to read schema document ' xml. xsd 的 XJC 时出错”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com