У меня есть два класса: 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;
}
...
}
Я реализовал классы, которые у вас есть, и использовал предоставленный вами пример 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 в режиме отладки показывает, что он имеет два набора с двумя и тремя элементами. Ваш код отлично работает для меня.