[英]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.