Pourquoi mon ArrayList n'est pas associé à JAXB?
Voici les cas d'utilisation:
@XmlRootElement
public class Book {
public String title;
public Book(String t) {
this.title = t;
}
}
@XmlRootElement
@XmlSeeAlso({Book.class})
public class Books extends ArrayList<Book> {
public Books() {
this.add(new Book("The Sign of the Four"));
}
}
Alors, je suis en train de faire:
JAXBContext ctx = JAXBContext.newInstance(Books.class);
Marshaller msh = ctx.createMarshaller();
msh.marshal(new Books(), System.out);
C'est ce que je vois:
<?xml version="1.0"?>
<books/>
Où sont mes livres? 🙂
source d'informationauteur yegor256
Vous devez vous connecter pour publier un commentaire.
Les éléments, afin de le placer doit être public, ou ont XMLElement anotation. La classe ArrayList et vos Livres de cours ne correspondent à aucune de ces règles.
Vous devez définir une méthode d'offrir de la valeur comptable, et anotate.
Sur votre code, en ne changeant que vos Livres de classe de l'ajout d'un "auto-getter" méthode:
lorsque vous exécutez votre code de marshaling vous obtiendrez:
(J'ai ajouté un saut de ligne pour la clarté de la secouer)
Je ne pense pas que vous pouvez facilement marshall un
List
. Envisager d'utiliser une autre classe pour envelopper la liste. Les ouvrages suivants:Utilisé comme suit:
il donne ce résultat:
@Blaise et @musiKk l'ont souligné, il serait mieux d'avoir une Liste de Livre dans les Livres, et de permettre à des Livres comme le véritable élément racine. Je ne serais pas envisager l'extension de la liste de tableaux d'une procédure acceptable dans mon propre code.