From 316b458071485960cfea239ec733805328ec2d2e Mon Sep 17 00:00:00 2001 From: Benoit Lavenier <benoit.lavenier@e-is.pro> Date: Fri, 21 Aug 2020 15:18:46 +0200 Subject: [PATCH] [fix] Json parser must be able to parse null value --- .../core/util/json/JsonAttributeParser.java | 3 ++ .../util/json/JsonAttributeParserTest.java | 34 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java index 87914dba..40e28e0e 100644 --- a/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java @@ -123,6 +123,9 @@ public class JsonAttributeParser<T extends Object> { final String value = matcher.group(1); try { + if (value == null) { + return null; + } return parseValue(value); } catch(NumberFormatException | UnknownFormatConversionException e) { diff --git a/duniter4j-core-shared/src/test/java/org/duniter/core/util/json/JsonAttributeParserTest.java b/duniter4j-core-shared/src/test/java/org/duniter/core/util/json/JsonAttributeParserTest.java index 800ecf2f..ea8d7ae3 100644 --- a/duniter4j-core-shared/src/test/java/org/duniter/core/util/json/JsonAttributeParserTest.java +++ b/duniter4j-core-shared/src/test/java/org/duniter/core/util/json/JsonAttributeParserTest.java @@ -34,7 +34,7 @@ public class JsonAttributeParserTest { private static final String PROPERTY_TS = "ts"; private static final String PROPERTY_B = "b"; - private static final String TS_VALUE = "2014-12-02T13:58:23.801+0100"; + private static final String TS_VALUE = "2014-12-02T13:58:23.801+0100"; private static final String OBJ_JSON = ("{'id':'joe','ts':'" + TS_VALUE + "','foo':{'bar':{'v1':50019820,'v2':0, 'v3':0.001, 'v4':-100, 'v5':0.000001, 'v6':0.0, 'b':true}}}") .replace("'", "\""); @@ -110,7 +110,35 @@ public class JsonAttributeParserTest { JsonAttributeParser<String> tsAttribute = new JsonAttributeParser<>(PROPERTY_TS, String.class); newJson = tsAttribute.removeFromJson(newJson); - expectedJson = expectedJson.replace("\"ts\":\""+TS_VALUE+"\",", ""); + expectedJson = expectedJson.replace("\"ts\":\"" + TS_VALUE + "\",", ""); Assert.assertEquals(expectedJson, newJson); } -} + + @Test + public void parseNullableValue() { + // Long + { + String jsonString = "{\n" + + " \"ts\": null\n" + + "}"; + + // nullable = true + JsonAttributeParser<Long> tsAttribute = new JsonAttributeParser<>(PROPERTY_TS, Long.class); + Long parsedValue = tsAttribute.getValue(jsonString); + Assert.assertNull(parsedValue); + } + + // String + { + String jsonString = "{\n" + + " \"id\": null\n" + + "}"; + + // nullable = true + JsonAttributeParser<String> idAttribute = new JsonAttributeParser<>(PROPERTY_ID, String.class); + String parsedValue = idAttribute.getValue(jsonString); + Assert.assertNull(parsedValue); + + } + } +} \ No newline at end of file -- GitLab