JAXB не генерирует все классы элементов - PullRequest
4 голосов
/ 04 ноября 2011

Для службы REST я определяю необходимые DTO в XML для генерации объекта 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 голосов
/ 04 ноября 2011

Вы определили Image как элемент типа ImageType. Image, таким образом, это просто имя, используемое с этим типом. Определение ImageType будет преобразовано в класс Java, и когда элемент Image будет ссылаться где-то в вашей схеме, это приведет к тому, что поле типа ImageType будет помечено как элемент XML с именем Image.

Так скажи, что у тебя есть ...

<element ref="Image" minOccurs="1" maxOccurs="1" />

где-то в определении типа, что приведет к ...

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

... в соответствующем классе.

Причина, по которой Images получила определение класса, заключается в том, что вы определили его как встроенный комплексного типа. Image относится к типу, поэтому они просто используют соответствующий класс. Images имеет определение анонимного типа, поэтому должен быть создан класс для захвата его структуры.

2 голосов
/ 21 октября 2016

Если вам действительно нужен класс Image, вы можете вызвать его генерацию с помощью следующего объявления:

<element name="Image">
    <complexType>
        <complexContent>
            <extension base="ImageType"/>
        </complexContent>
    </complexType>
</element>
2 голосов
/ 04 ноября 2011

Если вы хотите, чтобы класс Image генерировался, Image должен быть сложным типом, а не типом Q2: ImageType.

...