JAXB,setter / getter的注释

时间:2012-05-16 11:07:58

标签: java jaxb

@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获取User-object时,字段values始终为null。所以setter不在这里工作。可能setter也需要一些注释吗?

XML看起来像

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

2 个答案:

答案 0 :(得分:6)

我不相信这是一个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>();
    }

}

答案 1 :(得分:-1)

我认为@XmlAccessorType(XmlAccessType.FIELD)与您的@XmlTransient相结合是问题的根源。您是否尝试过没有瞬态注释?