2009-06-18 4 views
1

Я успешно выстраивал следующий классКак аннотировать элемент коллекции типа в JAXB

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

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

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

    public MyFieldsCollection() {} 
    ....} 

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

класса java.util.LinkedList, ни какой-либо из него s класс супер известен в этом контексте

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

+0

Поскольку класс контейнера не аннотирован, вы не можете его маршалировать. Убедитесь, что MyFieldsCollection - это ваш новый элемент @XmlRootElement вместо поля. Кроме того, аннотируйте коллекцию с помощью @XmlList. – f1sh

ответ

0

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

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

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