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 @XmlNullPolicy. Voir un exemple ici (dans l'Option "Option #2" article)

OriginalL'auteur doekman | 2009-02-27