From e051f5f205b6136f55bff1b12598d296f7c05f0d Mon Sep 17 00:00:00 2001 From: Michael Watt Date: Wed, 20 Apr 2016 20:26:21 +0100 Subject: [PATCH] Use InvalidFormatException for deserialization parse failures --- .../jsr310/deser/DurationDeserializer.java | 6 +++--- .../jsr310/deser/InstantDeserializer.java | 3 +++ .../deser/JSR310StringParsableDeserializer.java | 2 +- .../jsr310/deser/LocalDateDeserializer.java | 3 +++ .../jsr310/deser/LocalDateTimeDeserializer.java | 3 +++ .../jsr310/deser/LocalTimeDeserializer.java | 6 +++--- .../jsr310/deser/MonthDayDeserializer.java | 6 +++--- .../jsr310/deser/OffsetTimeDeserializer.java | 6 +++--- .../datatype/jsr310/deser/YearDeserializer.java | 6 +++--- .../jsr310/deser/YearMonthDeserializer.java | 6 +++--- .../deser/key/DurationKeyDeserializer.java | 6 +++--- .../deser/key/InstantKeyDeserializer.java | 6 +++--- .../deser/key/LocalDateKeyDeserializer.java | 6 +++--- .../deser/key/LocalDateTimeKeyDeserializer.java | 6 +++--- .../deser/key/LocalTimeKeyDeserializer.java | 6 +++--- .../deser/key/MonthDayKeyDeserializer.java | 6 +++--- .../key/OffsetDateTimeKeyDeserializer.java | 6 +++--- .../deser/key/OffsetTimeKeyDeserializer.java | 6 +++--- .../jsr310/deser/key/PeriodKeyDeserializer.java | 6 +++--- .../jsr310/deser/key/YearKeyDeserializer.java | 6 +++--- .../deser/key/YearMothKeyDeserializer.java | 6 +++--- .../jsr310/deser/key/ZoneIdKeyDeserializer.java | 2 +- .../deser/key/ZoneOffsetKeyDeserializer.java | 2 +- .../deser/key/ZonedDateTimeKeyDeserializer.java | 6 +++--- .../TestLocalDateTimeDeserialization.java | 16 ++++------------ .../jsr310/TestLocalTimeDeserialization.java | 16 ++++------------ .../jsr310/TestMonthDayDeserialization.java | 16 ++++------------ .../TestOffsetDateTimeDeserialization.java | 16 ++++------------ .../jsr310/TestOffsetTimeDeserialization.java | 16 ++++------------ .../jsr310/TestYearDeserialization.java | 16 ++++------------ .../jsr310/TestYearMonthDeserialization.java | 16 ++++------------ .../TestZonedDateTimeDeserialization.java | 16 ++++------------ .../jsr310/TestZonedOffsetDeserialization.java | 17 ++++------------- 33 files changed, 102 insertions(+), 166 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/DurationDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/DurationDeserializer.java index fea0f7dd..058cf676 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/DurationDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/DurationDeserializer.java @@ -24,8 +24,8 @@ import java.io.IOException; import java.math.BigDecimal; -import java.time.DateTimeException; import java.time.Duration; +import java.time.format.DateTimeParseException; /** * Deserializer for Java 8 temporal {@link Duration}s. @@ -68,8 +68,8 @@ public Duration deserialize(JsonParser parser, DeserializationContext context) t } try { return Duration.parse(string); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } } throw context.mappingException("Expected type float, integer, or string."); diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/InstantDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/InstantDeserializer.java index abe6b2af..02b473eb 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/InstantDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/InstantDeserializer.java @@ -31,6 +31,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.time.temporal.Temporal; import java.time.temporal.TemporalAccessor; import java.util.function.BiFunction; @@ -152,6 +153,8 @@ public T deserialize(JsonParser parser, DeserializationContext context) throws I if (context.isEnabled(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)) { return adjust.apply(value, this.getZone(context)); } + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } catch (DateTimeException e) { _rethrowDateTimeException(parser, e); value = null; diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/JSR310StringParsableDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/JSR310StringParsableDeserializer.java index 8a4ba055..70fa35b9 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/JSR310StringParsableDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/JSR310StringParsableDeserializer.java @@ -88,7 +88,7 @@ public Object deserialize(JsonParser parser, DeserializationContext context) thr return ZoneOffset.of(string); } } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + throw context.weirdStringException(string, handledType(), e.getMessage()); } } throw context.wrongTokenException(parser, JsonToken.VALUE_STRING, null); diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer.java index 895c35a2..3c5acfc8 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer.java @@ -23,6 +23,7 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.DeserializationContext; @@ -78,6 +79,8 @@ public LocalDate deserialize(JsonParser parser, DeserializationContext context) } } return LocalDate.parse(string, format); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } catch (DateTimeException e) { _rethrowDateTimeException(parser, e); } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateTimeDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateTimeDeserializer.java index 3eeae76c..66290e90 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateTimeDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateTimeDeserializer.java @@ -22,6 +22,7 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; @@ -81,6 +82,8 @@ public LocalDateTime deserialize(JsonParser parser, DeserializationContext conte } return LocalDateTime.parse(string, _formatter); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } catch (DateTimeException e) { _rethrowDateTimeException(parser, e); } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalTimeDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalTimeDeserializer.java index 56b96957..38638360 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalTimeDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalTimeDeserializer.java @@ -23,9 +23,9 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; -import java.time.DateTimeException; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; /** * Deserializer for Java 8 temporal {@link LocalTime}s. @@ -70,8 +70,8 @@ public LocalTime deserialize(JsonParser parser, DeserializationContext context) } } return LocalTime.parse(string, format); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } } if (parser.isExpectedStartArrayToken()) { diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/MonthDayDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/MonthDayDeserializer.java index 491add9f..53b860a5 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/MonthDayDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/MonthDayDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser; import java.io.IOException; -import java.time.DateTimeException; import java.time.MonthDay; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; @@ -38,8 +38,8 @@ public MonthDay deserialize(JsonParser parser, DeserializationContext context) t return MonthDay.parse(str); } return MonthDay.parse(str, _formatter); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(str, handledType(), e.getMessage()); } } throw context.mappingException("Unexpected token (%s), expected VALUE_STRING or VALUE_NUMBER_INT", diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/OffsetTimeDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/OffsetTimeDeserializer.java index 23a8855e..f091b138 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/OffsetTimeDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/OffsetTimeDeserializer.java @@ -17,10 +17,10 @@ package com.fasterxml.jackson.datatype.jsr310.deser; import java.io.IOException; -import java.time.DateTimeException; import java.time.OffsetTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; @@ -59,8 +59,8 @@ public OffsetTime deserialize(JsonParser parser, DeserializationContext context) } try { return OffsetTime.parse(string, _formatter); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } } if (!parser.isExpectedStartArrayToken()) { diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserializer.java index 4c20cfea..4decbd98 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserializer.java @@ -21,9 +21,9 @@ import com.fasterxml.jackson.databind.DeserializationContext; import java.io.IOException; -import java.time.DateTimeException; import java.time.Year; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; /** * Deserializer for Java 8 temporal {@link Year}s. @@ -60,8 +60,8 @@ public Year deserialize(JsonParser parser, DeserializationContext context) throw return Year.parse(str); } return Year.parse(str, _formatter); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(str, handledType(), e.getMessage()); } } if (t == JsonToken.VALUE_NUMBER_INT) { diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearMonthDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearMonthDeserializer.java index 13d8f99d..bfd5ccb6 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearMonthDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearMonthDeserializer.java @@ -22,9 +22,9 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; -import java.time.DateTimeException; import java.time.YearMonth; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; /** * Deserializer for Java 8 temporal {@link YearMonth}s. @@ -64,8 +64,8 @@ public YearMonth deserialize(JsonParser parser, DeserializationContext context) } try { return YearMonth.parse(string, _formatter); - } catch (DateTimeException e) { - _rethrowDateTimeException(parser, e); + } catch (DateTimeParseException e) { + throw context.weirdStringException(string, handledType(), e.getMessage()); } } if (parser.isExpectedStartArrayToken()) { diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/DurationKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/DurationKeyDeserializer.java index 67bc261c..fdbc5f8a 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/DurationKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/DurationKeyDeserializer.java @@ -1,8 +1,8 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.Duration; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -18,8 +18,8 @@ private DurationKeyDeserializer() { protected Duration deserialize(String key, DeserializationContext ctxt) throws IOException { try { return Duration.parse(key); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, Duration.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(Duration.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/InstantKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/InstantKeyDeserializer.java index ea3ce6fb..e98f7048 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/InstantKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/InstantKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.Instant; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private InstantKeyDeserializer() { protected Instant deserialize(String key, DeserializationContext ctxt) throws IOException { try { return DateTimeFormatter.ISO_INSTANT.parse(key, Instant::from); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, Instant.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(Instant.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateKeyDeserializer.java index e7a303d9..437a3f6d 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private LocalDateKeyDeserializer() { protected LocalDate deserialize(String key, DeserializationContext ctxt) throws IOException { try { return LocalDate.parse(key, DateTimeFormatter.ISO_LOCAL_DATE); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, LocalDate.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(LocalDate.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateTimeKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateTimeKeyDeserializer.java index d66a6a7f..3c3cf530 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateTimeKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalDateTimeKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private LocalDateTimeKeyDeserializer() { protected LocalDateTime deserialize(String key, DeserializationContext ctxt) throws IOException { try { return LocalDateTime.parse(key, DateTimeFormatter.ISO_LOCAL_DATE_TIME); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, LocalDateTime.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(LocalDateTime.class, key, e.getMessage()); } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalTimeKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalTimeKeyDeserializer.java index 39134321..092ad336 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalTimeKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/LocalTimeKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private LocalTimeKeyDeserializer() { protected LocalTime deserialize(String key, DeserializationContext ctxt) throws IOException { try { return LocalTime.parse(key, DateTimeFormatter.ISO_LOCAL_TIME); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, LocalTime.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(LocalTime.class, key, e.getMessage()); } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/MonthDayKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/MonthDayKeyDeserializer.java index a03e36e4..242d005f 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/MonthDayKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/MonthDayKeyDeserializer.java @@ -4,10 +4,10 @@ import static java.time.temporal.ChronoField.MONTH_OF_YEAR; import java.io.IOException; -import java.time.DateTimeException; import java.time.MonthDay; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -31,8 +31,8 @@ private MonthDayKeyDeserializer() { protected MonthDay deserialize(String key, DeserializationContext ctxt) throws IOException { try { return MonthDay.parse(key, PARSER); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, MonthDay.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(MonthDay.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetDateTimeKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetDateTimeKeyDeserializer.java index 9a2c9ff1..4aa18be9 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetDateTimeKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetDateTimeKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private OffsetDateTimeKeyDeserializer() { protected OffsetDateTime deserialize(String key, DeserializationContext ctxt) throws IOException { try { return OffsetDateTime.parse(key, DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, OffsetDateTime.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(OffsetDateTime.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetTimeKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetTimeKeyDeserializer.java index 5c3fac4a..e05e9ff8 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetTimeKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/OffsetTimeKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.OffsetTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,8 +19,8 @@ private OffsetTimeKeyDeserializer() { protected OffsetTime deserialize(String key, DeserializationContext ctxt) throws IOException { try { return OffsetTime.parse(key, DateTimeFormatter.ISO_OFFSET_TIME); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, OffsetTime.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(OffsetTime.class, key, e.getMessage()); } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/PeriodKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/PeriodKeyDeserializer.java index 33f8088a..57078af1 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/PeriodKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/PeriodKeyDeserializer.java @@ -1,8 +1,8 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.Period; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -18,8 +18,8 @@ private PeriodKeyDeserializer() { protected Period deserialize(String key, DeserializationContext ctxt) throws IOException { try { return Period.parse(key); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, Period.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(Period.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearKeyDeserializer.java index 2f75c220..dcbf6169 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearKeyDeserializer.java @@ -3,10 +3,10 @@ import static java.time.temporal.ChronoField.YEAR; import java.io.IOException; -import java.time.DateTimeException; import java.time.Year; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; +import java.time.format.DateTimeParseException; import java.time.format.SignStyle; import com.fasterxml.jackson.databind.DeserializationContext; @@ -30,8 +30,8 @@ private YearKeyDeserializer() { protected Year deserialize(String key, DeserializationContext ctxt) throws IOException { try { return Year.parse(key, FORMATTER); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, Year.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(Year.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearMothKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearMothKeyDeserializer.java index dc05b114..f82aa881 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearMothKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/YearMothKeyDeserializer.java @@ -4,10 +4,10 @@ import static java.time.temporal.ChronoField.YEAR; import java.io.IOException; -import java.time.DateTimeException; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; +import java.time.format.DateTimeParseException; import java.time.format.SignStyle; import com.fasterxml.jackson.databind.DeserializationContext; @@ -31,8 +31,8 @@ private YearMothKeyDeserializer() { protected YearMonth deserialize(String key, DeserializationContext ctxt) throws IOException { try { return YearMonth.parse(key, FORMATTER); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, YearMonth.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(YearMonth.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneIdKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneIdKeyDeserializer.java index d3efeaa7..65fc8608 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneIdKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneIdKeyDeserializer.java @@ -19,7 +19,7 @@ protected Object deserialize(String key, DeserializationContext ctxt) throws IOE try { return ZoneId.of(key); } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, ZoneId.class, e); + throw ctxt.weirdKeyException(ZoneId.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneOffsetKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneOffsetKeyDeserializer.java index 45a7eb4d..5c63b964 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneOffsetKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZoneOffsetKeyDeserializer.java @@ -19,7 +19,7 @@ protected ZoneOffset deserialize(String key, DeserializationContext ctxt) throws try { return ZoneOffset.of(key); } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, ZoneOffset.class, e); + throw ctxt.weirdKeyException(ZoneOffset.class, key, e.getMessage()); } } } diff --git a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZonedDateTimeKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZonedDateTimeKeyDeserializer.java index 6a7420d2..2f586e5c 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZonedDateTimeKeyDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/key/ZonedDateTimeKeyDeserializer.java @@ -1,9 +1,9 @@ package com.fasterxml.jackson.datatype.jsr310.deser.key; import java.io.IOException; -import java.time.DateTimeException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -20,8 +20,8 @@ protected ZonedDateTime deserialize(String key, DeserializationContext ctxt) thr // not serializing timezone data yet try { return ZonedDateTime.parse(key, DateTimeFormatter.ISO_OFFSET_DATE_TIME); - } catch (DateTimeException e) { - return _rethrowDateTimeException(ctxt, ZonedDateTime.class, e); + } catch (DateTimeParseException e) { + throw ctxt.weirdKeyException(ZonedDateTime.class, key, e.getMessage()); } } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateTimeDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateTimeDeserialization.java index 2a43911f..fafcdbf3 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateTimeDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateTimeDeserialization.java @@ -1,13 +1,12 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.LocalDateTime; import java.time.Month; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,16 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(LocalDateTime.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalTimeDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalTimeDeserialization.java index d18dc9e4..fbb3d1d3 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalTimeDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalTimeDeserialization.java @@ -1,12 +1,11 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.LocalTime; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -31,16 +30,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String aposJson) throws Throwable { try { read(aposJson); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(LocalTime.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestMonthDayDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestMonthDayDeserialization.java index c05881e0..d6ed75fc 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestMonthDayDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestMonthDayDeserialization.java @@ -1,13 +1,12 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.Month; import java.time.MonthDay; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,16 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String aposJson) throws Throwable { try { read(aposJson); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(MonthDay.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetDateTimeDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetDateTimeDeserialization.java index e7b1dc34..b9f41374 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetDateTimeDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetDateTimeDeserialization.java @@ -1,14 +1,13 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.OffsetDateTime; import java.time.ZoneOffset; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -52,16 +51,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(OffsetDateTime.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetTimeDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetTimeDeserialization.java index cdc61534..a5945cb2 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetTimeDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestOffsetTimeDeserialization.java @@ -1,13 +1,12 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.OffsetTime; import java.time.ZoneOffset; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,16 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(OffsetTime.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearDeserialization.java index f06b1edd..921d2dff 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearDeserialization.java @@ -1,12 +1,11 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.Year; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -31,16 +30,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(Year.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearMonthDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearMonthDeserialization.java index d39df83c..545ffd34 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearMonthDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestYearMonthDeserialization.java @@ -1,13 +1,12 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.Month; import java.time.YearMonth; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,16 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(YearMonth.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedDateTimeDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedDateTimeDeserialization.java index ed2febe4..8d98423d 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedDateTimeDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedDateTimeDeserialization.java @@ -1,13 +1,12 @@ package com.fasterxml.jackson.datatype.jsr310; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; import java.io.IOException; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.time.format.DateTimeParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,16 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - if (e.getCause() == null) { - throw e; - } - if (!(e.getCause() instanceof DateTimeParseException)) { - throw e.getCause(); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(ZonedDateTime.class, e.getTargetType()); } } diff --git a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedOffsetDeserialization.java b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedOffsetDeserialization.java index 8960e9e5..4e1d4102 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedOffsetDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestZonedOffsetDeserialization.java @@ -1,12 +1,11 @@ package com.fasterxml.jackson.datatype.jsr310; import java.io.IOException; -import java.time.DateTimeException; import java.time.ZoneOffset; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; import org.junit.Test; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; import static org.junit.Assert.assertEquals; @@ -32,17 +31,9 @@ public void testBadDeserializationAsString01() throws Throwable private void expectFailure(String json) throws Throwable { try { read(json); - fail("expected DateTimeParseException"); - } catch (JsonProcessingException e) { - Throwable rootCause = e.getCause(); - if (rootCause == null) { - fail("Failed as expected, but no root cause for "+e); - } - if (!(rootCause instanceof DateTimeException)) { - fail("Failed as expected, but wrong root cause type: "+rootCause.getClass()); - } - } catch (IOException e) { - throw e; + fail("expected InvalidFormatException"); + } catch (InvalidFormatException e) { + assertEquals(ZoneOffset.class, e.getTargetType()); } }