Есть такой кусок xml файла:
***
<resource>
<name>commands</name>
<method>POST</method>
<permissions mode="blacklist"></permissions>
<resource>
<name>login</name>
<permissions mode="blacklist"></permissions>
</resource>
<resource>
<name>logout</name>
<permissions>
<u>$all</u>
<u>BANNED</u>
</permissions>
</resource>
<resource>
<name>register</name>
<permissions>
<u>GUEST</u>
</permissions>
</resource>
<resource>
<name>addbook</name>
<permissions>
<u>$registered</u>
</permissions>
</resource>
<resource>
<name>changepassword</name>
<permissions>
<u>$registered</u>
</permissions>
</resource>
</resource>
***
Как видно, в нем теги могут быть вложены друг в друга, причем по несколько штук. И вложенные не находятся в теге , а просто один за одним списком.
На данный момент с помощью JAXB они преобразовываются в List. Но у меня появилась необходимость вместо списка иметь HashMap:
class Resource{
***
private HashMap<String, Resource> resources;
@XmlJavaTypeAdapter(ResourcesHashMapAdapter.class)
@XmlElement(name = "resource")
public HashMap<String, Resource> getResources() {
return resources;
}
public void setResources(HashMap<String, Resource> resources) {
this.resources = resources;
}
***
}
Для этого написал адаптер, который при демаршаллизации принимает список и возвращает map, но это не работает.
public class ResourcesHashMapAdapter extends XmlAdapter<LinkedList<Resource>, HashMap<String, Resource>> {
@Override
public HashMap<String, Resource> unmarshal(LinkedList<Resource> v) throws Exception {
HashMap<String, Resource> map = new HashMap<String, Resource>();
v.forEach(resource -> map.put(resource.getName(), resource));
System.out.println("IN ResourcesHashMapAdapter: " + v);
return map;
}
@Override
public LinkedList<Resource> marshal(HashMap<String, Resource> v) throws Exception {
return new LinkedList(v.values());
}
}
unmarshall() вызывается, но ему постоянно приходит пустой LinkedList. Что нужно исправить, чтобы происходило правильное преобразование?
Проблема в том, что хотелось бы обойтись без оборачивания в доп. тег
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости