This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/main by this push:
new 4e44a28112 Upgrade Jackson from 2.x to 3.0.0 (#3701)
4e44a28112 is described below
commit 4e44a2811206d66fcd4dc6f3db1eff1629c9a404
Author: Kurt Ostfeld <[email protected]>
AuthorDate: Tue Oct 7 03:39:54 2025 -0500
Upgrade Jackson from 2.x to 3.0.0 (#3701)
Upgraded Jackson from 2.x to 3.0.0
---
log4j-config-jackson/pom.xml | 2 +-
.../jackson/AbstractJacksonConfiguration.java | 26 +++++-----------
log4j-config-properties/pom.xml | 2 +-
.../config/properties/JavaPropsConfiguration.java | 6 ++--
log4j-config-yaml/pom.xml | 2 +-
.../log4j/config/yaml/YamlConfiguration.java | 9 ++----
log4j-core-test/pom.xml | 16 +++++++---
log4j-docker/pom.xml | 9 ++----
.../apache/logging/log4j/docker/DockerLookup.java | 35 ++++++++++++----------
log4j-layout-template-json-test/pom.xml | 2 ++
.../log4j/layout/template/json/JacksonFixture.java | 2 +-
.../template/json/JsonTemplateLayoutTest.java | 6 ++--
log4j-parent/pom.xml | 7 +++--
log4j-perf-test/pom.xml | 4 +--
.../.3.x.x/update_tools_jackson_jackson_bom.xml | 8 +++++
15 files changed, 70 insertions(+), 66 deletions(-)
diff --git a/log4j-config-jackson/pom.xml b/log4j-config-jackson/pom.xml
index ab2125febe..aee9dd1387 100644
--- a/log4j-config-jackson/pom.xml
+++ b/log4j-config-jackson/pom.xml
@@ -36,7 +36,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
diff --git
a/log4j-config-jackson/src/main/java/org/apache/logging/log4j/config/jackson/AbstractJacksonConfiguration.java
b/log4j-config-jackson/src/main/java/org/apache/logging/log4j/config/jackson/AbstractJacksonConfiguration.java
index b6fc2c3cd9..c8ce6666f9 100644
---
a/log4j-config-jackson/src/main/java/org/apache/logging/log4j/config/jackson/AbstractJacksonConfiguration.java
+++
b/log4j-config-jackson/src/main/java/org/apache/logging/log4j/config/jackson/AbstractJacksonConfiguration.java
@@ -16,18 +16,12 @@
*/
package org.apache.logging.log4j.config.jackson;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.TreeMap;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.AbstractConfiguration;
@@ -38,6 +32,10 @@ import org.apache.logging.log4j.core.config.Reconfigurable;
import org.apache.logging.log4j.core.config.status.StatusConfiguration;
import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.model.PluginType;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.node.JsonNodeFactory;
+import tools.jackson.databind.node.ObjectNode;
/**
* Base class for all Jackson-based configurations.
@@ -116,10 +114,8 @@ public abstract class AbstractJacksonConfiguration extends
AbstractConfiguration
@Override
public void setup() {
- final Iterator<Entry<String, JsonNode>> iter = root.fields();
final List<Node> children = rootNode.getChildren();
- while (iter.hasNext()) {
- final Map.Entry<String, JsonNode> entry = iter.next();
+ for (Map.Entry<String, JsonNode> entry : root.properties()) {
final JsonNode n = entry.getValue();
if (n.isObject()) {
LOGGER.debug("Processing node for object {}", entry.getKey());
@@ -154,10 +150,8 @@ public abstract class AbstractJacksonConfiguration extends
AbstractConfiguration
final PluginType<?> type = corePlugins.get(getType(jsonNode, name));
final Node node = new Node(parent, name, type);
processAttributes(node, jsonNode);
- final Iterator<Map.Entry<String, JsonNode>> iter = jsonNode.fields();
final List<Node> children = node.getChildren();
- while (iter.hasNext()) {
- final Map.Entry<String, JsonNode> entry = iter.next();
+ for (Map.Entry<String, JsonNode> entry : jsonNode.properties()) {
final JsonNode n = entry.getValue();
if (n.isArray() || n.isObject()) {
if (type == null) {
@@ -195,9 +189,7 @@ public abstract class AbstractJacksonConfiguration extends
AbstractConfiguration
}
private String getType(final JsonNode node, final String name) {
- final Iterator<Map.Entry<String, JsonNode>> iter = node.fields();
- while (iter.hasNext()) {
- final Map.Entry<String, JsonNode> entry = iter.next();
+ for (Map.Entry<String, JsonNode> entry : node.properties()) {
if ("type".equalsIgnoreCase(entry.getKey())) {
final JsonNode n = entry.getValue();
if (n.isValueNode()) {
@@ -210,9 +202,7 @@ public abstract class AbstractJacksonConfiguration extends
AbstractConfiguration
private void processAttributes(final Node parent, final JsonNode node) {
final Map<String, String> attrs = parent.getAttributes();
- final Iterator<Map.Entry<String, JsonNode>> iter = node.fields();
- while (iter.hasNext()) {
- final Map.Entry<String, JsonNode> entry = iter.next();
+ for (Map.Entry<String, JsonNode> entry : node.properties()) {
if (!"type".equalsIgnoreCase(entry.getKey())) {
final JsonNode n = entry.getValue();
if (n.isValueNode()) {
diff --git a/log4j-config-properties/pom.xml b/log4j-config-properties/pom.xml
index 14a6a5691c..f8602487ee 100644
--- a/log4j-config-properties/pom.xml
+++ b/log4j-config-properties/pom.xml
@@ -38,7 +38,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-properties</artifactId>
</dependency>
diff --git
a/log4j-config-properties/src/main/java/org/apache/logging/log4j/config/properties/JavaPropsConfiguration.java
b/log4j-config-properties/src/main/java/org/apache/logging/log4j/config/properties/JavaPropsConfiguration.java
index 92d16ff690..c89d5562c6 100644
---
a/log4j-config-properties/src/main/java/org/apache/logging/log4j/config/properties/JavaPropsConfiguration.java
+++
b/log4j-config-properties/src/main/java/org/apache/logging/log4j/config/properties/JavaPropsConfiguration.java
@@ -16,13 +16,12 @@
*/
package org.apache.logging.log4j.config.properties;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import org.apache.logging.log4j.config.jackson.AbstractJacksonConfiguration;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationSource;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.dataformat.javaprop.JavaPropsMapper;
/**
* Creates a Node hierarchy from a properties file.
@@ -41,7 +40,6 @@ public class JavaPropsConfiguration extends
AbstractJacksonConfiguration {
protected ObjectMapper getObjectMapper() {
return JavaPropsMapper.builder()
- .configure(JsonParser.Feature.ALLOW_COMMENTS, true)
.nodeFactory(SortingNodeFactory.INSTANCE)
.build();
}
diff --git a/log4j-config-yaml/pom.xml b/log4j-config-yaml/pom.xml
index 8b02dd275d..b6f7f56e97 100644
--- a/log4j-config-yaml/pom.xml
+++ b/log4j-config-yaml/pom.xml
@@ -38,7 +38,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
diff --git
a/log4j-config-yaml/src/main/java/org/apache/logging/log4j/config/yaml/YamlConfiguration.java
b/log4j-config-yaml/src/main/java/org/apache/logging/log4j/config/yaml/YamlConfiguration.java
index 0deff0b9dd..bbc79fd414 100644
---
a/log4j-config-yaml/src/main/java/org/apache/logging/log4j/config/yaml/YamlConfiguration.java
+++
b/log4j-config-yaml/src/main/java/org/apache/logging/log4j/config/yaml/YamlConfiguration.java
@@ -16,13 +16,12 @@
*/
package org.apache.logging.log4j.config.yaml;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import org.apache.logging.log4j.config.jackson.AbstractJacksonConfiguration;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationSource;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.dataformat.yaml.YAMLMapper;
/**
* Creates a Node hierarchy from a YAML file.
@@ -41,8 +40,6 @@ public class YamlConfiguration extends
AbstractJacksonConfiguration {
@Override
protected ObjectMapper getObjectMapper() {
- return YAMLMapper.builder()
- .configure(JsonParser.Feature.ALLOW_COMMENTS, true)
- .build();
+ return YAMLMapper.builder().build();
}
}
diff --git a/log4j-core-test/pom.xml b/log4j-core-test/pom.xml
index 5b9744f862..545a2d98a7 100644
--- a/log4j-core-test/pom.xml
+++ b/log4j-core-test/pom.xml
@@ -156,28 +156,28 @@
<!-- Required for JSON support -->
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<optional>true</optional>
</dependency>
<!-- Required for JSON support -->
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<optional>true</optional>
</dependency>
<!-- Required for XML layout and receiver support -->
<dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<optional>true</optional>
</dependency>
<!-- Required for YAML support (including JSON requirements) -->
<dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<optional>true</optional>
</dependency>
@@ -315,6 +315,14 @@
<scope>test</scope>
</dependency>
+ <!-- Needed by wiremock for testing -->
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${jackson2.test.version}</version>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-core</artifactId>
diff --git a/log4j-docker/pom.xml b/log4j-docker/pom.xml
index 2b6c19f09e..6234d39419 100644
--- a/log4j-docker/pom.xml
+++ b/log4j-docker/pom.xml
@@ -36,11 +36,6 @@
<!--
~ OSGi and JPMS options
-->
- <bnd-extra-module-options>
- <!-- Non detected module names -->
- com.fasterxml.jackson.core;substitute="jackson-core",
- com.fasterxml.jackson.databind;substitute="jackson-databind"
- </bnd-extra-module-options>
<Fragment-Host>org.apache.logging.log4j.core</Fragment-Host>
</properties>
@@ -59,11 +54,11 @@
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
diff --git
a/log4j-docker/src/main/java/org/apache/logging/log4j/docker/DockerLookup.java
b/log4j-docker/src/main/java/org/apache/logging/log4j/docker/DockerLookup.java
index d9f0f42dac..d9f92c83cc 100644
---
a/log4j-docker/src/main/java/org/apache/logging/log4j/docker/DockerLookup.java
+++
b/log4j-docker/src/main/java/org/apache/logging/log4j/docker/DockerLookup.java
@@ -16,9 +16,8 @@
*/
package org.apache.logging.log4j.docker;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.List;
@@ -33,6 +32,8 @@ import org.apache.logging.log4j.docker.model.Network;
import org.apache.logging.log4j.kit.env.PropertyEnvironment;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
+import tools.jackson.core.type.TypeReference;
+import tools.jackson.databind.json.JsonMapper;
/**
* Looks up keys for a Docker container.
@@ -62,24 +63,26 @@ public class DockerLookup extends AbstractLookup {
final URL url = baseUri.resolve("/containers/json").toURL();
if (url.getProtocol().equals(HTTP)) {
final String macAddr = NetUtils.getMacAddressString();
- final ObjectMapper objectMapper = new ObjectMapper();
- final List<Container> containerList =
objectMapper.readValue(url, new TypeReference<>() {});
+ final JsonMapper jsonMapper = new JsonMapper();
+ try (InputStream urlStream = url.openStream()) {
+ final List<Container> containerList =
jsonMapper.readValue(urlStream, new TypeReference<>() {});
- for (final Container container : containerList) {
- if (macAddr != null && container.getNetworkSettings() !=
null) {
- final Map<String, Network> networks =
- container.getNetworkSettings().getNetworks();
- if (networks != null) {
- for (final Network network : networks.values()) {
- if (macAddr.equals(network.getMacAddress())) {
- current = container;
- break;
+ for (final Container container : containerList) {
+ if (macAddr != null && container.getNetworkSettings()
!= null) {
+ final Map<String, Network> networks =
+
container.getNetworkSettings().getNetworks();
+ if (networks != null) {
+ for (final Network network :
networks.values()) {
+ if
(macAddr.equals(network.getMacAddress())) {
+ current = container;
+ break;
+ }
}
}
}
- }
- if (current != null) {
- break;
+ if (current != null) {
+ break;
+ }
}
}
}
diff --git a/log4j-layout-template-json-test/pom.xml
b/log4j-layout-template-json-test/pom.xml
index 0eaaedf87f..e7dd53bb68 100644
--- a/log4j-layout-template-json-test/pom.xml
+++ b/log4j-layout-template-json-test/pom.xml
@@ -97,9 +97,11 @@
<scope>test</scope>
</dependency>
+ <!-- Needed by elasticsearch-java for testing -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
+ <version>${jackson2.test.version}</version>
<scope>test</scope>
</dependency>
diff --git
a/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JacksonFixture.java
b/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JacksonFixture.java
index aa518c5702..82b919127c 100644
---
a/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JacksonFixture.java
+++
b/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JacksonFixture.java
@@ -16,7 +16,7 @@
*/
package org.apache.logging.log4j.layout.template.json;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
public final class JacksonFixture {
diff --git
a/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
b/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
index 662de8be5f..ebaf948ebb 100644
---
a/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
+++
b/log4j-layout-template-json-test/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
@@ -24,9 +24,6 @@ import static
org.apache.logging.log4j.layout.template.json.TestHelpers.writeJso
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.MappingIterator;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.IOException;
@@ -83,6 +80,9 @@ import org.apache.logging.log4j.plugins.Namespace;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.plugins.PluginFactory;
import org.junit.jupiter.api.Test;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.MappingIterator;
+import tools.jackson.databind.ObjectMapper;
@SuppressWarnings("DoubleBraceInitialization")
class JsonTemplateLayoutTest {
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index bdcb31f28c..a9c423c9d9 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -111,7 +111,10 @@
<hamcrest.version>3.0</hamcrest.version>
<HdrHistogram.version>2.2.2</HdrHistogram.version>
<hsqldb.version>2.7.4</hsqldb.version>
- <jackson-bom.version>2.20.0</jackson-bom.version>
+ <!-- wiremock and elasticsearch-java libraries used for testing require
Jackson 2 -->
+ <!-- The log4j project is using Jackson 3. -->
+ <jackson2.test.version>2.20.0</jackson2.test.version>
+ <jackson-bom.version>3.0.0</jackson-bom.version>
<javax-jms.version>2.0.1</javax-jms.version>
<java-allocation-instrumenter.version>3.3.4</java-allocation-instrumenter.version>
<jctools.version>4.0.5</jctools.version>
@@ -200,7 +203,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson</groupId>
+ <groupId>tools.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson-bom.version}</version>
<type>pom</type>
diff --git a/log4j-perf-test/pom.xml b/log4j-perf-test/pom.xml
index 0fed2e3aec..2803d4ca53 100644
--- a/log4j-perf-test/pom.xml
+++ b/log4j-perf-test/pom.xml
@@ -145,13 +145,13 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<optional>true</optional>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<optional>true</optional>
</dependency>
diff --git a/src/changelog/.3.x.x/update_tools_jackson_jackson_bom.xml
b/src/changelog/.3.x.x/update_tools_jackson_jackson_bom.xml
new file mode 100644
index 0000000000..3825f635d5
--- /dev/null
+++ b/src/changelog/.3.x.x/update_tools_jackson_jackson_bom.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="https://logging.apache.org/xml/ns"
+ xsi:schemaLocation="https://logging.apache.org/xml/ns
https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+ type="updated">
+ <issue id="3701"
link="https://github.com/apache/logging-log4j2/pull/3701"/>
+ <description format="asciidoc">Update from Jackson 2.x to Jackson
3.0.0</description>
+</entry>