2017-06-29 2 views
0

Je ne souhaite pas utiliser les annotations sur ma classe pour marshal/unmarshal à partir de XML. Je sais que jaxb n'a pas besoin d'annotations pour xml unmarshal dans un objet tant que les noms de propriété et la structure correspondent. cela fonctionne avec les nombres et les chaînes, mais cela ne semble pas fonctionner avec les booléens. ceux-ci se terminent toujours par des valeurs nulles, et lors du rassemblement, les propriétés booléennes n'apparaissent pas dans le fichier XML résultant. Comment puis-je le faire fonctionner sans utiliser d'annotations?JAXB unmarshal Valeurs booléennes sans utiliser d'annotations

Répondre

0

Vous aurez au moins besoin de l'annotation @XmlRootElement sur votre classe racine.
La convention de dénomination préférée pour un getter booléen est isSomething() au lieu de getSomething().

qui suit la classe Java

@XmlRootElement 
public class Root { 

    private Boolean something; 

    public Boolean isSomething() { 
     return something; 
    } 

    public void setSomething(Boolean something) { 
     this.something = something; 
    } 
} 

fonctionne bien pour moi avec cette entrée XML:

<root> 
    <something>true</something> 
</root> 

Je l'ai testé avec cette méthode principale:

public static void main(String[] args) throws Exception { 
    JAXBContext context = JAXBContext.newInstance(Root.class); 
    Unmarshaller unmarshaller = context.createUnmarshaller(); 
    File file = new File("root.xml"); 
    Root root = (Root) unmarshaller.unmarshal(file); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(root, System.out); 
} 

La sortie XML générée est:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
    <something>true</something> 
</root> 
+0

cela n'a pas fonctionné pour moi. c'est bizarre, il n'y a pas de comportement de liaison par défaut pour les wrappers booléens sans avoir besoin d'annoter. De toute façon, je ne voulais pas passer trop de temps dessus. J'ai créé une classe d'aide à unmarshal à comme je ne peux pas annoter la classe cible – kfc

+0

@kfc J'ai utilisé Java 8 (ne sais pas si cela est pertinent). –

+0

J'utilise aussi java 8 – kfc