2012-12-03 30 views
3

我試圖將一些JAXB xjc.exe生成的類轉換爲簡單的XML類。我不知道如何註釋動態元素。例如,在架構中,我有:多類型列表註釋轉換:從JAXB到SimpleXML

<!-- Message Set Request/Response Pairs and contained requests --> 
<xsd:element name="QBXMLMsgsRq"> 
    <xsd:complexType> 
     <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
      <xsd:element name="HostQueryRq" type="HostQueryRqType"/> 
      <xsd:element name="CompanyQueryRq" type="CompanyQueryRqType"/> 
      <xsd:element name="CompanyActivityQueryRq" type="CompanyActivityQueryRqType"/> 
      <!-- many more of these choices --> 
     </xsd:choice> 
     <xsd:attribute name="oldMessageSetID" type="STRTYPE"/> 
     <!-- some other attributes --> 
    </xsd:complexType> 
</xsd:element> 

,當通過運行xjc.exe,生成以下註解爲@XmlElement

@XmlElements({ 
    @XmlElement(name = "HostQueryRq", type = HostQueryRqType.class), 
    @XmlElement(name = "CompanyQueryRq", type = CompanyQueryRqType.class), 
    @XmlElement(name = "CompanyActivityQueryRq", type = CompanyActivityQueryRqType.class), 
    //+ et al 
}) 
protected List<Object> hostQueryRqOrCompanyQueryRqOrCompanyActivityQueryRq; 

那麼,如何可以翻譯這個JAXB結構一個SimpleXML帶註釋的類結構?

回答

4

答案是使用ElementListUnion來標識列表類型的可用選項。在「收集單個列表中的各種類型」下檢查here。例如:

@Root 
public class Example { 

    @ElementListUnion({ 
     @ElementList(entry="int", type=Integer.class, inline=true), 
     @ElementList(entry="date", type=Date.class, inline=true), 
     @ElementList(entry="text", type=String.class, inline=true) 
    }) 
    private List<Object> list; 
}