Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/lintingconfigs/revapi/track2/revapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,12 @@
"new" : "parameter void com.azure.spring.integration.core.handler.DefaultMessageHandler::setSendCallback(===java.util.function.BiConsumer<java.lang.Void, java.lang.Throwable>===)",
"justification" : "Replace deprecated parameterType"
},
{
"code" : "java.field.typeChanged",
"old" : "field com.azure.spring.cloud.feature.management.filters.TargetingFilter.OBJECT_MAPPER",
"new" : "field com.azure.spring.cloud.feature.management.filters.TargetingFilter.OBJECT_MAPPER",
"justification" : "Jackson 2 to Jackson 3 migration to align with Spring Boot 4: the field type changed from com.fasterxml.jackson.databind.ObjectMapper to tools.jackson.databind.ObjectMapper. This is an intentional breaking change for these beta Spring libraries (see issue 49538)."
},
{
"code": "java.method.numberOfParametersChanged",
"old": {
Expand Down
3 changes: 2 additions & 1 deletion eng/versioning/external_dependencies.txt
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,6 @@ storage_com.microsoft.azure:azure-storage;8.6.6
# sdk\spring\pom.xml modules
springboot4_com.diffplug.spotless:spotless-maven-plugin;2.30.0
springboot4_com.fasterxml.jackson.core:jackson-annotations;2.21
springboot4_com.fasterxml.jackson.core:jackson-databind;2.21.4
springboot4_com.fasterxml.jackson.datatype:jackson-datatype-jdk8;2.21.4
springboot4_com.fasterxml.jackson.module:jackson-module-parameter-names;2.21.4
springboot4_com.github.spotbugs:spotbugs-maven-plugin;4.8.2.0
Expand Down Expand Up @@ -346,6 +345,7 @@ springboot4_org.springframework.boot:spring-boot-data-redis;4.1.0
springboot4_org.springframework.boot:spring-boot-docker-compose;4.1.0
springboot4_org.springframework.boot:spring-boot-health;4.1.0
springboot4_org.springframework.boot:spring-boot-http-converter;4.1.0
springboot4_org.springframework.boot:spring-boot-jackson;4.1.0
springboot4_org.springframework.boot:spring-boot-jackson2;4.1.0
springboot4_org.springframework.boot:spring-boot-jdbc;4.1.0
springboot4_org.springframework.boot:spring-boot-jms;4.1.0
Expand Down Expand Up @@ -387,6 +387,7 @@ springboot4_org.springframework:spring-web;7.0.8
springboot4_org.springframework:spring-webmvc;7.0.8
springboot4_org.testcontainers:testcontainers-junit-jupiter;2.0.5
springboot4_org.testcontainers:testcontainers-azure;2.0.5
springboot4_tools.jackson.core:jackson-databind;3.1.4
springboot4_jakarta.annotation:jakarta.annotation-api;3.0.0
springboot4_ch.qos.logback:logback-classic;1.5.34
springboot4_org.awaitility:awaitility;4.3.0
Expand Down
74 changes: 74 additions & 0 deletions sdk/spring/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,80 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Messaging Azure

This section includes changes in `spring-messaging-azure` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Messaging Azure Event Hubs

This section includes changes in `spring-messaging-azure-eventhubs` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Messaging Azure Service Bus

This section includes changes in `spring-messaging-azure-servicebus` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Messaging Azure Storage Queue

This section includes changes in `spring-messaging-azure-storage-queue` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Cloud Azure App Configuration Config

This section includes changes in `spring-cloud-azure-appconfiguration-config` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Cloud Azure App Configuration Config Web

This section includes changes in `spring-cloud-azure-appconfiguration-config-web` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Cloud Azure Feature Management

This section includes changes in `spring-cloud-azure-feature-management` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Cloud Azure Actuator Autoconfigure

This section includes changes in `spring-cloud-azure-actuator-autoconfigure` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

### Spring Cloud Azure Docker Compose

This section includes changes in `spring-cloud-azure-docker-compose` module.

#### Other Changes

- Upgrade to Jackson 3 to align with Spring Boot 4 ([#49538](https://github.com/Azure/azure-sdk-for-java/issues/49538)).

## 6.4.0 (2026-06-01)
- This release is compatible with Spring Boot 3.5.0-3.5.14. (Note: 3.5.x (x>14) should be supported, but they aren't tested with this release.)
- This release is compatible with Spring Cloud 2025.0.0-2025.0.2. (Note: 2025.0.x (x>2) should be supported, but they aren't tested with this release.)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.21.4</version> <!-- {x-version-update;springboot4_com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
<version>3.1.4</version> <!-- {x-version-update;springboot4_tools.jackson.core:jackson-databind;external_dependency} -->
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
Expand Down Expand Up @@ -198,7 +198,7 @@
<rules>
<bannedDependencies>
<includes>
<include>com.fasterxml.jackson.core:jackson-databind:[2.21.4]</include> <!-- {x-include-update;springboot4_com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
<include>tools.jackson.core:jackson-databind:[3.1.4]</include> <!-- {x-include-update;springboot4_tools.jackson.core:jackson-databind;external_dependency} -->
<include>org.springframework.boot:spring-boot-actuator:[4.1.0]</include> <!-- {x-include-update;springboot4_org.springframework.boot:spring-boot-actuator;external_dependency} -->
<include>org.springframework.boot:spring-boot-actuator-autoconfigure:[4.1.0]</include> <!-- {x-include-update;springboot4_org.springframework.boot:spring-boot-actuator-autoconfigure;external_dependency} -->
</includes>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
import com.azure.spring.cloud.appconfiguration.config.implementation.properties.AppConfigurationStoreMonitoring.AccessToken;
import com.azure.spring.cloud.appconfiguration.config.implementation.properties.AppConfigurationStoreMonitoring.PushNotification;
import com.azure.spring.cloud.appconfiguration.config.implementation.properties.ConfigStore;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import jakarta.servlet.http.HttpServletRequest;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;

/**
* Common class for authenticating refresh requests.
Expand All @@ -37,7 +38,7 @@ public class AppConfigurationEndpoint {

private final JsonNode validationResponse;

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final ObjectMapper OBJECT_MAPPER = JsonMapper.builder().build();

/**
* Base Authentication for refresh endpoints.
Expand All @@ -63,7 +64,7 @@ public AppConfigurationEndpoint(HttpServletRequest request, List<ConfigStore> co
if (data != null) {
JsonNode syncTokenNode = data.findValue(SYNC_TOKEN);
if (syncTokenNode != null) {
sToken = syncTokenNode.asText();
sToken = syncTokenNode.asString();
}
}

Expand All @@ -73,7 +74,7 @@ public AppConfigurationEndpoint(HttpServletRequest request, List<ConfigStore> co

JsonNode requestSubject = requestBody.findValue(CONFIG_STORE_SUBJECT);
if (requestSubject != null) {
String subject = requestSubject.asText();
String subject = requestSubject.asString();
endpoint = URI.create(subject);
} else {
throw new IllegalArgumentException("Refresh request missing topic field.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@

import com.azure.spring.cloud.appconfiguration.config.implementation.properties.AppConfigurationProperties;
import com.azure.spring.cloud.appconfiguration.config.web.implementation.AppConfigurationEndpoint;
import com.fasterxml.jackson.databind.JsonNode;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import tools.jackson.databind.JsonNode;

/**
* Endpoint for requesting new configurations to be loaded in all registered instances on the Bus.
Expand Down Expand Up @@ -82,7 +82,7 @@ public String refresh(HttpServletRequest request, HttpServletResponse response,
JsonNode validationResponse = endpoint.getValidationResponse();
if (validationResponse != null) {
// Validating Web Hook
return VALIDATION_CODE_FORMAT_START + validationResponse.asText() + "\"}";
return VALIDATION_CODE_FORMAT_START + validationResponse.asString() + "\"}";
} else {
if (!endpoint.authenticate()) {
return HttpStatus.UNAUTHORIZED.getReasonPhrase();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@

import com.azure.spring.cloud.appconfiguration.config.implementation.properties.AppConfigurationProperties;
import com.azure.spring.cloud.appconfiguration.config.web.implementation.AppConfigurationEndpoint;
import com.fasterxml.jackson.databind.JsonNode;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import tools.jackson.databind.JsonNode;

/**
* Endpoint for requesting new configurations to be loaded.
Expand Down Expand Up @@ -84,7 +84,7 @@ public String refresh(HttpServletRequest request, HttpServletResponse response,
JsonNode validationResponse = endpoint.getValidationResponse();
if (validationResponse != null) {
// Validating Web Hook
return String.format("%s%s\"}", VALIDATION_CODE_FORMAT_START, validationResponse.asText());
return String.format("%s%s\"}", VALIDATION_CODE_FORMAT_START, validationResponse.asString());
} else {
if (!endpoint.authenticate()) {
return HttpStatus.UNAUTHORIZED.getReasonPhrase();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,11 @@
import org.mockito.MockitoAnnotations;

import com.azure.spring.cloud.appconfiguration.config.implementation.properties.ConfigStore;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import jakarta.servlet.http.HttpServletRequest;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;

public class AppConfigurationEndpointTest {

Expand All @@ -49,7 +47,7 @@ public class AppConfigurationEndpointTest {

private static final String GET_TEST_INVALID = "src/test/resources/webHookInvalid.json";

private ObjectMapper mapper = new ObjectMapper();
private ObjectMapper mapper = JsonMapper.builder().build();

@BeforeEach
public void setup() throws IOException {
Expand All @@ -59,7 +57,7 @@ public void setup() throws IOException {
}

@Test
public void validationParsing() throws JsonGenerationException, JsonMappingException, IOException {
public void validationParsing() throws IOException {
String requestBody = mapper.readValue(new File(GET_TEST_VALIDATION), JsonNode.class).toString();
when(lines.collect(Mockito.any())).thenReturn(requestBody);

Expand All @@ -77,7 +75,7 @@ public void validationParsing() throws JsonGenerationException, JsonMappingExcep
}

@Test
public void validationInvalidParsing() throws JsonGenerationException, JsonMappingException, IOException {
public void validationInvalidParsing() throws IOException {
String requestBody = mapper.readValue(new File(GET_TEST_INVALID), JsonNode.class).toString();
when(lines.collect(Mockito.any())).thenReturn(requestBody);
List<ConfigStore> configStores = new ArrayList<ConfigStore>();
Expand All @@ -88,7 +86,7 @@ public void validationInvalidParsing() throws JsonGenerationException, JsonMappi
}

@Test
public void authenticate() throws JsonParseException, JsonMappingException, IOException {
public void authenticate() throws IOException {
String requestBody = mapper.readValue(new File(GET_TEST_VALIDATION), JsonNode.class).toString();
when(lines.collect(Mockito.any())).thenReturn(requestBody);

Expand Down Expand Up @@ -158,7 +156,7 @@ public void authenticate() throws JsonParseException, JsonMappingException, IOEx
}

@Test
public void triggerRefresh() throws JsonParseException, JsonMappingException, IOException {
public void triggerRefresh() throws IOException {
String requestBody = mapper.readValue(new File(GET_TEST_VALIDATION), JsonNode.class).toString();
when(lines.collect(Mockito.any())).thenReturn(requestBody);
List<ConfigStore> configStores = new ArrayList<ConfigStore>();
Expand Down
18 changes: 17 additions & 1 deletion sdk/spring/spring-cloud-azure-appconfiguration-config/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,22 @@
<artifactId>spring-cloud-azure-autoconfigure</artifactId>
<version>7.4.0-beta.1</version> <!-- {x-version-update;com.azure.spring:spring-cloud-azure-autoconfigure;current} -->
</dependency>
<dependency>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>3.1.4</version> <!-- {x-version-update;springboot4_tools.jackson.core:jackson-databind;external_dependency} -->
</dependency>
<!-- Keep jackson-annotations on the 2.x line because Jackson 3 databind still consumes
com.fasterxml.jackson.annotation APIs. Jackson's migration guide explicitly says
jackson-annotations stays on the 2.x line in 3.x, and the project README says
databind still depends on jackson-annotations:
https://github.com/FasterXML/jackson/tree/main/jackson3/MIGRATING_TO_JACKSON_3.md
https://github.com/FasterXML/jackson/tree/main/README.md -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.21</version> <!-- {x-version-update;springboot4_com.fasterxml.jackson.core:jackson-annotations;external_dependency} -->
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -177,7 +193,7 @@
<bannedDependencies>
<includes>
<include>com.fasterxml.jackson.core:jackson-annotations:[2.21]</include> <!-- {x-include-update;springboot4_com.fasterxml.jackson.core:jackson-annotations;external_dependency} -->
<include>com.fasterxml.jackson.core:jackson-databind:[2.21.4]</include> <!-- {x-include-update;springboot4_com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
<include>tools.jackson.core:jackson-databind:[3.1.4]</include> <!-- {x-include-update;springboot4_tools.jackson.core:jackson-databind;external_dependency} -->
<include>org.springframework.boot:spring-boot-actuator:[4.1.0]</include> <!-- {x-include-update;springboot4_org.springframework.boot:spring-boot-actuator;external_dependency} -->
<include>org.springframework.boot:spring-boot-autoconfigure:[4.1.0]</include> <!-- {x-include-update;springboot4_org.springframework.boot:spring-boot-autoconfigure;external_dependency} -->
<include>org.springframework.cloud:spring-cloud-context:[5.0.2]</include> <!-- {x-include-update;springboot4_org.springframework.cloud:spring-cloud-context;external_dependency} -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

import org.springframework.core.env.EnumerablePropertySource;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;

/**
* Azure App Configuration PropertySource unique per Store Label(Profile) combo.
Expand Down
Loading
Loading