Как аннотировать член коллекции типов в jaxb - PullRequest
1 голос
/ 18 июня 2009

Я успешно провел маршалинг в следующем классе

@XmlRootElement(name = "Field")
private static class MyField {       
    @XmlAttribute(name = "Name")
    String name;
    @XmlElement(name = "Size")
    int size;
    ....}

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

private static class MyFieldsCollection {     
    private Collection<MyField> fields = new LinkedList<MyField>();

    public MyFieldsCollection() {}
    ....}

Когда я просто пытаюсь упорядочить поле контейнера, я получаю следующую ошибку:

class java.util.LinkedList, ни один из его суперклассов не известен этому контексту

Как аннотировать член поля, чтобы класс контейнера был маршалирован как коллекция полей?

1 Ответ

0 голосов
/ 18 июня 2009

Не следует аннотировать свой класс MyField как @XmlRootElement, поскольку он не будет корневым элементом xml. Я думаю, что вы можете либо аннотировать его @XmlType, либо просто не аннотировать его. Вы можете попробовать поместить тег @XmlElement в getter для атрибута fields в вашем классе. Если это работает, ваш XML будет выглядеть так:

<MyFieldsCollection>
   <fields name="name1" size="size1"/>
   <fields name="name2" size="size2"/>
</MyFieldsCollection>

Если это не работает, и это выстрел в темноте, попробуйте изменить тип «Коллекции» на «Список», чтобы проверить, если это имеет какое-то значение. Какую версию Java вы используете? Как выглядит код, который вы используете для сериализации вашего объекта?

...