【发布时间】:2010-10-11 19:26:29
【问题描述】:
我正在使用 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() ...
}
编组按预期工作。问题在于解组,尽管 JAXBContext 使用子类 ReceiverPerson 的包名称,但它仍然解组到 Person。
JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson);
我想要的是解组到ReceiverPerson。我能够做到这一点的唯一方法是从Person 中删除@XmlRootElement。不幸的是,这样做会阻止 Person 被编组。就好像 JAXB 从基类开始并向下工作,直到找到具有适当名称的第一个 @XmlRootElement。我尝试添加一个createPerson() 方法,该方法将ReceiverPerson 返回到ObjectFactory,但这无济于事。
【问题讨论】: