2010-07-12 2 views
2

J'essaye de démonter un document XML créé à partir de la classe JAXB annotée jersey.JAXB unmarshalling ne fonctionne pas pour les objets complexes contenant la collection

JAXBContext jaxbCtx = JAXBContext.newInstance(MyClass.class); 
Unmarshaller m = jaxbCtx.createUnmarshaller(); 
MyClass result = (MyClass) m.unmarshal(in) 

MyClass ressemble à quelque chose comme:

@XmlRootElement(name = "my-class") 
@XmlSeeAlso(SomeOther.class) 
public class MyClass { 
    private Collection<SomeOther> result; 
    private URI uri; 
    private String errorMsg; 

    @XmlElement 
    public String getError() { 
     return errorMsg; 
    } 
    @XmlElement 
    public Collection<SomeOther> getResult() { 
     return // some Set<SomeOther>; 
    } 
    @XmlAttribute 
    public URI getUri() { 
     return uri; 
    } 

Le XML exemple est comme ci-dessous:

<my-class uri="some uri"> 
    <error></error> 
    <result> 
     <some other information in tags> 
    </result> 
    ... 
    <result> 
    </result> 
</my-class> 

L'objet retourné par JAXB unmarshaler contient toutes les valeurs comme nulles; Quelqu'un pourrait-il aider ici? Merci Nayn

+0

Pouvez-vous cliquer sur ce bouton depuis le navigateur pour voir ce que le XML provient de votre ressource? Ou avez-vous déjà vérifié que les données arrivant dans le unmarshaller sont bonnes. – rynmrtn

+0

Oui. C'est bon. J'ai vérifié. – Nayn

Répondre

4

C'est parce qu'il vous manque les méthodes définies. Si vous ne fournissez que les méthodes get, JAXB considère que cette propriété est en écriture seule.

Si vous ne souhaitez pas ajouter des méthodes set vous pouvez ajouter ce qui suit à votre classe:

@XmlAccessorType(XmlAccessType.FIELD) 

Et puis annoter les champs au lieu des propriétés.

+0

Pourriez-vous expliquer quels sont les champs et quelles sont les propriétés ici? – Nayn

+0

Les champs sont les variables d'instance (telles que uri) et les propriétés sont les combinaisons get/set (comme getUri()/setUri()). –

+0

Cela a bien fonctionné. Merci beaucoup Doughan. Cela a clarifié ma compréhension de JAXB. – Nayn

Questions connexes