【问题标题】:JAXB, annotations for setter/getterJAXB,setter/getter 的注解
【发布时间】:2017-09-14 18:21:23
【问题描述】:
@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 代码中创建用户对象并在创建 XML 之后,一切正常。
但是当我尝试从 XML 中获取用户对象时,字段values 总是null。所以二传手不在这里工作。可能 setter 也需要一些注释?

XML 看起来像

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

【问题讨论】:

  • roles 的设置器在哪里?我只看到values
  • 你的 XML 是什么样的?

标签: java jaxb


【解决方案1】:

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

}

【讨论】:

  • 是的。我正在尝试为我的“值”字段获取非空值。但它总是为空!
  • @user1143825 - 我注意到您的访问器方法是私有的。如果它们是公开的,你会看到相同的行为吗?
  • @user1143825 - 我已经更新了我的答案。我相信issueCustomSet 没有更新values 字段。修复可能就像初始化 values 字段而不是它为空一样简单。
  • stackoverflow.com/questions/40480/… ^Java 是按值传递的。这就解释了为什么 OP 的字段没有被初始化。 Blaise 是对的,它与 JAXB 无关。
猜你喜欢
  • 2014-04-07
  • 2010-11-04
  • 2018-12-08
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多