From 320185456acb85c41e992f11bd3400b68213641f Mon Sep 17 00:00:00 2001 From: kvmw Date: Thu, 27 Nov 2025 17:39:33 +0100 Subject: [PATCH 1/2] Bump org.springframework.boot from 3.5.8 to 4.0.0 Signed-off-by: kvmw --- build.gradle | 2 +- .../CredHubCredentialTemplateSummaryUnitTests.java | 4 +++- .../CredHubTemplateDetailCertificateUnitTests.java | 7 +++++-- .../CredHubTemplateDetailJsonUnitTests.java | 7 +++++-- .../CredHubTemplateDetailPasswordUnitTests.java | 7 +++++-- .../CredHubTemplateDetailRsaUnitTests.java | 7 +++++-- .../CredHubTemplateDetailSshUnitTests.java | 7 +++++-- .../CredHubTemplateDetailUserUnitTests.java | 7 +++++-- .../CredHubTemplateDetailValueUnitTests.java | 7 +++++-- spring-credhub-starter/build.gradle | 1 + .../autoconfig/CredHubOAuth2AutoConfiguration.java | 12 ++++++------ .../autoconfig/CredHubTemplateAutoConfiguration.java | 4 ++-- .../CredHubTemplateAutoConfigurationTests.java | 6 +++--- 13 files changed, 51 insertions(+), 27 deletions(-) diff --git a/build.gradle b/build.gradle index 2a585e16..842cb07a 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ plugins { description = "Spring CredHub" ext { - springBootVersion = "3.5.8" + springBootVersion = "4.0.0" javadocLinks = [ "https://docs.oracle.com/en/java/javase/17/docs/api/", "https://docs.spring.io/spring-framework/docs/current/javadoc-api/" diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubCredentialTemplateSummaryUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubCredentialTemplateSummaryUnitTests.java index 2156482d..4a2f28aa 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubCredentialTemplateSummaryUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubCredentialTemplateSummaryUnitTests.java @@ -24,6 +24,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.core.CredHubException; import org.springframework.credhub.support.CredentialSummary; @@ -93,7 +94,8 @@ private void assertResponseContainsExpectedCredentials(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return Stream.of( Arguments.of(ResponseEntity.ok().body(new CredentialSummaryData(new CredentialSummary(NAME)))), Arguments.of(ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(new CredentialSummaryData()))); diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailCertificateUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailCertificateUnitTests.java index 6eb315b4..f46a264d 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailCertificateUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailCertificateUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -106,7 +107,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.CERTIFICATE, CREDENTIAL); } @@ -115,7 +117,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.CERTIFICATE, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailJsonUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailJsonUnitTests.java index 2195d963..e6c5f43e 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailJsonUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailJsonUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -84,7 +85,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.JSON, CREDENTIAL); } @@ -93,7 +95,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.JSON, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailPasswordUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailPasswordUnitTests.java index c257a9ce..015842d6 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailPasswordUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailPasswordUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -102,7 +103,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.PASSWORD, CREDENTIAL); } @@ -111,7 +113,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.PASSWORD, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailRsaUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailRsaUnitTests.java index 297b0267..bfd5e302 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailRsaUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailRsaUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -103,7 +104,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.RSA, CREDENTIAL); } @@ -112,7 +114,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.RSA, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailSshUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailSshUnitTests.java index 7b613683..77b9b4be 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailSshUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailSshUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -103,7 +104,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.CERTIFICATE, CREDENTIAL); } @@ -112,7 +114,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.CERTIFICATE, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailUserUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailUserUnitTests.java index fdc84ee1..df2128ac 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailUserUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailUserUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -79,7 +80,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.USER, CREDENTIAL); } @@ -88,7 +90,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.USER, CREDENTIAL); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailValueUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailValueUnitTests.java index ad319b80..9bde8003 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailValueUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/credential/CredHubTemplateDetailValueUnitTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.CredentialDetailsData; @@ -79,7 +80,8 @@ public void getByNameWithVersions(ResponseEntity provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDetailArguments(CredentialType.VALUE, CREDENTIAL); } @@ -88,7 +90,8 @@ public Stream provideArguments(ExtensionContext context) { static class DataResponseArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameters, + ExtensionContext context) { return buildDataArguments(CredentialType.VALUE, CREDENTIAL); } diff --git a/spring-credhub-starter/build.gradle b/spring-credhub-starter/build.gradle index ecd1b7b3..5765994d 100644 --- a/spring-credhub-starter/build.gradle +++ b/spring-credhub-starter/build.gradle @@ -23,6 +23,7 @@ dependencies { reactiveImplementation("org.springframework.boot:spring-boot-starter-webflux") + securityImplementation("org.springframework.boot:spring-boot-security-oauth2-client") securityImplementation("org.springframework.security:spring-security-config") securityImplementation("org.springframework.security:spring-security-oauth2-client") diff --git a/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubOAuth2AutoConfiguration.java b/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubOAuth2AutoConfiguration.java index 4ad30000..c5f1e800 100644 --- a/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubOAuth2AutoConfiguration.java +++ b/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubOAuth2AutoConfiguration.java @@ -24,13 +24,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.security.oauth2.client.ConditionalOnOAuth2ClientRegistrationProperties; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper; -import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration; -import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientWebSecurityAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.security.oauth2.client.autoconfigure.ConditionalOnOAuth2ClientRegistrationProperties; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientAutoConfiguration; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientProperties; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientPropertiesMapper; +import org.springframework.boot.security.oauth2.client.autoconfigure.reactive.ReactiveOAuth2ClientAutoConfiguration; +import org.springframework.boot.security.oauth2.client.autoconfigure.reactive.ReactiveOAuth2ClientWebSecurityAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService; diff --git a/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfiguration.java b/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfiguration.java index 345b9cbd..c0ea5b05 100644 --- a/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfiguration.java +++ b/spring-credhub-starter/src/main/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfiguration.java @@ -19,8 +19,8 @@ import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration; -import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientAutoConfiguration; +import org.springframework.boot.security.oauth2.client.autoconfigure.reactive.ReactiveOAuth2ClientAutoConfiguration; import org.springframework.context.annotation.Import; import org.springframework.credhub.core.CredHubProperties; import org.springframework.credhub.core.CredHubTemplate; diff --git a/spring-credhub-starter/src/test/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfigurationTests.java b/spring-credhub-starter/src/test/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfigurationTests.java index 1e3acabd..fe083435 100644 --- a/spring-credhub-starter/src/test/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfigurationTests.java +++ b/spring-credhub-starter/src/test/java/org/springframework/credhub/autoconfig/CredHubTemplateAutoConfigurationTests.java @@ -23,10 +23,10 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties; -import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper; -import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration; import org.springframework.boot.logging.LogLevel; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientProperties; +import org.springframework.boot.security.oauth2.client.autoconfigure.OAuth2ClientPropertiesMapper; +import org.springframework.boot.security.oauth2.client.autoconfigure.reactive.ReactiveOAuth2ClientAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; From 71648d7c2dbde820e4ecccc64988d881ea0b667f Mon Sep 17 00:00:00 2001 From: kvmw Date: Thu, 27 Nov 2025 17:42:08 +0100 Subject: [PATCH 2/2] migrate from jackson 2 to 3 Signed-off-by: kvmw --- spring-credhub-core/build.gradle | 3 +- .../core/CredHubRestTemplateFactory.java | 7 +- .../credhub/core/CredHubWebClientFactory.java | 12 ++-- .../credhub/support/utils/JsonUtils.java | 66 ++++++++----------- ...CredHubInterpolationTemplateUnitTests.java | 4 +- .../support/JsonParsingUnitTestsBase.java | 2 +- .../credhub/support/JsonTestUtils.java | 15 ++--- .../credhub/demo/CredHubDemoController.java | 1 - .../InterpolationIntegrationTests.java | 4 +- ...ReactiveInterpolationIntegrationTests.java | 4 +- 10 files changed, 54 insertions(+), 64 deletions(-) diff --git a/spring-credhub-core/build.gradle b/spring-credhub-core/build.gradle index f93c50ae..b75848ea 100644 --- a/spring-credhub-core/build.gradle +++ b/spring-credhub-core/build.gradle @@ -22,7 +22,7 @@ dependencies { api("org.springframework:spring-beans") api("org.springframework:spring-context") api("org.springframework:spring-web") - api("com.fasterxml.jackson.core:jackson-databind") + api("tools.jackson.core:jackson-databind") api("org.springframework.security:spring-security-oauth2-client") { exclude module: "spring-security-web" } @@ -37,6 +37,7 @@ dependencies { } testImplementation("org.springframework:spring-test") + testImplementation("org.springframework.boot:spring-boot-jackson2") testImplementation("io.projectreactor:reactor-test") testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.junit.jupiter:junit-jupiter-params") diff --git a/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubRestTemplateFactory.java b/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubRestTemplateFactory.java index f329e1b3..18add8d1 100644 --- a/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubRestTemplateFactory.java +++ b/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubRestTemplateFactory.java @@ -32,7 +32,7 @@ import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder; @@ -132,9 +132,8 @@ private static void configureRestTemplate(RestTemplate restTemplate, String base restTemplate.setRequestFactory(clientHttpRequestFactory); restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(baseUri)); restTemplate.getInterceptors().add(new CredHubRequestInterceptor()); - restTemplate - .setMessageConverters(Arrays.asList(new ByteArrayHttpMessageConverter(), new StringHttpMessageConverter(), - new MappingJackson2HttpMessageConverter(JsonUtils.buildObjectMapper()))); + restTemplate.setMessageConverters(Arrays.asList(new ByteArrayHttpMessageConverter(), + new StringHttpMessageConverter(), new JacksonJsonHttpMessageConverter(JsonUtils.buildJsonMapper()))); } /** diff --git a/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubWebClientFactory.java b/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubWebClientFactory.java index 9112bab6..017948d0 100644 --- a/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubWebClientFactory.java +++ b/spring-credhub-core/src/main/java/org/springframework/credhub/core/CredHubWebClientFactory.java @@ -16,15 +16,15 @@ package org.springframework.credhub.core; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.credhub.support.utils.JsonUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.client.reactive.ClientHttpConnector; import org.springframework.http.codec.CodecConfigurer; -import org.springframework.http.codec.json.Jackson2JsonDecoder; -import org.springframework.http.codec.json.Jackson2JsonEncoder; +import org.springframework.http.codec.json.JacksonJsonDecoder; +import org.springframework.http.codec.json.JacksonJsonEncoder; import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProvider; import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProviderBuilder; @@ -126,11 +126,11 @@ private static DefaultReactiveOAuth2AuthorizedClientManager buildClientManager( private static WebClient.Builder buildWebClient(String baseUri, ClientHttpConnector clientHttpConnector) { ExchangeStrategies strategies = ExchangeStrategies.builder().codecs((configurer) -> { - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); CodecConfigurer.DefaultCodecs dc = configurer.defaultCodecs(); - dc.jackson2JsonDecoder(new Jackson2JsonDecoder(mapper)); - dc.jackson2JsonEncoder(new Jackson2JsonEncoder(mapper)); + dc.jacksonJsonDecoder(new JacksonJsonDecoder(mapper)); + dc.jacksonJsonEncoder(new JacksonJsonEncoder(mapper)); }).build(); return WebClient.builder() diff --git a/spring-credhub-core/src/main/java/org/springframework/credhub/support/utils/JsonUtils.java b/spring-credhub-core/src/main/java/org/springframework/credhub/support/utils/JsonUtils.java index 20e94029..6314e8c7 100644 --- a/spring-credhub-core/src/main/java/org/springframework/credhub/support/utils/JsonUtils.java +++ b/spring-credhub-core/src/main/java/org/springframework/credhub/support/utils/JsonUtils.java @@ -16,16 +16,16 @@ package org.springframework.credhub.support.utils; -import java.util.ArrayList; -import java.util.List; +import java.util.Arrays; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.jsontype.NamedType; -import com.fasterxml.jackson.databind.util.StdDateFormat; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.MapperFeature; +import tools.jackson.databind.PropertyNamingStrategies; +import tools.jackson.databind.cfg.EnumFeature; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.jsontype.NamedType; +import tools.jackson.databind.util.StdDateFormat; import org.springframework.credhub.support.CredentialType; @@ -40,40 +40,32 @@ private JsonUtils() { } /** - * Create and configure the {@link ObjectMapper} used for serializing and - * deserializing JSON requests and responses. - * @return a configured {@link ObjectMapper} + * Create and configure the {@link JsonMapper} used for serializing and deserializing + * JSON requests and responses. + * @return a configured {@link JsonMapper} */ - public static ObjectMapper buildObjectMapper() { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setDateFormat(new StdDateFormat()); - objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy()); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true); - objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); - - configureCredentialDetailTypeMapping(objectMapper); - - return objectMapper; + public static JsonMapper buildJsonMapper() { + return JsonMapper.builder() + .defaultDateFormat(new StdDateFormat()) + .propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) + .changeDefaultPropertyInclusion((incl) -> incl.withValueInclusion(JsonInclude.Include.NON_EMPTY)) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(EnumFeature.READ_ENUMS_USING_TO_STRING, true) + .configure(EnumFeature.WRITE_ENUMS_USING_TO_STRING, true) + .configure(MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS, true) + .registerSubtypes(credentialDetailTypeMappings()) + .build(); } /** - * Configure type mapping for the {@literal value} field in the - * {@literal CredentialDetails} object. - * @param objectMapper the {@link ObjectMapper} to configure + * Return type mappings for the {@literal value} field in the + * {@literal CredentialDetails} objects. + * @return array of {@link NamedType} for {@literal CredentialDetails}. */ - private static void configureCredentialDetailTypeMapping(ObjectMapper objectMapper) { - List subtypes = new ArrayList<>(); - for (CredentialType type : CredentialType.values()) { - subtypes.add(new NamedType(type.getModelClass(), type.getValueType())); - } - - registerSubtypes(objectMapper, subtypes); - } - - private static void registerSubtypes(ObjectMapper objectMapper, List subtypes) { - objectMapper.registerSubtypes(subtypes.toArray(new NamedType[] {})); + private static NamedType[] credentialDetailTypeMappings() { + return Arrays.stream(CredentialType.values()) + .map((type) -> new NamedType(type.getModelClass(), type.getValueType())) + .toArray(NamedType[]::new); } } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/core/interpolation/CredHubInterpolationTemplateUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/core/interpolation/CredHubInterpolationTemplateUnitTests.java index 926fe84b..f8c44d66 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/core/interpolation/CredHubInterpolationTemplateUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/core/interpolation/CredHubInterpolationTemplateUnitTests.java @@ -18,7 +18,6 @@ import java.io.IOException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -26,6 +25,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; +import tools.jackson.databind.json.JsonMapper; import org.springframework.credhub.core.CredHubTemplate; import org.springframework.credhub.support.ServiceInstanceCredentialName; @@ -92,7 +92,7 @@ private ServicesData buildVcapServices(String credHubReferenceName) throws IOExc } """.formatted(credHubReferenceName); - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); return mapper.readValue(vcapServices, ServicesData.class); } diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonParsingUnitTestsBase.java b/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonParsingUnitTestsBase.java index 99f40e76..27487936 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonParsingUnitTestsBase.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonParsingUnitTestsBase.java @@ -18,8 +18,8 @@ import java.util.Date; -import com.fasterxml.jackson.databind.util.StdDateFormat; import org.junit.jupiter.api.BeforeEach; +import tools.jackson.databind.util.StdDateFormat; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonTestUtils.java b/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonTestUtils.java index a0bfb207..4c07a747 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonTestUtils.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/support/JsonTestUtils.java @@ -16,15 +16,14 @@ package org.springframework.credhub.support; -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; +import tools.jackson.core.JacksonException; +import tools.jackson.core.exc.JacksonIOException; +import tools.jackson.databind.json.JsonMapper; import org.springframework.credhub.support.utils.JsonUtils; @@ -37,10 +36,10 @@ private JsonTestUtils() { public static String toJson(Object object) { try { - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); return mapper.writeValueAsString(object); } - catch (JsonProcessingException ex) { + catch (JacksonException ex) { fail("Error creating JSON string from object: " + ex); throw new IllegalStateException(ex); } @@ -48,10 +47,10 @@ public static String toJson(Object object) { public static T fromJson(String json, Class type) { try { - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); return mapper.readValue(json, type); } - catch (IOException ex) { + catch (JacksonIOException ex) { fail("Error parsing JSON string to object: " + ex); throw new IllegalStateException(ex); } diff --git a/spring-credhub-demo/src/main/java/org/springframework/credhub/demo/CredHubDemoController.java b/spring-credhub-demo/src/main/java/org/springframework/credhub/demo/CredHubDemoController.java index c97534e7..24023743 100644 --- a/spring-credhub-demo/src/main/java/org/springframework/credhub/demo/CredHubDemoController.java +++ b/spring-credhub-demo/src/main/java/org/springframework/credhub/demo/CredHubDemoController.java @@ -23,7 +23,6 @@ import java.util.Map; import java.util.UUID; -import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.credhub.core.CredHubOperations; import org.springframework.credhub.core.credential.CredHubCredentialOperations; import org.springframework.credhub.core.interpolation.CredHubInterpolationOperations; diff --git a/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/InterpolationIntegrationTests.java b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/InterpolationIntegrationTests.java index 4d174649..93e9e77f 100644 --- a/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/InterpolationIntegrationTests.java +++ b/spring-credhub-integration-tests/src/test/java/org/springframework/credhub/integration/InterpolationIntegrationTests.java @@ -20,10 +20,10 @@ import java.util.HashMap; import java.util.Map; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import tools.jackson.databind.json.JsonMapper; import org.springframework.credhub.core.credential.CredHubCredentialOperations; import org.springframework.credhub.core.interpolation.CredHubInterpolationOperations; @@ -105,7 +105,7 @@ private ServicesData buildVcapServices(String credHubReferenceName) throws IOExc } """.formatted(credHubReferenceName); - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); return mapper.readValue(vcapServices, ServicesData.class); } diff --git a/spring-credhub-reactive-integration-tests/src/test/java/org/springframework/credhub/integration/ReactiveInterpolationIntegrationTests.java b/spring-credhub-reactive-integration-tests/src/test/java/org/springframework/credhub/integration/ReactiveInterpolationIntegrationTests.java index 1d882924..c673b5cc 100644 --- a/spring-credhub-reactive-integration-tests/src/test/java/org/springframework/credhub/integration/ReactiveInterpolationIntegrationTests.java +++ b/spring-credhub-reactive-integration-tests/src/test/java/org/springframework/credhub/integration/ReactiveInterpolationIntegrationTests.java @@ -20,11 +20,11 @@ import java.util.HashMap; import java.util.Map; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import reactor.test.StepVerifier; +import tools.jackson.databind.json.JsonMapper; import org.springframework.credhub.core.credential.ReactiveCredHubCredentialOperations; import org.springframework.credhub.core.interpolation.ReactiveCredHubInterpolationOperations; @@ -109,7 +109,7 @@ private ServicesData buildVcapServices(String credHubReferenceName) throws IOExc } """.formatted(credHubReferenceName); - ObjectMapper mapper = JsonUtils.buildObjectMapper(); + JsonMapper mapper = JsonUtils.buildJsonMapper(); return mapper.readValue(vcapServices, ServicesData.class); }