Skip to content

Commit 33ab0cd

Browse files
committed
Upgrade to Jackson 3.
Closes gh-919
1 parent 8777020 commit 33ab0cd

36 files changed

+1074
-412
lines changed

pom.xml

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

77
<groupId>org.springframework.vault</groupId>
@@ -33,7 +33,10 @@
3333
</google-auth-library-oauth2-http.version>
3434
<httpclient5.version>5.4.4</httpclient5.version>
3535
<httpcore5.version>5.3.4</httpcore5.version>
36-
<jackson-databind.version>2.19.0</jackson-databind.version>
36+
<jackson-annotations.version>3.0-rc5</jackson-annotations.version>
37+
<jackson-core.version>3.0.0-rc5</jackson-core.version>
38+
<jackson-databind.version>3.0.0-rc5</jackson-databind.version>
39+
<jackson2-databind.version>2.19.0</jackson2-databind.version>
3740
<jetty-reactive-httpclient.version>4.0.9</jetty-reactive-httpclient.version>
3841
<json-path.version>2.9.0</json-path.version>
3942
<junit.version>5.12.2</junit.version>
@@ -44,7 +47,7 @@
4447
<netty.version>4.1.121.Final</netty.version>
4548
<nullaway.version>0.12.3</nullaway.version>
4649
<okhttp3.version>3.14.9</okhttp3.version>
47-
<spring.version>7.0.0-M2</spring.version>
50+
<spring.version>7.0.0-M5</spring.version>
4851
<spring-data-bom.version>2025.1.0-M1</spring-data-bom.version>
4952
<spring-security-bom.version>6.2.0</spring-security-bom.version>
5053
<reactor.version>2024.0.2</reactor.version>
@@ -121,10 +124,28 @@
121124

122125
<dependency>
123126
<groupId>com.fasterxml.jackson.core</groupId>
127+
<artifactId>jackson-annotations</artifactId>
128+
<version>${jackson-annotations.version}</version>
129+
</dependency>
130+
131+
<dependency>
132+
<groupId>tools.jackson.core</groupId>
133+
<artifactId>jackson-core</artifactId>
134+
<version>${jackson-core.version}</version>
135+
</dependency>
136+
137+
<dependency>
138+
<groupId>tools.jackson.core</groupId>
124139
<artifactId>jackson-databind</artifactId>
125140
<version>${jackson-databind.version}</version>
126141
</dependency>
127142

143+
<dependency>
144+
<groupId>com.fasterxml.jackson.core</groupId>
145+
<artifactId>jackson-databind</artifactId>
146+
<version>${jackson2-databind.version}</version>
147+
</dependency>
148+
128149
<dependency>
129150
<groupId>io.projectreactor</groupId>
130151
<artifactId>reactor-bom</artifactId>
@@ -418,7 +439,10 @@
418439
<compilerArgs>
419440
<arg>-XDcompilePolicy=simple</arg>
420441
<arg>--should-stop=ifError=FLOW</arg>
421-
<arg>-Xplugin:ErrorProne -XepDisableAllChecks -Xep:NullAway:ERROR -XepOpt:NullAway:OnlyNullMarked=true -XepOpt:NullAway:CustomContractAnnotations=org.springframework.lang.Contract</arg>
442+
<arg>-Xplugin:ErrorProne -XepDisableAllChecks -Xep:NullAway:ERROR
443+
-XepOpt:NullAway:OnlyNullMarked=true
444+
-XepOpt:NullAway:CustomContractAnnotations=org.springframework.lang.Contract
445+
</arg>
422446
</compilerArgs>
423447
</configuration>
424448
</execution>
@@ -809,8 +833,9 @@
809833
</goals>
810834
<configuration>
811835
<rules>
812-
<requireReleaseDeps />
813-
<NoSnapshotDependenciesInDependencyManagementRule implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule">
836+
<requireReleaseDeps/>
837+
<NoSnapshotDependenciesInDependencyManagementRule
838+
implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule">
814839
<onlyWhenRelease>true</onlyWhenRelease>
815840
</NoSnapshotDependenciesInDependencyManagementRule>
816841
</rules>

spring-vault-core/pom.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
34
<modelVersion>4.0.0</modelVersion>
45

56
<parent>
@@ -77,7 +78,26 @@
7778

7879
<dependency>
7980
<groupId>com.fasterxml.jackson.core</groupId>
81+
<artifactId>jackson-annotations</artifactId>
82+
<optional>true</optional>
83+
</dependency>
84+
85+
<dependency>
86+
<groupId>tools.jackson.core</groupId>
87+
<artifactId>jackson-core</artifactId>
88+
<optional>true</optional>
89+
</dependency>
90+
91+
<dependency>
92+
<groupId>tools.jackson.core</groupId>
8093
<artifactId>jackson-databind</artifactId>
94+
<optional>true</optional>
95+
</dependency>
96+
97+
<dependency>
98+
<groupId>com.fasterxml.jackson.core</groupId>
99+
<artifactId>jackson-databind</artifactId>
100+
<optional>true</optional>
81101
</dependency>
82102

83103
<!-- Reactive support -->

spring-vault-core/src/main/java/org/springframework/vault/authentication/AwsIamAuthentication.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import java.util.List;
2424
import java.util.Map;
2525

26-
import com.fasterxml.jackson.core.JsonProcessingException;
27-
import com.fasterxml.jackson.databind.ObjectMapper;
2826
import org.apache.commons.logging.Log;
2927
import org.apache.commons.logging.LogFactory;
3028
import software.amazon.awssdk.auth.credentials.AwsCredentials;
@@ -33,13 +31,15 @@
3331
import software.amazon.awssdk.http.SdkHttpFullRequest;
3432
import software.amazon.awssdk.http.SdkHttpMethod;
3533
import software.amazon.awssdk.regions.Region;
34+
import tools.jackson.databind.ObjectMapper;
3635

3736
import org.springframework.http.HttpHeaders;
3837
import org.springframework.http.MediaType;
3938
import org.springframework.util.Assert;
4039
import org.springframework.util.ObjectUtils;
4140
import org.springframework.util.StringUtils;
4241
import org.springframework.vault.VaultException;
42+
import org.springframework.vault.support.JacksonCompat;
4343
import org.springframework.vault.support.VaultResponse;
4444
import org.springframework.vault.support.VaultToken;
4545
import org.springframework.web.client.RestClientException;
@@ -75,8 +75,6 @@ public class AwsIamAuthentication implements ClientAuthentication, Authenticatio
7575

7676
private static final Log logger = LogFactory.getLog(AwsIamAuthentication.class);
7777

78-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
79-
8078
private static final String REQUEST_BODY = "Action=GetCallerIdentity&Version=2011-06-15";
8179

8280
private static final String REQUEST_BODY_BASE64_ENCODED = Base64.getEncoder()
@@ -229,12 +227,9 @@ private static String getSignedHeaders(AwsIamAuthenticationOptions options, AwsC
229227
.build();
230228
SdkHttpFullRequest signedRequest = signer.sign(request, signerParams);
231229

232-
try {
233-
return OBJECT_MAPPER.writeValueAsString(new LinkedHashMap<>(signedRequest.headers()));
234-
}
235-
catch (JsonProcessingException e) {
236-
throw new IllegalStateException("Cannot serialize headers to JSON", e);
237-
}
230+
return JacksonCompat.instance()
231+
.getObjectMapperAccessor()
232+
.writeValueAsString(new LinkedHashMap<>(signedRequest.headers()));
238233
}
239234

240235
private static Map<String, List<String>> createIamRequestHeaders(AwsIamAuthenticationOptions options) {

spring-vault-core/src/main/java/org/springframework/vault/client/ReactiveVaultClients.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@
2525
import org.springframework.core.codec.StringDecoder;
2626
import org.springframework.http.client.reactive.ClientHttpConnector;
2727
import org.springframework.http.codec.CodecConfigurer.CustomCodecs;
28-
import org.springframework.http.codec.json.Jackson2JsonDecoder;
29-
import org.springframework.http.codec.json.Jackson2JsonEncoder;
3028
import org.springframework.util.Assert;
29+
import org.springframework.vault.support.JacksonCompat;
3130
import org.springframework.web.reactive.function.client.ClientRequest;
3231
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
3332
import org.springframework.web.reactive.function.client.ExchangeStrategies;
@@ -112,12 +111,11 @@ static WebClient.Builder createWebClientBuilder(ReactiveVaultEndpointProvider en
112111
CustomCodecs cc = configurer.customCodecs();
113112

114113
cc.register(new ByteArrayDecoder());
115-
cc.register(new Jackson2JsonDecoder());
116114
cc.register(StringDecoder.allMimeTypes());
117115

118116
cc.register(new ByteArrayEncoder());
119-
cc.register(new Jackson2JsonEncoder());
120117

118+
JacksonCompat.instance().registerCodecs(cc::register);
121119
}).build();
122120

123121
WebClient.Builder builder = WebClient.builder().exchangeStrategies(strategies).clientConnector(connector);

spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
2828
import org.springframework.http.converter.HttpMessageConverter;
2929
import org.springframework.http.converter.StringHttpMessageConverter;
30+
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
3031
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
3132
import org.springframework.util.Assert;
33+
import org.springframework.vault.support.JacksonCompat;
3234
import org.springframework.web.client.RestTemplate;
3335
import org.springframework.web.util.DefaultUriBuilderFactory;
3436
import org.springframework.web.util.UriBuilder;
@@ -104,14 +106,14 @@ public static RestTemplate createRestTemplate(VaultEndpointProvider endpointProv
104106
* <p>
105107
* Requires Jackson 2 for Object-to-JSON mapping.
106108
* @return the {@link RestTemplate}.
107-
* @see MappingJackson2HttpMessageConverter
109+
* @see JacksonJsonHttpMessageConverter
108110
*/
109111
public static RestTemplate createRestTemplate() {
110112

111113
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(3);
112114
messageConverters.add(new ByteArrayHttpMessageConverter());
113115
messageConverters.add(new StringHttpMessageConverter());
114-
messageConverters.add(new MappingJackson2HttpMessageConverter());
116+
messageConverters.add(JacksonCompat.instance().createHttpMessageConverter());
115117

116118
RestTemplate restTemplate = new RestTemplate(messageConverters);
117119

spring-vault-core/src/main/java/org/springframework/vault/client/VaultResponses.java

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,15 @@
2323
import java.util.Collection;
2424
import java.util.Map;
2525

26-
import com.fasterxml.jackson.databind.ObjectMapper;
27-
2826
import org.springframework.core.ParameterizedTypeReference;
2927
import org.springframework.http.HttpHeaders;
3028
import org.springframework.http.HttpInputMessage;
3129
import org.springframework.http.HttpStatusCode;
32-
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
30+
import org.springframework.http.converter.AbstractHttpMessageConverter;
3331
import org.springframework.util.Assert;
3432
import org.springframework.util.StringUtils;
3533
import org.springframework.vault.VaultException;
34+
import org.springframework.vault.support.JacksonCompat;
3635
import org.springframework.vault.support.VaultResponseSupport;
3736
import org.springframework.web.client.HttpStatusCodeException;
3837

@@ -43,10 +42,8 @@
4342
*/
4443
public abstract class VaultResponses {
4544

46-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
47-
48-
private static final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(
49-
OBJECT_MAPPER);
45+
private static final AbstractHttpMessageConverter<Object> converter = JacksonCompat.instance()
46+
.createHttpMessageConverter();
5047

5148
/**
5249
* Build a {@link VaultException} given {@link HttpStatusCodeException}.
@@ -146,20 +143,16 @@ public static String getError(String json) {
146143

147144
if (json.contains("\"errors\":")) {
148145

149-
try {
150-
Map<String, Object> map = OBJECT_MAPPER.readValue(json.getBytes(), Map.class);
151-
if (map.containsKey("errors")) {
146+
Map<String, Object> map = JacksonCompat.instance()
147+
.getObjectMapperAccessor()
148+
.deserialize(json.getBytes(), Map.class);
149+
if (map.containsKey("errors")) {
152150

153-
Collection<String> errors = (Collection<String>) map.get("errors");
154-
if (errors.size() == 1) {
155-
return errors.iterator().next();
156-
}
157-
return errors.toString();
151+
Collection<String> errors = (Collection<String>) map.get("errors");
152+
if (errors.size() == 1) {
153+
return errors.iterator().next();
158154
}
159-
160-
}
161-
catch (IOException o_O) {
162-
// ignore
155+
return errors.toString();
163156
}
164157
}
165158
return json;

spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue1Template.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717

1818
import java.util.Map;
1919

20-
import com.fasterxml.jackson.databind.JsonNode;
2120
import reactor.core.publisher.Flux;
2221
import reactor.core.publisher.Mono;
22+
import tools.jackson.databind.JsonNode;
2323

2424
import org.springframework.util.Assert;
2525
import org.springframework.vault.core.VaultKeyValueOperationsSupport.KeyValueBackend;
@@ -103,7 +103,7 @@ public KeyValueBackend getApiVersion() {
103103
}
104104

105105
@Override
106-
JsonNode getJsonNode(VaultResponseSupport<JsonNode> response) {
106+
Object getJsonNode(VaultResponseSupport<Object> response) {
107107
return response.getRequiredData();
108108
}
109109

spring-vault-core/src/main/java/org/springframework/vault/core/ReactiveVaultKeyValue2Accessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
import java.util.List;
1919

20-
import com.fasterxml.jackson.databind.JsonNode;
2120
import reactor.core.publisher.Flux;
2221

2322
import org.springframework.vault.core.VaultKeyValueOperationsSupport.KeyValueBackend;
23+
import org.springframework.vault.support.JacksonCompat;
2424
import org.springframework.vault.support.VaultResponseSupport;
2525

2626
/**
@@ -68,8 +68,8 @@ public KeyValueBackend getApiVersion() {
6868
}
6969

7070
@Override
71-
JsonNode getJsonNode(VaultResponseSupport<JsonNode> response) {
72-
return response.getRequiredData().at("/data");
71+
Object getJsonNode(VaultResponseSupport<Object> response) {
72+
return JacksonCompat.instance().getAt(response.getRequiredData(), "/data");
7373
}
7474

7575
@Override

0 commit comments

Comments
 (0)