2011-08-02 23 views
1

我正在將現有的POJO轉換爲符合JAXB的。一切工作正常,除了POJO的getter方法之一,我需要一個額外的邏輯特定於呈現XML。但是,這個getter已經在應用程序中的某個地方被調用過了,我不能修改這個方法的行爲。 我通常如何處理這種方法名稱衝突?有沒有辦法爲JAXB創建一個單獨的方法,並將當前方法標記爲XMlTransient?JAXB與其他應用程序之間的方法衝突

謝謝

回答

2

是的,正是你所說的會工作。創建一個方法@XmlTransient,然後編寫另一個方法並使其成爲@XmlElement(name =「any element name」)。

+0

現在我得到的改變有關的錯誤:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationExceptions的2個計數 物業部件1(其中JAXB從我的新的getter方法推導)存在但未在@ XmlType.propOrder – phewataal

+0

中指定,只是意識到我必須將getter的派生屬性用作propOrder列表中的屬性名稱。 – phewataal

2

您可以將XmlAccessorType(XmlAccessType.FIELD)放在類上。然後JAXB註釋將從字段名稱中獲取,而不是方法名稱。例如:

@XmlAccessorType(XmlAccessType.FIELD) 
public class MyType { 
    @XmlElement String f1; 
    @XmlElement Integer f2; 

    // JAXB doesn't care about these: 
    public String getF1() {return f1;} 
    public String getF2() {return f2;} 
    public void setF1(String f1) {this.f1 = f1;} 
    public void setF2(Integer f2) {this.f2 = f2;} 
} 
+0

我只想要字段f1的字段行爲,而不是其他屬性。有沒有一種方法可以在字段級而不是類級別定義XmlAccessType.FIELD? – phewataal

+0

謝謝布萊斯。是的,我最終做了你的建議。 – phewataal