簡體   English   中英

jaxb - 如何從多態類創建XML

[英]jaxb - how to create XML from polymorphic classes

我剛剛開始使用JAXB從java對象生成XML輸出。 我的java類中存在一個多態性,它似乎在JAXB中不起作用。

下面是我嘗試處理它的方式,但在輸出中我沒有預期字段:fieldA或fieldB。

@XmlRootElement(name = "root")
public class Root {
    @XmlElement(name = "fieldInRoot")
    private String fieldInRoot;
    @XmlElement(name = "child")
    private BodyResponse child;
    // + getters and setters
}

public abstract class BodyResponse {
}

@XmlRootElement(name = "ResponseA")
public class ResponseA extends BodyResponse {
    @XmlElement(name = "fieldA")
    String fieldB;
    // + getters and setters
}

@XmlRootElement(name = "ResponseB")
public class ResponseB extends BodyResponse {
    @XmlElement(name = "fieldB")
    String fieldB;  
    // + getters and setters  
}

在我開始發明一些錯綜復雜的遺產之前,有沒有什么好方法可以做到這一點?

對於您的用例,您可能希望利用@XmlElementRefs ,這對應於XML Schema中替換組的概念:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
    @XmlElement
    private String fieldInRoot;
    @XmlElementRef
    private BodyResponse child;
    // + getters and setters
}

您還可以使用xsi:type屬性作為繼承指示符:

EclipseLink JAXB(MOXy)還具有@XmlDescriminatorNode / @XmlDescriminatorValue擴展:

@XmlRootElement(name = "root")
public class Root {
    ....

    @XmlElements({
        @XmlElement(type = ResponseA.class, name = "ResponseA"),
        @XmlElement(type = ResponseB.class, name = "ResponseB")})
    private BodyResponse child;

}

也許你的Response類需要一個@XmlType(name = "ResponseX")

暫無
暫無

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

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