JAXB不能生成所有元素类。

4
对于一个REST服务,我会在XML中定义所需的DTOs来生成JAXB对象。我使用Eclipse IDE内置选项进行生成。
问题在于,生成的类并不像预期那样。给定以下XML模式文件,我期望生成3个类。ImageType、Image和Images。但是Image元素的Image类没有被生成。目前我不知道自己做错了什么。
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.company.com/schema/v1/ImageDTO"
    elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:Q1="http://www.company.com/schema/v1/BusinessObjectDTO"
    xmlns:Q2="http://www.company.com/schema/v1/ImageDTO">

    <import schemaLocation="BusinessObjectDTO.xsd"
        namespace="http://www.company.com/schema/v1/BusinessObjectDTO"></import>

    <complexType name="ImageType" abstract="false">
        <complexContent>
            <extension base="Q1:BusinessObjectType">
                <sequence>
                    <element name="name" type="string" maxOccurs="1" minOccurs="1"></element>
                    <element name="fileName" type="string" maxOccurs="1"
                        minOccurs="1"></element>
                    <element name="thumbnailFileName" type="string" maxOccurs="1"
                        minOccurs="1"></element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

    <element name="Image" type="Q2:ImageType"></element>

    <element name="Images">
        <complexType>
            <sequence>
                <element name="ImageList" type="Q2:ImageType" maxOccurs="unbounded"
                    minOccurs="0"></element>
            </sequence>
        </complexType>
    </element>
</schema> 
3个回答

4
您已经将 Image 定义为类型为 ImageType 的元素。因此,Image 只是使用该类型的名称。 ImageType 定义将被转换为一个 Java 类,当 Image 元素在您的架构中的某个地方被引用时,它会导致一个类型为 ImageType 的字段被注释为 XML 元素,并具有名称 Image
假设您拥有...
<element ref="Image" minOccurs="1" maxOccurs="1" />

在类型定义中的某个地方,这将导致...

@XmlElement(name="Image" ...)
ImageType image;

在相应的类中,出现了Images一词。

之所以没有为Images定义类,是因为您将其定义为内联的复杂类型。而Image则是引用了一个类型,因此只需使用相应的类即可。而Images具有匿名类型定义,因此必须生成一个类来捕获它的结构。


2

如果您真的需要Image类,可以使用以下声明来强制生成它:

<element name="Image">
    <complexType>
        <complexContent>
            <extension base="ImageType"/>
        </complexContent>
    </complexType>
</element>

2
如果想要生成Image类,则Image必须是一个复合类型,而不是Q2:ImageType类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接