我正在努力使用 JAXB 保存我的类/子类中的所有数据。
我想保存可观察列表中的所有帐户,但问题是帐户类
public class Account{
private ObjectProperty<HosterObject> host;
....
}
包含一个具有 2 个属性的主机对象:
publicName 和 privateName 也有 getter 和 setter。
@XmlRootElement(name = "hoster")
public class HosterObject {
private final StringProperty publicName;
private final StringProperty privateName;
public HosterObject(String publicName, String privateName){
this.publicName = new SimpleStringProperty(publicName);
this.privateName = new SimpleStringProperty(privateName);
}
@XmlElement(name = "publicName")
public StringProperty publicNameProperty(){
return publicName;
}
@XmlElement(name = "privateName")
public StringProperty privateNameProperty(){
return privateName;
}
如何将主机对象中的内容也保存为 xml 文件中的元素?目前,xml文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<accounts>
<account>
<hoster/>
<password>123</password>
<status>unchecked</status>
<username>test</username>
</account>
</accounts>
但我应该看起来像这样
...
<account>
<hoster>
<publicName>Name</publicName>
<privateName>private Name</privateName>
</hoster>
....
</account>
....
保存代码:
public void saveAccountDataToFile(File file) {
try {
JAXBContext context = JAXBContext.newInstance(AccountListWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Wrapping our person data.
AccountListWrapper wrapper = new AccountListWrapper();
wrapper.setAccounts(accountData);
// Marshalling and saving XML to the file.
m.marshal(wrapper, file);
} catch (Exception e) {
}
}
包装纸:
@XmlRootElement(name = "accounts")
public class AccountListWrapper {
private List<Account> accounts;
@XmlElement(name = "account")
public List<Account> getAccounts() {
return accounts;
}
public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
}
提前感谢!
添加:
标签主机对象由
@XmlRootElement(name = "hoster")
@XmlElement
对于类和帐户中主机对象的设置方法。
public HosterObject (){}
public Account(){}
JAXB 需要默认的空构造函数。如果要将类添加到 xml,则必须标记它并始终创建默认的公共构造函数。记住只标记非抽象的类。