From 5696cb5ae02a1e81673382c86c284d1576d7007e Mon Sep 17 00:00:00 2001 From: "A. J. David Bosschaert" Date: Mon, 26 Sep 2016 15:12:13 +0000 Subject: [PATCH] FELIX-5358 Cannot deserialize empty Map This commit resolves the issue. Testcase contributed by David Leangen with many thanks. git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1762341 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/felix/serializer/impl/json/JsonParser.java | 6 +++++- .../serializer/impl/json/JsonSerializationTest.java | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java b/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java index 2d01cbcdd83..f5dbce2bd3b 100644 --- a/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java +++ b/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java @@ -130,8 +130,12 @@ private static Map parseObject(String jsonObject) { if (!(jsonObject.startsWith("{") && jsonObject.endsWith("}"))) throw new IllegalArgumentException("Malformatted JSON object: " + jsonObject); - jsonObject = jsonObject.substring(1, jsonObject.length() - 1); Map values = new HashMap<>(); + + jsonObject = jsonObject.substring(1, jsonObject.length() - 1).trim(); + if (jsonObject.length() == 0) + return values; + for (String element : parseKeyValueListRaw(jsonObject)) { Pair pair = parseKeyValue(element); values.put(pair.key, pair.value); diff --git a/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializationTest.java b/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializationTest.java index 89339b346b9..a3cc1b370a7 100644 --- a/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializationTest.java +++ b/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializationTest.java @@ -21,7 +21,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import org.apache.felix.serializer.impl.json.JsonSerializerImpl; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -78,4 +77,13 @@ public void testComplexMapSerialization2() { + "{\"yes\":true,\"no\":{\"maybe\":false}}}"; assertEquals(expected, new JsonSerializerImpl().serialize(cm).toString()); } + + @Test + public void testEmptyMapSerialization() { + Map m = new LinkedHashMap<>(); + String expected = "{}"; + assertEquals(expected, new JsonSerializerImpl().serialize(m).toString()); + Map m2 = new JsonSerializerImpl().deserialize(Map.class).from(expected); + assertEquals(m, m2); + } }