2012-01-19 65 views
2

您知道xml編輯器如何讓您能夠從xsd方案創建示例xml,使用隨機內容填充所有元素和屬性。現在我只是得到空的根元素標籤。是否有可能使用JAXB編組xml並且爲了測試的原因實現類似的東西? 我是java和jaxb的新手,任何幫助表示讚賞。JAXB - 生成樣本xml?

編輯。 規範根元素類:

 @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 

    } 

創建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); 

我得到什麼:

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

哪來的一切?我能否收到類似完整xml的東西,而無需手動創建所有元素和屬性以及設置值?

+1

它對我來說不是100%清楚你想達到什麼目的。你是否希望你的JAXB註釋類被渲染爲帶有測試數據的XML? –

+0

現在我只是得到空的根元素標記,我想用一些測試數據填充所有嵌套的元素和屬性。 – bunnyjesse112

+2

使用schemagen從JAXB帶註釋的bean生成XSD,並要求XML編輯器從此XSD生成示例XML。 –

回答

1

它可以做到,但請放心,沒有簡單的方法來做到這一點。其中不那麼簡單,最沒有挑戰性的是你想出一套佈局,你可以用硬連線代碼來匹配佈局,隨機生成數據。這意味着你定義了一個「類」的XML;使用某種XML編輯器,您可以定義XML的外觀。當您對該可視化感到滿意時,編寫將生成該特定類型的XML的JAXB代碼;使用隨機生成的數據或任何其他適合您需求的方式。

「通用」方式可以依靠良好的JAXB知識和反射API。雖然可行,但我會稱之爲瘋狂。

爲了完整起見,您還可以使用XSOM(不需要JAXB)來做同樣的事情。

這並不是說我會鼓勵你在上述任何一種情況下,除非你有足夠的時間和精力來騰出空間......是否有可能讓你分享XSD,或者至少是你的原因工具似乎沒有超過你的根源在生成示例XML?根據你的說明,我可能會有不同的建議...

+0

對不起,我沒有正確解釋自己,請看編輯的問題 – bunnyjesse112