2012-07-03 1 views
1

J'utilise JAXB MOXy pour mapper mes objets Java en XML. Jusqu'à présent, j'ai seulement besoin de convertir 1 objet à la fois et ce mot est très bien. Donc, mon XML de sortie ressemble à ceci:JAXB MOXy Mappage d'itérations d'objets multiples sur un seul fichier XML

<?xml version="1.0" encoding="UTF-8"?> 
<NotificationTemplateXML template-id="1"> 
    <template-subject>Test Subject</template-subject> 
    <template-text>Test Text</template-text> 
</NotificationTemplateXML> 

Ce que je suis en train de faire maintenant est d'avoir plusieurs itérations de l'objet enregistré dans le même fichier XML de sorte qu'il ressemble à ceci

<?xml version="1.0" encoding="UTF-8"?> 
<NotificationTemplateXML template-id="1"> 
    <template-subject>Test Subject</template-subject> 
    <template-text>Test Text</template-text> 
</NotificationTemplateXML> 
<NotificationTemplateXML template-id="2"> 
    <template-subject>Test Subject</template-subject> 
    <template-text>Test Text</template-text> 
</NotificationTemplateXML> 
<NotificationTemplateXML template-id="3"> 
    <template-subject>Test Subject</template-subject> 
    <template-text>Test Text</template-text> 
</NotificationTemplateXML> 

mon mapping objet ressemble à ceci:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name="NotificationTemplateXML") 
public class NotificationTemplate { 

    @XmlAttribute(name="template-id") 
    private String templateId; 
    @XmlElement(name="template-subject") 
    private String templateSubject; 
    @XmlElement(name="template-text") 
    private String templateText; 

en supposant que j'ai une liste de type « NotificationTemplate » je peux simplement marshall la liste? Est-ce que cela produira un seul fichier xml avec chacun des objets NotificationTemplate en tant que 'objet XML' séparé?

NB. De même quand je Unmarshall le fichier XML je m'attends à produire une liste de Type 'NotificationTemplate'?

Répondre

1

Vous trouverez ci-dessous plusieurs options différentes.

OPTION # 1 - LE PROCESSUS Invalid XML DOCUMENT

documents XML ont un seul élément racine, de sorte que votre entrée est pas valide. Ci-dessous est une réponse donnée par @npe sur la façon de gérer ce type d'entrée:

OPTION # 2 - CREATE XML VALIDE DOCUMENT

Je recommande la conversion de votre XML en un document valide et le traitement.

document XML avec l'élément racine

J'ai modifié votre document XML en ajoutant un élément racine.

<?xml version="1.0" encoding="UTF-8"?> 
<NotificationTemplateXMLList> 
    <NotificationTemplateXML template-id="1"> 
     <template-subject>Test Subject</template-subject> 
     <template-text>Test Text</template-text> 
    </NotificationTemplateXML> 
    <NotificationTemplateXML template-id="2"> 
     <template-subject>Test Subject</template-subject> 
     <template-text>Test Text</template-text> 
    </NotificationTemplateXML> 
    <NotificationTemplateXML template-id="3"> 
     <template-subject>Test Subject</template-subject> 
     <template-text>Test Text</template-text> 
    </NotificationTemplateXML> 
<NotificationTemplateXMLList> 

NotificationTemplateXMLList

J'ai introduit une nouvelle classe à votre modèle de domaine qui renvoie au nouvel élément racine.

@XmlRootElement(name="NotificationTemplateXMLList") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class NotificationTemplates { 

    @XmlElement(name="NotificationTemplateXML") 
    private List<NotificationTemplate> notificationTemplates; 
} 
+1

Salut Blaise (encore), Merci pour l'excellente réponse. – tarka

+0

Et si les objets sont différents dans la liste que vous avez déclarée. J'ai une situation similaire: Comment avoir plusieurs sections avec le même nom dans JAXB? Pouvez-vous s'il vous plaît aider? –

Questions connexes