luk*_*ymo 6 java xml polymorphism jaxb
我刚刚开始使用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
}
Run Code Online (Sandbox Code Playgroud)
在我开始发明一些错综复杂的遗产之前,有没有什么好方法可以做到这一点?
对于您可能想要利用的用例@XmlElementRefs,这对应于XML Schema中替换组的概念:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement
private String fieldInRoot;
@XmlElementRef
private BodyResponse child;
// + getters and setters
}
Run Code Online (Sandbox Code Playgroud)
您还可以将该xsi:type属性用作继承指示符:
EclipseLink JAXB(MOXy)也有@XmlDescriminatorNode/ @XmlDescriminatorValueextension: