You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2017/10/05 09:02:16 UTC

johnzon git commit: JOHNZON-80 respecting attributeorder when deserializing SortedMaps

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 <rm...@gmail.com>
Authored: Thu Oct 5 11:01:38 2017 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
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();