2011-07-01 6 views
4

utilisant JAXB 2.2.4 Je génération de code Java avec le fichier de liaison suivante:JAXB Génération nillable = true

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

<globalBindings generateElementProperty="false"> 

</globalBindings> 

Malheureusement, le code généré a une annotation nillable = true. Voir l'exemple suivant:

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

Telle est la définition de 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> 

Si je ne mets pas le artid dans l'objet CT_Beitrag généré alors le unmarshaller produit une sortie comme

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

L'élément ArtID a un type abstrait et par conséquent cette sortie XML n'est pas valide.

Comment puis-je générer du code avec JAXB qui omet nillable = true dans l'annotation XmlElement? Par ailleurs, le schéma ne peut pas être changé.

Répondre

0

Je ne sais pas comment faire ce que vous demandez et je serais surpris si ce que vous demandez en vaut la peine.

Il y a 2 options qui sautent à l'esprit:

  1. Changer le schéma (je sais que vous avez dit que vous ne pouvez pas, mais peut-être que vous pouvez prendre une copie locale du schéma si vous ne pouvez pas changer parce qu'elle est hébergé sur un serveur situé hors de votre contrôle)
  2. modifier le code généré ... simplement changer nillable=true-nillable=false
Questions connexes