导入命名空间 - 无法将名称解析为“类型定义”组件

2024-01-04

上下文:我使用 maven-jaxb 插件从 xsd 文件生成 java 类。我的所有 .xsd 文件都位于一个位置 - src/main/resource 目录。

问题:当 xsd 不引用/导入具有不同目标命名空间的其他 xsd 时,一切正常。但是,当下面的 xsd(targetNamespace="http://www.companyA.com/someservice")从不同的命名空间(namespace="http://www.companyB.com/")导入另一个 xsd filename.xsd 时,我收到上述错误:无法将名称 xxx 解析为(n)“类型定义”组件。

编辑:当前xsd文件中的元素名称是“entityName”,其类型是“companyB:entityName”(即)名称相同。

然后,我尝试从命令行对该文件调用 xjc,这正确生成了 Java 类。我还确保在 Eclipse 中,我能够按住 Ctrl 键单击/检查“type="companyCdm:entityName”上的源,这会正确打开 filename.xsd 文件。但是由于某种原因,maven 无法访问它。

问题:我缺少什么?为什么这种情况(2 个命名空间)与处理单个命名空间不同?

这是我的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.companyA.com/someservice"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:companyB="http://www.companyB.com/version"
    targetNamespace="http://www.companyA.com/someservice"
    elementFormDefault="qualified" attributeFormDefault="qualified">

    <xsd:import namespace="http://www.companyB.com/version" schemaLocation="filename.xsd" />

    <xsd:element name="MyName" type="MyType" />

    <xsd:complexType name="MyType">
        <xsd:annotation>
        <xsd:documentation>
            A list
        </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="entityName" type="companyB:entityName" maxOccurs="1" minOccurs="1"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

好的,找到了解决方法:

我将所有依赖的 xsd(即有问题的 xsd 的引用)以及一堆其他未使用的 xsd 移至一个单独的文件夹,然后使用 maven 重新生成代码 - 现在可以工作了。似乎与其他未使用的 xsd 之一存在一些名称空间冲突,我还没有指出具体的一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导入命名空间 - 无法将名称解析为“类型定义”组件 的相关文章

随机推荐