This repository was archived by the owner on Feb 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 100
This repository was archived by the owner on Feb 5, 2019. It is now read-only.
Disabled fields and multiple-inherence (override once => override for sub-classes) #871
Copy link
Copy link
Closed
Description
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]