我有一个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解组来获取XML输入的对象表示。名称和地址的值设置正确。然而 set的值会丢失(因为它被@XMLTransient忽略了)
有没有办法确保它仍然被设置在已经解组的对象中?我可以使用其他一些注释吗?
答案 0 :(得分:3)
尝试将注释放在方法而不是字段上。具体而言,将@XmlElement
放在getName()
和getAddress()
上,将@XmlTransient
放在getSet()
上,然后从字段中删除所有注释。
然后JAXB应该使用getter / setter方法对来注入/检索数据而不是字段,并且因为setAddress()
将值添加到set
字段,这应该按预期工作。此外,由于getSet()
被标记为瞬态,因此set
的内容不应再被编组。
答案 1 :(得分:2)
在整个代码中避免所有这些XmLElement注释的样板代码。您可以继续使用课程顶部的@XmlAccessType.PROPERTY
,然后删除所有@XmlElement
注释。 XmlAccessType注释负责告诉JAXB查看setter和getter而不是字段本身。
答案 2 :(得分:0)
我建议使用一些后处理器实用程序来填充你的设置。也许使用反思或内省。
请注意,后处理器只需要检查JAXB注释,而不是xml文件。