2016-03-08 24 views
1

我使用JAXB序列化的Java對象,我想下面的XML輸出:如何添加一個額外的XML元素態的類型與JAXB

<attribute> 
    <type> 
     <listType> 
      <itemType> 
       <simpleType> 
        <dataLength>80</dataLength> 
        <dataType>string</dataType> 
        <decimalPlaces>0</decimalPlaces> 
       </simpleType> 
      </itemType> 
     </listType> 
    </type> 
</attribute> 

我的Java類看起來是這樣的:

屬性的.java

@XmlRootElement 
public class Attribute 
{ 
    private Type type; 

    public Type getType() 
    { 
     return this.type; 
    } 

    public void setType(Type type) 
    { 
     this.type = type; 
    } 
} 

Type.java

public abstract class Type 
{ 

} 

SimpleType.java

public class SimpleType extends Type 
{ 
    private int dataLength; 

    private int decimalPlaces; 

    private String dataType; 

    // getters and setters... 

} 

ListType.java

public class ListType extends Type 
{ 
    private Type itemType; 

    // getters and setters... 

} 

ComplexType.java

public class ComplexType extends Type 
{ 
    private List<Attribute> attributes = new ArrayList<>(); 

    // getters and setters... 

} 

在沒有任何附加的註釋,JAXB產生了這一點:

<attribute> 
    <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="listType"> 
     <itemType xsi:type="simpleType"> 
      <dataLength>80</dataLength> 
      <dataType>string</dataType> 
      <decimalPlaces>0</decimalPlaces> 
     </itemType> 
    </type> 
</attribute> 

我不想表示爲XML屬性的類型的信息(的xsi:type),代替我想有一個附加的XML元素作爲顯示在頂部的XML代碼中。我認爲這是一個典型的用例,但我沒有找到任何東西。我有哪些可能性?

回答

0

如果類結構反映XML結構,則不應該有問題。否則,JAXB需要xsi:type來區分屬性對象中的多態類型字段 - 它還可以重建POJO嗎?

public class Type { 
    private ListType listType; 
} 
public class ListType { 
    private ItemType itemType; 
} 
public class ItemType { 
    private SimpleType simpleType; 
} 
+0

對解決方案的小改進。我們使用帶有type屬性的泛型TypeXml類。這個類將作爲XML特定的屬性在多個位置使用。 – beegee

相關問題