Разоблачение xml бобу с коллекцией - PullRequest
1 голос
/ 31 июля 2010

Я работаю с xml rest api Redmine.Служба возвращает XML, как в примере ниже.Я использую клиентский API Джерси для связи с отдыхающим сервисом.Сопоставление простых полей (id, name и т. Д.) В проекте не проблема, но у меня проблемы со списком трекеров.

<project>
    <id>2</id>
    <name>Project X</name>
    <identifier>projectx</identifier>
    <description>Description of Project X</description>
    <homepage/>
    <created_on>Sat Jul 31 18:16:59 +0200 2010</created_on>
    <updated_on>Sat Jul 31 18:16:59 +0200 2010</updated_on>

    <trackers>
        <tracker name="Bug" id="1"/>
        <tracker name="Feature" id="2"/>
        <tracker name="Support" id="3"/>
    </trackers>
</project>

Проектный компонент, я удалил все простые методы получения и установки.

@XmlRootElement
@XmlSeeAlso(Tracker.class)
public class Project {

    private int id;
    private String name, identifier;
    private String description;
    Date createdOn, updatedOn;

    ArrayList<Tracker> trackers = new ArrayList<Tracker>();

    public Project() {
    }

    // Removed getters and setters...

    public ArrayList<Tracker> getTrackers() {
        return trackers;
    }

    @XmlElement
    public void setTrackers(ArrayList<Tracker> trackers) {
        this.trackers = trackers;
    }

}

Компонент Tracker, опять же с простыми геттерами и сеттерами, удаленными для удобства чтения.

@XmlRootElement
public class Tracker {

    private String name;
    private int id;

    // Removed getters

    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }

    @XmlAttribute
    public void setName(String name) {
        this.name = name;
    }
}

Все простые поля в проекте расположены как положено, но я не могу получитьустановить список трекеров.Что я делаю неправильно?Лучшее, что мне удалось сделать, это получить список с одним нулевым значением.

1 Ответ

2 голосов
/ 31 июля 2010

Вам необходимо добавить следующее:

@XmlElementWrapper(name="trackers")
@XmlElement(name="tracker")

Для получения дополнительной информации о JAXB и свойствах коллекции см .:

...