Десериализация списка элементов с аннотацией @Text в Simple

1

У меня есть два класса: Package и ModelRefObj. Пакет содержит два набора ModelRefObj. Я использую Simple framework для анализа своих экземпляров из XML, поэтому я создал несколько тестов JUnit. Я могу проанализировать XML-модель ModelRefObj, но при попытке разобрать Пакет я получаю следующее исключение:

org.simpleframework.xml.core.ValueRequiredException: Empty value for @org.simpleframework.xml.Text(empty=, data=false, required=true) on field 'value' private java.lang.String cz.semanta.coc.domain.cognos.ModelRefObj.value in class cz.semanta.coc.domain.cognos.ModelRefObj at line 1
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:580)
    at org.simpleframework.xml.core.Composite.readText(Composite.java:467)
    at org.simpleframework.xml.core.Composite.access$200(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1381)
    ...

Вот XML, который я пытаюсь проанализировать:

<package> 
    <name>GO Sales (nalysis)</name>
    <visible>
        <refObj>[go_sales]</refObj>
        <refObj>[Filters and calculations].[Returns]</refObj>
    </visible>
    <hidden>
        <refObj>[gosales].[BRANCH].[BRANCH_CODE]</refObj>
        <refObj>[gosales].[BRANCH].[ADDRESS1]</refObj>
        <refObj>[gosales].[BRANCH].[CITY]</refObj>
    </hidden>
</package>

Вот мои аннотированные классы:

@Root(name = "package")
public class Package {

    @Element
    private String name;

    @ElementList(name = "visible", entry = "refObj", type = ModelRefObj.class)
    private Set<ModelRefObj> visibleRefObjs;

    @ElementList(name = "hidden", entry = "refObj", type = ModelRefObj.class)
    private Set<ModelRefObj> hiddenRefObjs;

    Package() { }

    ...
}

@Root(name = "refObj")
public class ModelRefObj {

    @Text
    private String value;

    ModelRefObj() { }

    public ModelRefObj(String value) {
        this.value = value;
    }

    ...
}
Теги:
simple-framework

1 ответ

1
Лучший ответ

Я реализовал классы, которые у вас есть, и использовал предоставленный вами пример xml.

Я создал основную функцию для тестирования

public static void main(String args[]) throws Exception {
    Serializer serializer = new Persister(new Format("<?xml version=\"1.0\" encoding= \"UTF-8\" ?>"));
    File source = new File("sample.xml");
    Package p = serializer.read(Package.class, source);

    System.out.println(p.name);
}

Выход

GO Sales (nalysis)

Проверка объекта p в режиме отладки показывает, что он имеет два набора с двумя и тремя элементами. Ваш код отлично работает для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню