我正在使用 JAXB 来读取和写入 XML。我想要的是使用一个基本的 JAXB 类进行编组和一个继承的 JAXB 类进行解组。这是为了允许发送方 Java 应用程序将 XML 发送到另一个接收方 Java 应用程序。发送方和接收方将共享一个公共 JAXB 库。我希望接收器将 XML 解组为扩展通用 JAXB 类的接收器特定 JAXB 类。
例子:
这是发送方使用的通用 JAXB 类。
@XmlRootElement(name="person")
public class Person {
public String name;
public int age;
}
这是在解组 XML 时使用的接收器特定的 JAXB 类。接收器类具有特定于接收器应用程序的逻辑。
@XmlRootElement(name="person")
public class ReceiverPerson extends Person {
public doReceiverSpecificStuff() ...
}
编组按预期工作。问题在于解组,Person
尽管 JAXBContext 使用 subclassed 的包名称,它仍然解组ReceiverPerson
。
JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson);
我想要的是解组到ReceiverPerson
. 我能够做到这一点的唯一方法是@XmlRootElement
从Person
. 不幸的是,这样做可以防止Person
被编组。就好像 JAXB 从基类开始并向下工作,直到找到@XmlRootElement
具有适当名称的第一个。我试过添加一个createPerson()
返回的方法,ReceiverPerson
但这ObjectFactory
没有帮助。