2012-01-19 4 views
2

Vous savez comment les éditeurs xml vous permettent de créer un exemple de fichier xml à partir du schéma xsd, en remplissant tous les éléments et attributs avec des éléments aléatoires. En ce moment, je viens d'obtenir une étiquette d'élément racine vide. Est-il possible de marshaler XML en utilisant JAXB et réaliser quelque chose de similaire pour des raisons de test? Je suis un débutant en java et jaxb, toute aide est appréciée.JAXB - Générer un échantillon xml?

EDIT. code pour la classe d'élément racine:

 @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "document", 
     "taskList", 
     "addDocuments", 
     "expansion", 
     "acknowledgement" 
    }) 
    @XmlRootElement(name = "Header") 
    public class Header { 

     @XmlElement(name = "Document") 
     protected DocumentType document; 
     @XmlElement(name = "TaskList") 
     protected TaskListType taskList; 
     @XmlElement(name = "AddDocuments") 
     protected AddDocumentsType addDocuments; 
     @XmlElement(name = "Expansion") 
     protected ExpansionType expansion; 
     @XmlElement(name = "Acknowledgement") 
     protected AcknowledgementType acknowledgement; 
     @XmlAttribute(name = "time", required = true) 
     @XmlSchemaType(name = "dateTime") 
     protected XMLGregorianCalendar time; 
     @XmlAttribute(name = "msg_type", required = true) 
     protected short msgType; 
     @XmlAttribute(name = "msg_id", required = true) 
     protected String msgId; 
     @XmlAttribute(name = "msg_acknow") 
     protected Short msgAcknow; 
     @XmlAttribute(name = "from_org_id", required = true) 
     protected String fromOrgId; 
     @XmlAttribute(name = "from_organization", required = true) 
     protected String fromOrganization; 
     @XmlAttribute(name = "from_department") 
     protected String fromDepartment; 
     @XmlAttribute(name = "from_sys_id", required = true) 
     protected String fromSysId; 
     @XmlAttribute(name = "from_system", required = true) 
     protected String fromSystem; 
     @XmlAttribute(name = "from_system_details") 
     protected String fromSystemDetails; 
     @XmlAttribute(name = "to_org_id") 
     protected String toOrgId; 
     @XmlAttribute(name = "to_organization", required = true) 
     protected String toOrganization; 
     @XmlAttribute(name = "to_department") 
     protected String toDepartment; 
     @XmlAttribute(name = "to_sys_id") 
     protected String toSysId; 
     @XmlAttribute(name = "to_system") 
     protected String toSystem; 
     @XmlAttribute(name = "to_system_details") 
     protected String toSystemDetails; 
    // getters n setters are omitted 

    } 

création xml:

ObjectFactory objectFactory = new ObjectFactory(); 
    Header header = objectFactory.createHeader(); 
    JAXBContext jaxbContext = JAXBContext.newInstance(Header.class); 
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    jaxbMarshaller.marshal(header, file); 

ce que je reçois:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <Header msg_type="0" /> 

où est tout le reste? Puis-je recevoir quelque chose ressemblant à xml complet sans créer tous les éléments et attributs et définir les valeurs manuellement?

+1

ce n'est pas 100% clair pour moi qu'est-ce que vous essayez d'accomplir. Voulez-vous que votre classe annotée JAXB soit rendue au format XML avec des données de test? –

+0

En ce moment je reçois juste la balise d'élément racine vide, je veux remplir tous les éléments et attributs imbriqués avec quelques données de test. – bunnyjesse112

+2

Générez un XSD à partir de vos beans annotés JAXB avec schemagen et demandez à votre éditeur XML de générer un exemple de code XML à partir de ce fichier XSD. –

Répondre

1

Cela peut être fait, mais rassurez-vous qu'il n'y a pas de moyen simple de le faire. Parmi ceux-ci pas si simple, le moins difficile serait pour vous de venir avec un ensemble de mises en page pour lesquelles vous fil dur votre code pour correspondre à la mise en page, avec des données générées de manière aléatoire. Cela signifie que vous définissez une "classe" de XML; en utilisant une sorte d'éditeur XML, vous définissez à quoi le XML devrait ressembler. Lorsque vous êtes satisfait de cette visualisation, écrivez le code JAXB qui générerait ce type particulier de XML; utiliser des données générées aléatoirement ou de toute autre manière qui correspondrait à vos besoins. Un moyen "générique" pourrait être de s'appuyer sur de bonnes connaissances et de l'API de réflexion de JAXB. Bien que faisable, j'appellerais cette folie.

Pour être complet, vous pouvez également utiliser XSOM (pas besoin de JAXB) pour faire la même chose. Cela ne veut pas dire que je vous encourage dans tout ce qui précède, sauf si vous avez beaucoup de temps et d'efforts pour épargner ... Est-il possible pour vous de partager le XSD, ou au moins la raison pour laquelle votre outil ne semble pas aller plus que votre racine dans la génération d'échantillons XML? Je pourrais avoir une suggestion différente, basée sur vos clarifications ...

+0

désolé, je ne me suis pas expliqué correctement, s'il vous plaît regarder question éditée – bunnyjesse112