JAXB Поколение nillable = true - PullRequest
4 голосов
/ 01 июля 2011

Использование JAXB 2.2.4 Я генерирую код Java со следующим файлом привязки:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<globalBindings generateElementProperty="false">

</globalBindings>

К сожалению, сгенерированный код имеет аннотацию nillable = true.См. Следующий пример:

@XmlElement(name = "ArtID", nillable = true)
protected STEBeitrag artID;

Это определение STEBeitrag:

<xsd:complexType name="CT_Beitrag">
    <xsd:complexContent>
        <xsd:extension base="allgemein:CT_Objekt">
            <xsd:sequence>
                <xsd:element name="ArtID" type="daten:STE_Beitrag" minOccurs="0" maxOccurs="1" nillable="true"/></xsd:element>
            </xsd:sequence>
        </xsd:extension>
     </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="STE_Beitrag" abstract="true">
    <xsd:simpleContent>
     <xsd:extension base="xsd:string"/>
   </xsd:simpleContent>
</xsd:complexType>

Если я не установил ArtID в сгенерированном CT_BeitragЗатем объект unmarshaller создает вывод, такой как

<ns:ArtID xsi:nil="true"/>

Элемент ArtID имеет абстрактный тип, и поэтому этот вывод XML является недопустимым.

Как я могу генерировать код с JAXB, в котором пропущен nillable =истина в аннотации XmlElement?Кстати, схема не может быть изменена.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

У меня нет решения, но эта проблема решена в ошибке http://java.net/jira/browse/JAXB-890 Я надеюсь, что эта проблема будет решена.

0 голосов
/ 07 января 2012

Я не знаю, как делать то, что вы просите, и я был бы удивлен, если то, что вы просите, стоит усилий.

Мне на ум приходят 2 варианта:

  1. Изменить схему (я знаю, вы сказали, что не можете, но, возможно, вы можете взять локальную копию схемы, если вы не можете изменить ее из-за того, что она размещена на сервере вне вашего контроля)
  2. Изменить сгенерированный код ... просто измените nillable=true на nillable=false
...