2012-05-16 111 views
3
@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable 
{ 
    // ... 

    @XmlTransient 
    private Set<Values> values; 

    // ... 

    @XmlElement 
    private Set<History> getXmlHistory() 
    { 
     return new CustomSet<Values, History>(Values); 
    } 

    private void setXmlHistory(final Set<History> aHistory) 
    { 
     this.values = new HashSet<Values>(); 
    } 
} 

當我在Java代碼中創建User對象並在創建XML之後,通常都是如此。
但是當我嘗試從XML獲取用戶對象時,則字段values總是null。所以制定者不在這裏工作。可能是二傳手也需要一些註釋?JAXB,setter/getter的註釋

XML看起來像

<user> 
    ... 
     <xmlHistory> 
     // ... record 1 
     </xmlHistory> 
     <xmlHistory> 
     // ... record 2 
     </xmlHistory> 
</user> 
+0

和'role'的setter在哪裏?我只看到'values'。 –

+0

錯誤更正 – Ilya

+1

您的XML看起來像什麼? –

回答

5

我不認爲這是一個JAXB問題,如下面的模型將工作:

package forum10617267; 

import java.io.Serializable; 
import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable { 

    @XmlTransient 
    private Set<History> history = new HashSet<History>(); 

    @XmlElement 
    private Set<History> getXmlHistory() { 
     return history; 
    } 

    private void setXmlHistory(final Set<History> aHistory) { 
     this.history = aHistory; 
    } 

} 

你所看到的問題是,你在你的get/set方法有邏輯的結果。由於您的values字段未初始化,因此我不確定CustomSet將如何更新它。

package forum10617267; 

import java.io.Serializable; 
import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable { 

    @XmlTransient 
    private Set<Values> values; 

    @XmlElement 
    private Set<History> getXmlHistory() { 
     return new CustomSet<Values, History>(values); 
    } 

    private void setXmlHistory(final Set<History> aHistory) { 
     this.values = new HashSet<Values>(); 
    } 

} 
+0

是的。我想爲我的'值'字段獲取不爲空的值。但它總是無效! – Ilya

+0

如果setter正在工作,那麼'values'應該是非空的 – Ilya

+0

@ user1143825 - 我注意到您的訪問器方法是私有的。如果他們公開,你會看到相同的行爲嗎? –

-1

我相信@XmlAccessorType(XmlAccessType.FIELD)配搭您@XmlTransient是問題的根源。您是否嘗試過沒有瞬態註釋?

+0

這沒有幫助 – Ilya