2017-05-31 58 views
1

这个简单的1 - 丙类工作正常,并且可以ummarshaled定义JAXB忽略属性如果与布尔方法是前缀

@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()它不工作了,输出IST只是(在Win):

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

因此,它看起来像JAXB命名冲突。实际上,任何一个类型都不应该忽略其他字段,但是A()方法会阻止一个字段被编组。

因此,一种无知的方式来解决它,只是为了重命名方法isA()来避免冲突。但我想知道:

1)这真的被JAXB禁止?如果是的话,这是什么descriebed?

2)是否有任何方法使编组工作,而不重命名此方法(和打破现有的jar界面)?我尝试了@XmlTransient,没有任何效果。

回答

2

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

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