导入命名空间 - 无法将名称解析为(n)'类型定义'组件

时间:2012-02-23 01:37:44

标签: maven xsd jaxb xjc

上下文:我使用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中,我可以在“type =”companyCdm:entityName“上按住Ctrl键单击/检查源代码,它正确地打开了filename.xsd文件。但是由于某些原因,maven无法访问它。< / p>

问题:我错过了什么?为什么这种情况(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>

2 个答案:

答案 0 :(得分:1)

好的找出了解决方法:

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

答案 1 :(得分:0)

O'Rielly [Java and XML Chap3][1]说使用InputSource可以解析相对路径: