2014-06-05 1 views
1

J'ai un choix XSD, les deux étant de type javax.xml.datatype.XMLGregorianCalendar. Comme recommandé, j'ai utilisé ObjectFactory et JAXBElement pour différencier les deux choix.@XmlSchemaType pour la méthode ObjectFactory

@XmlElementDecl(namespace = "http://me.com/1.0/api", name="timestamp") 
JAXBElement<XMLGregorianCalendar> createTimestamp(XMLGregorianCalendar timestamp) { 
    return new JAXBElement<XMLGregorianCalendar>(_timestamp_QNAME, XMLGregorianCalendar.class, null, timestamp); 
} 

Je veux maintenant changer le type qui apparaît dans le WSDL autogenerated à 'dateTime' au lieu de xs: anySimpleType.

Il semble que l'annotation @XmlSchemaType ne soit pas prise en charge par la méthode ObjectFactory et que les balises @XmlSchameType au niveau du package ne puissent pas non plus modifier les types générés ici.

@javax.xml.bind.annotation.XmlSchemaType(name="dateTime", type=javax.xml.datatype.XMLGregorianCalendar.class) 
package my.example.api; 

Ceci génère toujours xs: anySimpleType dans ce cas particulier.

Je ne peux pas utiliser EclipseLink dans mon projet.

Répondre

0

Au lieu de faire:

@XmlElementRefs({ 
    @XmlElementRef(name="foo", type=JAXBElement.class), 
    @XmlElementRef(name="bar", type=JAXBElement.class) 
}) 
public JAXBElement<XMLGregorianCalendar> getFooOrBar() { 
    return fooOrBar; 
} 

Vous aurez besoin d'avoir une propriété séparée pour chaque élément pour obtenir le comportement que vous recherchez. Puisque par défaut JAXB ne marshal pas les propriétés avec une valeur nulle, vous serez toujours en mesure de produire le XML que vous recherchez.

public XMLGregorianCalendar getFoo() { 
    return foo; 
} 

@XmlSchemaType(name="time") 
public XMLGregorianCalendar getFoo() { 
    return foo; 
} 
+0

Je n'ai pas tout à fait vous obtenir Blaise. Il s'agit de maintenir le type de choix de schéma. Nulls n'est pas une préoccupation. –

Questions connexes