Repository: johnzon Updated Branches: refs/heads/master d64bd443c -> f8e3b0ba3
JOHNZON-80 respecting attributeorder when deserializing SortedMaps Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/f8e3b0ba Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/f8e3b0ba Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/f8e3b0ba Branch: refs/heads/master Commit: f8e3b0ba3ac7b42a93a1662396ff97f688229958 Parents: d64bd44 Author: Romain Manni-Bucau <[email protected]> Authored: Thu Oct 5 11:01:38 2017 +0200 Committer: Romain Manni-Bucau <[email protected]> Committed: Thu Oct 5 11:01:38 2017 +0200 ---------------------------------------------------------------------- .../johnzon/mapper/MappingParserImpl.java | 2 +- .../org/apache/johnzon/mapper/MapperTest.java | 24 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/f8e3b0ba/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java index f35fe40..5928b95 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java @@ -231,7 +231,7 @@ public class MappingParserImpl implements MappingParser { if (LinkedHashMap.class == raw) { map = new LinkedHashMap(); } else if (SortedMap.class.isAssignableFrom(raw) || NavigableMap.class == raw || TreeMap.class == raw) { - map = new TreeMap(); + map = config.getAttributeOrder() == null ? new TreeMap() : new TreeMap(config.getAttributeOrder()); } else if (ConcurrentMap.class.isAssignableFrom(raw)) { map = new ConcurrentHashMap(object.size()); } else if (EnumMap.class.isAssignableFrom(raw)) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/f8e3b0ba/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java ---------------------------------------------------------------------- diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java index e0330f4..c3d90cf 100644 --- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java @@ -38,6 +38,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.SortedMap; import java.util.TreeMap; import static java.util.Arrays.asList; @@ -160,6 +161,29 @@ public class MapperTest { } @Test + public void sortedMap() { + final Mapper sortedMapper = new MapperBuilder().setAttributeOrder(new Comparator<String>() { + @Override + public int compare(final String o1, final String o2) { + return o2.compareTo(o1); + } + }).build(); + final Map<String, String> sorted = new TreeMap<>(new Comparator<String>() { + @Override + public int compare(final String o1, final String o2) { + return o1.compareTo(o2); + } + }); + sorted.put("a", "1"); + sorted.put("b", "2"); + sorted.put("c", "3"); + assertEquals("{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}", sortedMapper.writeObjectAsString(sorted)); + assertEquals(asList("c", "b", "a"), new ArrayList<>(Map.class.cast( + sortedMapper.readObject("{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}", + new JohnzonParameterizedType(SortedMap.class, String.class, String.class))).keySet())); + } + + @Test public void justObjectAsModel() { final Mapper encodingAwareMapper = new MapperBuilder().setEncoding("UTF-8" /*otherwise guess algo fails for too small string*/).build(); final Mapper simpleMapper = new MapperBuilder().build();
