Skip to content

Commit d353038

Browse files
committed
Update Jackson support to require Jackson 3
Closes gh-45535
1 parent 8bfb170 commit d353038

File tree

176 files changed

+1418
-1676
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

176 files changed

+1418
-1676
lines changed

build-plugin/spring-boot-gradle-plugin/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ dependencies {
5959

6060
testImplementation(project(":test-support:spring-boot-gradle-test-support"))
6161
testImplementation(project(":test-support:spring-boot-test-support"))
62-
testImplementation("com.fasterxml.jackson.core:jackson-databind")
63-
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
6462
testImplementation("com.tngtech.archunit:archunit-junit5:1.4.0")
6563
testImplementation("net.java.dev.jna:jna-platform")
6664
testImplementation("org.apache.commons:commons-compress")
@@ -70,6 +68,7 @@ dependencies {
7068
testImplementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
7169
testImplementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
7270
testImplementation("org.tomlj:tomlj:1.0.0")
71+
testImplementation("tools.jackson.core:jackson-databind")
7372
}
7473

7574
repositories {

build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@
2222
import java.util.List;
2323

2424
import com.fasterxml.jackson.annotation.JsonView;
25-
import com.fasterxml.jackson.core.Versioned;
26-
import com.fasterxml.jackson.databind.Module;
27-
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
2825
import com.sun.jna.Platform;
2926
import io.spring.gradle.dependencymanagement.DependencyManagementPlugin;
3027
import org.antlr.v4.runtime.Lexer;
@@ -39,6 +36,8 @@
3936
import org.jetbrains.kotlin.project.model.LanguageSettings;
4037
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion;
4138
import org.tomlj.Toml;
39+
import tools.jackson.core.JsonParser;
40+
import tools.jackson.databind.JacksonModule;
4241

4342
import org.springframework.asm.ClassVisitor;
4443
import org.springframework.boot.buildpack.platform.build.BuildRequest;
@@ -103,9 +102,8 @@ private List<File> pluginClasspath() {
103102
classpath.add(new File(pathOfJarContaining(HttpClientConnectionManager.class)));
104103
classpath.add(new File(pathOfJarContaining(HttpRequest.class)));
105104
classpath.add(new File(pathOfJarContaining(HttpVersionPolicy.class)));
106-
classpath.add(new File(pathOfJarContaining(Module.class)));
107-
classpath.add(new File(pathOfJarContaining(Versioned.class)));
108-
classpath.add(new File(pathOfJarContaining(ParameterNamesModule.class)));
105+
classpath.add(new File(pathOfJarContaining(JacksonModule.class)));
106+
classpath.add(new File(pathOfJarContaining(JsonParser.class)));
109107
classpath.add(new File(pathOfJarContaining("com.github.openjson.JSONObject")));
110108
classpath.add(new File(pathOfJarContaining(JsonView.class)));
111109
classpath.add(new File(pathOfJarContaining(Platform.class)));

buildSrc/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ dependencies {
4343
checkstyle("com.puppycrawl.tools:checkstyle:${checkstyle.toolVersion}")
4444
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}")
4545

46-
implementation(platform("com.fasterxml.jackson:jackson-bom:${jacksonVersion}"))
46+
implementation(platform("com.fasterxml.jackson:jackson-bom:${jackson2Version}"))
47+
implementation(platform("tools.jackson:jackson-bom:${jacksonVersion}"))
4748
implementation(platform("org.springframework:spring-framework-bom:${springFrameworkVersion}"))
48-
implementation("com.fasterxml.jackson.core:jackson-databind")
4949
implementation("com.github.node-gradle:gradle-node-plugin:3.5.1")
5050
implementation("com.gradle:develocity-gradle-plugin:3.17.2")
5151
implementation("com.tngtech.archunit:archunit:1.4.1")
@@ -65,6 +65,7 @@ dependencies {
6565
implementation("org.springframework:spring-web")
6666
implementation("org.yaml:snakeyaml:${snakeYamlVersion}")
6767
implementation("io.spring.gradle.nullability:nullability-plugin:${nullabilityPluginVersion}")
68+
implementation("tools.jackson.core:jackson-databind")
6869

6970
testImplementation(platform("org.junit:junit-bom:${junitJupiterVersion}"))
7071
testImplementation("org.assertj:assertj-core:${assertjVersion}")

buildSrc/config/checkstyle/checkstyle.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,11 @@
66
<module name="io.spring.javaformat.checkstyle.SpringChecks">
77
<property name="excludes" value="com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocPackageCheck" />
88
</module>
9-
</module>
9+
<module name="com.puppycrawl.tools.checkstyle.TreeWalker">
10+
<module name="com.puppycrawl.tools.checkstyle.checks.imports.IllegalImportCheck">
11+
<property name="regexp" value="true" />
12+
<property name="illegalPkgs"
13+
value="^com\.fasterxml\.jackson(?!\.annotation).*" />
14+
</module>
15+
</module>
16+
</module>

buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,13 @@
1717
package org.springframework.boot.build;
1818

1919
import java.io.File;
20-
import java.io.IOException;
21-
import java.io.UncheckedIOException;
2220
import java.util.ArrayList;
2321
import java.util.Collections;
2422
import java.util.HashMap;
2523
import java.util.LinkedHashMap;
2624
import java.util.List;
2725
import java.util.Map;
2826

29-
import com.fasterxml.jackson.databind.ObjectMapper;
3027
import com.github.gradle.node.NodeExtension;
3128
import com.github.gradle.node.npm.task.NpmInstallTask;
3229
import io.spring.gradle.antora.GenerateAntoraYmlPlugin;
@@ -44,6 +41,7 @@
4441
import org.gradle.api.tasks.Copy;
4542
import org.gradle.api.tasks.TaskContainer;
4643
import org.gradle.api.tasks.TaskProvider;
44+
import tools.jackson.databind.ObjectMapper;
4745

4846
import org.springframework.boot.build.antora.AntoraAsciidocAttributes;
4947
import org.springframework.boot.build.antora.GenerateAntoraPlaybook;
@@ -198,18 +196,13 @@ private void logWarningIfNodeModulesInUserHome(Project project) {
198196
}
199197

200198
private String getUiBundleUrl(Project project) {
201-
try {
202-
File packageJson = project.getRootProject().file("antora/package.json");
203-
ObjectMapper objectMapper = new ObjectMapper();
204-
Map<?, ?> json = objectMapper.readerFor(Map.class).readValue(packageJson);
205-
Map<?, ?> config = (json != null) ? (Map<?, ?>) json.get("config") : null;
206-
String url = (config != null) ? (String) config.get("ui-bundle-url") : null;
207-
Assert.state(StringUtils.hasText(url.toString()), "package.json has not ui-bundle-url config");
208-
return url;
209-
}
210-
catch (IOException ex) {
211-
throw new UncheckedIOException(ex);
212-
}
199+
File packageJson = project.getRootProject().file("antora/package.json");
200+
ObjectMapper objectMapper = new ObjectMapper();
201+
Map<?, ?> json = objectMapper.readerFor(Map.class).readValue(packageJson);
202+
Map<?, ?> config = (json != null) ? (Map<?, ?>) json.get("config") : null;
203+
String url = (config != null) ? (String) config.get("ui-bundle-url") : null;
204+
Assert.state(StringUtils.hasText(url.toString()), "package.json has not ui-bundle-url config");
205+
return url;
213206
}
214207

215208
private void configureNodeExtension(Project project, NodeExtension nodeExtension) {

buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,9 @@ private void addVersionAttributes(Map<String, String> attributes, Map<String, St
162162
attributes.put("version-native-build-tools", (String) this.projectProperties.get("nativeBuildToolsVersion"));
163163
attributes.put("version-graal", (String) this.projectProperties.get("graalVersion"));
164164
addDependencyVersion(attributes, "jackson-annotations", "com.fasterxml.jackson.core:jackson-annotations");
165-
addDependencyVersion(attributes, "jackson-core", "com.fasterxml.jackson.core:jackson-core");
166-
addDependencyVersion(attributes, "jackson-databind", "com.fasterxml.jackson.core:jackson-databind");
167-
addDependencyVersion(attributes, "jackson-dataformat-xml",
168-
"com.fasterxml.jackson.dataformat:jackson-dataformat-xml");
165+
addDependencyVersion(attributes, "jackson-core", "tools.jackson.core:jackson-core");
166+
addDependencyVersion(attributes, "jackson-databind", "tools.jackson.core:jackson-databind");
167+
addDependencyVersion(attributes, "jackson-dataformat-xml", "tools.jackson.dataformat:jackson-dataformat-xml");
169168
addSpringDataDependencyVersion(attributes, internal, "spring-data-commons");
170169
addSpringDataDependencyVersion(attributes, internal, "spring-data-couchbase");
171170
addSpringDataDependencyVersion(attributes, internal, "spring-data-cassandra");

buildSrc/src/main/java/org/springframework/boot/build/bom/ResolvedBom.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@
2525
import java.util.List;
2626

2727
import com.fasterxml.jackson.annotation.JsonInclude.Include;
28-
import com.fasterxml.jackson.annotation.JsonSetter;
29-
import com.fasterxml.jackson.annotation.Nulls;
30-
import com.fasterxml.jackson.databind.ObjectMapper;
31-
import com.fasterxml.jackson.databind.SerializationFeature;
28+
import tools.jackson.databind.ObjectMapper;
29+
import tools.jackson.databind.json.JsonMapper;
3230

3331
/**
3432
* A resolved bom.
@@ -42,10 +40,9 @@ public record ResolvedBom(Id id, List<ResolvedLibrary> libraries) {
4240
private static final ObjectMapper objectMapper;
4341

4442
static {
45-
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
46-
.setDefaultPropertyInclusion(Include.NON_EMPTY);
47-
mapper.configOverride(List.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
48-
objectMapper = mapper;
43+
objectMapper = JsonMapper.builder()
44+
.changeDefaultPropertyInclusion((value) -> value.withContentInclusion(Include.NON_EMPTY))
45+
.build();
4946
}
5047

5148
public static ResolvedBom readFrom(File file) {
@@ -58,12 +55,7 @@ public static ResolvedBom readFrom(File file) {
5855
}
5956

6057
public void writeTo(Writer writer) {
61-
try {
62-
objectMapper.writeValue(writer, this);
63-
}
64-
catch (IOException ex) {
65-
throw new UncheckedIOException(ex);
66-
}
58+
objectMapper.writeValue(writer, this);
6759
}
6860

6961
public record ResolvedLibrary(String name, String version, String versionProperty, List<Id> managedDependencies,

buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHub.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@
1919
import java.util.Base64;
2020
import java.util.Collections;
2121

22-
import com.fasterxml.jackson.databind.ObjectMapper;
23-
2422
import org.springframework.http.MediaType;
23+
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
2524
import org.springframework.web.client.RestTemplate;
2625
import org.springframework.web.util.DefaultUriBuilderFactory;
2726
import org.springframework.web.util.UriTemplateHandler;
@@ -61,8 +60,7 @@ public GitHubRepository getRepository(String organization, String name) {
6160

6261
@SuppressWarnings({ "deprecation", "removal" })
6362
private RestTemplate createRestTemplate() {
64-
return new RestTemplate(Collections.singletonList(
65-
new org.springframework.http.converter.json.MappingJackson2HttpMessageConverter(new ObjectMapper())));
63+
return new RestTemplate(Collections.singletonList(new JacksonJsonHttpMessageConverter()));
6664
}
6765

6866
}

buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckAdditionalSpringConfigurationMetadata.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828
import java.util.List;
2929
import java.util.Map;
3030

31-
import com.fasterxml.jackson.core.JsonParseException;
32-
import com.fasterxml.jackson.databind.JsonMappingException;
33-
import com.fasterxml.jackson.databind.ObjectMapper;
3431
import org.gradle.api.file.FileTree;
3532
import org.gradle.api.file.RegularFileProperty;
3633
import org.gradle.api.tasks.InputFiles;
@@ -40,6 +37,7 @@
4037
import org.gradle.api.tasks.SourceTask;
4138
import org.gradle.api.tasks.TaskAction;
4239
import org.gradle.api.tasks.VerificationException;
40+
import tools.jackson.databind.ObjectMapper;
4341

4442
/**
4543
* {@link SourceTask} that checks additional Spring configuration metadata files.
@@ -65,7 +63,7 @@ public FileTree getSource() {
6563
}
6664

6765
@TaskAction
68-
void check() throws JsonParseException, IOException {
66+
void check() throws IOException {
6967
Report report = createReport();
7068
File reportFile = getReportLocation().get().getAsFile();
7169
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
@@ -76,7 +74,7 @@ void check() throws JsonParseException, IOException {
7674
}
7775

7876
@SuppressWarnings("unchecked")
79-
private Report createReport() throws IOException, JsonParseException, JsonMappingException {
77+
private Report createReport() {
8078
ObjectMapper objectMapper = new ObjectMapper();
8179
Report report = new Report();
8280
for (File file : getSource().getFiles()) {

buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckSpringConfigurationMetadata.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
import java.util.List;
2727
import java.util.Map;
2828

29-
import com.fasterxml.jackson.core.JsonParseException;
30-
import com.fasterxml.jackson.databind.JsonMappingException;
31-
import com.fasterxml.jackson.databind.ObjectMapper;
3229
import org.gradle.api.DefaultTask;
3330
import org.gradle.api.file.RegularFileProperty;
3431
import org.gradle.api.provider.ListProperty;
@@ -40,6 +37,7 @@
4037
import org.gradle.api.tasks.SourceTask;
4138
import org.gradle.api.tasks.TaskAction;
4239
import org.gradle.api.tasks.VerificationException;
40+
import tools.jackson.databind.ObjectMapper;
4341

4442
/**
4543
* {@link SourceTask} that checks {@code spring-configuration-metadata.json} files.
@@ -65,7 +63,7 @@ public CheckSpringConfigurationMetadata() {
6563
public abstract ListProperty<String> getExclusions();
6664

6765
@TaskAction
68-
void check() throws JsonParseException, IOException {
66+
void check() throws IOException {
6967
Report report = createReport();
7068
File reportFile = getReportLocation().get().getAsFile();
7169
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
@@ -76,7 +74,7 @@ void check() throws JsonParseException, IOException {
7674
}
7775

7876
@SuppressWarnings("unchecked")
79-
private Report createReport() throws IOException, JsonParseException, JsonMappingException {
77+
private Report createReport() {
8078
ObjectMapper objectMapper = new ObjectMapper();
8179
File file = getMetadataLocation().get().getAsFile();
8280
Report report = new Report(this.projectRoot.relativize(file.toPath()));

0 commit comments

Comments
 (0)