package org.simpleframework.xml.strategy; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.simpleframework.xml.Default; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementMap; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.ValidationTestCase; import org.simpleframework.xml.convert.AnnotationStrategy; import org.simpleframework.xml.convert.Convert; import org.simpleframework.xml.convert.Converter; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.stream.InputNode; import org.simpleframework.xml.stream.OutputNode; public class ConverterMapTest extends ValidationTestCase { private static class MapConverter implements Converter<java.util.Map> { public Map read(InputNode node) throws Exception{ java.util.Map map = new HashMap(); while(true) { InputNode next = node.getNext("entry"); if(next == null) { break; } Entry entry = readEntry(next); map.put(entry.name, entry.value); } return map; } public void write(OutputNode node, Map map) throws Exception { Set keys = map.keySet(); for(Object key : keys) { OutputNode next = node.getChild("entry"); next.setAttribute("key", key.toString()); OutputNode value = next.getChild("value"); value.setValue(map.get(key).toString()); } } private Entry readEntry(InputNode node) throws Exception { InputNode key = node.getAttribute("key"); InputNode value = node.getNext("value"); return new Entry(key.getValue(), value.getValue()); } private static class Entry { private String name; private String value; public Entry(String name, String value){ this.name = name; this.value = value; } } } @Root @Default private static class MapHolder { @Element @ElementMap @Convert(MapConverter.class) private Map<String, String> map = new HashMap<String, String>(); public void put(String name, String value){ map.put(name, value); } } public void testMap() throws Exception { Strategy strategy = new AnnotationStrategy(); Serializer serializer = new Persister(strategy); MapHolder holder = new MapHolder(); holder.put("a", "A"); holder.put("b", "B"); holder.put("c", "C"); holder.put("d", "D"); holder.put("e", "E"); holder.put("f", "F"); serializer.write(holder, System.out); validate(holder, serializer); } }