JAXB Marshaller n'ont pas d'éléments dont la valeur est null
Quand j'ai marshall un objet java à l'aide de JAXB Marshaller, le marshaller ne pas créer de vide éléments null fichiers dans l'objet java. Par exemple, j'ai un objet java:
public class PersonTraining {
@XmlElement(name = "Val1", required = true)
protected BigDecimal val1;
@XmlElement(name = "Val2", required = true, nillable = true)
protected BigDecimal val2;
@XmlElement(name = "Val3", required = true, nillable = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar val3;
}
Quand je prends une instance de cet objet, et marshall en XML, j'ai le (C'est car je n'ai pas la valeur Val2):
<PersonTraining>
<Val1>1</Val1>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
Cependant, j'avais prévu de hte résultat suivant à partir de la gare de fonctionnement (Enfait, j'ai particulièrement besoin de l'élément en tant que bien de sorte que le XML peut être validé dans le XSD)
<PersonTraining>
<Val1>1</Val1>
<Val2></Val2>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
S'il vous plaît laissez-moi savoir ce que l'option j'aurais besoin de configurer de sorte que la valeur null dans les attributs de l'objet peut AUSSI être convoquée, et retourné comme vide/null éléments.
Ici est la gare de code:
StringWriter sw = new StringWriter();
JAXBContext jc = JAXBContext.newInstance("person_training");
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(ptl, sw);
OriginalL'auteur Rahul Agrawal | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
Par défaut un JAXB (JSR-222) mise en œuvre ne sera pas ranger un attribut ou élément pour les valeurs null. Ce sera vrai pour le champ suivant dans votre Java modèle.
Vous pouvez remplacer ce comportement par la spécification de
nillable=true
sur le@XmlElement
annotation comme vous l'avez fait ici:Ce sera la cause de la
xsi:nil="true"
attribut à effet de levier:Pour plus d'informations:
Java Modèle
PersonTraining
Puisque vous êtes en annotant la
fields
vous devriez assurez-vous de spécifier@XmlAccessorType(XmlAccessType.FIELD)
à la classe ou le niveau des colis (voir: http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html).Le Code De Démonstration
Démo
Sortie
Les éléments vides ne sont pas une représentation valable de la valeur null. Si dans votre schéma XML si vous définissez un élément simple comme un non-type de chaîne, la validation échoue lorsque l'élément est vide.
OriginalL'auteur bdoughan