2017-07-14 3 views
1

Nous utilisons jaxb2 pour générer du code Java à partir de définitions de schémas xml pour certaines données externes. Le projet est assez ancien et a utilisé le maven-jaxb-plugin 1.1.1. Nous voulons mettre à jour vers jaxb2-maven-plugin qui utilisera également jaxb2, mais nous avons trouvé quelques différences dans le code généré. Plus précisément, nous avons des attributs sous forme deJAXB2 génère des getters/setters avec des types primitifs pour les attributs optionnels

<xsd:attribute name="num" type="xsd:int" use="optional"> 

qui sont mis en correspondance avec Integer champs dans le code généré.

@XmlAttribute(name = "num") 
protected Integer num; 

Cependant, jaxb2 génère accesseurs de type primitif au lieu de types nullables:

public int getNum() { 
    return num; 
} 

public void setNum(int value) { 
    this.num = value; 
} 

public boolean isSetNum() { 
    return (this.num!= null); 
} 

public void unsetNum() { 
    this.num = null; 
} 

Cependant, notre code actuel suppose que getNum renvoie un type coffret nullable et teste également présent dans les tests unitaires qui échoue avec une exception de pointeur null.

Existe-t-il un moyen de générer des getters/setters avec des types Nullable pour les attributs optionnels? Les fichiers xsd sont fournis par un fournisseur externe, donc je préférerais ne pas les modifier. Nous ne définissons pas optionalProperty dans <globalBindings>, donc la valeur est la valeur par défaut wrapper.

Répondre

1

Je pense que j'ai une solution à ma propre question. En plus de optionalProperty dans globalBindings, il y a l'option generateIsSetMethod qui contrôle si des méthodes comme isSetNum doivent être générées ou non. Si cette option est activée, les types primitifs tels que int seront utilisés au lieu de Integer.