【问题标题】:Unable to ref to another schema: Cannot resolve the name 'xs:schema' to a(n) 'element declaration' component无法引用另一个架构:无法将名称“xs:架构”解析为(n)“元素声明”组件
【发布时间】:2022-01-07 16:01:14
【问题描述】:

我参考了该指南,基于现有的 wsdl 文件重新创建了一个 SOAP 网络服务: https://www.baeldung.com/spring-boot-soap-web-service。 原始 wsdl 驻留在 .NET 环境中,而我需要使用 spring-boot web-service 从 Java 环境中重现相同的响应。

对于返回简单数据类型(例如 int)的简单响应,我没有任何问题。但是对于返回 DataSet(来自 .NET)的复杂响应,我无法重新创建正确的类。它可能与eclipse工作区中遇到的以下错误有关:

在这一行找到多个注释: - src-resolve:无法将名称“xs:schema”解析为(n)“元素声明”组件。 - src-resolve.4.2:解析组件“xs:schema”时出错。检测到“xs:schema”在命名空间“http://www.w3.org/2001/XMLSchema”中,但其中的组件 命名空间不可从模式文档“file:///C:/03_PROJECTS/ws/src/main/resources/schema/abc.xsd”中引用。如果这是不正确的 命名空间,可能需要更改“xs:schema”的前缀。如果这是正确的命名空间,则应将适当的“import”标签添加到“file:///C:/03_PROJECTS/ws/src/main/resources/schema/abc.xsd”。

以下是 xsd 文件的架构详细信息:

<xs:schema elementFormDefault="qualified" targetNamespace="http://www.example.net/abc/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

下面是出现错误的示例截图元素:

<xs:element name="GetProdItemDescriptionsResponse">
<xs:complexType>
    <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="1"
            name="GetProdItemDescriptionsResult">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="xs:schema"/>
                    <xs:any />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

请告知为什么引用另一个架构会引发错误。我相信对此的响应应该是之前提到的 DataSet。只是想知道 xsd 文件是否存在问题,或者这在 Java 中是否可行,或者是否有可能的解决方法。

【问题讨论】:

    标签: java spring-boot soap xsd


    【解决方案1】:

    您的 XSD 文件包含引用 XSD 架构的元素引用。这很不寻常,但并没有错。元素内容似乎是 XML 模式的 sn-p。我怀疑您需要将&lt;xs:import&gt; 添加到您的 XSD 文件中,以便它可以找到描述 XSD 的 XSD。

    可以按以下方式进行:

    • 从 W3C 网站下载“schema for schema”
    • 在 XSD 中添加 schemaLocation 属性,作为对 XML 处理器的提示

    但是,您应该能够在 Spring 环境中添加一个“实体解析器”,这将允许 Spring XML 处理器通过其 URL 定位 XSD。

    在您问之前...我不知道为什么 .Net 没有报告此错误,但 .Net 可能会自动解析 schema-for-schema。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多