假设我有一些可以存储在我的数据库中的POJO类。
class SomeClass {
private String name;
private String surname;
private Address address;
//getters and setters
}
在这个课程中,我有一些内部类定义了一些位置。
class Address {
private String country;
private String city;
//getters and setters
}
我的任务 - 使用具有不同模式的XML从外部源收集一些信息,例如:
schema1:
<someClass>
<first>John</first>
<last>Blue</last>
<location>Country, City, 123456</location>
</someClass>
架构2:
<someClass>
<credentials>John Blue</credentials>
<address>Country, City</p1>
<p>123456</p>
</someClass>
等等。
对于这个任务,我正在为每个模式使用JAXB和继承,我定义为带有名称的@XmlElement的每个对象,这适用于简单的字符串,甚至是带有适当的@XmlJavaTypeAdapter的位置。但是当父类具有与继承相同的元素但是类型不同时,我遇到了问题,例如:
<someClass>
<credentials>John Blue</credentials>
<address>Country, City</p1>
<p>123456</p>
</someClass>
class InheritedClass extends SomeClass {
@Override
@XmlElement(name = "address")
public void setAddress(String address) {
//do some work to parse string to Address.class
//also i tried to use XmlJavaTypeAdapter for this method(with Address.class)
//also i tried to use XmlElementRef for Address.class
super.setAddress(addressClass);
}
}
当我试图解组这样的模式时,JAXB避免使用重写的方法并使用带有null地址对象的父类。我尝试过这样的解决方案:
我无法修改外部XML的主要问题,只能根据我的目的进行调整。另外,我不能修改POJO类,因为它存储在DB中并且有很多外部XML(所以很多JAXB实体要解组和适应)。