2011-08-02 5 views
-1

Très bien, je suis nouveau à JAXB et ayant du mal à trouver la bonne documentation pour m'aider à traverser cela, j'ai lu beaucoup de choses et je ne comprends toujours pas ce que fait JaxB.JAXB Unmarshalls XML de manière incorrecte

J'ai une classe, appelez-le conteneur. Il est prolongé par MyContainer. MyContainer a une valeur booléenne supplémentaire en plus de ce qu'il hérite de Container.

Quoi qu'il en soit, voici comment JAXB Marshalls MyContainer

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<MyContainer name="container" id="1"> 
    <boolVal>false</boolVal> 
    <ListOfResources> //Using @XmlElementWrapper(name=.. 
     <child> 
      <ID>Test Comp 1</ID> 
     </child> 
     <child> 
      <ID>Test Comp 2</ID> 
     </child> 
    </ListOfResources> 
</MyContainer> 

Ce que je ne comprends pas l'étiquette "enfant". La seule chose nommée enfant est le nom de la liste. La liste contient des objets (qui ont une propriété de chaîne, ID) mais l'objet ne doit pas être "enfant". Le vrai problème est cependant quand je vais à Demarshall la classe. La liste va remplir avec les "enfants" répertoriés. Je ne vois pas ce qui me manque. Je ne suis pas une exception JAXB, vous l'esprit, mais je quand je vérifie l'objet unmarshalled la liste est dépeuplé

EDIT: clarification

Je suis désolé, ce que je dis est la JAXB va marshall les éléments dans la liste, bien que chaque élément de la liste ait le nom de la liste (enfant). Cependant, quand il va à demarshall, il ne remplit pas la liste dans le nouvel objet.

EDIT2: Courant Setter

public void setChildren(List<Resource<IType>> other) { 
    Iterator iterator = other.iterator(); 
    while(iterator.hasNext()){ 
     Resource<IType> piece = 
      new Resource<IType>((Resource<IType>) iterator.next()); 
     this.listOfResources.add(piece); 
    } 

} 
+0

duplication possible de [JAXB n'est pas Marshall comme prévu] (http://stackoverflow.com/questions/6915201/jaxb-does-not-marshall-as-expected) –

Répondre

0

Je ne suis pas sûr de ce que votre problème est. D'abord vous avez dit que la liste sera remplie avec les "enfants", alors vous dites que la liste est non peuplée. Lequel est-ce, et en quoi diffère-t-il de ce que vous attendez de voir? Si quelque chose n'est pas rempli, la cause la plus fréquente est que vous n'avez pas de setter bien formé pour cette propriété.

Lors de la désignation, un élément est toujours nommé comme la propriété qui lui correspond. Vous pouvez modifier le nom d'un élément avec @XmlElement(name="...") ou, si vous voulez que l'élément porte le nom de l'objet référencé par la propriété (comme les objets qui composent une liste), utilisez @XmlElementRef.

+0

Très bien, merci pour le @ElementRef, mais le fait que quand je démarshall la nouvelle liste ne se peuplé est toujours mon problème majeur. – user875230

+0

Alors, avez-vous un setter "setListOfResources()" approprié? Nous aurions probablement besoin de voir la classe que vous essayez de rassembler pour vous aider beaucoup plus. –

+0

Merci encore pour la réponse Ryan, je ne suis plus en cours avec cette base de code, mais mon setter actuel je vais mettre dans la question d'origine pour la visualisation – user875230

Questions connexes