[英]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.