这个简单的 1-prop 类工作正常并且可以进行编码
@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() 方法取消注释该行,它就不再工作并且输出只是(在 win 上):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<additionalGetter/>
所以看起来 JAXB 存在命名冲突。实际上,访问者类型 none 应该忽略其他字段,但是 isA() 方法会阻止对字段进行编码。
所以有一种不经意的方法来修复它,只需重命名方法 isA() 以避免冲突。但我想知道:
1) 这真的被 JAXB 禁止了吗?如果是,在哪里描述的?
2) 有什么方法可以使编码工作,而不重命名此方法(并破坏现有的 jar 接口(interface))?我尝试过@XmlTransient,但没有效果。
最佳答案
只需在 public boolean isA()
前面添加 @XmlTransient
即可,这样可以防止 jaxb 在生成的 xml 中包含该方法。
@XmlTransient
public boolean isA() {
return true;
}
关于java - 如果定义了 is 前缀的 boolean 方法,JAXB 将忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288399/