相关疑难解决方法(0)

JAXB继承,unmarshal到marshaled类的子类

我正在使用JAXB来读写XML.我想要的是使用基本JAXB类进行编组,并使用继承的JAXB类进行解组.这是为了允许发送方Java应用程序将XML发送到另一个接收方Java应用程序.发送方和接收方将共享一个通用的JAXB库.我希望接收器将XML解组为特定于接收器的JAXB类,该类扩展了通用JAXB类.

例:

这是发件人使用的常见JAXB类.

@XmlRootElement(name="person")
public class Person {
    public String name;
    public int age;
}
Run Code Online (Sandbox Code Playgroud)

这是解组XML时使用的特定于接收器的JAXB类.接收器类具有特定于接收器应用的逻辑.

@XmlRootElement(name="person")
public class ReceiverPerson extends Person {
    public doReceiverSpecificStuff() ...
}
Run Code Online (Sandbox Code Playgroud)

编组按预期工作.问题在于解组,Person尽管JAXBContext使用了子类的包名,它仍然是解组的ReceiverPerson.

JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson);
Run Code Online (Sandbox Code Playgroud)

我想要的是解散ReceiverPerson.我已经能够做到这一点的唯一方法是删除@XmlRootElementPerson.不幸的是,这样做可以防止Person被编组.这就好像JAXB从基类开始并向下运行,直到找到@XmlRootElement具有相应名称的第一个.我试着加入createPerson()该方法返回ReceiverPersonObjectFactory但这并不能帮助.

java xml jaxb

42
推荐指数
4
解决办法
6万
查看次数

标签 统计

java ×1

jaxb ×1

xml ×1