2017-05-31 79 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; 
}