这个简单的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没有效果。
答案 0 :(得分:1)
只需在@XmlTransient
前面添加public boolean isA()
,这可以防止jaxb在生成的xml中包含该方法。
@XmlTransient
public boolean isA() {
return true;
}