From 82cae6f0d42d4794ecc8b32fd783943afa3a8bdc Mon Sep 17 00:00:00 2001 From: Diegom203 <153622681+Diegom203@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:25:24 +0200 Subject: [PATCH 01/19] Update and rename JsonNodeToJsonObjectUnitTest.java to JsonNodeToObjectNodeUnitTest.java --- ...sonObjectUnitTest.java => JsonNodeToObjectNodeUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/{JsonNodeToJsonObjectUnitTest.java => JsonNodeToObjectNodeUnitTest.java} (89%) diff --git a/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToJsonObjectUnitTest.java b/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java similarity index 89% rename from json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToJsonObjectUnitTest.java rename to json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java index 38d097e5b8..b58c5a3af9 100644 --- a/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToJsonObjectUnitTest.java +++ b/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java @@ -18,7 +18,7 @@ public class JsonNodeToJsonObjectUnitTest { ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(jsonString); - ObjectNode objectNode = objectMapper.createObjectNode().setAll((ObjectNode) jsonNode); + ObjectNode objectNode = (ObjectNode) jsonNode; assertEquals("John", objectNode.get("name").asText()); assertEquals("male", objectNode.get("gender").asText()); From edea043a7fcedcb6993554526b4535f845458afc Mon Sep 17 00:00:00 2001 From: Diegom203 <153622681+Diegom203@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:26:47 +0200 Subject: [PATCH 02/19] Update JsonNodeToObjectNodeUnitTest.java --- .../jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java b/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java index b58c5a3af9..15927b6008 100644 --- a/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java +++ b/json-modules/json-conversion/src/test/java/com/baeldung/jsonnodetojsonobject/JsonNodeToObjectNodeUnitTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import static org.junit.Assert.*; -public class JsonNodeToJsonObjectUnitTest { +public class JsonNodeToObjectNodeUnitTest { public static String jsonString = "{\"name\": \"John\", \"gender\": \"male\", \"company\": \"Baeldung\", \"isEmployee\": true, \"age\": 30}"; From a24cf067a91352fb85002f8cbdd2ac7bcd419aed Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Fri, 22 Dec 2023 21:38:55 +0530 Subject: [PATCH 03/19] JAVA-28508: Fix formatting of POMs Modules D to Q (#15360) --- jsf/pom.xml | 1 - kubernetes-modules/jkube-demo/pom.xml | 12 +++++----- microservices-modules/rest-express/pom.xml | 22 +++++++++---------- .../core-java-persistence-3/pom.xml | 9 ++++++-- persistence-modules/pom.xml | 2 +- .../spring-data-jpa-query-2/pom.xml | 4 ++-- .../spring-data-jpa-repo-3/pom.xml | 9 ++++---- persistence-modules/spring-jdbc-2/pom.xml | 5 ++--- quarkus-modules/quarkus-funqy/pom.xml | 5 +++++ 9 files changed, 40 insertions(+), 29 deletions(-) diff --git a/jsf/pom.xml b/jsf/pom.xml index 09dea98f65..ec014540a0 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -14,7 +14,6 @@ - javax.annotation javax.annotation-api diff --git a/kubernetes-modules/jkube-demo/pom.xml b/kubernetes-modules/jkube-demo/pom.xml index 6fedc0f24a..fe75a0cc14 100644 --- a/kubernetes-modules/jkube-demo/pom.xml +++ b/kubernetes-modules/jkube-demo/pom.xml @@ -3,17 +3,19 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + com.baeldung + jkube-demo + 0.0.1-SNAPSHOT + jkube-demo + jkube-demo + com.baeldung parent-boot-2 0.0.1-SNAPSHOT ../../parent-boot-2 - com.baeldung - jkube-demo - 0.0.1-SNAPSHOT - jkube-demo - jkube-demo + org.springframework.boot diff --git a/microservices-modules/rest-express/pom.xml b/microservices-modules/rest-express/pom.xml index 1b22bb8117..be1c142a94 100644 --- a/microservices-modules/rest-express/pom.xml +++ b/microservices-modules/rest-express/pom.xml @@ -2,14 +2,13 @@ - - microservices-modules - com.baeldung - 1.0.0-SNAPSHOT - 4.0.0 - + rest-express + 1.0.0-SNAPSHOT rest-express + jar + A Basic, MongoDB-backed Service Suite + https://github.com/RestExpress/RestExpress-Scaffold - A Basic, MongoDB-backed Service Suite - https://github.com/RestExpress/RestExpress-Scaffold - 1.0.0-SNAPSHOT - rest-express - jar + + + microservices-modules + com.baeldung + 1.0.0-SNAPSHOT + diff --git a/persistence-modules/core-java-persistence-3/pom.xml b/persistence-modules/core-java-persistence-3/pom.xml index 26ac2a5218..60562859a7 100644 --- a/persistence-modules/core-java-persistence-3/pom.xml +++ b/persistence-modules/core-java-persistence-3/pom.xml @@ -1,15 +1,19 @@ - + 4.0.0 com.baeldung.core-java-persistence-3 core-java-persistence-3 - core-java-persistence-3 0.1.0-SNAPSHOT + core-java-persistence-3 jar + com.baeldung persistence-modules 1.0.0-SNAPSHOT + com.h2database @@ -22,6 +26,7 @@ ${commons-dbutils.version} + 2.1.214 1.8.1 diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 5ebc5b2cd4..6caedb3273 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -108,7 +108,7 @@ spring-jpa spring-jpa-2 spring-jdbc - spring-jdbc-2 + spring-jdbc-2 spring-mybatis spring-persistence-simple diff --git a/persistence-modules/spring-data-jpa-query-2/pom.xml b/persistence-modules/spring-data-jpa-query-2/pom.xml index 62bf7f0314..6ef1adad14 100644 --- a/persistence-modules/spring-data-jpa-query-2/pom.xml +++ b/persistence-modules/spring-data-jpa-query-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-jpa-query-2 spring-data-jpa-query-2 diff --git a/persistence-modules/spring-data-jpa-repo-3/pom.xml b/persistence-modules/spring-data-jpa-repo-3/pom.xml index 211e8a2d96..5c57606d31 100644 --- a/persistence-modules/spring-data-jpa-repo-3/pom.xml +++ b/persistence-modules/spring-data-jpa-repo-3/pom.xml @@ -3,16 +3,17 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + spring-data-jpa-repo-3 + 0.0.1-SNAPSHOT + spring-data-jpa-repo-3 + spring-data-jpa-repo-3 + com.baeldung parent-boot-3 0.0.1-SNAPSHOT ../../parent-boot-3 - spring-data-jpa-repo-3 - 0.0.1-SNAPSHOT - spring-data-jpa-repo-3 - spring-data-jpa-repo-3 diff --git a/persistence-modules/spring-jdbc-2/pom.xml b/persistence-modules/spring-jdbc-2/pom.xml index ce79c1c615..7942e7675d 100644 --- a/persistence-modules/spring-jdbc-2/pom.xml +++ b/persistence-modules/spring-jdbc-2/pom.xml @@ -1,9 +1,8 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.example spring-jdbc-2 1.0-SNAPSHOT diff --git a/quarkus-modules/quarkus-funqy/pom.xml b/quarkus-modules/quarkus-funqy/pom.xml index f5ba9d08d8..dbccc5e987 100644 --- a/quarkus-modules/quarkus-funqy/pom.xml +++ b/quarkus-modules/quarkus-funqy/pom.xml @@ -13,6 +13,7 @@ quarkus-modules 1.0.0-SNAPSHOT + @@ -24,6 +25,7 @@ + io.quarkus @@ -48,6 +50,7 @@ test + @@ -86,6 +89,7 @@ + native @@ -134,4 +138,5 @@ 2.16.0.Final 3.0.0-M7 + From 9386fe77e0a03e4e4cf5f80b628a9f30fce44b24 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Fri, 22 Dec 2023 08:17:11 -0800 Subject: [PATCH 04/19] JAVA-29269 Upgrade parent-spring-6 to the latest version (#15466) --- parent-spring-6/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-spring-6/pom.xml b/parent-spring-6/pom.xml index 7aaffb5483..7418c019c4 100644 --- a/parent-spring-6/pom.xml +++ b/parent-spring-6/pom.xml @@ -35,7 +35,7 @@ - 6.0.12 + 6.1.2 From 616b9b9eb3dfba120cd37c6cfb53686a3906cd67 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Fri, 22 Dec 2023 23:21:54 +0530 Subject: [PATCH 05/19] Upgrade to MyBatis to Spring Boot 3 (#15456) --- persistence-modules/spring-mybatis/pom.xml | 11 ++++++----- .../mybatis/spring/ArticleMapperCommonUnitTest.java | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/persistence-modules/spring-mybatis/pom.xml b/persistence-modules/spring-mybatis/pom.xml index 1b2223653b..6de7cef347 100644 --- a/persistence-modules/spring-mybatis/pom.xml +++ b/persistence-modules/spring-mybatis/pom.xml @@ -9,9 +9,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../../parent-boot-2 + ../../parent-boot-3 @@ -78,11 +78,12 @@ - 5.3.15 + 6.0.13 - 2.0.6 + 3.0.3 3.5.2 - 2.2.0 + 3.0.3 + true \ No newline at end of file diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java index 2a93ca3d61..ab1cdce2aa 100644 --- a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java @@ -5,7 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; -class ArticleMapperCommonUnitTest { +abstract class ArticleMapperCommonUnitTest { @Autowired ArticleMapper articleMapper; From fcb652319b4c2beade53b07dec1f237399b2c57c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Fri, 22 Dec 2023 23:39:09 +0530 Subject: [PATCH 06/19] Upgrade Spring-mvc-basics-4 module to Spring Boot 3 (#15458) --- spring-web-modules/spring-mvc-basics-4/pom.xml | 5 +++-- .../main/java/com/baeldung/config/WebConfig.java | 14 ++------------ .../baeldung/contexts/services/GreeterService.java | 2 +- .../constraint/MaxSizeConstraint.java | 6 +++--- .../constraint/MaxSizeConstraintValidator.java | 5 ++--- .../listvalidation/controller/MovieController.java | 14 ++++++-------- .../ConstraintViolationExceptionHandler.java | 9 ++++----- .../validation/listvalidation/model/Movie.java | 3 ++- .../ControllerAnnotationIntegrationTest.java | 2 +- .../controller/ControllerIntegrationTest.java | 2 +- 10 files changed, 25 insertions(+), 37 deletions(-) diff --git a/spring-web-modules/spring-mvc-basics-4/pom.xml b/spring-web-modules/spring-mvc-basics-4/pom.xml index 455e4e488c..7e8ef257c7 100644 --- a/spring-web-modules/spring-mvc-basics-4/pom.xml +++ b/spring-web-modules/spring-mvc-basics-4/pom.xml @@ -9,9 +9,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../../parent-boot-2 + ../../parent-boot-3 @@ -31,6 +31,7 @@ javax.servlet jstl + 1.2 org.springframework.boot diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/config/WebConfig.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/config/WebConfig.java index e9b59a2b23..7ccbbd6410 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/config/WebConfig.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/config/WebConfig.java @@ -1,22 +1,12 @@ package com.baeldung.config; +import com.baeldung.contexts.Greeting; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.view.InternalResourceViewResolver; -import org.springframework.web.servlet.view.JstlView; -import org.thymeleaf.spring5.SpringTemplateEngine; -import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; -import org.thymeleaf.spring5.view.ThymeleafViewResolver; -import org.thymeleaf.templatemode.TemplateMode; -import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; -import org.thymeleaf.templateresolver.ITemplateResolver; - -import com.baeldung.contexts.Greeting; -import com.fasterxml.jackson.databind.ObjectMapper; /** * Web Configuration for the entire app diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/contexts/services/GreeterService.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/contexts/services/GreeterService.java index f68b2fe5af..dfff103d7e 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/contexts/services/GreeterService.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/contexts/services/GreeterService.java @@ -1,7 +1,7 @@ package com.baeldung.contexts.services; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import com.baeldung.contexts.Greeting; diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java index b5adab5d86..d96607e1e9 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java @@ -1,11 +1,11 @@ package com.baeldung.validation.listvalidation.constraint; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import javax.validation.Constraint; -import javax.validation.Payload; - @Constraint(validatedBy = MaxSizeConstraintValidator.class) @Retention(RetentionPolicy.RUNTIME) public @interface MaxSizeConstraint { diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java index 409b6e1ab5..edf140c6b1 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java @@ -2,10 +2,9 @@ package com.baeldung.validation.listvalidation.constraint; import java.util.List; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - import com.baeldung.validation.listvalidation.model.Movie; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; public class MaxSizeConstraintValidator implements ConstraintValidator> { diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java index 45639cf303..f29818a393 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java @@ -1,10 +1,10 @@ package com.baeldung.validation.listvalidation.controller; -import java.util.List; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; - +import com.baeldung.validation.listvalidation.constraint.MaxSizeConstraint; +import com.baeldung.validation.listvalidation.model.Movie; +import com.baeldung.validation.listvalidation.service.MovieService; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -12,9 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.baeldung.validation.listvalidation.constraint.MaxSizeConstraint; -import com.baeldung.validation.listvalidation.model.Movie; -import com.baeldung.validation.listvalidation.service.MovieService; +import java.util.List; @Validated @RestController diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java index 742be27f61..38a9b558a9 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java @@ -1,10 +1,7 @@ package com.baeldung.validation.listvalidation.exception; -import java.util.Set; - -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; - +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -12,6 +9,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import java.util.Set; + @RestControllerAdvice public class ConstraintViolationExceptionHandler { diff --git a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java index f5a49877bf..5302ea4a5a 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java +++ b/spring-web-modules/spring-mvc-basics-4/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java @@ -1,8 +1,9 @@ package com.baeldung.validation.listvalidation.model; +import jakarta.validation.constraints.NotEmpty; + import java.util.UUID; -import javax.validation.constraints.NotEmpty; public class Movie { diff --git a/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerAnnotationIntegrationTest.java b/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerAnnotationIntegrationTest.java index 7fd8f0c97f..cb70f80afe 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerAnnotationIntegrationTest.java +++ b/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerAnnotationIntegrationTest.java @@ -40,7 +40,7 @@ public class ControllerAnnotationIntegrationTest { @Test public void testTestController() throws Exception { - ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/test/")).andReturn().getModelAndView(); + ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/test")).andReturn().getModelAndView(); // validate modal data Assert.assertSame(mv.getModelMap().get("data").toString(), "Welcome home man"); diff --git a/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerIntegrationTest.java b/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerIntegrationTest.java index a7e6bd6c4b..3431d74997 100644 --- a/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerIntegrationTest.java +++ b/spring-web-modules/spring-mvc-basics-4/src/test/java/com/baeldung/controller/ControllerIntegrationTest.java @@ -40,7 +40,7 @@ public class ControllerIntegrationTest { @Test public void testTestController() throws Exception { - ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/test/")).andReturn().getModelAndView(); + ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/test")).andReturn().getModelAndView(); // validate modal data Assert.assertSame(mv.getModelMap().get("data").toString(), "Welcome home man"); From 4b6c1c6e05c3b0357b6cf64143fb23bd707569e3 Mon Sep 17 00:00:00 2001 From: Wynn Teo <49014791+wynnteo@users.noreply.github.com> Date: Sat, 23 Dec 2023 10:27:39 +0800 Subject: [PATCH 07/19] First version of Iterator vs For Loop unit testing (#15365) * First version of Iterator vs For Loop unit testing * Add a new line after package * Update the method name --- .../IteratorForLoopUnitTest.java | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 core-java-modules/core-java-collections-5/src/test/java/com/baeldung/iteratorvsforloop/IteratorForLoopUnitTest.java diff --git a/core-java-modules/core-java-collections-5/src/test/java/com/baeldung/iteratorvsforloop/IteratorForLoopUnitTest.java b/core-java-modules/core-java-collections-5/src/test/java/com/baeldung/iteratorvsforloop/IteratorForLoopUnitTest.java new file mode 100644 index 0000000000..a7655c68eb --- /dev/null +++ b/core-java-modules/core-java-collections-5/src/test/java/com/baeldung/iteratorvsforloop/IteratorForLoopUnitTest.java @@ -0,0 +1,129 @@ +package com.baeldung.iteratorvsforloop; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.List; +import java.util.Iterator; +import java.util.Collections; +import java.util.ListIterator; + +public class IteratorForLoopUnitTest { + + @Test + public void givenEmptyCollection_whenUsingForLoop_thenNoElementsAreIterated() { + List names = Collections.emptyList(); + StringBuilder stringBuilder = new StringBuilder(); + + for (int i = 0; i < names.size(); i++) { + stringBuilder.append(names.get(i)); + } + + assertEquals("", stringBuilder.toString()); + } + + @Test + public void givenEmptyCollection_whenUsingIterator_thenNoElementsAreIterated() { + List names = Collections.emptyList(); + StringBuilder stringBuilder = new StringBuilder(); + + Iterator iterator = names.iterator(); + while (iterator.hasNext()) { + stringBuilder.append(iterator.next()); + } + + assertEquals("", stringBuilder.toString()); + } + + + @Test + public void givenCollectionWithElements_whenUsingForLoop_thenAllElementsAreIterated() { + List names = Arrays.asList("Alice", "Bob", "Charlie"); + StringBuilder stringBuilder = new StringBuilder(); + + for (int i = 0; i < names.size(); i++) { + stringBuilder.append(names.get(i)); + } + + assertEquals("AliceBobCharlie", stringBuilder.toString()); + } + + @Test + public void givenCollectionWithElements_whenUsingIterator_thenAllElementsAreIterated() { + List names = Arrays.asList("Alice", "Bob", "Charlie"); + StringBuilder stringBuilder = new StringBuilder(); + + Iterator iterator = names.iterator(); + while (iterator.hasNext()) { + stringBuilder.append(iterator.next()); + } + + assertEquals("AliceBobCharlie", stringBuilder.toString()); + } + + @Test + public void givenCollectionWithElements_whenUsingForLoop_thenAllElementsAreIteratedReverseOrder() { + List names = Arrays.asList("Alice", "Bob", "Charlie"); + StringBuilder stringBuilder = new StringBuilder(); + + for (int i = names.size() - 1; i >= 0; i--) { + stringBuilder.append(names.get(i)); + } + + assertEquals("CharlieBobAlice", stringBuilder.toString()); + } + + @Test + public void givenCollectionWithElements_whenUsingListIterator_thenAllElementsAreIteratedInReverseOrder() { + List names = Arrays.asList("Alice", "Bob", "Charlie"); + StringBuilder stringBuilder = new StringBuilder(); + + ListIterator listIterator = names.listIterator(names.size()); + while (listIterator.hasPrevious()) { + stringBuilder.append(listIterator.previous()); + } + + assertEquals("CharlieBobAlice", stringBuilder.toString()); + } + + @Test + public void givenCollectionWithElements_whenRemovingElementDuringForLoopIteration_thenConcurrentModificationExceptionIsThrown() { + List names = new ArrayList<>(List.of("Alice", "Bob", "Charlie")); + + assertThrows(ConcurrentModificationException.class, () -> { + for (String name : names) { + names.remove("Bob"); + } + }); + } + + @Test + public void givenCollectionWithElements_whenRemovingElementUsingIterator_thenElementIsRemovedSafely() { + List names = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie")); + Iterator iterator = names.iterator(); + + while (iterator.hasNext()) { + String name = iterator.next(); + if (name.equals("Bob")) { + iterator.remove(); + } + } + List expected = Arrays.asList("Alice", "Charlie"); + assertIterableEquals(expected, names); + } + + @Test + public void givenCollectionWithElements_whenModifyingElementToLowerCaseDuringForLoopIteration_thenElementsAreModifiedToLowerCase() { + List names = new ArrayList<>(List.of("Alice", "Bob", "Charlie")); + + for (int i = 0; i < names.size(); i++) { + names.set(i, names.get(i).toLowerCase()); + } + + List expected = Arrays.asList("alice","bob", "charlie"); + assertIterableEquals(expected, names); + } +} From 3838bab244f6809bd6a3740104e02bfa84db45e5 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 23 Dec 2023 22:06:16 -0500 Subject: [PATCH 08/19] BAEL-7115 implementation (#15101) * implementing BAEL-6833 * implementation for BAEL-7115 * feedback fixes * Moving code folder as per feedback * renaming logic class folder name * adding more methods --------- Co-authored-by: technoddy --- web-modules/javax-servlets-2/pom.xml | 13 +++++++ .../com/baeldung/servlets/AccountServlet.java | 26 ++++++++++++++ .../servlets/clientinfo/AccountLogic.java | 32 +++++++++++++++++ .../clientinfo/ClientInformationUnitTest.java | 35 +++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/AccountServlet.java create mode 100644 web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/clientinfo/AccountLogic.java create mode 100644 web-modules/javax-servlets-2/src/test/java/com/baeldung/servlets/clientinfo/ClientInformationUnitTest.java diff --git a/web-modules/javax-servlets-2/pom.xml b/web-modules/javax-servlets-2/pom.xml index 9ba12352fd..a6bfc6b473 100644 --- a/web-modules/javax-servlets-2/pom.xml +++ b/web-modules/javax-servlets-2/pom.xml @@ -68,6 +68,17 @@ + + org.mockito + mockito-core + ${mockito.version} + test + + + com.github.ua-parser + uap-java + ${uap.version} + @@ -101,6 +112,8 @@ 2.22.2 10.0.4 1.10.0 + 5.6.0 + 1.5.4 \ No newline at end of file diff --git a/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/AccountServlet.java b/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/AccountServlet.java new file mode 100644 index 0000000000..3533bf500b --- /dev/null +++ b/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/AccountServlet.java @@ -0,0 +1,26 @@ +package com.baeldung.servlets; + +import java.io.IOException; +import java.util.Map; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.servlets.clientinfo.AccountLogic; + +@WebServlet(name = "AccountServlet", urlPatterns = "/account") +public class AccountServlet extends HttpServlet { + public static final Logger log = LoggerFactory.getLogger(AccountServlet.class); + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + AccountLogic accountLogic = new AccountLogic(); + Map clientInfo = accountLogic.getClientInfo(request); + log.info("Request client info: {}, " + clientInfo); + + response.setStatus(HttpServletResponse.SC_OK); + } +} diff --git a/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/clientinfo/AccountLogic.java b/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/clientinfo/AccountLogic.java new file mode 100644 index 0000000000..00f3a5ca39 --- /dev/null +++ b/web-modules/javax-servlets-2/src/main/java/com/baeldung/servlets/clientinfo/AccountLogic.java @@ -0,0 +1,32 @@ +package com.baeldung.servlets.clientinfo; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import ua_parser.Client; +import ua_parser.Parser; + +public class AccountLogic { + public Map getClientInfo(HttpServletRequest request) { + String remoteAddr = request.getRemoteAddr(); + String remoteHost = request.getRemoteHost(); + String remoteUser = request.getRemoteUser(); + String contentType = request.getHeader("content-type"); + String userAgent = request.getHeader("user-agent"); + + Parser uaParser = new Parser(); + Client client = uaParser.parse(userAgent); + + Map clientInfo = new HashMap<>(); + clientInfo.put("os_family", client.os.family); + clientInfo.put("device_family", client.device.family); + clientInfo.put("userAgent_family", client.userAgent.family); + clientInfo.put("remote_address", remoteAddr); + clientInfo.put("remote_host", remoteHost); + clientInfo.put("remote_user", remoteUser); + clientInfo.put("content_type", contentType); + return clientInfo; + } +} diff --git a/web-modules/javax-servlets-2/src/test/java/com/baeldung/servlets/clientinfo/ClientInformationUnitTest.java b/web-modules/javax-servlets-2/src/test/java/com/baeldung/servlets/clientinfo/ClientInformationUnitTest.java new file mode 100644 index 0000000000..4ff5256f37 --- /dev/null +++ b/web-modules/javax-servlets-2/src/test/java/com/baeldung/servlets/clientinfo/ClientInformationUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.servlets.clientinfo; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.Mockito.when; + +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +public class ClientInformationUnitTest { + + @Test + void givenMockHttpServletRequestWithHeaders_whenGetClientInfo_thenReturnsUserAGentInfo() { + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + + when(request.getHeader("user-agent")).thenReturn("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36, acceptLanguage:en-US,en;q=0.9"); + when(request.getHeader("content-type")).thenReturn("application/json"); + when(request.getRemoteAddr()).thenReturn("198.167.0.1"); + when(request.getRemoteHost()).thenReturn("baeldung.com"); + when(request.getRemoteUser()).thenReturn("baeldung"); + + AccountLogic accountLogic = new AccountLogic(); + Map clientInfo = accountLogic.getClientInfo(request); + assertThat(clientInfo.get("os_family")).isEqualTo("Mac OS X"); + assertThat(clientInfo.get("device_family")).isEqualTo("Mac"); + assertThat(clientInfo.get("userAgent_family")).isEqualTo("Chrome"); + assertThat(clientInfo.get("content_type")).isEqualTo("application/json"); + assertThat(clientInfo.get("remote_user")).isEqualTo("baeldung"); + assertThat(clientInfo.get("remote_address")).isEqualTo("198.167.0.1"); + assertThat(clientInfo.get("remote_host")).isEqualTo("baeldung.com"); + } +} \ No newline at end of file From 37bddcdfced3c7ea09c45ec3287c68ff6462ada7 Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Sun, 24 Dec 2023 15:06:05 +0200 Subject: [PATCH 09/19] JAVA-29331 Upgrade spring-security-web-sockets (#15468) Co-authored-by: timis1 --- .../spring-security-web-sockets/pom.xml | 61 ++++++++----------- .../config/AppConfig.java | 5 +- .../config/DataStoreConfig.java | 2 +- .../config/SecurityConfig.java | 51 ++++++---------- .../config/SocketBrokerConfig.java | 4 +- .../config/WebAppInitializer.java | 6 +- .../controllers/CsrfTokenController.java | 2 +- .../controllers/SocketController.java | 3 +- .../springsecuredsockets/domain/Role.java | 2 +- .../springsecuredsockets/domain/User.java | 4 +- .../security/CustomAccessDeniedHandler.java | 6 +- .../security/CustomLoginSuccessHandler.java | 4 +- .../security/CustomLogoutSuccessHandler.java | 7 +-- .../security/CustomUserDetailsService.java | 2 +- 14 files changed, 70 insertions(+), 89 deletions(-) diff --git a/spring-security-modules/spring-security-web-sockets/pom.xml b/spring-security-modules/spring-security-web-sockets/pom.xml index 513ee28c85..5f11bc9580 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -11,9 +11,9 @@ com.baeldung - parent-spring-5 + parent-spring-6 0.0.1-SNAPSHOT - ../../parent-spring-5 + ../../parent-spring-6 @@ -73,6 +73,16 @@ hibernate-core ${hibernate-core.version} + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + + org.glassfish.expressly + expressly + ${expressly.version} + com.h2database h2 @@ -92,7 +102,7 @@ org.springframework.security spring-security-messaging - ${spring-security.version} + ${spring-security-messaging.version} @@ -107,24 +117,9 @@ - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - - - javax.servlet.jsp.jstl - jstl-api - ${jstl-api.version} - - - javax.servlet.jsp - javax.servlet.jsp-api - ${javax.servlet.jsp-api.version} - - - javax.servlet - jstl - ${jstl.version} + jakarta.platform + jakarta.jakartaee-api + ${jakartaee-api.version} @@ -144,17 +139,11 @@ - org.springframework.boot - spring-boot-starter-test - ${spring-boot-starter-test.version} + org.springframework + spring-test + ${spring.version} test - - - javax.xml.bind - jaxb-api - ${jaxb-api.version} - @@ -194,11 +183,15 @@ - 5.2.10.Final - 1.11.3.RELEASE - 1.5.10.RELEASE + 6.1.5 + 6.0.2 + 6.1.7.Final + 8.0.1.Final + 5.0.0 + 3.1.0 + 3.1.0 + 10.0.0 1.7.6 - 2.3.1 \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java index afb1970b25..0329f91373 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java @@ -9,7 +9,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.resource.PathResourceResolver; import org.springframework.web.servlet.view.JstlView; import org.springframework.web.servlet.view.UrlBasedViewResolver; @@ -20,8 +20,9 @@ import java.sql.SQLException; @EnableJpaRepositories @ComponentScan("com.baeldung.springsecuredsockets") @Import({ SecurityConfig.class, DataStoreConfig.class, SocketBrokerConfig.class, SocketSecurityConfig.class }) -public class AppConfig extends WebMvcConfigurerAdapter { +public class AppConfig implements WebMvcConfigurer { + @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); registry.addViewController("/login").setViewName("login"); diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java index 2246c0055b..16ace5ed88 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java @@ -13,7 +13,7 @@ import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.EnableTransactionManagement; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManagerFactory; import javax.sql.DataSource; import java.util.Properties; diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java index 64f5169d2d..24687e6f21 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java @@ -6,11 +6,14 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @@ -86,43 +89,30 @@ public class SecurityConfig { */ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.authorizeRequests() - .antMatchers("/", "/index", "/authenticate") - .permitAll() - .antMatchers("/secured/**/**", "/secured/**/**/**", "/secured/socket", "/secured/success") - .authenticated() - .anyRequest() - .authenticated() - .and() - .formLogin() - .loginPage("/login") - .permitAll() - .usernameParameter("username") - .passwordParameter("password") - .loginProcessingUrl("/authenticate") - .successHandler(loginSuccessHandler()) - .failureUrl("/denied") - .permitAll() - .and() - .logout() - .logoutSuccessHandler(logoutSuccessHandler()) - .and() + http.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> + authorizationManagerRequestMatcherRegistry + .requestMatchers("/", "/index", "/authenticate").permitAll() + .requestMatchers("/secured/**/**", "/secured/**/**/**", "/secured/socket", "/secured/success").authenticated() + .anyRequest().authenticated()) + .formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer.loginPage("/login").permitAll() + .usernameParameter("username") + .passwordParameter("password") + .loginProcessingUrl("/authenticate") + .successHandler(loginSuccessHandler()) + .failureUrl("/denied").permitAll()) + .logout(httpSecurityLogoutConfigurer -> httpSecurityLogoutConfigurer.logoutSuccessHandler(logoutSuccessHandler())) /** * Applies to User Roles - not to login failures or unauthenticated access attempts. */ - .exceptionHandling() - .accessDeniedHandler(accessDeniedHandler()) - .and() + .exceptionHandling(httpSecurityExceptionHandlingConfigurer -> httpSecurityExceptionHandlingConfigurer.accessDeniedHandler(accessDeniedHandler())) .authenticationProvider(authenticationProvider()); /** Disabled for local testing */ - http.csrf() - .disable(); + http.csrf(AbstractHttpConfigurer::disable); /** This is solely required to support H2 console viewing in Spring MVC with Spring Security */ - http.headers() - .frameOptions() - .disable(); + http.headers(httpSecurityHeadersConfigurer -> httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) + .authorizeHttpRequests(Customizer.withDefaults()); return http.build(); } @@ -135,8 +125,7 @@ public class SecurityConfig { @Bean public WebSecurityCustomizer webSecurityCustomizer() { - return (web) -> web.ignoring() - .antMatchers("/resources/**"); + return (web) -> web.ignoring().requestMatchers("/resources/**"); } } diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java index 9b19de7b5a..4e641980e5 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java @@ -8,14 +8,14 @@ import static com.baeldung.springsecuredsockets.Constants.SECURED_CHAT_SPECIFIC_ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @Configuration @EnableWebSocketMessageBroker @ComponentScan("com.baeldung.springsecuredsockets.controllers") -public class SocketBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer { +public class SocketBrokerConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java index 84c045a75a..244d5dd93b 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java @@ -4,9 +4,9 @@ import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; public class WebAppInitializer implements WebApplicationInitializer { diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java index 3d10dad391..97fe6ff1ee 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; @Controller public class CsrfTokenController { diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java index 6a74009c16..570d603fad 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java @@ -30,8 +30,7 @@ public class SocketController { @MessageMapping(SECURED_CHAT) @SendTo(SECURED_CHAT_HISTORY) public OutputMessage sendAll(Message msg) throws Exception { - OutputMessage out = new OutputMessage(msg.getFrom(), msg.getText(), new SimpleDateFormat("HH:mm").format(new Date())); - return out; + return new OutputMessage(msg.getFrom(), msg.getText(), new SimpleDateFormat("HH:mm").format(new Date())); } /** diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java index 09fee9a31b..1f3ba3b283 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java @@ -1,6 +1,6 @@ package com.baeldung.springsecuredsockets.domain; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Set; @Entity diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/User.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/User.java index 8f84b2246d..96daff8427 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/User.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/domain/User.java @@ -1,12 +1,12 @@ package com.baeldung.springsecuredsockets.domain; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.Set; //Custom User Model @Entity -@Table(name = "user") +@Table(name = "users") public class User { @Id diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java index 0ab31a9c86..54d3f60232 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java @@ -4,9 +4,9 @@ import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java index 281fd0f163..c78aa20690 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java @@ -7,8 +7,8 @@ import org.springframework.http.HttpStatus; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CustomLoginSuccessHandler implements AuthenticationSuccessHandler { diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java index 620e75fb39..3f8e43f590 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java @@ -5,15 +5,14 @@ import org.springframework.http.HttpStatus; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CustomLogoutSuccessHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) - throws IOException, ServletException { + throws IOException { response.setStatus(HttpStatus.OK.value()); response.sendRedirect(request.getContextPath() + "/index"); diff --git a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java index a0eb4d4bde..52f8fe315b 100644 --- a/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java +++ b/spring-security-modules/spring-security-web-sockets/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java @@ -17,7 +17,7 @@ import org.springframework.stereotype.Service; import java.util.Collection; import java.util.HashSet; -@Service() +@Service public class CustomUserDetailsService implements UserDetailsService { Logger log = LoggerFactory.getLogger(CustomUserDetailsService.class); From 750cc9b7486e32350e8bfe14da15cc888cc7c461 Mon Sep 17 00:00:00 2001 From: Gaetano Piazzolla Date: Sun, 24 Dec 2023 15:02:39 +0100 Subject: [PATCH 10/19] JAVA-29283 | added missing code for article (#15459) --- persistence-modules/jooq/pom.xml | 16 +++- .../jooq/CodeGenerationIntegrationTest.java | 75 +++++++++++++++++++ ...LiveTest.java => CrudIntegrationTest.java} | 2 +- .../jooq/src/test/resources/jooq-config.xml | 26 +++++++ 4 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 persistence-modules/jooq/src/test/java/com/baeldung/jooq/CodeGenerationIntegrationTest.java rename persistence-modules/jooq/src/test/java/com/baeldung/jooq/{CrudLiveTest.java => CrudIntegrationTest.java} (99%) create mode 100644 persistence-modules/jooq/src/test/resources/jooq-config.xml diff --git a/persistence-modules/jooq/pom.xml b/persistence-modules/jooq/pom.xml index c6de8e3d40..d0f1b733a4 100644 --- a/persistence-modules/jooq/pom.xml +++ b/persistence-modules/jooq/pom.xml @@ -31,20 +31,34 @@ jooq-codegen ${jooq.version} + + + + commons-io + commons-io + 2.15.1 + test + + org.postgresql postgresql ${postgresql.version} + runtime com.h2database h2 ${h2.version} + runtime - 3.18.7 + 17 + 17 + 17 + 3.19.0 \ No newline at end of file diff --git a/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CodeGenerationIntegrationTest.java b/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CodeGenerationIntegrationTest.java new file mode 100644 index 0000000000..3ca0919eaa --- /dev/null +++ b/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CodeGenerationIntegrationTest.java @@ -0,0 +1,75 @@ +package com.baeldung.jooq; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +import org.jooq.DSLContext; +import org.jooq.SQLDialect; +import org.jooq.codegen.GenerationTool; +import org.jooq.impl.DSL; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.jooq.model.tables.Article; +import com.baeldung.jooq.model.tables.Author; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.apache.commons.io.FileUtils; + +public class CodeGenerationIntegrationTest { + + static DSLContext context; + + @BeforeClass + public static void setup() throws SQLException { + Connection conn = DriverManager.getConnection("jdbc:h2:mem:tes;INIT=CREATE SCHEMA IF NOT EXISTS \"public\""); + context = DSL.using(conn, SQLDialect.H2); + + context.createTable(Author.AUTHOR) + .columns( + Author.AUTHOR.ID, + Author.AUTHOR.FIRST_NAME, + Author.AUTHOR.LAST_NAME, + Author.AUTHOR.AGE + ) + .execute(); + context.createTable(Article.ARTICLE) + .columns( + Article.ARTICLE.ID, + Article.ARTICLE.TITLE, + Article.ARTICLE.DESCRIPTION, + Article.ARTICLE.AUTHOR_ID + ) + .execute(); + } + + @AfterClass + public static void cleanup() throws IOException { + File generatedDirectory = new File("src/main/java/com/baeldung/jooq/generated"); + FileUtils.deleteDirectory(generatedDirectory); + } + + @Test + public void testClassGenerationFromExistingDatabase() throws Exception { + + File generatedDirectory = new File("src/main/java/com/baeldung/jooq/generated"); + + assertFalse(generatedDirectory.exists()); + + URL jooqConfigURL = getClass().getClassLoader().getResource("jooq-config.xml"); + assertNotNull(jooqConfigURL); + File file = new File(jooqConfigURL.getFile()); + GenerationTool.generate(Files.readString(file.toPath())); + + assertTrue(generatedDirectory.exists()); + } +} diff --git a/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudLiveTest.java b/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudIntegrationTest.java similarity index 99% rename from persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudLiveTest.java rename to persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudIntegrationTest.java index d41344c08e..0d8df27ccc 100644 --- a/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudLiveTest.java +++ b/persistence-modules/jooq/src/test/java/com/baeldung/jooq/CrudIntegrationTest.java @@ -28,7 +28,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -public class CrudLiveTest { +public class CrudIntegrationTest { static DSLContext context; diff --git a/persistence-modules/jooq/src/test/resources/jooq-config.xml b/persistence-modules/jooq/src/test/resources/jooq-config.xml new file mode 100644 index 0000000000..2eed2fbe80 --- /dev/null +++ b/persistence-modules/jooq/src/test/resources/jooq-config.xml @@ -0,0 +1,26 @@ + + + + + org.h2.Driver + jdbc:h2:mem:tes + + + + + + org.jooq.codegen.JavaGenerator + + + org.jooq.meta.h2.H2Database + public + .* + + + + + com.baeldung.jooq.generated + src/main/java + + + \ No newline at end of file From a5b9e8fde25e6025d74daa19e58a0a434f9399f7 Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Sun, 24 Dec 2023 17:07:57 +0200 Subject: [PATCH 11/19] JAVA-29329 Upgrade spring-security-web-rest-basic-auth (#15457) Co-authored-by: timis1 --- .../pom.xml | 27 ++++++------------- .../MyBasicAuthenticationEntryPoint.java | 5 ++-- ...entsClientHttpRequestFactoryBasicAuth.java | 14 +++++----- .../baeldung/client/RestTemplateFactory.java | 4 +-- .../com/baeldung/filter/CustomFilter.java | 8 +++--- .../CustomWebSecurityConfigurerAdapter.java | 12 +++------ .../InMemoryAuthWebSecurityConfigurer.java | 13 +++++---- ...InMemoryNoOpAuthWebSecurityConfigurer.java | 11 +++----- .../PasswordStorageWebSecurityConfigurer.java | 2 +- ...uestAwareAuthenticationSuccessHandler.java | 6 ++--- .../RestAuthenticationEntryPoint.java | 7 +++-- .../web/controller/BarController.java | 5 ++-- .../main/java/com/baeldung/web/dto/Bar.java | 2 +- .../main/java/com/baeldung/web/dto/Foo.java | 2 +- .../src/main/resources/webSecurityConfig.xml | 3 ++- 15 files changed, 51 insertions(+), 70 deletions(-) diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml b/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml index 9a3b21af92..1b63860b92 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml +++ b/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml @@ -10,8 +10,9 @@ com.baeldung - spring-security-modules + parent-boot-3 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -92,8 +93,8 @@ - org.apache.httpcomponents - httpclient + org.apache.httpcomponents.client5 + httpclient5 commons-logging @@ -101,19 +102,6 @@ - - - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - provided - - - javax.servlet - jstl - ${jstl.version} - runtime - com.google.guava @@ -127,9 +115,9 @@ test - javax.xml.bind - jaxb-api - ${jaxb-api.version} + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.1 @@ -230,6 +218,7 @@ 4.5.8 1.6.1 + com.baeldung.inmemory.InMemoryAuthApplication \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/basic/MyBasicAuthenticationEntryPoint.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/basic/MyBasicAuthenticationEntryPoint.java index 07344819c0..01d0c83bb5 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/basic/MyBasicAuthenticationEntryPoint.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/basic/MyBasicAuthenticationEntryPoint.java @@ -4,9 +4,8 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; import org.springframework.stereotype.Component; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/HttpComponentsClientHttpRequestFactoryBasicAuth.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/HttpComponentsClientHttpRequestFactoryBasicAuth.java index 81f82a2c1c..c903fe12bb 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/HttpComponentsClientHttpRequestFactoryBasicAuth.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/HttpComponentsClientHttpRequestFactoryBasicAuth.java @@ -2,13 +2,13 @@ package com.baeldung.client; import java.net.URI; -import org.apache.http.HttpHost; -import org.apache.http.client.AuthCache; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.protocol.BasicHttpContext; -import org.apache.http.protocol.HttpContext; +import org.apache.hc.client5.http.auth.AuthCache; +import org.apache.hc.client5.http.impl.auth.BasicAuthCache; +import org.apache.hc.client5.http.impl.auth.BasicScheme; +import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.protocol.BasicHttpContext; +import org.apache.hc.core5.http.protocol.HttpContext; import org.springframework.http.HttpMethod; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/RestTemplateFactory.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/RestTemplateFactory.java index aac4f8cebd..425708abc8 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/RestTemplateFactory.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/client/RestTemplateFactory.java @@ -1,6 +1,6 @@ package com.baeldung.client; -import org.apache.http.HttpHost; +import org.apache.hc.core5.http.HttpHost; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.http.client.ClientHttpRequestFactory; @@ -35,7 +35,7 @@ public class RestTemplateFactory implements FactoryBean, Initializ @Override public void afterPropertiesSet() { - HttpHost host = new HttpHost("localhost", 8082, "http"); + HttpHost host = new HttpHost( "http", "localhost", 8082); final ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactoryBasicAuth(host); restTemplate = new RestTemplate(requestFactory); restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor("user1", "user1Pass")); diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomFilter.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomFilter.java index 6bb12610fa..a9509ddafa 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomFilter.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomFilter.java @@ -2,10 +2,10 @@ package com.baeldung.filter; import org.springframework.web.filter.GenericFilterBean; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; public class CustomFilter extends GenericFilterBean { diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomWebSecurityConfigurerAdapter.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomWebSecurityConfigurerAdapter.java index 5714b2fb3e..ce50448605 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomWebSecurityConfigurerAdapter.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/filter/CustomWebSecurityConfigurerAdapter.java @@ -30,14 +30,10 @@ public class CustomWebSecurityConfigurerAdapter { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.authorizeRequests() - .antMatchers("/securityNone") - .permitAll() - .anyRequest() - .authenticated() - .and() - .httpBasic() - .authenticationEntryPoint(authenticationEntryPoint); + http.authorizeHttpRequests(expressionInterceptUrlRegistry -> + expressionInterceptUrlRegistry.requestMatchers("/securityNone").permitAll() + .anyRequest().authenticated()) + .httpBasic(httpSecurityHttpBasicConfigurer -> httpSecurityHttpBasicConfigurer.authenticationEntryPoint(authenticationEntryPoint)); http.addFilterAfter(new CustomFilter(), BasicAuthenticationFilter.class); return http.build(); } diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryAuthWebSecurityConfigurer.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryAuthWebSecurityConfigurer.java index 839fa15734..5af2a68ac3 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryAuthWebSecurityConfigurer.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryAuthWebSecurityConfigurer.java @@ -2,6 +2,7 @@ package com.baeldung.inmemory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; @@ -25,13 +26,11 @@ public class InMemoryAuthWebSecurityConfigurer { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.authorizeRequests() - .antMatchers("/private/**") - .authenticated() - .antMatchers("/public/**") - .permitAll() - .and() - .httpBasic(); + http.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> + authorizationManagerRequestMatcherRegistry.requestMatchers("/private/**").authenticated() + .requestMatchers("/public/**").permitAll() + ) + .httpBasic(Customizer.withDefaults()); return http.build(); } diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryNoOpAuthWebSecurityConfigurer.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryNoOpAuthWebSecurityConfigurer.java index 72d3ef79d7..ba86d14aa5 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryNoOpAuthWebSecurityConfigurer.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/inmemory/InMemoryNoOpAuthWebSecurityConfigurer.java @@ -1,6 +1,7 @@ package com.baeldung.inmemory; import org.springframework.context.annotation.Bean; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; @@ -21,13 +22,9 @@ public class InMemoryNoOpAuthWebSecurityConfigurer { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.authorizeRequests() - .antMatchers("/private/**") - .authenticated() - .antMatchers("/public/**") - .permitAll() - .and() - .httpBasic(); + http.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> authorizationManagerRequestMatcherRegistry.requestMatchers("/private/**").authenticated() + .requestMatchers("/public/**").permitAll()) + .httpBasic(Customizer.withDefaults()); return http.build(); } } diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java index a1c6e1ee76..5892762ac9 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/passwordstorage/PasswordStorageWebSecurityConfigurer.java @@ -46,7 +46,7 @@ public class PasswordStorageWebSecurityConfigurer { PasswordEncoder defaultEncoder = new StandardPasswordEncoder(); Map encoders = new HashMap<>(); encoders.put("bcrypt", new BCryptPasswordEncoder()); - encoders.put("scrypt", new SCryptPasswordEncoder()); + encoders.put("scrypt", new SCryptPasswordEncoder(1, 1, 1, 1, 10)); encoders.put("noop", NoOpPasswordEncoder.getInstance()); DelegatingPasswordEncoder passwordEncoder = new DelegatingPasswordEncoder("bcrypt", encoders); diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/MySavedRequestAwareAuthenticationSuccessHandler.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/MySavedRequestAwareAuthenticationSuccessHandler.java index 7dc53e3e1e..d53aa5bdfe 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/MySavedRequestAwareAuthenticationSuccessHandler.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/MySavedRequestAwareAuthenticationSuccessHandler.java @@ -2,9 +2,9 @@ package com.baeldung.security; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/RestAuthenticationEntryPoint.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/RestAuthenticationEntryPoint.java index 1ae89adb89..cf7e9ee212 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/RestAuthenticationEntryPoint.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/security/RestAuthenticationEntryPoint.java @@ -2,8 +2,8 @@ package com.baeldung.security; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; @@ -16,8 +16,7 @@ import org.springframework.stereotype.Component; public final class RestAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override - public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException) throws IOException { + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); } - } \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/controller/BarController.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/controller/BarController.java index 6f7dc91e7e..0fd0bdac4f 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/controller/BarController.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/controller/BarController.java @@ -2,8 +2,9 @@ package com.baeldung.web.controller; import java.nio.charset.Charset; -import org.apache.commons.codec.binary.Base64; import com.baeldung.web.dto.Bar; + +import org.apache.hc.client5.http.utils.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.http.HttpHeaders; @@ -35,7 +36,7 @@ public class BarController { public HttpHeaders createHeaders(String username, String password){ return new HttpHeaders() {{ String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64( + byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII")) ); String authHeader = "Basic " + new String( encodedAuth ); set( "Authorization", authHeader ); diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Bar.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Bar.java index eb139b0ec1..1bb7476669 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Bar.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Bar.java @@ -2,7 +2,7 @@ package com.baeldung.web.dto; import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Bar implements Serializable { diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Foo.java b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Foo.java index 23cfab132d..f904be0ad9 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Foo.java +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/java/com/baeldung/web/dto/Foo.java @@ -2,7 +2,7 @@ package com.baeldung.web.dto; import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Foo implements Serializable { diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/resources/webSecurityConfig.xml b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/resources/webSecurityConfig.xml index 2ff9a1de15..d3d47579de 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/src/main/resources/webSecurityConfig.xml +++ b/spring-security-modules/spring-security-web-rest-basic-auth/src/main/resources/webSecurityConfig.xml @@ -11,6 +11,7 @@ + @@ -22,7 +23,7 @@ - + \ No newline at end of file From 11417d3c0d9873a46248ed4a399d1178f352650a Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Sun, 24 Dec 2023 22:14:02 +0200 Subject: [PATCH 12/19] JAVA-27537 Upgrade spring-soap to Spring Boot 3 (#15438) --- spring-soap/pom.xml | 16 ++++++---------- .../baeldung/springsoap/CountryRepository.java | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/spring-soap/pom.xml b/spring-soap/pom.xml index c796b08e9a..d1dff51a3e 100644 --- a/spring-soap/pom.xml +++ b/spring-soap/pom.xml @@ -9,9 +9,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../parent-boot-2 + ../parent-boot-3 @@ -42,10 +42,6 @@ jaxb-runtime - - javax.xml.bind - jaxb-api - @@ -77,9 +73,9 @@ - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - ${maven-jaxb2-plugin.version} + org.jvnet.jaxb + jaxb-maven-plugin + ${jaxb-maven-plugin.version} @@ -103,7 +99,7 @@ 4.0.0 + 4.0.0 3.1.0 - 0.15.3 \ No newline at end of file diff --git a/spring-soap/src/main/java/com/baeldung/springsoap/CountryRepository.java b/spring-soap/src/main/java/com/baeldung/springsoap/CountryRepository.java index 183027cdb6..3688854f98 100644 --- a/spring-soap/src/main/java/com/baeldung/springsoap/CountryRepository.java +++ b/spring-soap/src/main/java/com/baeldung/springsoap/CountryRepository.java @@ -3,7 +3,7 @@ package com.baeldung.springsoap; import java.util.HashMap; import java.util.Map; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component; import org.springframework.util.Assert; From 8fcec3fcdafbb65bedb48c699a30d40935cacb0d Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Mon, 25 Dec 2023 13:08:42 +0200 Subject: [PATCH 13/19] [JAVA-28936] Upgraded spring-data-jdbc to spring-boot-3 (#15437) * [JAVA-28936] --- persistence-modules/spring-data-jdbc/pom.xml | 8 ++++++-- .../springdatajdbcintro/repository/PersonRepository.java | 1 - .../baeldung/springmultipledatasources/todos/Todo.java | 8 ++++---- .../baeldung/springmultipledatasources/topics/Topic.java | 8 ++++---- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/persistence-modules/spring-data-jdbc/pom.xml b/persistence-modules/spring-data-jdbc/pom.xml index 630fe141b3..9128c70b98 100644 --- a/persistence-modules/spring-data-jdbc/pom.xml +++ b/persistence-modules/spring-data-jdbc/pom.xml @@ -7,9 +7,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../../parent-boot-2 + ../../parent-boot-3 @@ -36,4 +36,8 @@ + + true + + \ No newline at end of file diff --git a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springdatajdbcintro/repository/PersonRepository.java b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springdatajdbcintro/repository/PersonRepository.java index ceb7a968a4..b2f026fa0c 100644 --- a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springdatajdbcintro/repository/PersonRepository.java +++ b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springdatajdbcintro/repository/PersonRepository.java @@ -3,7 +3,6 @@ package com.baeldung.springdatajdbcintro.repository; import com.baeldung.springdatajdbcintro.entity.Person; import org.springframework.data.jdbc.repository.query.Modifying; import org.springframework.data.jdbc.repository.query.Query; -import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; diff --git a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/todos/Todo.java b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/todos/Todo.java index 56f513027b..1dbe75d91f 100644 --- a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/todos/Todo.java +++ b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/todos/Todo.java @@ -1,9 +1,9 @@ package com.baeldung.springmultipledatasources.todos; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity public class Todo { diff --git a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/topics/Topic.java b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/topics/Topic.java index 390300ff1a..49b33d9b96 100644 --- a/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/topics/Topic.java +++ b/persistence-modules/spring-data-jdbc/src/main/java/com/baeldung/springmultipledatasources/topics/Topic.java @@ -1,9 +1,9 @@ package com.baeldung.springmultipledatasources.topics; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity public class Topic { From 0e41d622ada85b73aa2220cf162f50ecba1e5db9 Mon Sep 17 00:00:00 2001 From: Gaetano Piazzolla Date: Mon, 25 Dec 2023 17:10:07 +0100 Subject: [PATCH 14/19] JAVA-28932 Upgrade flyway-repair to Spring boot3 migration --- persistence-modules/flyway-repair/pom.xml | 9 +++-- .../test/java/FlywayAppIntegrationTest.java | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 persistence-modules/flyway-repair/src/test/java/FlywayAppIntegrationTest.java diff --git a/persistence-modules/flyway-repair/pom.xml b/persistence-modules/flyway-repair/pom.xml index 2cae31c8a6..f7fa4f4d5e 100644 --- a/persistence-modules/flyway-repair/pom.xml +++ b/persistence-modules/flyway-repair/pom.xml @@ -10,9 +10,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../../parent-boot-2 + ../../parent-boot-3 @@ -74,7 +74,10 @@ src/main/resources/application-${spring-boot.run.profiles}.properties - 10.2.0 + 10.4.0 + 17 + 17 + 17 \ No newline at end of file diff --git a/persistence-modules/flyway-repair/src/test/java/FlywayAppIntegrationTest.java b/persistence-modules/flyway-repair/src/test/java/FlywayAppIntegrationTest.java new file mode 100644 index 0000000000..e2280ac2e4 --- /dev/null +++ b/persistence-modules/flyway-repair/src/test/java/FlywayAppIntegrationTest.java @@ -0,0 +1,38 @@ +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Set; + +import javax.sql.DataSource; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import com.baeldung.flywaycallbacks.FlywayApplication; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = { FlywayApplication.class }) +public class FlywayAppIntegrationTest { + + @Autowired + private DataSource dataSource; + + @Test + public void testAllMigrationsExecuted() throws SQLException { + DatabaseMetaData metadata = dataSource.getConnection() + .getMetaData(); + ResultSet resultSet = metadata.getTables(null, null, null, new String[] { "TABLE" }); + Set tables = Set.of("TABLE_ONE", "TABLE_TWO", "TABLE_THREE", "TABLE_FOUR"); + int migrations = 0; + while (resultSet.next()) { + if (tables.contains(resultSet.getString("TABLE_NAME"))) { + migrations++; + } + } + Assert.assertEquals(migrations, 4); + } +} From c75c95205d14ffb75560402e2b1ee18555dfcbfe Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Tue, 26 Dec 2023 01:56:04 +0200 Subject: [PATCH 15/19] JAVA-26077 Build default-jdk9-and-above and integration-jdk9-and-above profiles on JDK 21 (#15425) Co-authored-by: timis1 --- aws-modules/aws-reactive/pom.xml | 1 - testing-modules/gatling-java/pom.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/aws-modules/aws-reactive/pom.xml b/aws-modules/aws-reactive/pom.xml index 965ce8fdcf..e36a2d1a46 100644 --- a/aws-modules/aws-reactive/pom.xml +++ b/aws-modules/aws-reactive/pom.xml @@ -94,7 +94,6 @@ 2.2.1.RELEASE 2.17.283 - 1.18.20 3.6.0 diff --git a/testing-modules/gatling-java/pom.xml b/testing-modules/gatling-java/pom.xml index 54dee1fd88..d28876b42c 100644 --- a/testing-modules/gatling-java/pom.xml +++ b/testing-modules/gatling-java/pom.xml @@ -33,7 +33,7 @@ org.projectlombok lombok - 1.18.24 + ${lombok.version} provided From b83af82bce57cd26b85080c7464ca43320e981b1 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Tue, 26 Dec 2023 06:42:20 +0200 Subject: [PATCH 16/19] [JAVA-29410] (#15485) * [JAVA-29410] * [JAVA-29410] --- xml-2/README.md | 2 ++ .../src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java | 0 {xml => xml-2}/src/main/resources/xml2csv/data.xml | 0 {xml => xml-2}/src/main/resources/xml2csv/style.xsl | 0 .../java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java | 0 xml/README.md | 2 +- 6 files changed, 3 insertions(+), 1 deletion(-) rename {xml => xml-2}/src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java (100%) rename {xml => xml-2}/src/main/resources/xml2csv/data.xml (100%) rename {xml => xml-2}/src/main/resources/xml2csv/style.xsl (100%) rename {xml => xml-2}/src/test/java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java (100%) diff --git a/xml-2/README.md b/xml-2/README.md index a6762f2840..1075f34e1f 100644 --- a/xml-2/README.md +++ b/xml-2/README.md @@ -10,3 +10,5 @@ This module contains articles about eXtensible Markup Language (XML) - [Convert an XML Object to a String in Java](https://www.baeldung.com/java-convert-xml-object-string) - [Convert String Containing XML to org.w3c.dom.Document](https://www.baeldung.com/java-convert-string-xml-dom) - [How to Parse XML to HashMap in Java](https://www.baeldung.com/java-xml-read-into-hashmap) +- [Convert an XML File to CSV File](https://www.baeldung.com/java-convert-xml-csv) +- - More articles: [[prev -->]](../xml) \ No newline at end of file diff --git a/xml/src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java b/xml-2/src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java similarity index 100% rename from xml/src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java rename to xml-2/src/main/java/com/baeldung/xml/xml2csv/Xml2CsvExample.java diff --git a/xml/src/main/resources/xml2csv/data.xml b/xml-2/src/main/resources/xml2csv/data.xml similarity index 100% rename from xml/src/main/resources/xml2csv/data.xml rename to xml-2/src/main/resources/xml2csv/data.xml diff --git a/xml/src/main/resources/xml2csv/style.xsl b/xml-2/src/main/resources/xml2csv/style.xsl similarity index 100% rename from xml/src/main/resources/xml2csv/style.xsl rename to xml-2/src/main/resources/xml2csv/style.xsl diff --git a/xml/src/test/java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java b/xml-2/src/test/java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java similarity index 100% rename from xml/src/test/java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java rename to xml-2/src/test/java/com/baeldung/xml/xml2csv/Xml2CsvExampleUnitTest.java diff --git a/xml/README.md b/xml/README.md index 596ddc14aa..be12640252 100644 --- a/xml/README.md +++ b/xml/README.md @@ -13,4 +13,4 @@ This module contains articles about eXtensible Markup Language (XML) - [Parsing an XML File Using StAX](https://www.baeldung.com/java-stax) - [Parsing an XML File Using SAX Parser](https://www.baeldung.com/java-sax-parser) - [Remove HTML Tags Using Java](https://www.baeldung.com/java-remove-html-tags) -- [Convert an XML File to CSV File](https://www.baeldung.com/java-convert-xml-csv) +- More articles: [[next -->]](../xml-2) From 21347e6cf2c2a944f49bffc181aec76ba762975d Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Tue, 26 Dec 2023 06:47:23 +0200 Subject: [PATCH 17/19] [JAVA-29409] (#15483) --- .../core-java-streams-3/README.md | 2 +- .../core-java-streams-4/README.md | 1 + .../core-java-streams-5/README.md | 2 +- .../core-java-streams-maps/README.md | 1 + .../StreamToMapAndMultiMapUnitTest.java | 107 ++++++++++++++++++ 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 core-java-modules/core-java-streams-maps/src/test/java/com/baeldung/streams/streamtomapandmultimap/StreamToMapAndMultiMapUnitTest.java diff --git a/core-java-modules/core-java-streams-3/README.md b/core-java-modules/core-java-streams-3/README.md index 70d9e68a5e..45da963eb3 100644 --- a/core-java-modules/core-java-streams-3/README.md +++ b/core-java-modules/core-java-streams-3/README.md @@ -11,4 +11,4 @@ This module contains articles about the Stream API in Java. - [Should We Close a Java Stream?](https://www.baeldung.com/java-stream-close) - [Returning Stream vs. Collection](https://www.baeldung.com/java-return-stream-collection) - [Convert a Java Enumeration Into a Stream](https://www.baeldung.com/java-enumeration-to-stream) -- More articles: [[<-- prev>]](/../core-java-streams-2) +- More articles: [[<-- prev>]](/../core-java-streams-2) [[next -->]](/../core-java-streams-4) diff --git a/core-java-modules/core-java-streams-4/README.md b/core-java-modules/core-java-streams-4/README.md index c6717ec5fe..554649fdaa 100644 --- a/core-java-modules/core-java-streams-4/README.md +++ b/core-java-modules/core-java-streams-4/README.md @@ -10,3 +10,4 @@ - [Understanding the Difference Between Stream.of() and IntStream.range()](https://www.baeldung.com/java-stream-of-and-intstream-range) - [Check if Object Is an Array in Java](https://www.baeldung.com/java-check-if-object-is-an-array) - [Mapping an Array of Integers to Strings Using Java Streams](https://www.baeldung.com/java-stream-integer-array-to-strings) +- More articles: [[<-- prev>]](/../core-java-streams-3) [[next -->]](/../core-java-streams-5) diff --git a/core-java-modules/core-java-streams-5/README.md b/core-java-modules/core-java-streams-5/README.md index 41fcb129df..6e160e68ad 100644 --- a/core-java-modules/core-java-streams-5/README.md +++ b/core-java-modules/core-java-streams-5/README.md @@ -6,7 +6,7 @@ - [Partition a Stream in Java](https://www.baeldung.com/java-partition-stream) - [Taking Every N-th Element from Finite and Infinite Streams in Java](https://www.baeldung.com/java-nth-element-finite-infinite-streams) - [Modifying Objects Within Stream While Iterating](https://www.baeldung.com/java-stream-modify-objects-during-iteration) -- [Convert a Stream into a Map or Multimap in Java](https://www.baeldung.com/java-convert-stream-map-multimap) - [How to Avoid NoSuchElementException in Stream API](https://www.baeldung.com/java-streams-api-avoid-nosuchelementexception) - [Get Index of First Element Matching Boolean Using Java Streams](https://www.baeldung.com/java-streams-find-first-match-index) - [Handling NullPointerException in findFirst() When the First Element Is Null](https://www.baeldung.com/java-handle-nullpointerexception-findfirst-first-null) +- More articles: [[<-- prev>]](/../core-java-streams-4) diff --git a/core-java-modules/core-java-streams-maps/README.md b/core-java-modules/core-java-streams-maps/README.md index f9f7dffad9..8f311d91a5 100644 --- a/core-java-modules/core-java-streams-maps/README.md +++ b/core-java-modules/core-java-streams-maps/README.md @@ -1,2 +1,3 @@ ## Relevant Articles: - [Handle Duplicate Keys When Producing Map Using Java Stream](https://www.baeldung.com/java-duplicate-keys-when-producing-map-using-stream) +- [Convert a Stream into a Map or Multimap in Java](https://www.baeldung.com/java-convert-stream-map-multimap) \ No newline at end of file diff --git a/core-java-modules/core-java-streams-maps/src/test/java/com/baeldung/streams/streamtomapandmultimap/StreamToMapAndMultiMapUnitTest.java b/core-java-modules/core-java-streams-maps/src/test/java/com/baeldung/streams/streamtomapandmultimap/StreamToMapAndMultiMapUnitTest.java new file mode 100644 index 0000000000..6e8c26a76e --- /dev/null +++ b/core-java-modules/core-java-streams-maps/src/test/java/com/baeldung/streams/streamtomapandmultimap/StreamToMapAndMultiMapUnitTest.java @@ -0,0 +1,107 @@ +package com.baeldung.streams.streamtomapandmultimap; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Test; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; + +public class StreamToMapAndMultiMapUnitTest { + @Test + public void givenStringStream_whenConvertingToMapWithMerge_thenExpectedMapIsGenerated() { + Stream stringStream = Stream.of("one", "two", "three", "two"); + + Map mergedMap = stringStream.collect( + Collectors.toMap(s -> s, s -> s, (s1, s2) -> s1 + ", " + s2) + ); + + // Define the expected map + Map expectedMap = Map.of( + "one", "one", + "two", "two, two", + "three", "three" + ); + + assertEquals(expectedMap, mergedMap); + } + + @Test + public void givenStringStream_whenConvertingToMultimap_thenExpectedMultimapIsGenerated() { + Stream stringStream = Stream.of("one", "two", "three", "two"); + + ListMultimap multimap = stringStream.collect( + ArrayListMultimap::create, + (map, element) -> map.put(element, element), + ArrayListMultimap::putAll + ); + + ListMultimap expectedMultimap = ArrayListMultimap.create(); + expectedMultimap.put("one", "one"); + expectedMultimap.put("two", "two"); + expectedMultimap.put("two", "two"); + expectedMultimap.put("three", "three"); + + assertEquals(expectedMultimap, multimap); + } + + @Test + public void givenStringStream_whenConvertingToMultimapWithStreamReduce_thenExpectedMultimapIsGenerated() { + Stream stringStream = Stream.of("one", "two", "three", "two"); + + Map> multimap = stringStream.reduce( + new HashMap<>(), + (map, element) -> { + map.computeIfAbsent(element, k -> new ArrayList<>()).add(element); + return map; + }, + (map1, map2) -> { + map2.forEach((key, value) -> map1.merge(key, value, (list1, list2) -> { + list1.addAll(list2); + return list1; + })); + return map1; + } + ); + + Map> expectedMultimap = new HashMap<>(); + expectedMultimap.put("one", Collections.singletonList("one")); + expectedMultimap.put("two", Arrays.asList("two", "two")); + expectedMultimap.put("three", Collections.singletonList("three")); + + assertEquals(expectedMultimap, multimap); + } + + @Test + public void givenStringStream_whenConvertingToMapWithStreamReduce_thenExpectedMapIsGenerated() { + Stream stringStream = Stream.of("one", "two", "three", "two"); + + Map resultMap = stringStream.reduce( + new HashMap<>(), + (map, element) -> { + map.put(element, element); + return map; + }, + (map1, map2) -> { + map1.putAll(map2); + return map1; + } + ); + + Map expectedMap = new HashMap<>(); + expectedMap.put("one", "one"); + expectedMap.put("two", "two"); + expectedMap.put("three", "three"); + + assertEquals(expectedMap, resultMap); + } +} From 49606ff3a4bbd08c51a11f062150569b210c88a9 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 26 Dec 2023 23:34:31 +0530 Subject: [PATCH 18/19] Upgrade Spring-Data-YugabyteDB to boot 3 (#15453) --- persistence-modules/spring-data-yugabytedb/pom.xml | 8 ++++++-- .../src/main/java/com/baeldung/User.java | 12 ++++++------ .../src/main/resources/application.properties | 2 ++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/persistence-modules/spring-data-yugabytedb/pom.xml b/persistence-modules/spring-data-yugabytedb/pom.xml index d7f7576cfe..ec10275da4 100644 --- a/persistence-modules/spring-data-yugabytedb/pom.xml +++ b/persistence-modules/spring-data-yugabytedb/pom.xml @@ -10,11 +10,15 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../../parent-boot-2 + ../../parent-boot-3 + + com.baeldung.Main + + org.springframework.boot diff --git a/persistence-modules/spring-data-yugabytedb/src/main/java/com/baeldung/User.java b/persistence-modules/spring-data-yugabytedb/src/main/java/com/baeldung/User.java index 54bbf2617c..c6c40c6953 100644 --- a/persistence-modules/spring-data-yugabytedb/src/main/java/com/baeldung/User.java +++ b/persistence-modules/spring-data-yugabytedb/src/main/java/com/baeldung/User.java @@ -1,11 +1,11 @@ package com.baeldung; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "users") diff --git a/persistence-modules/spring-data-yugabytedb/src/main/resources/application.properties b/persistence-modules/spring-data-yugabytedb/src/main/resources/application.properties index fdb3d50ec8..19c539ec9d 100644 --- a/persistence-modules/spring-data-yugabytedb/src/main/resources/application.properties +++ b/persistence-modules/spring-data-yugabytedb/src/main/resources/application.properties @@ -2,3 +2,5 @@ spring.datasource.url=jdbc:postgresql://localhost:5433/yugabyte spring.datasource.username=yugabyte spring.datasource.password=yugabyte spring.jpa.hibernate.ddl-auto=create +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect + From 5ead3608acac00c427c94e4cec00e8c68e9c448f Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Tue, 26 Dec 2023 21:15:47 +0200 Subject: [PATCH 19/19] [JAVA-27621] Moved article "Remove Duplicate Values From HashMap in Java" to core-java-collections-maps-3 (#15464) --- core-java-modules/core-java-collections-maps-3/README.md | 3 ++- .../map/removeduplicate/RemoveDuplicateValuesUnitTest.java | 2 +- core-java-modules/core-java-collections-maps-4/README.md | 1 + core-java-modules/core-java-collections-maps-5/README.md | 3 ++- core-java-modules/core-java-collections-maps-6/README.md | 3 ++- 5 files changed, 8 insertions(+), 4 deletions(-) rename core-java-modules/{core-java-collections-maps-6 => core-java-collections-maps-3}/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java (98%) diff --git a/core-java-modules/core-java-collections-maps-3/README.md b/core-java-modules/core-java-collections-maps-3/README.md index 0d07bde8c1..d7b0153a69 100644 --- a/core-java-modules/core-java-collections-maps-3/README.md +++ b/core-java-modules/core-java-collections-maps-3/README.md @@ -10,4 +10,5 @@ This module contains articles about Map data structures in Java. - [Java HashMap Load Factor](https://www.baeldung.com/java-hashmap-load-factor) - [Converting Java Properties to HashMap](https://www.baeldung.com/java-convert-properties-to-hashmap) - [Get Values and Keys as ArrayList From a HashMap](https://www.baeldung.com/java-values-keys-arraylists-hashmap) -- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-2) +- [Remove Duplicate Values From HashMap in Java](https://www.baeldung.com/java-hashmap-delete-duplicates) +- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-2)[[next -->]](/core-java-modules/core-java-collections-maps-4) diff --git a/core-java-modules/core-java-collections-maps-6/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java b/core-java-modules/core-java-collections-maps-3/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java similarity index 98% rename from core-java-modules/core-java-collections-maps-6/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java rename to core-java-modules/core-java-collections-maps-3/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java index 080bc46289..e1fca2b93a 100644 --- a/core-java-modules/core-java-collections-maps-6/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java +++ b/core-java-modules/core-java-collections-maps-3/src/test/java/com/baeldung/map/removeduplicate/RemoveDuplicateValuesUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.map.removeuplicate; +package com.baeldung.map.removeduplicate; import static java.util.stream.Collectors.toMap; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-java-modules/core-java-collections-maps-4/README.md b/core-java-modules/core-java-collections-maps-4/README.md index 9dd9cbe0d9..cc7c9b77e0 100644 --- a/core-java-modules/core-java-collections-maps-4/README.md +++ b/core-java-modules/core-java-collections-maps-4/README.md @@ -9,3 +9,4 @@ This module contains articles about Map data structures in Java. - [Difference Between Map and HashMap in Java](https://www.baeldung.com/java-map-vs-hashmap) - [How to Create a New Entry in a Map](https://www.baeldung.com/java-map-new-entry) - [Difference Between Map and MultivaluedMap in Java](https://www.baeldung.com/java-map-vs-multivaluedmap) +- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-3)[[next -->]](/core-java-modules/core-java-collections-maps-5) diff --git a/core-java-modules/core-java-collections-maps-5/README.md b/core-java-modules/core-java-collections-maps-5/README.md index e1817c7ba4..b952bbeb2d 100644 --- a/core-java-modules/core-java-collections-maps-5/README.md +++ b/core-java-modules/core-java-collections-maps-5/README.md @@ -10,4 +10,5 @@ - [How to Invert a Map in Java](https://www.baeldung.com/java-invert-map) - [Implementing a Map with Multiple Keys in Java](https://www.baeldung.com/java-multiple-keys-map) - [Difference Between Map.ofEntries() and Map.of()](https://www.baeldung.com/map-ofentries-and-map-of) -- More articles: [[<-- prev]](../core-java-collections-maps-4) +- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-4)[[next -->]](/core-java-modules/core-java-collections-maps-6) + diff --git a/core-java-modules/core-java-collections-maps-6/README.md b/core-java-modules/core-java-collections-maps-6/README.md index f116d0315e..4e03cdee36 100644 --- a/core-java-modules/core-java-collections-maps-6/README.md +++ b/core-java-modules/core-java-collections-maps-6/README.md @@ -7,6 +7,7 @@ - [Converting JsonNode Object to Map](https://www.baeldung.com/jackson-jsonnode-map) - [How to Modify a Key in a HashMap?](https://www.baeldung.com/java-hashmap-modify-key) - [Converting String or String Array to Map in Java](https://www.baeldung.com/java-convert-string-to-map) -- [Remove Duplicate Values From HashMap in Java](https://www.baeldung.com/java-hashmap-delete-duplicates) - [Sorting Java Map in Descending Order](https://www.baeldung.com/java-sort-map-descending) - [Convert HashMap.toString() to HashMap in Java](https://www.baeldung.com/hashmap-from-tostring) +- More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-5)[[next -->]](/core-java-modules/core-java-collections-maps-7) +