繁体   English   中英

JAXB Annotated class - 设置不是元素的变量

[英]JAXB Annotated class - setting of a variable which is not an element

我有一个JAXB注释类说

@XmlRootElement(namespace = "http://www.abc.com/customer")
Class Customer{
@XmlElement(namespace = "http://www.abc.com/customer")
  private String  Name;
  @XmlElement(namespace = "http://www.abc.com/customer")
  private String  Address;
 @XmlTransient
  private HashSet set = new HashSet();

  public String getName(){
    return Name;
  }
  public void  setName(String  name){
    this.Name = name;
    set.add("Name");
  }


  public String getAddress(){
    return Address;
  }
  public void  setAddress(String  address){
    this.Address = address;
    set.add("Address");
  }

  public void getSet(){
return set;
}

我有一个表单的XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer xmlns="http://www.abc.com/customer" >
<Name>Ralph</Name>
<Address>Newton Street</Address>
</Customer>

我使用JAXB unmarshalling来获取XML输入的对象表示。 名称和地址的值设置正确。 但是set的值会丢失(因为它被@XMLTransient忽略了)

有没有办法确保它仍然被设置在已被解组的对象中? 我可以使用其他一些注释吗?

尝试将注释放在方法上而不是字段上。 具体来说,将@XmlElement放在getName()getAddress() ,将@XmlTransient放在getSet() ,并从字段中删除所有注释。

然后,JAXB应该使用getter / setter方法对来注入/检索数据而不是字段,并且因为setAddress()将值添加到set字段,它应该按预期工作。 此外,因为getSet()被标记为瞬态,所以不应再次编组set的内容。

在整个代码中避免所有这些XmLElement注释的样板代码。 您可以继续在类的顶部使用@XmlAccessType.PROPERTY ,然后您可以删除所有@XmlElement注释。 XmlAccessType注释负责告诉JAXB查看setter和getter而不是字段本身。

我建议使用一些后处理器实用程序来填充你的设置。 也许使用反思或内省。

请注意,后处理器只需要检查JAXB注释,而不是xml文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM