From d6963590c72eb4c2a300ded6bbd94e6c8e7b4158 Mon Sep 17 00:00:00 2001 From: Benoit Lavenier <benoit.lavenier@e-is.pro> Date: Thu, 9 Jan 2020 18:33:01 +0100 Subject: [PATCH] [enh] throw cause error when parse error --- .../core/util/json/JsonAttributeParser.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 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 ada12986..a7e8df9f 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 @@ -31,6 +31,7 @@ import java.text.DecimalFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.List; +import java.util.UnknownFormatConversionException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -54,8 +55,8 @@ public class JsonAttributeParser<T extends Object> { } private Type type; - private Pattern pattern; - private DecimalFormat decimalFormat; + private final Pattern pattern; + private final DecimalFormat decimalFormat; private String attributeName; public JsonAttributeParser(String attributeName, Class<? extends T> clazz) { @@ -67,6 +68,7 @@ public class JsonAttributeParser<T extends Object> { if (String.class.isAssignableFrom(clazz)) { type = Type.STRING; this.pattern = Pattern.compile(String.format(REGEX_ATTRIBUTE_STRING_VALUE, attributeName)); + this.decimalFormat = null; } // Integer else if (Integer.class.isAssignableFrom(clazz)) { @@ -100,6 +102,7 @@ public class JsonAttributeParser<T extends Object> { else if (Boolean.class.isAssignableFrom(clazz)) { type = Type.BOOLEAN; this.pattern = Pattern.compile(String.format(REGEX_ATTRIBUTE_BOOLEAN_VALUE, attributeName)); + this.decimalFormat = null; } else { throw new IllegalArgumentException("Invalid attribute class " + clazz.getCanonicalName()); @@ -109,15 +112,16 @@ public class JsonAttributeParser<T extends Object> { public T getValue(String jsonString) { Preconditions.checkNotNull(jsonString); - Matcher matcher = pattern.matcher(jsonString); + final Matcher matcher = pattern.matcher(jsonString); if (!matcher.find()) return null; + final String value = matcher.group(1); try { - return parseValue(matcher.group(1)); + return parseValue(value); } - catch(NumberFormatException e) { - throw new IllegalArgumentException(String.format("Unable to parse value '%' on attribute '%s' : %s. Expected type: %s", matcher.group(1), attributeName, e.getMessage(), type.name())); + catch(NumberFormatException | UnknownFormatConversionException e) { + throw new IllegalArgumentException(String.format("Unable to parse value '%' on attribute '%s' : %s. Expected type: %s", value, attributeName, e.getMessage(), type.name()), e); } } -- GitLab