java - 如果定义了 is 前缀的 boolean 方法,JAXB 将忽略属性

标签 java xml jaxb

这个简单的 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/

相关文章:

html - OR'ing XPaths 的简写(相同的查询但多个标签类型)?

java - 如何删除 xmlns :xsi and xsi:type from JAXB marshalled XML file

java - JAXB 解码器忽略特定的嵌套标签

java - 使用 JAXB 将 XSD 转换为其类时出错

java - 如何从xml文件中提取字符串列表?

java - 根据操作类型调用特定的编写器?

java - 为什么这个函数调用中会出现NullPointerException?

java - Spring Data 配置 - 找不到 hibernate.properties

java - HTTP Builder 中的 LogFactory 记录器级别

SQL select for xml explicit——当值为空时需要帮助定义备用结构