diff --git a/src/main/java/graphql/scalars/datetime/DateTimeScalar.java b/src/main/java/graphql/scalars/datetime/DateTimeScalar.java index 06b3aa3..ef52333 100644 --- a/src/main/java/graphql/scalars/datetime/DateTimeScalar.java +++ b/src/main/java/graphql/scalars/datetime/DateTimeScalar.java @@ -22,6 +22,7 @@ import static java.time.temporal.ChronoField.HOUR_OF_DAY; import static java.time.temporal.ChronoField.MINUTE_OF_HOUR; import static java.time.temporal.ChronoField.NANO_OF_SECOND; +import static java.time.temporal.ChronoField.OFFSET_SECONDS; import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; /** @@ -95,7 +96,11 @@ public Value valueToLiteral(Object input) { private OffsetDateTime parseOffsetDateTime(String s, Function exceptionMaker) { try { - return OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + OffsetDateTime parse = OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + if (parse.get(OFFSET_SECONDS) == 0 && s.endsWith("-00:00")) { + throw exceptionMaker.apply("Invalid value : '" + s + "'. Negative zero offset is not allowed"); + } + return parse; } catch (DateTimeParseException e) { throw exceptionMaker.apply("Invalid RFC3339 value : '" + s + "'. because of : '" + e.getMessage() + "'"); } @@ -104,7 +109,8 @@ private OffsetDateTime parseOffsetDateTime(String s, Function