如果定义了is-prefix的布尔方法,JAXB将忽略属性

时间:2017-05-31 15:08:18

标签: java xml jaxb

这个简单的1-prop类工作正常,可以是ummarshaled

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class AdditionalGetter {
    private float a;

    @XmlElement(name = "my_prop_a", required = false)
    public float getA() {
        return a;
    }

    public void setA(float a) {
        this.a = a;
    }

    // public boolean isA() {
    //    return true;
    // }
}

输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<additionalGetter>
    <my_prop_a>7.0</my_prop_a>
</additionalGetter>

但如果我用方法isA()取消注释该行,它就不再起作用了,输出就是(在胜利时):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<additionalGetter/>

因此它看起来像是JAXB的命名冲突。实际上,acessor类型none应该忽略其他字段,但isA()方法会阻止a-field被marschaled。

这是一种不经意的修复方法,只是重命名方法isA()以避免冲突。但我想知道:

1)这是否真的被JAXB禁止?如果是,那么这个被解释了什么?

2)是否有任何方法可以使编组工作,而无需重命名此方法(并破坏现有的jar接口)?我试过@XmlTransient没有效果。

1 个答案:

答案 0 :(得分:1)

只需在@XmlTransient前面添加public boolean isA(),这可以防止jaxb在生成的xml中包含该方法。

@XmlTransient
public boolean isA() {
    return true;
}