Как создать дочерний тег с помощью аннотаций JaxB?

Мне нужно создать XML-экспорт из моих java-моделей с использованием аннотаций Jaxb. Мне нужен следующий xml, в котором находится родительский объект, содержащий несколько объектов, которые должны быть дочерним деревом порядка.

<order>
<staffId>1</staffId>
<status>ACTIVE</status>
<id>12</id>
<name>Order 1</name>
     <itemList>
         <item>Item 1</item>
         <item>Item 2</item>
         <item>Item 3</item>
     </itemList>
</order>

Ниже приведен мой аннотированный класс JaxB.

import java.io.Serializable;
import java.util.*;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder = {"staffId", "status", "id", "name", "itemList"})
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;
    private int id;
    private int staffId;
    private String status;
    private String name;
    private List<String> itemList = new ArrayList<>();

    @XmlElement
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @XmlElement
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @XmlElement
    public int getStaffId() {
        return staffId;
    }
    public void setStaffId(int staffId) {
        this.staffId = staffId;
    }
    @XmlElement
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @XmlElement
    public List<String> getItemList() {
        return itemList;
    }
    public void setItemList(List<String> itemList) {
        this.itemList = itemList;
    }
}

Но результат, который я получаю, следующий: список элементов находится в той же иерархии, что и порядок.

<order>
    <staffId>1</staffId>
    <status>ACTIVE</status>
    <id>12</id>
    <name>Order 1</name>
    <itemList>Item 1</itemList>
    <itemList>Item 2</itemList>
    <itemList>Item 3</itemList>
</order>

Пожалуйста, подскажите, чего здесь не хватает.


person Chintan Patel    schedule 29.11.2016    source источник


Ответы (1)


Это дубликат JAXB Annotations. То, что вы ищете, это аннотация @XmlElementWrapper, используемая в сочетании с аннотацией @XmlElement.

FWIW, запись в блоге Блейза Догана на странице JAXB & Collection Properties содержит некоторая другая полезная информация об обработке коллекций.

person J. Gregory Wright    schedule 29.11.2016
comment
Тогда лучше закрыть с дублирующей причиной. - person lexicore; 29.11.2016
comment
Спасибо, да, это точная копия, и это решило мою проблему. - person Chintan Patel; 29.11.2016