4

私は現時点で JAXB を理解しているところであり、必要なものに非常に近づいています。現在、ArrayList は DB クエリから取り込まれ、ファイルにマーシャリングされますが、マーシャリングされたオブジェクトがルート ノードにラップされていないことが問題です。どうすればこれを行うことができますか?

try  //Java reflection
{
    Class<?> myClass = Class.forName(command); // get the class named after their input
    JAXBContext jaxbContext = JAXBContext.newInstance(myClass);
    Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
    ArrayList<JAXBElement> listOfJAXBElements = getJAXBElementList(myClass);
    FileOutputStream fileOutput = new FileOutputStream(command + ".xml", true);
    for(JAXBElement currentElement: listOfJAXBElements)
    {
        marshaller.marshal(currentElement, fileOutput);
    }
    fileOutput.close();
}
catch (IOException | NullPointerException | ClassNotFoundException| JAXBException| SecurityException | IllegalArgumentException e) { }

アカウントクラスは次のとおりです。

@XmlRootElement(name="accounts")
@Entity
@Table(name="Account")
public class account implements Serializable
{
      ...
}

ここに私の出力があります:

<class account>
    <accountNumber>A101</accountNumber>
    <balance>500.0</balance>
    <branchName>Downtown</branchName>
</class account>

<class account>
    <accountNumber>A102</accountNumber>
    <balance>400.0</balance>
    <branchName>Perryridge</branchName>
</class account>

私がしたい:

<accounts>
    <class account>
        <accountNumber>A101</accountNumber>
        <balance>500.0</balance>
        <branchName>Downtown</branchName>
    </class account>

    <class account>
        <accountNumber>A102</accountNumber>
        <balance>400.0</balance>
        <branchName>Perryridge</branchName>
    </class account>
</accounts>

編集 1: オブジェクトを 1 つずつマーシャリングすると、次のようになります。

<accounts>
    <accountNumber>A101</accountNumber>
    <balance>500.0</balance>
    <branchName>Downtown</branchName>
</accounts>

<accounts>
    <accountNumber>A102</accountNumber>
    <balance>400.0</balance>
    <branchName>Perryridge</branchName>
</accounts>
4

2 に答える 2

2

使用する@XmlElementWrapper(name = "accounts")

XMLElementWrapperアノテーションの詳細

それの使い方:

  @XmlElementWrapper(name = "bookList")
  // XmlElement sets the name of the entities
  @XmlElement(name = "book")
  private ArrayList<Book> bookList;
于 2013-03-01T08:26:11.100 に答える
1

現在行っていることを正確に行うことができ、さらにオブジェクトをマーシャリングする前と<accounts>後に書き込むことができます。FileOutputStream</accounts>

リストを保持するための新しいドメインオブジェクトを導入することもできます。

@XmlRootElememnt
@XmlAccessorType(XmlAccessType.FIELD)
public class Accounts {

    @XmlElement(name="account")
    List<Account> accounts;

}
于 2013-03-01T11:02:15.837 に答える