From 2414ff9a106c22f721c080e4139fd8be6cff971b Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Sat, 27 Apr 2024 10:14:15 +0900 Subject: [PATCH 1/4] Un-deprecate `JsonNode.asText(defaultValue)` --- src/main/java/com/fasterxml/jackson/databind/JsonNode.java | 6 +----- .../com/fasterxml/jackson/databind/node/MissingNode.java | 1 - .../java/com/fasterxml/jackson/databind/node/NullNode.java | 1 - .../java/com/fasterxml/jackson/databind/node/POJONode.java | 1 - .../java/com/fasterxml/jackson/databind/node/TextNode.java | 1 - .../jackson/databind/deser/CustomDeserializersTest.java | 2 +- .../fasterxml/jackson/databind/node/NumberNodesTest.java | 2 +- 7 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java index e2f813bcd9..67e42ca149 100644 --- a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java @@ -636,16 +636,12 @@ public byte[] binaryValue() throws IOException { * {@link com.fasterxml.jackson.databind.node.NullNode}, ensuring a default value is returned instead of null or missing indicators. * *

- * NOTE: deprecated since 2.17 because {@link #asText()} very rarely returns - * {@code null} for any node types -- in fact, neither {@link MissingNode} - * nor {@code NullNode} return {@code null} from {@link #asText()}. + * NOTE: This was deprecated in 2.17.0, but as discussed through [databind#4471], was un-deprecated in 2.17.1. * * @param defaultValue The default value to return if this node's text value is absent. * @return The text value of this node, or defaultValue if the text value is absent. * @since 2.4 - * @deprecated Since 2.17, to be removed from 3.0 */ - @Deprecated // @since 2.17 public String asText(String defaultValue) { String str = asText(); return (str == null) ? defaultValue : str; diff --git a/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java b/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java index 87843c274b..fcaf5823dd 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/MissingNode.java @@ -60,7 +60,6 @@ public JsonNodeType getNodeType() @Override public String asText() { return ""; } - @Deprecated // since 2.17 @Override public String asText(String defaultValue) { return defaultValue; } // // Note: not a numeric node, hence default 'asXxx()' are fine: diff --git a/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java b/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java index 822cbb2040..be67b7e6f6 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/NullNode.java @@ -41,7 +41,6 @@ public JsonNodeType getNodeType() { @Override public JsonToken asToken() { return JsonToken.VALUE_NULL; } @Override - @Deprecated public String asText(String defaultValue) { return defaultValue; } @Override public String asText() { return "null"; } diff --git a/src/main/java/com/fasterxml/jackson/databind/node/POJONode.java b/src/main/java/com/fasterxml/jackson/databind/node/POJONode.java index b24511bb5e..ad411edc08 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/POJONode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/POJONode.java @@ -58,7 +58,6 @@ public byte[] binaryValue() throws IOException public String asText() { return (_value == null) ? "null" : _value.toString(); } @Override - @Deprecated public String asText(String defaultValue) { return (_value == null) ? defaultValue : _value.toString(); } diff --git a/src/main/java/com/fasterxml/jackson/databind/node/TextNode.java b/src/main/java/com/fasterxml/jackson/databind/node/TextNode.java index d22ba33541..83d256fe70 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/TextNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/TextNode.java @@ -102,7 +102,6 @@ public String asText() { } @Override - @Deprecated // since 2.17 public String asText(String defaultValue) { return (_value == null) ? defaultValue : _value; } diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java index c2bfe713ea..1f2982a8a6 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java @@ -355,7 +355,7 @@ public NamedPoint deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonNode tree = ctxt.readTree(p); - String name = tree.path("name").asText(); + String name = tree.path("name").asText(null); Point point = ctxt.readTreeAsValue(tree.get("point"), Point.class); return new NamedPoint(name, point); } diff --git a/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java b/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java index 1f143f1deb..a6ad436211 100644 --- a/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java @@ -82,7 +82,7 @@ public void testInt() assertEquals(BigInteger.ONE, n.bigIntegerValue()); assertEquals("1", n.asText()); // 2.4 - assertEquals("1", n.asText()); + assertEquals("1", n.asText("foo")); assertNodeNumbers(n, 1, 1.0); From be915f3a94f3ce697506425129de674ecd953a2a Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Sat, 27 Apr 2024 13:28:50 +0900 Subject: [PATCH 2/4] Update release notes --- release-notes/VERSION-2.x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index e328104dd1..ea7b59c9fc 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -32,6 +32,9 @@ Project: jackson-databind with `JsonFormat.Feature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE` (reported by Joo-Hyuk K) (fix by Joo-Hyuk K) +#4471: Reconsider deprecation of `JsonNode.asText(defaultValue)` + (reported by @aerisnju) + (fix by Joo-Hyuk K) 2.17.0 (12-Mar-2024) From d67b60a38b5909d61c752814ada46ffb52abe82d Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sat, 27 Apr 2024 13:25:06 -0700 Subject: [PATCH 3/4] tiny test improvements --- release-notes/VERSION-2.x | 2 +- .../com/fasterxml/jackson/databind/node/MissingNodeTest.java | 1 + .../java/com/fasterxml/jackson/databind/node/NullNodeTest.java | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index ea7b59c9fc..db7f1985da 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -33,7 +33,7 @@ Project: jackson-databind (reported by Joo-Hyuk K) (fix by Joo-Hyuk K) #4471: Reconsider deprecation of `JsonNode.asText(defaultValue)` - (reported by @aerisnju) + (requested by @aerisnju) (fix by Joo-Hyuk K) 2.17.0 (12-Mar-2024) diff --git a/src/test/java/com/fasterxml/jackson/databind/node/MissingNodeTest.java b/src/test/java/com/fasterxml/jackson/databind/node/MissingNodeTest.java index ab933ee23e..a9e06d42c2 100644 --- a/src/test/java/com/fasterxml/jackson/databind/node/MissingNodeTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/node/MissingNodeTest.java @@ -14,6 +14,7 @@ public void testMissing() assertTrue(n.isMissingNode()); assertEquals(JsonToken.NOT_AVAILABLE, n.asToken()); assertEquals("", n.asText()); + assertEquals("default", n.asText("default")); assertStandardEquals(n); // 10-Dec-2018, tatu: With 2.10, should serialize same as via ObjectMapper/ObjectWriter // 10-Dec-2019, tatu: Surprise! No, this is not how it worked in 2.9, nor does it make diff --git a/src/test/java/com/fasterxml/jackson/databind/node/NullNodeTest.java b/src/test/java/com/fasterxml/jackson/databind/node/NullNodeTest.java index 00b0686b02..1a52170b7b 100644 --- a/src/test/java/com/fasterxml/jackson/databind/node/NullNodeTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/node/NullNodeTest.java @@ -48,6 +48,9 @@ public void testBasicsWithNullNode() throws Exception assertEquals(0L, n.longValue()); assertEquals(BigDecimal.ZERO, n.decimalValue()); assertEquals(BigInteger.ZERO, n.bigIntegerValue()); + // may be odd but... + assertEquals("null", n.asText()); + assertEquals("fallback", n.asText("fallback")); assertEquals(0, n.size()); assertTrue(n.isEmpty()); From b5404eeab88e2e59f4573dbc4f1316989bf5a2e6 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sat, 27 Apr 2024 13:26:30 -0700 Subject: [PATCH 4/4] Minor fix to release notes --- release-notes/VERSION-2.x | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index db7f1985da..9c3c723e8c 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -25,6 +25,9 @@ Project: jackson-databind (fix by Joo-Hyuk K) #4450: Empty QName deserialized as `null` (reported by @winfriedgerlach) +#4471: Reconsider deprecation of `JsonNode.asText(defaultValue)` + (requested by @aerisnju) + (fix by Joo-Hyuk K) #4481: Unable to override `DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL` with `JsonFormat.Feature.READ_UNKNOWN_ENUM_VALUES_AS_NULL` (reported by @luozhenyu) @@ -32,9 +35,6 @@ Project: jackson-databind with `JsonFormat.Feature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE` (reported by Joo-Hyuk K) (fix by Joo-Hyuk K) -#4471: Reconsider deprecation of `JsonNode.asText(defaultValue)` - (requested by @aerisnju) - (fix by Joo-Hyuk K) 2.17.0 (12-Mar-2024)