From 7417b5fb78e1dbe879e296c9650b934826e8a567 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 22 Jan 2025 19:33:27 +0100 Subject: [PATCH 1/4] test for issue #4917 --- .../deser/jdk/JDKNumberDeserTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java index dc4dcee6b0..6e6c7a5dbc 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java @@ -81,6 +81,24 @@ static class NestedBigDecimalHolder2784 { public BigDecimalHolder2784 holder; } + static class DeserializationIssue4917 { + public DecimalHolder4917 decimalHolder; + public Double number; + } + + static class DecimalHolder4917 { + public BigDecimal value; + + public DecimalHolder4917(BigDecimal value) { + this.value = value; + } + + @JsonCreator + static DecimalHolder4917 of(BigDecimal value) { + return new DecimalHolder4917(value); + } + } + /* /********************************************************************** /* Helper classes, serializers/deserializers/resolvers @@ -415,4 +433,13 @@ public void bigDecimal4694FromBytes() throws Exception assertEquals(BIG_DEC, MAPPER.readValue(b, 0, b.length, BigDecimal.class)); } + @Test + public void bigDecimal4917() throws Exception + { + DeserializationIssue4917 issue = MAPPER.readValue( + a2q("{'decimalHolder':100.00,'number':50}"), + DeserializationIssue4917.class); + assertEquals(new BigDecimal("100.00"), issue.decimalHolder.value); + } + } From 0cdccfe0d474b77c14b78be7bb1fb73c0c659cc1 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 22 Jan 2025 19:42:05 +0100 Subject: [PATCH 2/4] Update JDKNumberDeserTest.java --- .../fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java index 6e6c7a5dbc..c9cde41aee 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java @@ -440,6 +440,7 @@ public void bigDecimal4917() throws Exception a2q("{'decimalHolder':100.00,'number':50}"), DeserializationIssue4917.class); assertEquals(new BigDecimal("100.00"), issue.decimalHolder.value); + assertEquals(50.0, issue.number); } } From b35f37e831073dbb22ed92fe85d02f664ab1aa99 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 23 Jan 2025 00:41:53 +0100 Subject: [PATCH 3/4] V2 test passes because ints are ok - issue affects other num types --- .../databind/deser/jdk/JDKNumberDeserTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java index c9cde41aee..1761a19e0f 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java @@ -83,7 +83,12 @@ static class NestedBigDecimalHolder2784 { static class DeserializationIssue4917 { public DecimalHolder4917 decimalHolder; - public Double number; + public double number; + } + + static class DeserializationIssue4917V2 { + public DecimalHolder4917 decimalHolder; + public int number; } static class DecimalHolder4917 { @@ -443,4 +448,14 @@ public void bigDecimal4917() throws Exception assertEquals(50.0, issue.number); } + @Test + public void bigDecimal4917V2() throws Exception + { + DeserializationIssue4917V2 issue = MAPPER.readValue( + a2q("{'decimalHolder':100.00,'number':50}"), + DeserializationIssue4917V2.class); + assertEquals(new BigDecimal("100.00"), issue.decimalHolder.value); + assertEquals(50, issue.number); + } + } From 2bd727f3fef5720de2f37a5463eb38f3e5c9eaf0 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 23 Jan 2025 12:40:09 +0100 Subject: [PATCH 4/4] V3 test that passes already --- .../databind/deser/jdk/JDKNumberDeserTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java index 1761a19e0f..82399a36b3 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java @@ -91,6 +91,11 @@ static class DeserializationIssue4917V2 { public int number; } + static class DeserializationIssue4917V3 { + public BigDecimal decimal; + public double number; + } + static class DecimalHolder4917 { public BigDecimal value; @@ -458,4 +463,14 @@ public void bigDecimal4917V2() throws Exception assertEquals(50, issue.number); } + @Test + public void bigDecimal4917V3() throws Exception + { + DeserializationIssue4917V3 issue = MAPPER.readValue( + a2q("{'decimal':100.00,'number':50}"), + DeserializationIssue4917V3.class); + assertEquals(new BigDecimal("100.00"), issue.decimal); + assertEquals(50, issue.number); + } + }