JAXB解组内部类

时间:2014-01-22 10:04:49

标签: java xml inheritance jaxb unmarshalling

假设我有一些可以存储在我的数据库中的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实体要解组和适应)。

0 个答案:

没有答案