Java jaxb-如何从多态类创建XML
我刚刚开始使用JAXB从java对象生成XML输出。我的java类中存在多态性,这在JAXB中似乎不起作用 下面是我试图处理它的方式,但在输出字段中我没有预料到:fieldA或fieldBJava jaxb-如何从多态类创建XML,java,xml,jaxb,polymorphism,Java,Xml,Jaxb,Polymorphism,我刚刚开始使用JAXB从java对象生成XML输出。我的java类中存在多态性,这在JAXB中似乎不起作用 下面是我试图处理它的方式,但在输出字段中我没有预料到:fieldA或fieldB @XmlRootElement(name = "root") public class Root { @XmlElement(name = "fieldInRoot") private String fieldInRoot; @XmlElement(name = "child")
@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
}
在我开始发明一些复杂的继承之前,有什么好方法可以做到这一点吗
@XmlRootElement(name = "root")
public class Root {
....
@XmlElements({
@XmlElement(type = ResponseA.class, name = "ResponseA"),
@XmlElement(type = ResponseB.class, name = "ResponseB")})
private BodyResponse child;
}
可能您需要在
响应
类上使用@XmlType(name=“ResponseX”)
。对于您的用例,您可能希望利用@xmlementrefs
,这与XML模式中的替换组概念相对应:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement
private String fieldInRoot;
@XmlElementRef
private BodyResponse child;
// + getters and setters
}
xsi:type
属性作为继承指示符:
@xmlDescriptionatorNode
/@xmlDescriptionatorValue
扩展名:
@XmlElements
映射用于表示选择结构()。对于这个继承用例,替换组的概念更合适,并且映射为@xmlementrefs
()。是的,这非常有效。谢谢你的这篇文章和你的博客。