Java 如果定义了带前缀的布尔方法,JAXB将忽略属性
这个简单的1-prop类工作正常,可以使用ummarshaledJava 如果定义了带前缀的布尔方法,JAXB将忽略属性,java,xml,jaxb,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; } p
@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>
7
但是如果我用方法isA()取消注释该行,它将不再工作,并且输出仅为(on win):
因此,它看起来像是JAXB的命名冲突。实际上acessor类型none应该忽略otref字段,但是isA()方法阻止了a字段被marschall
所以这是一种不经意的修复方法,只是重命名方法isA()以避免冲突。但我想知道:
1) JAXB真的禁止这样做吗?如果是,说明在哪里
2) 在不重命名此方法(并破坏现有jar接口)的情况下,是否有任何方法可以使封送工作正常?我尝试了@xmltransive,但没有效果。只需在
公共布尔isA()前面添加@xmltransive
,这将防止jaxb在生成的xml中包含该方法
@XmlTransient
public boolean isA() {
return true;
}
@XmlTransient
public boolean isA() {
return true;
}