Disabled fields and multiple-inherence (override once => override for sub-classes) · Issue #871 · javaee/jaxb-v2 (original) (raw)
I've been running with an issue caused by the checkOverrideProperties() method which has been added in JAXB 2.2, so I've only been running with this issue since I upgraded the JAXB library in my application..
I'll just give an example, and I think this should be understandable.
Here is my model:
public abstract class Parent {
private String element1;
private String element2;
public String getElement1() {
return element1;
}
public void setElement1(String element1) {
this.element1 = element1;
}
public String getElement2() {
return element2;
}
public void setElement2(String element2) {
this.element2 = element2;
}
}
@XmlRootElement(name = "child1")
@XmlAccessorType(XmlAccessType.FIELD)
public class Child1 extends Parent {
private String element1;
private String element3;
public String getElement1() {
return element1;
}
public void setElement1(String element1) {
this.element1 = element1;
}
public String getElement3() {
return element3;
}
public void setElement3(String element3) {
this.element3 = element3;
}
}
@XmlRootElement(name = "child2")
@XmlAccessorType(XmlAccessType.FIELD)
public class Child2 extends Parent
{
private String element4;
public String getElement4() {
return element4;
}
public void setElement4(String element4) {
this.element4 = element4;
}
}
@XmlRootElement(name = "wrapper")
@XmlAccessorType(XmlAccessType.FIELD)
public class Wrapper
{
private Child1 child1;
private Child2 child2;
public Child1 getChild1() {
return child1;
}
public void setChild1(Child1 child1) {
this.child1 = child1;
}
public Child2 getChild2() {
return child2;
}
public void setChild2(Child2 child2) {
this.child2 = child2;
}
}
Here is the instance of my model:
final Child1 child1 = new Child1();
child1.setElement1("element1-1");
child1.setElement2("element1-2");
child1.setElement3("element1-3");
final Child2 child2 = new Child2();
child2.setElement1("element2-1");
child2.setElement2("element2-2");
child2.setElement4("element2-4");
final Wrapper wrapper = new Wrapper();
wrapper.setChild1(child1);
wrapper.setChild2(child2);
Using JAXB 2.2.4 or 2.2.4-1 to marhsall the objects, I get the following XML :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wrapper>
<child1>
<element2>element1-2</element2>
<element1>element1-1</element1>
<element3>element1-3</element3>
</child1>
<child2>
<element2>element2-2</element2>
<element4>element2-4</element4>
</child2>
</wrapper>
As you can see the child2 element minus the element1 subitem. This is because the child1 inherence disabled element1 in parent. Disabling it for child1 is okay, but I don't think it should be disabled for child2 as well.
The easiest workaround is to avoid any override in the java model.
Thank you for your interest.
Affected Versions
[2.2.4, 2.2.4u1]