Java JAXB MOXy 2.4.1属性重载不起作用

Java JAXB MOXy 2.4.1属性重载不起作用,java,jaxb,eclipselink,moxy,Java,Jaxb,Eclipselink,Moxy,我有两个继承的类ClassTop->ClassChild持有一个数据类,每个类都继承了ClassTopData->ClassChildData的属性: ClassTop: ClassChild扩展ClassTop: 重要提示:ClassChild也具有meta属性,但具有ClassTopData的继承变体: 以及两个数据类: ClassTopData: ClassChildData: 当我封送ClassChild并将其读回时,data3为空: ClassChild a = new Cla

我有两个继承的类ClassTop->ClassChild持有一个数据类,每个类都继承了ClassTopData->ClassChildData的属性:

ClassTop:

ClassChild扩展ClassTop: 重要提示:ClassChild也具有meta属性,但具有ClassTopData的继承变体:

以及两个数据类:

ClassTopData:

ClassChildData:

当我封送ClassChild并将其读回时,data3为空:

    ClassChild a = new ClassChild();
    a.setTitle("title");
    a.getMeta().setData1("1");
    a.getMeta().setData2("2");
    a.getMeta().setData3("3");


    // Write:
    JAXBContext context = JAXBContext.newInstance(ClassChild.class);
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    ... get some OutputStream os ...
    m.marshal(a, os);

    // Read back:
    JAXBContext jc = JAXBContext.newInstance(ClassChild.class);
    Unmarshaller u = jc.createUnmarshaller();
    ... get the InputStream is ...
    ClassChild r = (ClassChild)(u.unmarshal(is));
    System.out.println("data3: "+r.getMeta().getData3());
输出是

data3: null
XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<news>
   <title>title</z:title>
   <meta>
      <data1>1</data1>
      <data2>2</data2>
      <data3>3</data3>
   </meta>
</news>

我还尝试了它,但没有使用中提供的@XmlRootElement注释。也不起作用,在XML中只存储data1和data2。
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassChildData extends ClassTopData {

    private String data3 = null;

    public String getData3() {return data3;}
    public void setData3(String data3) {this.data3 = data3;}

}
    ClassChild a = new ClassChild();
    a.setTitle("title");
    a.getMeta().setData1("1");
    a.getMeta().setData2("2");
    a.getMeta().setData3("3");


    // Write:
    JAXBContext context = JAXBContext.newInstance(ClassChild.class);
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    ... get some OutputStream os ...
    m.marshal(a, os);

    // Read back:
    JAXBContext jc = JAXBContext.newInstance(ClassChild.class);
    Unmarshaller u = jc.createUnmarshaller();
    ... get the InputStream is ...
    ClassChild r = (ClassChild)(u.unmarshal(is));
    System.out.println("data3: "+r.getMeta().getData3());
data3: null
<?xml version="1.0" encoding="UTF-8"?>
<news>
   <title>title</z:title>
   <meta>
      <data1>1</data1>
      <data2>2</data2>
      <data3>3</data3>
   </meta>
</news>