From ea29ed1a002ab282a36761448575ffc2e517284d Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Wed, 10 Apr 2019 20:08:30 -0400 Subject: Don't map JSON values to Double By default, gson treats all numbers as Double when placed into a generic Map. This is not backward compatible with existing policy APIs. Added a type adapter that walks Map objects and converts the Double values to Integer or Long, where possible. Made this the default behavior in the GsonMessageBodyHandler, the JacksonHandler, and the StandardCoder. Also fixed a couple of checkstyle errors in the gson project. Change-Id: I9ac0c77e6592d1c039646f0662c077b77a1e9aaf Issue-ID: POLICY-1542 Signed-off-by: Jim Hahn --- .../common/utils/coder/StandardCoderTest.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'utils/src/test/java/org/onap/policy/common/utils/coder') diff --git a/utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderTest.java b/utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderTest.java index 7583d776..e8e3bb60 100644 --- a/utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderTest.java +++ b/utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderTest.java @@ -43,7 +43,9 @@ import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -235,6 +237,26 @@ public class StandardCoderTest { assertThatThrownBy(() -> coder.fromJson(new StringReader("["), StandardCoderObject.class)); } + @Test + public void testMapDouble() throws Exception { + MyMap map = new MyMap(); + map.props = new HashMap<>(); + map.props.put("plainString", "def"); + map.props.put("negInt", -10); + map.props.put("doubleVal", 12.5); + map.props.put("posLong", 100000000000L); + + String json = coder.encode(map); + + map.props.clear(); + map = coder.decode(json, MyMap.class); + + assertEquals("def", map.props.get("plainString")); + assertEquals(-10, map.props.get("negInt")); + assertEquals(100000000000L, map.props.get("posLong")); + assertEquals(12.5, map.props.get("doubleVal")); + } + private static class MyObject { private String abc; @@ -244,4 +266,8 @@ public class StandardCoderTest { return "MyObject [abc=" + abc + "]"; } } + + private static class MyMap { + private Map props; + } } -- cgit 1.2.3-korg