There is such a piece of xml file:

*** <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> *** 

As you can see, tags in it can be nested in each other, and several pieces each. And nested are not in the tag, but simply one by one list.

Currently using JAXB they are converted to a List. But I had to have a HashMap instead of a list:

 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; } *** } 

To do this, I wrote an adapter that, when unmarshalling, takes a list and returns a map, but this does not work.

 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 () is called, but an empty LinkedList comes to it all the time. What needs to be corrected for the right conversion to occur?

The problem is that I would like to do without wrapping in the add. tag

    0