java JAXB 保存时保存子类



我正在努力使用 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,则必须标记它并始终创建默认的公共构造函数。记住只标记非抽象的类。

最新更新