JAXB Unmarshalling: Liste des objets

J'ai

@XmlRootElement(namespace = "http://www.w3.org/2005/Atom", name = "content")
@XmlType(name = "course")
public class Course implements Resource

...

@XmlElementWrapper(name="subcourses")
@XmlElement(name="course")
List<Xlink> subcourses;         //!?

et Xlink classe, qui fonctionne très bien dans inline variable.

public class Xlink
{
    private String href;
    private String value;

    @XmlAttribute(namespace = "http://www.w3.org/1999/xlink")
    public String getHref()
    {
        return href;
    }

    public void setHref(String href)
    {
        this.href = href;
    }

    @XmlValue
    public String getValue()
    {
        return value;
    }

    public void setValue(String value)
    {
        this.value = value;
    }
}

pour une entrée XML de

<atom:content atom:type="xml" xsi:type="course">
...
   <subcourses>
      <course xlink:href="course1">Some course</course>
      <course xlink:href="course2">other course</course>

Et subcourses refuse d'être unmarshalled (sans aucune exception levée).

Remarque: MOXy est malheureusement pas une option.

Edit: nouveau mobilisé l'objet

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:content xmlns:ns2="http://www.w3.org/1999/xlink" xmlns:ns3="http://www.w3.org/2005/Atom">
    <code>SOME CODE</code>
    <name>name</name>
    <subcourses>
        <course ns2:href="Some href">some value</course>
        <course ns2:href="sdsdg">sdfhdfhdhdh</course>
    </subcourses>
</ns3:content>

Edit2: après une période d'expérimentation avec unmarshalling et de l'ordonnancement d'un objet de test, j'ai découvert que j'ai besoin de définir xmlns espace de noms dans l'en-tête du contenu pour le match xlink:href= comme xmlns:xlink="http://www.w3.org/1999/xlink" le problème est que je suis le Cours de l'élément à l'intérieur d'une classe wrapper qui est analysé par resteasy. Ainsi, la classe résultante ne porte pas sur les informations d'espace de noms.

J'ai en quelque sorte besoin de forcer JAXB pour comprendre que xmlns:xlink="http://www.w3.org/1999/xlink" s'applique aux éléments de cours, mais après une heure de google, je suis à une perte.

Edit3: je suis l'obtention de mon objet de

https://github.com/jirutka/atom-jaxb/blob/master/src/main/java/cz/jirutka/atom/jaxb/Entry.java

qui est utilisé sur le serveur de contrepartie. Ce qui est une partie de

https://github.com/jirutka/atom-jaxb/blob/master/src/main/java/cz/jirutka/atom/jaxb/Feed.java

Parties pertinentes de mon unmarshalling code sont:

Feed f = r.readEntity(Feed.class);
out.addAll(unmarshaller.Unmarshal(f.getEntries(), clazz));

r est un javax.ws.rs.core.Response. Et le unmarshaller

public List<T> Unmarshal(List<Entry> entries, Class clazz)
{
    List<T> out = new ArrayList<T>();
    T instance;
    for (Entry e : entries)
    {
        try
        {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarsh = context.createUnmarshaller();
            instance = (T) unmarsh.unmarshal((Node) e.getContent());

Puisque c'est ma première enchevêtrement avec cette technologie, il est tout à fait possible que ce code est 'wtf'.

  • Qu'entendez-vous par "refuse d'être unmarshalled'? Seulement fournit une liste vide?
  • Oui, à chaque fois, 0 articles.
  • Pouvez-vous fournir plus de détails sur l'endroit où le fragment XML vous unmarshalling vient d'où?
InformationsquelleAutor David Polák | 2013-07-20