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();

Reply via email to