diff --git a/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/DefaultJsonWriter.java b/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/DefaultJsonWriter.java index ffea3a8c..68dc5387 100644 --- a/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/DefaultJsonWriter.java +++ b/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/DefaultJsonWriter.java @@ -433,12 +433,17 @@ public DefaultJsonWriter value(boolean value) { /** {@inheritDoc} */ @Override public DefaultJsonWriter value(double value) { - if (Double.isNaN(value) || Double.isInfinite(value)) { + final boolean isNaNorInfinity = Double.isNaN(value) || Double.isInfinite(value); + if (!lenient && isNaNorInfinity) { throw new IllegalArgumentException("Numeric values must be finite, but was " + value); } writeDeferredName(); beforeValue(false); - out.append(value); + if (isNaNorInfinity) { + string(Double.toString(value)); + } else { + out.append(value); + } return this; } diff --git a/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/FastJsonWriter.java b/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/FastJsonWriter.java index 5e6e5fff..1950b9ec 100644 --- a/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/FastJsonWriter.java +++ b/domino-jackson/src/main/java/org/dominokit/jackson/stream/impl/FastJsonWriter.java @@ -301,12 +301,17 @@ public FastJsonWriter value(boolean value) { /** {@inheritDoc} */ @Override public FastJsonWriter value(double value) { - if (Double.isNaN(value) || Double.isInfinite(value)) { + final boolean isNaNorInfinity = Double.isNaN(value) || Double.isInfinite(value); + if (!lenient && isNaNorInfinity) { throw new IllegalArgumentException("Numeric values must be finite, but was " + value); } writeDeferredName(); beforeValue(false); - out.append(value); + if (isNaNorInfinity) { + string(Double.toString(value)); + } else { + out.append(value); + } return this; } diff --git a/domino-jackson/src/test/java/org/dominokit/jackson/client/deser/number/DoubleJsonDeserializerTest.java b/domino-jackson/src/test/java/org/dominokit/jackson/client/deser/number/DoubleJsonDeserializerTest.java index cbc54ab6..3f0ae7d7 100644 --- a/domino-jackson/src/test/java/org/dominokit/jackson/client/deser/number/DoubleJsonDeserializerTest.java +++ b/domino-jackson/src/test/java/org/dominokit/jackson/client/deser/number/DoubleJsonDeserializerTest.java @@ -34,5 +34,8 @@ public void testDeserializeValue() { assertDeserialization(-784.15454d, "\"-784.15454\""); assertDeserialization(Double.MIN_VALUE, "4.9E-324"); assertDeserialization(Double.MAX_VALUE, "1.7976931348623157e+308"); + // FIXME can not get this to run: "expected: , actual: " + //assertDeserialization(Double.NaN, "\"NaN\""); + assertDeserialization(Double.NEGATIVE_INFINITY, "\"-Infinity\""); } } diff --git a/domino-jackson/src/test/java/org/dominokit/jackson/client/ser/number/DoubleJsonSerializerTest.java b/domino-jackson/src/test/java/org/dominokit/jackson/client/ser/number/DoubleJsonSerializerTest.java index d559ebbd..45ea9b50 100644 --- a/domino-jackson/src/test/java/org/dominokit/jackson/client/ser/number/DoubleJsonSerializerTest.java +++ b/domino-jackson/src/test/java/org/dominokit/jackson/client/ser/number/DoubleJsonSerializerTest.java @@ -38,5 +38,7 @@ public void testSerializeValue() { ? "1.7976931348623157e+308" : "1.7976931348623157E308"), Double.MAX_VALUE); + assertSerialization("\"NaN\"", Double.NaN); + assertSerialization("\"-Infinity\"", Double.NEGATIVE_INFINITY); } } diff --git a/domino-jackson/src/test/java/org/dominokit/jackson/server/deser/number/DoubleJsonDeserializerTest.java b/domino-jackson/src/test/java/org/dominokit/jackson/server/deser/number/DoubleJsonDeserializerTest.java index 869d25a7..4da408b9 100644 --- a/domino-jackson/src/test/java/org/dominokit/jackson/server/deser/number/DoubleJsonDeserializerTest.java +++ b/domino-jackson/src/test/java/org/dominokit/jackson/server/deser/number/DoubleJsonDeserializerTest.java @@ -36,5 +36,7 @@ public void testDeserializeValue() { assertDeserialization(-784.15454d, "\"-784.15454\""); assertDeserialization(Double.MIN_VALUE, "4.9E-324"); assertDeserialization(Double.MAX_VALUE, "1.7976931348623157e+308"); + assertDeserialization(Double.NaN, "NaN"); + assertDeserialization(Double.NEGATIVE_INFINITY, "-Infinity"); } } diff --git a/domino-jackson/src/test/java/org/dominokit/jackson/server/ser/number/DoubleJsonSerializerTest.java b/domino-jackson/src/test/java/org/dominokit/jackson/server/ser/number/DoubleJsonSerializerTest.java index 2567a93c..ab733469 100644 --- a/domino-jackson/src/test/java/org/dominokit/jackson/server/ser/number/DoubleJsonSerializerTest.java +++ b/domino-jackson/src/test/java/org/dominokit/jackson/server/ser/number/DoubleJsonSerializerTest.java @@ -34,5 +34,7 @@ public void testSerializeValue() { assertSerialization("-784.15454", -784.15454d); assertSerialization("4.9E-324", Double.MIN_VALUE); assertSerialization("1.7976931348623157E308", Double.MAX_VALUE); + assertSerialization("\"NaN\"", Double.NaN); + assertSerialization("\"-Infinity\"", Double.NEGATIVE_INFINITY); } }