Генерируемый JAXB абстрактный класс не абстрактный - PullRequest
1 голос
/ 26 октября 2011

Я использую эту схему для генерации Java-класса через JAXB. Однако сгенерированный класс не является абстрактным. Также, когда я включаю привязку для класса реализации, я не могу объявить этот класс абстрактным, поскольку Object Factory необходимо создать экземпляр. Я не до конца понимаю это. Кто-нибудь может помочь? Спасибо!

<xs:complexType name="AbstractClass" abstract="true">
    <xs:complexContent>
        <xs:extension base="someModel:BaseClass">
            <xs:sequence>

            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Вы должны увидеть абстрактный класс, созданный для абстрактных сложных типов (см. Пример ниже).Можете ли вы предоставить более подробную информацию о вашей XML-схеме?

inheritance.xsd

contactInfo - абстрактный сложный тип.

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="contactInfo" abstract="true">
        <xs:sequence/>
    </xs:complexType>

    <xs:complexType name="phoneNumber">
        <xs:complexContent>
            <xs:extension base="contactInfo">
                <xs:sequence/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

XJC Call

xjc -d out inheritance.xsd

ContactInfo

Сгенерированный класс ConactInfo является абстрактным:

package generated;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "contactInfo")
@XmlSeeAlso({
    PhoneNumber.class
})
public abstract class ContactInfo {


}
1 голос
/ 26 октября 2011

Аннотация IIRC просто говорит, что обычно вы не будете создавать экземпляр этого класса, и его следует использовать только для расширения.Таким образом, абстрактная проверка выполняется JAXB и не имеет ничего общего с абстрактными классами на уровне языка

...