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]