当我保存2个对象时,实际上保存了4个(加倍)。得到对象A和B,而不是输出XML文件保存AB我得到XML在哪里是ABAB。
我的课程:
public class Uzivatel {
private String meno;
private String heslo;
private Boolean admin;
public Uzivatel() {
super();
}
public Uzivatel(String meno, String heslo,
Boolean admin) {
super();
this.meno = meno;
this.heslo = heslo;
this.admin = admin;
}
}
这是包装器:
@XmlRootElement(name = "Data")
public class Wrapper {
@XmlElement(name = "uzivatel")
private List<Uzivatel> uzi = new ArrayList<Uzivatel>();
public List<Uzivatel> getUzivatel() {
return uzi;
}
public void setUzivatel(List<Uzivatel> uzi) {
this.uzi = uzi;
}
}
这是main-app中使用的方法:
public void savePersonDataToFile() {
try {
JAXBContext context = JAXBContext
.newInstance(Wrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Wrapper wrapper = new Wrapper();
for(int i=0;i<uzivatelia.size();i++){
wrapper.getUzivatel().add(uzivatelia.get(i));
}
m.marshal(wrapper, new File("data.xml"));
} catch (Exception e) { // catches ANY exception
Dialogs.create().title("Error")
.masthead("Could not save data to file:\n")
.showException(e);
}
}
我的输出是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>
<uzivatel>
<admin>true</admin>
<heslo>admin</heslo>
<meno>admin</meno>
</uzivatel>
<uzivatel>
<admin>false</admin>
<heslo>user</heslo>
<meno>user</meno>
</uzivatel>
<uzivatel>
<admin>true</admin>
<heslo>admin</heslo>
<meno>admin</meno>
</uzivatel>
<uzivatel>
<admin>false</admin>
<heslo>user</heslo>
<meno>user</meno>
</uzivatel>
</Data>
但应该是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>
<uzivatel>
<admin>true</admin>
<heslo>admin</heslo>
<meno>admin</meno>
</uzivatel>
<uzivatel>
<admin>false</admin>
<heslo>user</heslo>
<meno>user</meno>
</uzivatel>
</Data>
你能帮我搞清楚吗?
答案 0 :(得分:0)
我认为Wrapper
上的注释是问题所在。因为您使用XmlElement
显式地注释私有成员,所以实际上是从私有成员和公共getter / setter方法获取输出。
如果您要使用字段级访问权限,请使用Wrapper
注释@XmlAccessorType(XmlAccessType.FIELD)
类。否则,将您的XmlElement注释移动到getter方法。