我正在使用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.我已经能够做到这一点的唯一方法是删除@XmlRootElement从Person.不幸的是,这样做可以防止Person被编组.这就好像JAXB从基类开始并向下运行,直到找到@XmlRootElement具有相应名称的第一个.我试着加入createPerson()该方法返回ReceiverPerson到ObjectFactory但这并不能帮助.