diff options
Diffstat (limited to 'utils/src')
-rw-r--r-- | utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java | 27 | ||||
-rw-r--r-- | utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderTest.java | 35 |
2 files changed, 55 insertions, 7 deletions
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java index 7f5e3b85..3b4f3c23 100644 --- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java +++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java @@ -1,8 +1,8 @@ -/* +/*- * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.onap.policy.common.gson.DoubleConverter; import org.onap.policy.common.gson.GsonMessageBodyHandler; @@ -341,8 +342,17 @@ public class StandardCoder implements Coder { * @param json json string to be decoded * @param clazz class of object to be decoded * @return the object represented by the given json string + * @throws CoderException if the source is empty */ - protected <T> T fromJson(String json, Class<T> clazz) { + protected <T> T fromJson(String json, Class<T> clazz) throws CoderException { + if (json == null) { + return null; + } + + if (StringUtils.isBlank(json)) { + throw new CoderException("source string is empty"); + } + return convertFromDouble(clazz, gson.fromJson(json, clazz)); } @@ -352,9 +362,16 @@ public class StandardCoder implements Coder { * @param source source from which to read the json string to be decoded * @param clazz class of object to be decoded * @return the object represented by the given json string + * @throws CoderException if the source is empty */ - protected <T> T fromJson(Reader source, Class<T> clazz) { - return convertFromDouble(clazz, gson.fromJson(source, clazz)); + protected <T> T fromJson(Reader source, Class<T> clazz) throws CoderException { + T object = gson.fromJson(source, clazz); + + if (object == null) { + throw new CoderException("source is empty"); + } + + return convertFromDouble(clazz, object); } /** 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 a468f0b4..be588a40 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 @@ -1,8 +1,8 @@ -/* +/*- * ============LICENSE_START======================================================= * ONAP PAP * ================================================================================ - * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ package org.onap.policy.common.utils.coder; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -263,6 +264,8 @@ public class StandardCoderTest { @Test public void testToJsonTree_testFromJsonJsonElementClassT() throws Exception { + assertThat(coder.fromJson((JsonElement) null, MyMap.class)).isNull(); + MyMap map = new MyMap(); map.props = new LinkedHashMap<>(); map.props.put("jel keyA", "jel valueA"); @@ -278,6 +281,34 @@ public class StandardCoderTest { } @Test + public void testFromJsonStringClassT() throws Exception { + assertThat(coder.fromJson((String) null, MyMap.class)).isNull(); + + String json = "{'props': {'str keyA': 'str valueA', 'str keyB':'str valueB'}}".replace('\'', '"'); + + Object result = coder.fromJson(json, MyMap.class); + + assertNotNull(result); + assertEquals("{str keyA=str valueA, str keyB=str valueB}", result.toString()); + + assertThatThrownBy(() -> coder.fromJson("", MyMap.class)).isInstanceOf(CoderException.class) + .hasMessageContaining("empty"); + } + + @Test + public void testFromJsonReaderClassT() throws Exception { + String json = "{'props': {'str keyA': 'str valueA', 'str keyB':'str valueB'}}".replace('\'', '"'); + + Object result = coder.fromJson(new StringReader(json), MyMap.class); + + assertNotNull(result); + assertEquals("{str keyA=str valueA, str keyB=str valueB}", result.toString()); + + assertThatThrownBy(() -> coder.fromJson(new StringReader(""), MyMap.class)).isInstanceOf(CoderException.class) + .hasMessageContaining("empty"); + } + + @Test public void testConvertFromDouble() throws Exception { String text = "[listA, {keyA=100}, 200]"; assertEquals(text, coder.decode(text, Object.class).toString()); |