Comment instancier un élément vide avec JAXB
- Je utiliser JAXB pour créer des messages XML. Le XML j'ai besoin de créer est (pour des raisons de simplicité):
<request>
<header/>
</request>
Mon code ressemble à ceci:
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "request")
public class Request {
private String header;
@XmlElement(required=true)
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header=header;
}
}
Le problème: la header
élément n'est pas affiché (en-tête est null
). Lorsque l'en-tête est réglé à une chaîne vide, l'affichage suivant apparaît:
<request>
<header></header>
</request>
Lorsque j'utilise comme type Object
au lieu de String
, le résultat est encore pire:
<request>
<header xsi:type="xs:string"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></header>
</request>
BTW: je suis en utilisant ce code pour créer de la chaîne XML.
Est-il possible d'obtenir une balise vide?
Alors quel est le problème avec le réglage de l'en-tête de ""?
Je veux <en-tête/> et pas <header></header>.
Euh, je sais il est tard, mais juste au cas où. De faire EXACTEMENT ce que vous voulez, vous pouvez utiliser EclipseLink MOXy la mise en œuvre de JAXB, qui a une très belle extension
Je veux <en-tête/> et pas <header></header>.
Euh, je sais il est tard, mais juste au cas où. De faire EXACTEMENT ce que vous voulez, vous pouvez utiliser EclipseLink MOXy la mise en œuvre de JAXB, qui a une très belle extension
@XmlNullPolicy
. Voir un exemple ici (dans l'Option "Option #2" article)OriginalL'auteur doekman | 2009-02-27
Vous devez vous connecter pour publier un commentaire.
En XML,
<header/>
et<header></header>
sont la même chose. Si vous voulez vraiment l'ancien, puis d'utiliser un prettifier.javax.xml.transform.TransformerFactory.newTransformer()
sera probablement le faire pour vous.OriginalL'auteur Tom Hawtin - tackline
Une balise vide pour un objet de type String est essentiellement la chaîne vide.
Si vous appelez la suite, vous obtiendrez ce que vous cherchez:
Je tiens également à noter que dans le fichier XML, les déclarations suivantes d'un en-tête sont idential. Ces deux n'ont aucun enfant nœuds de texte. Elles sont essentiellement les mêmes et seront traités de la même façon par tous les parseurs XML:
OriginalL'auteur Chris Dail
@Tom Hawtin - tackline dit
<header/>
et<header></header>
est le même. Les analyseurs vous donnera "".Vous devez mettre
nillable
sur votre en-tête de l'annotationJ'espère que ce code va générer à la suite de XML pour
null
valeur.imprime
OriginalL'auteur Jin Kwon
Je voulais la même chose, effectivement
<header/>
plutôt que<header></header>
lors de la sérialisation xml processus.
Depuis une valeur null, plutôt qu'à une chaîne vide - va produire le résultat correct, j'ai modifié ma méthode de définition pour définir la valeur explicitement à null:
OriginalL'auteur Mark D