簡體   English   中英

類層次結構的JAXB注釋

[英]JAXB annotation for class hierarchy

嘿,我有兩節課。 當我嘗試從它們創建XML結構時,我只獲得根元素(A)。 為什么? 我使用了錯誤的注釋嗎?

@XmlRootElement(name = "a")
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A{
    @XmlElement
    int a;

    protected A(){
    }
 }

@XmlAccessorType(XmlAccessType.FIELD)
public class B extends A{
    @XmlElement
    int b;

    protected B(){
    }
}    

您可能需要在頂級類中使用@XmlSeeAlso注釋:

@XmlSeeAlso(B.class)
@XmlRootElement(name = "a")
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A{

我寫'可能',因為它取決於你如何設置你的JAXB上下文。 基本上,您需要確保JAXB知道所有應該序列化的類。 如果你的B類沒有在其他任何地方被提及(例如,作為JAXB已知的類之一的屬性類型),那么JAXB就沒有機會知道如何序列化B實例。 @XmlSeeAlso注釋的目的是確保JAXB也查看這些列出的類。

更新:

或者,您可以在使用JAXBContext.newInstance(Class...)創建JAXBContext對象時提供所有子類的列表,例如:

   JAXBContext.newInstance(A.class, B.class);

代替

   JAXBContext.newInstance(A.class);

你可能已經做過了。

但我認為這是一個更糟糕的解決方案,因為每次在代碼中使用JAXB時,它都會讓您考慮相關的類。 在頂級解決方案中,您可以永久地設置關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM