Я пытаюсь маршалировать объект в XML, этот объект расширяется HashMap<String, List<String>>
.Однако мне неясно, почему вывод не содержит данных, введенных в этот объект.Метод, используемый для преобразования этого объекта в XML, можно найти в конце вопроса.
Пример 1 (фактическая ситуация)
Структура данных:
@XmlRootElement
class WhatIWant extends HashMap<String, List<String>> {
}
Какиезаполняется с помощью:
WhatIWant what = new WhatIWant();
what.put("theKey", Arrays.asList("value1", "value2"));
Полученный результат выглядит следующим образом, введенные данные нигде не найдены.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<whatIWant/>
Пример 2 (ситуация, которая генерирует ожидаемый результат)
Нечто подобное работает, и я ожидал, что выходные данные первого примера будут выглядеть примерно так.
Структура данных:
@XmlRootElement
class MyHashmap {
public HashMap<String, MyList> map = new HashMap<>();
}
class MyList {
public List<String> list = new ArrayList<String>();
}
Заполнено с использованием:
MyHashmap requirement = new MyHashmap();
MyList t = new MyList();
t.list = Arrays.asList("value1", "value2");
requirement.map.put("theKey", t);
Полученный результат:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myHashmap>
<map>
<entry>
<key>theKey</key>
<value>
<list>value1</list>
<list>value2</list>
</value>
</entry>
</map>
</myHashmap>
Метод объекта в XML
Метод, который я использовал для преобразования объектов в XML:
public static String getObjectAsXML(Object obj) {
try {
// Create marshaller
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Marshall the object
StringWriter sw = new StringWriter();
marshaller.marshal(obj, sw);
return sw.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Вопрос
- Почему
Example 1
не генерирует вывод, похожий на тот, что в Example 2
?Почему ничего не генерирует вообще? - Что нужно сделать, чтобы получить вывод XML для такой структуры, как
Example 1
?Или это невозможно?