From 50390a9c9b6bdbed7b5bb6313e511baf3e9397f4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 24 Nov 2025 08:13:57 +0000
Subject: [PATCH 1/6] fix(deps): update dependency
org.springframework.boot:spring-boot-starter-parent to v4
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5923d53f..259bb292 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.5.8
+ 4.0.0
From b18295951f0fe12382895c56b871fa4ba256769e Mon Sep 17 00:00:00 2001
From: Alice Lambois
Date: Mon, 24 Nov 2025 14:52:19 +0100
Subject: [PATCH 2/6] fix: update for springboot 4
---
pom.xml | 12 ++++++++++-
.../configuration/LogRequestFilter.java | 3 ++-
.../rest/responses/ResponseController.java | 2 +-
.../genesis/domain/model/surveyunit/Mode.java | 2 +-
.../LunaticModelDefinitions.java | 2 +-
.../functional_tests/RawDataDefinitions.java | 4 +++-
.../config/CucumberSpringConfiguration.java | 19 ++++++------------
.../controller/rest/ControllerAccessTest.java | 20 +++++--------------
8 files changed, 30 insertions(+), 34 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1c72d446..1bc60975 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,6 @@
2.8.14
1.6.3
7.32.0
- 5.13.4
0.8.14
@@ -74,6 +73,17 @@
spring-security-test
test
+
+ org.springframework.boot
+ spring-boot-resttestclient
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-webmvc-test
+ test
+
+
diff --git a/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java b/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java
index 3a18fc01..e93edcdb 100644
--- a/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java
+++ b/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java
@@ -32,9 +32,10 @@ public class LogRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
+ int cacheLimit = -1;//<0 means no limit
//Cache request to avoid calling twice the same inputStream
- ContentCachingRequestWrapper req = new ContentCachingRequestWrapper(request);
+ ContentCachingRequestWrapper req = new ContentCachingRequestWrapper(request, cacheLimit);
ContentCachingResponseWrapper resp = new ContentCachingResponseWrapper(response);
log.info(REQUEST_MESSAGE_FORMAT,
diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java
index c228535b..cf5f7965 100644
--- a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java
+++ b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java
@@ -35,10 +35,10 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
+import org.jspecify.annotations.Nullable;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import org.springframework.lang.Nullable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
diff --git a/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java b/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java
index cbf45b86..4d18100f 100644
--- a/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java
+++ b/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java
@@ -2,7 +2,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
-import org.springframework.lang.Nullable;
+import org.jspecify.annotations.Nullable;
@Getter
public enum Mode {
diff --git a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java
index efb5916c..462e7849 100644
--- a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java
+++ b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java
@@ -26,7 +26,7 @@
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.resttestclient.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java
index 137ffd4a..0583211f 100644
--- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java
+++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java
@@ -29,7 +29,8 @@
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.resttestclient.TestRestTemplate;
+import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -51,6 +52,7 @@
@Slf4j
@ContextConfiguration(classes = CucumberSpringConfiguration.class)
+@AutoConfigureTestRestTemplate
public class RawDataDefinitions {
diff --git a/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java b/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java
index 81c8ef3d..9a2425d3 100644
--- a/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java
+++ b/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java
@@ -1,20 +1,12 @@
package cucumber.functional_tests.config;
import fr.insee.genesis.GenesisApi;
-import fr.insee.genesis.infrastructure.repository.ContextualExternalVariableMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.ContextualPreviousVariableMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.DataProcessingContextMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LastJsonExtractionMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LunaticJsonMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LunaticModelMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.QuestionnaireMetadataMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.RundeckExecutionDBRepository;
-import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.VariableTypeMongoDBRepository;
+import fr.insee.genesis.infrastructure.repository.*;
import io.cucumber.spring.CucumberContextConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
-import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration;
+import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration;
+import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.ActiveProfiles;
@@ -23,7 +15,8 @@
@CucumberContextConfiguration
@SpringBootTest(classes = GenesisApi.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test-cucumber")
-@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
+@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class})
+@AutoConfigureTestRestTemplate
public class CucumberSpringConfiguration {
@MockitoBean
private MongoTemplate mongoTemplate;
diff --git a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java
index 1d29e9fa..bd9d65d8 100644
--- a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java
+++ b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java
@@ -3,16 +3,7 @@
import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort;
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
-import fr.insee.genesis.infrastructure.repository.ContextualExternalVariableMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.ContextualPreviousVariableMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.DataProcessingContextMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LastJsonExtractionMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LunaticJsonMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.LunaticModelMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.QuestionnaireMetadataMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.RundeckExecutionDBRepository;
-import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository;
-import fr.insee.genesis.infrastructure.repository.VariableTypeMongoDBRepository;
+import fr.insee.genesis.infrastructure.repository.*;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -22,10 +13,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
-import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration;
+import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.http.HttpMethod;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -50,11 +41,10 @@
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
-@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
+@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class})
class ControllerAccessTest {
// Constants for user roles
From 54ad8fece0033f0c9d844fc54618bbac729d579d Mon Sep 17 00:00:00 2001
From: Alexis Szmundy <150004193+alexisszmundy@users.noreply.github.com>
Date: Thu, 11 Dec 2025 09:32:13 +0100
Subject: [PATCH 3/6] fix: pom
---
pom.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 6059eb58..5625b6fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,6 @@
2.8.14
1.6.3
7.33.0
- 5.13.4
0.8.14
From 7404735a042853859aa130ab5777b2f8f4dfc11e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 5 Jan 2026 07:33:42 +0000
Subject: [PATCH 4/6] fix(deps): update dependency
org.springdoc:springdoc-openapi-starter-webmvc-ui to v3
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 87ca7026..e7020f6c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
21
- 2.8.15
+ 3.0.1
1.6.3
7.33.0
5.13.4
From 1094df270bbb674341f2e1abfd6bb593d5ae298a Mon Sep 17 00:00:00 2001
From: QDIBYS
Date: Wed, 21 Jan 2026 14:11:21 +0100
Subject: [PATCH 5/6] fix: now we need actuator apparently
---
pom.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pom.xml b/pom.xml
index a7d7acd1..55cab95d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,10 @@
org.springframework.boot
spring-boot-starter-cache
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
org.springframework.boot
From beb4c31f145e3cd3b0ee7de5e885c44848a85098 Mon Sep 17 00:00:00 2001
From: QDIBYS
Date: Mon, 26 Jan 2026 10:16:47 +0100
Subject: [PATCH 6/6] chore: replaced jackson and spring security deprecated
---
.../auth/security/RoleConfiguration.java | 18 ++++--------------
.../utils/ExtendedJsonNormalizer.java | 2 +-
2 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java b/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java
index ad1e2e39..aa004bff 100644
--- a/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java
+++ b/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java
@@ -1,14 +1,14 @@
package fr.insee.genesis.configuration.auth.security;
import jakarta.annotation.PostConstruct;
+import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
-import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import java.util.ArrayList;
import java.util.HashMap;
@@ -16,6 +16,7 @@
import java.util.Map;
@Configuration
+@EnableMethodSecurity
@Slf4j
public class RoleConfiguration {
@@ -41,10 +42,7 @@ public class RoleConfiguration {
private List batchGenericClaims;
- public Map> getRolesByClaim() {
- return rolesByClaim;
- }
-
+ @Getter
private Map> rolesByClaim;
//Defines a role hierarchy
@@ -67,14 +65,6 @@ static RoleHierarchy roleHierarchy() {
.build();
}
- // and, if using pre-post method security also add
- @Bean
- static MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) {
- DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
- expressionHandler.setRoleHierarchy(roleHierarchy);
- return expressionHandler;
- }
-
@PostConstruct
public void initialization() {
diff --git a/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java b/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java
index 6bb1c4bd..87c15506 100644
--- a/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java
+++ b/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java
@@ -32,7 +32,7 @@ public static JsonNode normalize(JsonNode node) {
}
ObjectNode copy = obj.objectNode();
- obj.fields().forEachRemaining(e ->
+ obj.properties().forEach(e ->
copy.set(e.getKey(), normalize(e.getValue()))
);
return copy;