Я хочу, чтобы данные коллекции (List) преобразовывались в Map.
Используя тип списка, результаты получаются правильными. но я использую тип карты, данные не могут исправить привязку.
Xml Данные
<Result>
<Module name="module1">
<TestCase name="testCase1">
<Test name="test1_1" result="pass"/>
<Test name="test1_2" result="pass"/>
<Test name="test1_3" result="fail"/>
<Test name="test1_4" result="pass"/>
</TestCase>
</Module>
<Module name="module2">
<TestCase name="testCase2">
<Test name="test2_1" result="pass"/>
<Test name="test2_2" result="pass"/>
</TestCase>
</Module>
</Result>
Java Код
@XmlRootElement(name = "Result")
public class Result {
@XmlJavaTypeAdapter(ModuleAdapter.class)
@XmlElement(name = "Module")
private Map<String, Module> modules;
}
public class Module {
@XmlAttribute(name = "name")
private String name;
@XmlJavaTypeAdapter(TestCaseAdapter.class)
@XmlElement(name = "TestCase")
private Map<String, TestCase> testCases;
// getter
}
public class TestCase {
@XmlAttribute(name = "name")
private String name;
@XmlJavaTypeAdapter(TestAdapter.class)
@XmlElement(name = "Test")
private Map<String, Test> testList;
// getter
}
public class Test {
@XmlAttribute(name = "result")
private String result;
@XmlAttribute(name = "name")
private String name;
// getter
}
Адаптер
public class ModuleAdapter extends XmlAdapter<ArrayList<Module>, Map<String, Module>> {
@Override
public Map<String, Module> unmarshal(ArrayList<Module> v) throws Exception {
return v.stream()
.collect(toMap(Module::getName, m -> m));
}
@Override
public ArrayList<Module> marshal(Map<String, Module> v) throws Exception {
return new ArrayList<>(v.values());
}
}
// TestCaseAdapter, TestAdapter is the same.
Main
public void parse() throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Result.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
File file = new File("test_result.xml");
Result result = (Result) unmarshaller.unmarshal(file);
}
Я пишу как выше код. Но запуск программы не дает желаемых результатов.
modules = null
testCases = null
tests = null
Данные не связаны должным образом. Какую часть я делаю неправильно и что мне делать?