2010-01-18 4 views
1

J'ai une application Java que je veux enregistrer les données en XML au lieu d'une base de données.Arrayage de classe abstrait dans JAXB

Nous avons décidé d'utiliser JAXB et au lieu de générer des fichiers basés sur le schéma, nous avons simplement ajouté des annotations à nos fichiers Java.

Le problème que nous rencontrons est que nous avons une ArrayList d'une classe abstraite appelée Node. Un nœud a des sous-classes de Module ou ScreenImage. Quand nous organisons l'arraylist, cela ne sauvegarde pas le type. Tels que:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module" 

Est-ce que JAXB supporte les éléments qui sont abstraits?

Comment puis-je obtenir JAXB pour enregistrer le type, de sorte que je suis capable de le démonter?

Répondre

3

Cela devrait fonctionner correctement. Notez que si votre Module et ScreenImage ne sont pas accessibles statiquement des classes liées (à savoir les classes spécifiées dans JAXBContext.newInstance(...)), ils devraient être liés explicitement (les ajouter aux JAXBContext.newInstance(...) paramètres).

+0

Ce fut tout. Je pensais que newInstance était uniquement pour les éléments racine. Merci! – mdamman

7

La suggestion d'axtavt est correcte. Je veux juste ajouter une autre approche. Vous pouvez utiliser @XmlSeeAlso, où vous pouvez déclarer d'autres classes qui devraient être définies et visibles par JAXBContext. Vous devez seulement vous assurer de déclarer l'annotation dans une classe déjà visible par JAXBContext.

.: par exemple

@XmlRootElement 
@XmlSeeAlso({Node.class, Module.class, ScreenImage.class}) 
class SomeContent { 
    private List<Node> nodes; 
    ///... accessors 
} 
Questions connexes