2012-06-07 3 views
1

Почему это схема:Почему JAXB генерирует одно поле List <JAXBElement <String>> из двух полей схемы?

<xsd:complexType name="ErrType"> 
<xsd:sequence minOccurs="0" maxOccurs="unbounded"> 
<xsd:element name="errorCode" type="xsd:string"/> 
<xsd:element name="errorDescription" type="xsd:string"/> 
</xsd:sequence> 
</xsd:complexType> 

Сформировать к этому Java-код:

class ErrType { 
    @XmlElementRefs({ 
    @XmlElementRef(name = "errorCode", namespace = "http://somewhere/blah.xsd", type = JAXBElement.class), 
    @XmlElementRef(name = "errorDescription", namespace = "http://somewhere/blah.xsd", type = JAXBElement.class) 
    }) 
    protected List<JAXBElement<String>> errorCodeAndErrorDescription; 
    // ... 
} 

я ожидал бы что-то подобное:

class ErrType extends ArrayList<ErrTypeEntry> {} 
class ErrTypeEntry { 
    protected String errorCode 
    protected String errorDescription; 
} 

Хорошо, так что я думаю, что ответ : потому что это так. Сочетание двух полей в одном кажется очень нежелательным. Он ненужно удалял важную структуру.

+0

В чем проблема с сгенерированным кодом? Что бы вы ожидали? – Attila

+1

Возможно, потому, что вы указываете minOccurs = "0" maxOccurs = "unbounded" на элемент последовательности. попробуйте указать их в элементе. –

ответ

1

Я думаю, что вы должны написать схему немного больше, как это, чтобы получить что-то ближе (структурно) к вашим ожиданиям:

<xsd:complexType name="ErrTypeEntry"> 
    <xsd:sequence> 
    <xsd:element name="errorCode" type="xsd:string"/> 
    <xsd:element name="errorDescription" type="xsd:string"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="Errors"> 
    <xsd:sequence> 
    <xsd:element name="error" type="ErrTypeEntry" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 
Смежные вопросы