2010-12-02 6 views
7

Cette question a été posée sous diverses formes - mais je pense qu'il y a encore de la place pour cataloguer plus loin.Jaxb généré classe utilisée JAXBElement au lieu du type spécifié

je un XSD avec deux définitions d'éléments

<xs:complexType name="elementA"> 
    <xs:sequence> 
     <xs:element name="date" type="xs:string" minOccurs="0"/> 
     <xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

Ceci génère:

protected String date; 
@XmlElementRef(name = "lastXdigits", namespace = "http://xxxxxxx", type = JAXBElement.class) 
protected JAXBElement<String> lastXDigits; 

Modification du XSD à:

<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="1"/> 

résultats dans:

protected String date; 
@XmlElement(name = "lastXdigits", required = true, nillable = true) 
protected String lastXDigits; 

et en utilisant:

<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/> 

résultats dans:

protected String date; 
@XmlElement(name = "lastXdigits") 
protected String lastXDigits; 

Cela me semble extrêmement bizarre. Pourquoi lastXDigits est-il généré en tant que type JAXBElement dans le premier cas et pourquoi un type String n'est-il pas suffisant dans tous les cas? De même, pourquoi jaxb devrait-il traiter différemment ces deux éléments lorsque leurs définitions, en dehors du nom, sont identiques? J'utilise une tâche jaxb-xjc ant de jaxb 2.0.5.

Est-ce que cela vous parait suspect ou justifie-t-on ces différences?

Répondre

6

Si nillable="true" avec minOccurs="0" il est impossible de représenter les valeurs avec juste String. Que signifierait null? Cela signifie-t-il que c'était nul, ou qu'il s'est produit 0 fois? Mais je suppose que c'est un peu discutable quand il s'agit juste d'une chaîne.

Comparer avec la liste vide. Une liste nulle est certainement différente d'une liste vide.

+1

Je suppose que cela est pertinent si vous êtes intéressé par la distinction entre aucun élément présent et la valeur de l'élément étant nul, mais je suppose que dans la plupart des cas, personne ne s'en soucie vraiment et le niveau d'indirection n'est qu'une nuisance . – Ellis

+1

Oui, mais je suppose que dans certains cas, il peut être une distinction valable à faire. –

Questions connexes