diff --git a/core-java-modules/core-java-collections-list-4/README.md b/core-java-modules/core-java-collections-list-4/README.md
index 09b61fa9b2..4c020969e3 100644
--- a/core-java-modules/core-java-collections-list-4/README.md
+++ b/core-java-modules/core-java-collections-list-4/README.md
@@ -5,4 +5,5 @@ This module contains articles about the Java List collection
### Relevant Articles:
- [Working With a List of Lists in Java](https://www.baeldung.com/java-list-of-lists)
- [Reverse an ArrayList in Java](https://www.baeldung.com/java-reverse-arraylist)
+- [Sort a List Alphabetically in Java](https://www.baeldung.com/java-sort-list-alphabetically)
- [[<-- Prev]](/core-java-modules/core-java-collections-list-3)
diff --git a/core-java-modules/java-numbers-4/src/test/java/com/baeldung/bigdecimalzero/BigDecimalZeroChkUnitTest.java b/core-java-modules/java-numbers-4/src/test/java/com/baeldung/bigdecimalzero/BigDecimalZeroChkUnitTest.java
new file mode 100644
index 0000000000..a61bfe1dd7
--- /dev/null
+++ b/core-java-modules/java-numbers-4/src/test/java/com/baeldung/bigdecimalzero/BigDecimalZeroChkUnitTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.bigdecimalzero;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.math.BigDecimal;
+
+import org.junit.jupiter.api.Test;
+
+class BigDecimalZeroChkUnitTest {
+ private static final BigDecimal BD1 = new BigDecimal("0");
+ private static final BigDecimal BD2 = new BigDecimal("0.0000");
+
+ @Test
+ void givenBD_whenCheckedWithEquals_shouldCheckedAsZero() {
+ assertThat(BigDecimal.ZERO.equals(BD1)).isTrue();
+
+ // in the article, we show the failure of the assertion below
+ // assertThat(BigDecimal.ZERO.equals(BD2)).isTrue();
+
+ assertThat(BigDecimal.ZERO.equals(BD2)).isFalse();
+ }
+
+ @Test
+ void givenBD_whenCheckedWithCompareTo_shouldCheckedAsZero() {
+ assertThat(BigDecimal.ZERO.compareTo(BD1)).isSameAs(0);
+ assertThat(BigDecimal.ZERO.compareTo(BD2)).isSameAs(0);
+ }
+
+ @Test
+ void givenBD_whenCheckedWithSignum_shouldCheckedAsZero() {
+ assertThat(BD1.signum()).isSameAs(0);
+ assertThat(BD2.signum()).isSameAs(0);
+ }
+}
diff --git a/docker/README.md b/docker-modules/README.md
similarity index 100%
rename from docker/README.md
rename to docker-modules/README.md
diff --git a/docker/docker-caching/multi-module-caching/Dockerfile b/docker-modules/docker-caching/multi-module-caching/Dockerfile
similarity index 100%
rename from docker/docker-caching/multi-module-caching/Dockerfile
rename to docker-modules/docker-caching/multi-module-caching/Dockerfile
diff --git a/docker/docker-caching/multi-module-caching/Dockerfile-Buildkit b/docker-modules/docker-caching/multi-module-caching/Dockerfile-Buildkit
similarity index 100%
rename from docker/docker-caching/multi-module-caching/Dockerfile-Buildkit
rename to docker-modules/docker-caching/multi-module-caching/Dockerfile-Buildkit
diff --git a/docker/docker-caching/multi-module-caching/core/pom.xml b/docker-modules/docker-caching/multi-module-caching/core/pom.xml
similarity index 100%
rename from docker/docker-caching/multi-module-caching/core/pom.xml
rename to docker-modules/docker-caching/multi-module-caching/core/pom.xml
diff --git a/docker/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java b/docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java
similarity index 100%
rename from docker/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java
rename to docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java
diff --git a/docker/docker-caching/multi-module-caching/pom.xml b/docker-modules/docker-caching/multi-module-caching/pom.xml
similarity index 100%
rename from docker/docker-caching/multi-module-caching/pom.xml
rename to docker-modules/docker-caching/multi-module-caching/pom.xml
diff --git a/docker/docker-caching/multi-module-caching/runner/pom.xml b/docker-modules/docker-caching/multi-module-caching/runner/pom.xml
similarity index 100%
rename from docker/docker-caching/multi-module-caching/runner/pom.xml
rename to docker-modules/docker-caching/multi-module-caching/runner/pom.xml
diff --git a/docker/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java b/docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java
similarity index 100%
rename from docker/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java
rename to docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java
diff --git a/docker/docker-caching/single-module-caching/Dockerfile b/docker-modules/docker-caching/single-module-caching/Dockerfile
similarity index 100%
rename from docker/docker-caching/single-module-caching/Dockerfile
rename to docker-modules/docker-caching/single-module-caching/Dockerfile
diff --git a/docker/docker-caching/single-module-caching/Dockerfile-Buildkit b/docker-modules/docker-caching/single-module-caching/Dockerfile-Buildkit
similarity index 100%
rename from docker/docker-caching/single-module-caching/Dockerfile-Buildkit
rename to docker-modules/docker-caching/single-module-caching/Dockerfile-Buildkit
diff --git a/docker/docker-caching/single-module-caching/pom.xml b/docker-modules/docker-caching/single-module-caching/pom.xml
similarity index 100%
rename from docker/docker-caching/single-module-caching/pom.xml
rename to docker-modules/docker-caching/single-module-caching/pom.xml
diff --git a/docker/docker-caching/single-module-caching/src/main/java/com/baeldung/maven_caching/MavenCachingMain.java b/docker-modules/docker-caching/single-module-caching/src/main/java/com/baeldung/maven_caching/MavenCachingMain.java
similarity index 100%
rename from docker/docker-caching/single-module-caching/src/main/java/com/baeldung/maven_caching/MavenCachingMain.java
rename to docker-modules/docker-caching/single-module-caching/src/main/java/com/baeldung/maven_caching/MavenCachingMain.java
diff --git a/docker/docker-compose.yml b/docker-modules/docker-compose.yml
similarity index 100%
rename from docker/docker-compose.yml
rename to docker-modules/docker-compose.yml
diff --git a/docker/docker-include-outside-build-context/projects/config/Dockerfile b/docker-modules/docker-include-outside-build-context/projects/config/Dockerfile
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/config/Dockerfile
rename to docker-modules/docker-include-outside-build-context/projects/config/Dockerfile
diff --git a/docker/docker-include-outside-build-context/projects/config/nginx.conf b/docker-modules/docker-include-outside-build-context/projects/config/nginx.conf
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/config/nginx.conf
rename to docker-modules/docker-include-outside-build-context/projects/config/nginx.conf
diff --git a/docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile b/docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile
rename to docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile
diff --git a/docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-from-base b/docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-from-base
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-from-base
rename to docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-from-base
diff --git a/docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-script b/docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-script
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-script
rename to docker-modules/docker-include-outside-build-context/projects/sample-site/docker/Dockerfile-script
diff --git a/docker/docker-include-outside-build-context/projects/sample-site/docker/build-docker.sh b/docker-modules/docker-include-outside-build-context/projects/sample-site/docker/build-docker.sh
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/sample-site/docker/build-docker.sh
rename to docker-modules/docker-include-outside-build-context/projects/sample-site/docker/build-docker.sh
diff --git a/docker/docker-include-outside-build-context/projects/sample-site/html/index.html b/docker-modules/docker-include-outside-build-context/projects/sample-site/html/index.html
similarity index 100%
rename from docker/docker-include-outside-build-context/projects/sample-site/html/index.html
rename to docker-modules/docker-include-outside-build-context/projects/sample-site/html/index.html
diff --git a/docker/docker-internal-dto/pom.xml b/docker-modules/docker-internal-dto/pom.xml
similarity index 91%
rename from docker/docker-internal-dto/pom.xml
rename to docker-modules/docker-internal-dto/pom.xml
index 09013d2fc3..467d46e7ae 100644
--- a/docker/docker-internal-dto/pom.xml
+++ b/docker-modules/docker-internal-dto/pom.xml
@@ -8,7 +8,7 @@
com.baeldung.docker
- docker
+ docker-modules
0.0.1
diff --git a/docker/docker-internal-dto/src/main/java/com/baeldung/docker/dto/VariableDto.java b/docker-modules/docker-internal-dto/src/main/java/com/baeldung/docker/dto/VariableDto.java
similarity index 100%
rename from docker/docker-internal-dto/src/main/java/com/baeldung/docker/dto/VariableDto.java
rename to docker-modules/docker-internal-dto/src/main/java/com/baeldung/docker/dto/VariableDto.java
diff --git a/docker/docker-push-to-private-repo/.gitignore b/docker-modules/docker-push-to-private-repo/.gitignore
similarity index 100%
rename from docker/docker-push-to-private-repo/.gitignore
rename to docker-modules/docker-push-to-private-repo/.gitignore
diff --git a/docker/docker-push-to-private-repo/Dockerfile b/docker-modules/docker-push-to-private-repo/Dockerfile
similarity index 100%
rename from docker/docker-push-to-private-repo/Dockerfile
rename to docker-modules/docker-push-to-private-repo/Dockerfile
diff --git a/docker/docker-push-to-private-repo/README.md b/docker-modules/docker-push-to-private-repo/README.md
similarity index 100%
rename from docker/docker-push-to-private-repo/README.md
rename to docker-modules/docker-push-to-private-repo/README.md
diff --git a/docker/docker-push-to-private-repo/pom.xml b/docker-modules/docker-push-to-private-repo/pom.xml
similarity index 96%
rename from docker/docker-push-to-private-repo/pom.xml
rename to docker-modules/docker-push-to-private-repo/pom.xml
index 19be098794..c45baa65c3 100644
--- a/docker/docker-push-to-private-repo/pom.xml
+++ b/docker-modules/docker-push-to-private-repo/pom.xml
@@ -10,7 +10,7 @@
com.baeldung.docker
- docker
+ docker-modules
0.0.1
diff --git a/docker/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/HelloWorldController.java b/docker-modules/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/HelloWorldController.java
similarity index 100%
rename from docker/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/HelloWorldController.java
rename to docker-modules/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/HelloWorldController.java
diff --git a/docker/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/PushToPrivateRepoApplication.java b/docker-modules/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/PushToPrivateRepoApplication.java
similarity index 100%
rename from docker/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/PushToPrivateRepoApplication.java
rename to docker-modules/docker-push-to-private-repo/src/main/java/com/baeldung/docker/push/PushToPrivateRepoApplication.java
diff --git a/docker/docker-push-to-private-repo/src/main/resources/application.properties b/docker-modules/docker-push-to-private-repo/src/main/resources/application.properties
similarity index 100%
rename from docker/docker-push-to-private-repo/src/main/resources/application.properties
rename to docker-modules/docker-push-to-private-repo/src/main/resources/application.properties
diff --git a/docker/docker-sample-app/Dockerfile b/docker-modules/docker-sample-app/Dockerfile
similarity index 100%
rename from docker/docker-sample-app/Dockerfile
rename to docker-modules/docker-sample-app/Dockerfile
diff --git a/docker/docker-sample-app/README.md b/docker-modules/docker-sample-app/README.md
similarity index 100%
rename from docker/docker-sample-app/README.md
rename to docker-modules/docker-sample-app/README.md
diff --git a/docker/docker-sample-app/docker-compose-build-image.yaml b/docker-modules/docker-sample-app/docker-compose-build-image.yaml
similarity index 100%
rename from docker/docker-sample-app/docker-compose-build-image.yaml
rename to docker-modules/docker-sample-app/docker-compose-build-image.yaml
diff --git a/docker/docker-sample-app/docker-compose-with-image.yaml b/docker-modules/docker-sample-app/docker-compose-with-image.yaml
similarity index 100%
rename from docker/docker-sample-app/docker-compose-with-image.yaml
rename to docker-modules/docker-sample-app/docker-compose-with-image.yaml
diff --git a/docker/docker-sample-app/pom.xml b/docker-modules/docker-sample-app/pom.xml
similarity index 96%
rename from docker/docker-sample-app/pom.xml
rename to docker-modules/docker-sample-app/pom.xml
index 24fede56fd..893fb4ebe2 100644
--- a/docker/docker-sample-app/pom.xml
+++ b/docker-modules/docker-sample-app/pom.xml
@@ -9,7 +9,7 @@
com.baeldung.docker
- docker
+ docker-modules
0.0.1
diff --git a/docker/docker-sample-app/src/main/java/com/baeldung/docker/app/DockAppApplication.java b/docker-modules/docker-sample-app/src/main/java/com/baeldung/docker/app/DockAppApplication.java
similarity index 100%
rename from docker/docker-sample-app/src/main/java/com/baeldung/docker/app/DockAppApplication.java
rename to docker-modules/docker-sample-app/src/main/java/com/baeldung/docker/app/DockAppApplication.java
diff --git a/docker/docker-sample-app/src/main/java/com/baeldung/docker/app/endpoint/MyController.java b/docker-modules/docker-sample-app/src/main/java/com/baeldung/docker/app/endpoint/MyController.java
similarity index 100%
rename from docker/docker-sample-app/src/main/java/com/baeldung/docker/app/endpoint/MyController.java
rename to docker-modules/docker-sample-app/src/main/java/com/baeldung/docker/app/endpoint/MyController.java
diff --git a/docker/docker-sample-app/src/main/resources/application.properties b/docker-modules/docker-sample-app/src/main/resources/application.properties
similarity index 100%
rename from docker/docker-sample-app/src/main/resources/application.properties
rename to docker-modules/docker-sample-app/src/main/resources/application.properties
diff --git a/docker/docker-sample-app/src/test/java/com/baeldung/docker/app/DockAppApplicationUnitTest.java b/docker-modules/docker-sample-app/src/test/java/com/baeldung/docker/app/DockAppApplicationUnitTest.java
similarity index 100%
rename from docker/docker-sample-app/src/test/java/com/baeldung/docker/app/DockAppApplicationUnitTest.java
rename to docker-modules/docker-sample-app/src/test/java/com/baeldung/docker/app/DockAppApplicationUnitTest.java
diff --git a/docker/docker-spring-boot-postgres/.gitignore b/docker-modules/docker-spring-boot-postgres/.gitignore
similarity index 100%
rename from docker/docker-spring-boot-postgres/.gitignore
rename to docker-modules/docker-spring-boot-postgres/.gitignore
diff --git a/docker/docker-spring-boot-postgres/.mvn/wrapper/MavenWrapperDownloader.java b/docker-modules/docker-spring-boot-postgres/.mvn/wrapper/MavenWrapperDownloader.java
similarity index 100%
rename from docker/docker-spring-boot-postgres/.mvn/wrapper/MavenWrapperDownloader.java
rename to docker-modules/docker-spring-boot-postgres/.mvn/wrapper/MavenWrapperDownloader.java
diff --git a/docker/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.jar b/docker-modules/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.jar
similarity index 100%
rename from docker/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.jar
rename to docker-modules/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.jar
diff --git a/docker/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.properties b/docker-modules/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from docker/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.properties
rename to docker-modules/docker-spring-boot-postgres/.mvn/wrapper/maven-wrapper.properties
diff --git a/docker/docker-spring-boot-postgres/mvnw b/docker-modules/docker-spring-boot-postgres/mvnw
similarity index 100%
rename from docker/docker-spring-boot-postgres/mvnw
rename to docker-modules/docker-spring-boot-postgres/mvnw
diff --git a/docker/docker-spring-boot-postgres/mvnw.cmd b/docker-modules/docker-spring-boot-postgres/mvnw.cmd
similarity index 100%
rename from docker/docker-spring-boot-postgres/mvnw.cmd
rename to docker-modules/docker-spring-boot-postgres/mvnw.cmd
diff --git a/docker/docker-spring-boot-postgres/pom.xml b/docker-modules/docker-spring-boot-postgres/pom.xml
similarity index 100%
rename from docker/docker-spring-boot-postgres/pom.xml
rename to docker-modules/docker-spring-boot-postgres/pom.xml
diff --git a/docker/docker-spring-boot-postgres/src/main/docker/Dockerfile b/docker-modules/docker-spring-boot-postgres/src/main/docker/Dockerfile
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/docker/Dockerfile
rename to docker-modules/docker-spring-boot-postgres/src/main/docker/Dockerfile
diff --git a/docker/docker-spring-boot-postgres/src/main/docker/docker-compose.yml b/docker-modules/docker-spring-boot-postgres/src/main/docker/docker-compose.yml
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/docker/docker-compose.yml
rename to docker-modules/docker-spring-boot-postgres/src/main/docker/docker-compose.yml
diff --git a/docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/Customer.java b/docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/Customer.java
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/Customer.java
rename to docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/Customer.java
diff --git a/docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/CustomerRepository.java b/docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/CustomerRepository.java
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/CustomerRepository.java
rename to docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/CustomerRepository.java
diff --git a/docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/DemoApplication.java b/docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/DemoApplication.java
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/DemoApplication.java
rename to docker-modules/docker-spring-boot-postgres/src/main/java/com/baeldung/docker/DemoApplication.java
diff --git a/docker/docker-spring-boot-postgres/src/main/resources/application.properties b/docker-modules/docker-spring-boot-postgres/src/main/resources/application.properties
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/main/resources/application.properties
rename to docker-modules/docker-spring-boot-postgres/src/main/resources/application.properties
diff --git a/docker/docker-spring-boot-postgres/src/test/java/com/baeldung/docker/DemoApplicationTests.java b/docker-modules/docker-spring-boot-postgres/src/test/java/com/baeldung/docker/DemoApplicationTests.java
similarity index 100%
rename from docker/docker-spring-boot-postgres/src/test/java/com/baeldung/docker/DemoApplicationTests.java
rename to docker-modules/docker-spring-boot-postgres/src/test/java/com/baeldung/docker/DemoApplicationTests.java
diff --git a/docker/docker-spring-boot/README.md b/docker-modules/docker-spring-boot/README.md
similarity index 100%
rename from docker/docker-spring-boot/README.md
rename to docker-modules/docker-spring-boot/README.md
diff --git a/docker/docker-spring-boot/pom.xml b/docker-modules/docker-spring-boot/pom.xml
similarity index 97%
rename from docker/docker-spring-boot/pom.xml
rename to docker-modules/docker-spring-boot/pom.xml
index 69d25e374b..22a5e254fe 100644
--- a/docker/docker-spring-boot/pom.xml
+++ b/docker-modules/docker-spring-boot/pom.xml
@@ -9,7 +9,7 @@
com.baeldung.docker
- docker
+ docker-modules
0.0.1
diff --git a/docker/docker-spring-boot/src/layers.xml b/docker-modules/docker-spring-boot/src/layers.xml
similarity index 100%
rename from docker/docker-spring-boot/src/layers.xml
rename to docker-modules/docker-spring-boot/src/layers.xml
diff --git a/docker/docker-spring-boot/src/main/docker/Dockerfile b/docker-modules/docker-spring-boot/src/main/docker/Dockerfile
similarity index 100%
rename from docker/docker-spring-boot/src/main/docker/Dockerfile
rename to docker-modules/docker-spring-boot/src/main/docker/Dockerfile
diff --git a/docker/docker-spring-boot/src/main/docker/springprofile/Dockerfile b/docker-modules/docker-spring-boot/src/main/docker/springprofile/Dockerfile
similarity index 100%
rename from docker/docker-spring-boot/src/main/docker/springprofile/Dockerfile
rename to docker-modules/docker-spring-boot/src/main/docker/springprofile/Dockerfile
diff --git a/docker/docker-spring-boot/src/main/docker/springprofile/docker-compose-prod.yml b/docker-modules/docker-spring-boot/src/main/docker/springprofile/docker-compose-prod.yml
similarity index 100%
rename from docker/docker-spring-boot/src/main/docker/springprofile/docker-compose-prod.yml
rename to docker-modules/docker-spring-boot/src/main/docker/springprofile/docker-compose-prod.yml
diff --git a/docker/docker-spring-boot/src/main/docker/springprofile/docker-compose-test.yml b/docker-modules/docker-spring-boot/src/main/docker/springprofile/docker-compose-test.yml
similarity index 100%
rename from docker/docker-spring-boot/src/main/docker/springprofile/docker-compose-test.yml
rename to docker-modules/docker-spring-boot/src/main/docker/springprofile/docker-compose-test.yml
diff --git a/docker/docker-spring-boot/src/main/java/com/baeldung/docker/spring/DemoApplication.java b/docker-modules/docker-spring-boot/src/main/java/com/baeldung/docker/spring/DemoApplication.java
similarity index 100%
rename from docker/docker-spring-boot/src/main/java/com/baeldung/docker/spring/DemoApplication.java
rename to docker-modules/docker-spring-boot/src/main/java/com/baeldung/docker/spring/DemoApplication.java
diff --git a/docker/docker-spring-boot/src/main/java/com/baeldung/docker/spring/HelloController.java b/docker-modules/docker-spring-boot/src/main/java/com/baeldung/docker/spring/HelloController.java
similarity index 100%
rename from docker/docker-spring-boot/src/main/java/com/baeldung/docker/spring/HelloController.java
rename to docker-modules/docker-spring-boot/src/main/java/com/baeldung/docker/spring/HelloController.java
diff --git a/docker/docker-spring-boot/src/main/resources/application.properties b/docker-modules/docker-spring-boot/src/main/resources/application.properties
similarity index 100%
rename from docker/docker-spring-boot/src/main/resources/application.properties
rename to docker-modules/docker-spring-boot/src/main/resources/application.properties
diff --git a/docker/dockerfile-with-git/.gitmodules b/docker-modules/dockerfile-with-git/.gitmodules
similarity index 100%
rename from docker/dockerfile-with-git/.gitmodules
rename to docker-modules/dockerfile-with-git/.gitmodules
diff --git a/docker/dockerfile-with-git/Dockerfile b/docker-modules/dockerfile-with-git/Dockerfile
similarity index 100%
rename from docker/dockerfile-with-git/Dockerfile
rename to docker-modules/dockerfile-with-git/Dockerfile
diff --git a/docker/heap-sizing/Dockerfile b/docker-modules/heap-sizing/Dockerfile
similarity index 100%
rename from docker/heap-sizing/Dockerfile
rename to docker-modules/heap-sizing/Dockerfile
diff --git a/docker/heap-sizing/pom.xml b/docker-modules/heap-sizing/pom.xml
similarity index 100%
rename from docker/heap-sizing/pom.xml
rename to docker-modules/heap-sizing/pom.xml
diff --git a/docker/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/HeapSizingApplication.java b/docker-modules/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/HeapSizingApplication.java
similarity index 100%
rename from docker/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/HeapSizingApplication.java
rename to docker-modules/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/HeapSizingApplication.java
diff --git a/docker/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/PrintXmxXms.java b/docker-modules/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/PrintXmxXms.java
similarity index 100%
rename from docker/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/PrintXmxXms.java
rename to docker-modules/heap-sizing/src/main/java/com/baeldung/docker/heapsizing/PrintXmxXms.java
diff --git a/docker/pom.xml b/docker-modules/pom.xml
similarity index 93%
rename from docker/pom.xml
rename to docker-modules/pom.xml
index f46ceac963..87c7960a7f 100644
--- a/docker/pom.xml
+++ b/docker-modules/pom.xml
@@ -4,9 +4,9 @@
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.docker
- docker
+ docker-modules
0.0.1
- docker
+ docker-modules
Demo project showing Spring Boot and Docker
pom
diff --git a/graphql/graphql-dgs/README.md b/graphql-modules/graphql-dgs/README.md
similarity index 100%
rename from graphql/graphql-dgs/README.md
rename to graphql-modules/graphql-dgs/README.md
diff --git a/graphql/graphql-dgs/pom.xml b/graphql-modules/graphql-dgs/pom.xml
similarity index 98%
rename from graphql/graphql-dgs/pom.xml
rename to graphql-modules/graphql-dgs/pom.xml
index 56e261f14d..051785b4b8 100644
--- a/graphql/graphql-dgs/pom.xml
+++ b/graphql-modules/graphql-dgs/pom.xml
@@ -9,7 +9,7 @@
com.baeldung.graphql
- graphql
+ graphql-modules
1.0.0-SNAPSHOT
diff --git a/graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Album.java b/graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Album.java
similarity index 100%
rename from graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Album.java
rename to graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Album.java
diff --git a/graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/AlbumsDataFetcher.java b/graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/AlbumsDataFetcher.java
similarity index 100%
rename from graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/AlbumsDataFetcher.java
rename to graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/AlbumsDataFetcher.java
diff --git a/graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Application.java b/graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Application.java
similarity index 100%
rename from graphql/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Application.java
rename to graphql-modules/graphql-dgs/src/main/java/com/bealdung/graphqlDGS/Application.java
diff --git a/graphql/graphql-dgs/src/main/resources/application.properties b/graphql-modules/graphql-dgs/src/main/resources/application.properties
similarity index 100%
rename from graphql/graphql-dgs/src/main/resources/application.properties
rename to graphql-modules/graphql-dgs/src/main/resources/application.properties
diff --git a/graphql/graphql-dgs/src/main/resources/schema/schema.graphqls b/graphql-modules/graphql-dgs/src/main/resources/schema/schema.graphqls
similarity index 100%
rename from graphql/graphql-dgs/src/main/resources/schema/schema.graphqls
rename to graphql-modules/graphql-dgs/src/main/resources/schema/schema.graphqls
diff --git a/graphql/graphql-error-handling/README.md b/graphql-modules/graphql-error-handling/README.md
similarity index 100%
rename from graphql/graphql-error-handling/README.md
rename to graphql-modules/graphql-error-handling/README.md
diff --git a/graphql/graphql-error-handling/pom.xml b/graphql-modules/graphql-error-handling/pom.xml
similarity index 98%
rename from graphql/graphql-error-handling/pom.xml
rename to graphql-modules/graphql-error-handling/pom.xml
index 92696d8ed7..f10bb524fb 100644
--- a/graphql/graphql-error-handling/pom.xml
+++ b/graphql-modules/graphql-error-handling/pom.xml
@@ -10,7 +10,7 @@
com.baeldung.graphql
- graphql
+ graphql-modules
1.0.0-SNAPSHOT
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplication.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplication.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplication.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplication.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Location.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Location.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Location.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Location.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Vehicle.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Vehicle.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Vehicle.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/domain/Vehicle.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/AbstractGraphQLException.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/AbstractGraphQLException.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/AbstractGraphQLException.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/AbstractGraphQLException.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/GraphQLErrorAdapter.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/GraphQLErrorAdapter.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/GraphQLErrorAdapter.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/GraphQLErrorAdapter.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/InvalidInputException.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/InvalidInputException.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/InvalidInputException.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/InvalidInputException.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleAlreadyPresentException.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleAlreadyPresentException.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleAlreadyPresentException.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleAlreadyPresentException.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleNotFoundException.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleNotFoundException.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleNotFoundException.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/exception/VehicleNotFoundException.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/InventoryRepository.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/InventoryRepository.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/InventoryRepository.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/InventoryRepository.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/LocationRepository.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/LocationRepository.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/LocationRepository.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/repository/LocationRepository.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Mutation.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Mutation.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Mutation.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Mutation.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Query.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Query.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Query.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/resolver/Query.java
diff --git a/graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/service/InventoryService.java b/graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/service/InventoryService.java
similarity index 100%
rename from graphql/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/service/InventoryService.java
rename to graphql-modules/graphql-error-handling/src/main/java/com/baeldung/graphql/error/handling/service/InventoryService.java
diff --git a/graphql/graphql-error-handling/src/main/resources/application.yml b/graphql-modules/graphql-error-handling/src/main/resources/application.yml
similarity index 100%
rename from graphql/graphql-error-handling/src/main/resources/application.yml
rename to graphql-modules/graphql-error-handling/src/main/resources/application.yml
diff --git a/graphql/graphql-error-handling/src/main/resources/graphql/inventory.graphqls b/graphql-modules/graphql-error-handling/src/main/resources/graphql/inventory.graphqls
similarity index 100%
rename from graphql/graphql-error-handling/src/main/resources/graphql/inventory.graphqls
rename to graphql-modules/graphql-error-handling/src/main/resources/graphql/inventory.graphqls
diff --git a/graphql/graphql-error-handling/src/main/resources/import.sql b/graphql-modules/graphql-error-handling/src/main/resources/import.sql
similarity index 100%
rename from graphql/graphql-error-handling/src/main/resources/import.sql
rename to graphql-modules/graphql-error-handling/src/main/resources/import.sql
diff --git a/graphql/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplicationIntegrationTest.java b/graphql-modules/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplicationIntegrationTest.java
similarity index 100%
rename from graphql/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplicationIntegrationTest.java
rename to graphql-modules/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/GraphQLErrorHandlerApplicationIntegrationTest.java
diff --git a/graphql/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/TestUtils.java b/graphql-modules/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/TestUtils.java
similarity index 100%
rename from graphql/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/TestUtils.java
rename to graphql-modules/graphql-error-handling/src/test/java/com/baeldung/graphql/error/handling/TestUtils.java
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/request/field_error_request_non_null_fields_partial_response.graphql b/graphql-modules/graphql-error-handling/src/test/resources/graphql/request/field_error_request_non_null_fields_partial_response.graphql
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/request/field_error_request_non_null_fields_partial_response.graphql
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/request/field_error_request_non_null_fields_partial_response.graphql
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/request/request_error_invalid_request_syntax.graphql b/graphql-modules/graphql-error-handling/src/test/resources/graphql/request/request_error_invalid_request_syntax.graphql
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/request/request_error_invalid_request_syntax.graphql
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/request/request_error_invalid_request_syntax.graphql
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/request/request_error_unknown_operation.graphql b/graphql-modules/graphql-error-handling/src/test/resources/graphql/request/request_error_unknown_operation.graphql
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/request/request_error_unknown_operation.graphql
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/request/request_error_unknown_operation.graphql
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/response/field_error_request_non_null_fields_partial_response.json b/graphql-modules/graphql-error-handling/src/test/resources/graphql/response/field_error_request_non_null_fields_partial_response.json
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/response/field_error_request_non_null_fields_partial_response.json
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/response/field_error_request_non_null_fields_partial_response.json
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/response/request_error_invalid_request_syntax.json b/graphql-modules/graphql-error-handling/src/test/resources/graphql/response/request_error_invalid_request_syntax.json
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/response/request_error_invalid_request_syntax.json
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/response/request_error_invalid_request_syntax.json
diff --git a/graphql/graphql-error-handling/src/test/resources/graphql/response/request_error_unknown_operation.json b/graphql-modules/graphql-error-handling/src/test/resources/graphql/response/request_error_unknown_operation.json
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/graphql/response/request_error_unknown_operation.json
rename to graphql-modules/graphql-error-handling/src/test/resources/graphql/response/request_error_unknown_operation.json
diff --git a/graphql/graphql-error-handling/src/test/resources/init_script.sql b/graphql-modules/graphql-error-handling/src/test/resources/init_script.sql
similarity index 100%
rename from graphql/graphql-error-handling/src/test/resources/init_script.sql
rename to graphql-modules/graphql-error-handling/src/test/resources/init_script.sql
diff --git a/graphql/graphql-java/README.md b/graphql-modules/graphql-java/README.md
similarity index 100%
rename from graphql/graphql-java/README.md
rename to graphql-modules/graphql-java/README.md
diff --git a/graphql/graphql-java/payload-examples/createUser.json b/graphql-modules/graphql-java/payload-examples/createUser.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/createUser.json
rename to graphql-modules/graphql-java/payload-examples/createUser.json
diff --git a/graphql/graphql-java/payload-examples/deleteUser.json b/graphql-modules/graphql-java/payload-examples/deleteUser.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/deleteUser.json
rename to graphql-modules/graphql-java/payload-examples/deleteUser.json
diff --git a/graphql/graphql-java/payload-examples/listUsers.json b/graphql-modules/graphql-java/payload-examples/listUsers.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/listUsers.json
rename to graphql-modules/graphql-java/payload-examples/listUsers.json
diff --git a/graphql/graphql-java/payload-examples/retrieveUser.json b/graphql-modules/graphql-java/payload-examples/retrieveUser.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/retrieveUser.json
rename to graphql-modules/graphql-java/payload-examples/retrieveUser.json
diff --git a/graphql/graphql-java/payload-examples/searchName.json b/graphql-modules/graphql-java/payload-examples/searchName.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/searchName.json
rename to graphql-modules/graphql-java/payload-examples/searchName.json
diff --git a/graphql/graphql-java/payload-examples/updateUser.json b/graphql-modules/graphql-java/payload-examples/updateUser.json
similarity index 100%
rename from graphql/graphql-java/payload-examples/updateUser.json
rename to graphql-modules/graphql-java/payload-examples/updateUser.json
diff --git a/graphql/graphql-java/pom.xml b/graphql-modules/graphql-java/pom.xml
similarity index 99%
rename from graphql/graphql-java/pom.xml
rename to graphql-modules/graphql-java/pom.xml
index b0b2c15359..1993130b12 100644
--- a/graphql/graphql-java/pom.xml
+++ b/graphql-modules/graphql-java/pom.xml
@@ -1,3 +1,4 @@
+
com.baeldung.graphql
- graphql
+ graphql-modules
1.0.0-SNAPSHOT
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/Application.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/Application.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/Application.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/Application.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/clients/AmericanExpressNodes.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/clients/AmericanExpressNodes.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/clients/AmericanExpressNodes.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/clients/AmericanExpressNodes.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/clients/ApacheHttpClient.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/clients/ApacheHttpClient.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/clients/ApacheHttpClient.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/clients/ApacheHttpClient.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Author.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Author.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Author.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Author.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Book.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Book.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Book.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Book.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/data/BookRepository.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/BookRepository.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/data/BookRepository.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/BookRepository.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Data.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Data.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Data.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Data.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Response.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Response.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/data/Response.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/data/Response.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/entity/User.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/entity/User.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/entity/User.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/entity/User.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/handler/UserHandler.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/handler/UserHandler.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/handler/UserHandler.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/handler/UserHandler.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/mutation/UserMutation.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/mutation/UserMutation.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/mutation/UserMutation.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/mutation/UserMutation.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/query/UserQuery.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/query/UserQuery.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/query/UserQuery.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/query/UserQuery.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/schema/UserSchema.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/schema/UserSchema.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/schema/UserSchema.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/schema/UserSchema.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLEndpoint.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLEndpoint.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLEndpoint.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLEndpoint.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLQuery.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLQuery.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLQuery.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/server/GraphQLQuery.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphql/utils/SchemaUtils.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/utils/SchemaUtils.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphql/utils/SchemaUtils.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphql/utils/SchemaUtils.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/AppHandler.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/AppHandler.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/AppHandler.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/AppHandler.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/ExtendedGraphQLScalarType.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/ExtendedGraphQLScalarType.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/ExtendedGraphQLScalarType.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/ExtendedGraphQLScalarType.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/GraphqlReturnMap.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/GraphqlReturnMap.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/GraphqlReturnMap.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/GraphqlReturnMap.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Attribute.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Attribute.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Attribute.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Attribute.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Product.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Product.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Product.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/entity/Product.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/model/AttributeKeyValueModel.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/model/AttributeKeyValueModel.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/model/AttributeKeyValueModel.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/model/AttributeKeyValueModel.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/ProductRepository.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/ProductRepository.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/ProductRepository.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/ProductRepository.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/impl/ProductRepositoryImpl.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/impl/ProductRepositoryImpl.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/impl/ProductRepositoryImpl.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/repository/impl/ProductRepositoryImpl.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/ProductResolver.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/ProductResolver.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/ProductResolver.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/ProductResolver.java
diff --git a/graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/Query.java b/graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/Query.java
similarity index 100%
rename from graphql/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/Query.java
rename to graphql-modules/graphql-java/src/main/java/com/baeldung/graphqlreturnmap/resolver/Query.java
diff --git a/graphql/graphql-java/src/main/resources/logback.xml b/graphql-modules/graphql-java/src/main/resources/logback.xml
similarity index 100%
rename from graphql/graphql-java/src/main/resources/logback.xml
rename to graphql-modules/graphql-java/src/main/resources/logback.xml
diff --git a/graphql/graphql-java/src/main/resources/schema.graphqls b/graphql-modules/graphql-java/src/main/resources/schema.graphqls
similarity index 100%
rename from graphql/graphql-java/src/main/resources/schema.graphqls
rename to graphql-modules/graphql-java/src/main/resources/schema.graphqls
diff --git a/graphql/graphql-java/src/test/java/com/baeldung/graphql/GraphQLMockServer.java b/graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/GraphQLMockServer.java
similarity index 100%
rename from graphql/graphql-java/src/test/java/com/baeldung/graphql/GraphQLMockServer.java
rename to graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/GraphQLMockServer.java
diff --git a/graphql/graphql-java/src/test/java/com/baeldung/graphql/clients/AmericanExpressNodesUnitTest.java b/graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/clients/AmericanExpressNodesUnitTest.java
similarity index 100%
rename from graphql/graphql-java/src/test/java/com/baeldung/graphql/clients/AmericanExpressNodesUnitTest.java
rename to graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/clients/AmericanExpressNodesUnitTest.java
diff --git a/graphql/graphql-java/src/test/java/com/baeldung/graphql/clients/ApacheHttpClientUnitTest.java b/graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/clients/ApacheHttpClientUnitTest.java
similarity index 100%
rename from graphql/graphql-java/src/test/java/com/baeldung/graphql/clients/ApacheHttpClientUnitTest.java
rename to graphql-modules/graphql-java/src/test/java/com/baeldung/graphql/clients/ApacheHttpClientUnitTest.java
diff --git a/graphql/graphql-spqr/README.md b/graphql-modules/graphql-spqr/README.md
similarity index 100%
rename from graphql/graphql-spqr/README.md
rename to graphql-modules/graphql-spqr/README.md
diff --git a/graphql/graphql-spqr/pom.xml b/graphql-modules/graphql-spqr/pom.xml
similarity index 95%
rename from graphql/graphql-spqr/pom.xml
rename to graphql-modules/graphql-spqr/pom.xml
index 75a1b5d79b..7bc450036a 100644
--- a/graphql/graphql-spqr/pom.xml
+++ b/graphql-modules/graphql-spqr/pom.xml
@@ -9,7 +9,7 @@
com.baeldung.graphql
- graphql
+ graphql-modules
1.0.0-SNAPSHOT
diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java
similarity index 100%
rename from graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java
rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java
diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java
similarity index 100%
rename from graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java
rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java
diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java
similarity index 100%
rename from graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java
rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java
diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java
similarity index 100%
rename from graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java
rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java
diff --git a/graphql/pom.xml b/graphql-modules/pom.xml
similarity index 90%
rename from graphql/pom.xml
rename to graphql-modules/pom.xml
index aec097752a..7a77e3ff0c 100644
--- a/graphql/pom.xml
+++ b/graphql-modules/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.graphql
- graphql
+ graphql-modules
1.0.0-SNAPSHOT
- graphql
+ graphql-modules
pom
@@ -23,4 +23,4 @@
graphql-spqr
-
\ No newline at end of file
+
diff --git a/javax-servlets-2/README.md b/javax-servlets-2/README.md
index 9a7ad02d39..cd599890ad 100644
--- a/javax-servlets-2/README.md
+++ b/javax-servlets-2/README.md
@@ -4,3 +4,4 @@ This module contains articles about Servlets.
### Relevant Articles:
- [Check if a User Is Logged-in With Servlets and JSP](https://www.baeldung.com/servlets-jsp-check-user-login)
+- [How to Mock HttpServletRequest](https://www.baeldung.com/java-httpservletrequest-mock)
diff --git a/javax-servlets-2/pom.xml b/javax-servlets-2/pom.xml
index 5d8310f2b2..6469c66db6 100644
--- a/javax-servlets-2/pom.xml
+++ b/javax-servlets-2/pom.xml
@@ -39,6 +39,18 @@
jstl
${jstl.version}
+
+ org.jmockit
+ jmockit
+ ${jmockit.version}
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-test.version}
+ test
+
org.apache.httpcomponents
httpclient
@@ -53,9 +65,26 @@
+
+
+
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
+
+
+
+
+
+
4.5.13
4.0.1
+ 1.49
+ 5.3.20
+ 2.22.2
\ No newline at end of file
diff --git a/javax-servlets-2/src/main/java/com/baeldung/servlets/UserServlet.java b/javax-servlets-2/src/main/java/com/baeldung/servlets/UserServlet.java
new file mode 100644
index 0000000000..a71a4da8e4
--- /dev/null
+++ b/javax-servlets-2/src/main/java/com/baeldung/servlets/UserServlet.java
@@ -0,0 +1,24 @@
+package com.baeldung.servlets;
+
+import java.io.IOException;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "UserServlet", urlPatterns = "/user")
+public class UserServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 2923732283720972121L;
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String firstName = request.getParameter("firstName");
+ String lastName = request.getParameter("lastName");
+
+ response.getWriter()
+ .append("Full Name: " + firstName + " " + lastName);
+ }
+
+}
diff --git a/javax-servlets-2/src/test/java/com/baeldung/servlets/TestUtil.java b/javax-servlets-2/src/test/java/com/baeldung/servlets/TestUtil.java
new file mode 100644
index 0000000000..e010de3a55
--- /dev/null
+++ b/javax-servlets-2/src/test/java/com/baeldung/servlets/TestUtil.java
@@ -0,0 +1,678 @@
+package com.baeldung.servlets;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.AsyncContext;
+import javax.servlet.DispatcherType;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpUpgradeHandler;
+import javax.servlet.http.Part;
+
+public class TestUtil {
+
+ public static HttpServletRequest getRequest(Map params) {
+ return new HttpServletRequest() {
+
+ @Override
+ public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public AsyncContext startAsync() throws IllegalStateException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setCharacterEncoding(String env) throws UnsupportedEncodingException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setAttribute(String name, Object o) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void removeAttribute(String name) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean isSecure() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isAsyncSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isAsyncStarted() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getServerPort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getServerName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getScheme() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public RequestDispatcher getRequestDispatcher(String path) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getRemotePort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getRemoteHost() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRemoteAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRealPath(String path) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public BufferedReader getReader() throws IOException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getProtocol() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String[] getParameterValues(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration getParameterNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Map getParameterMap() {
+ return params;
+ }
+
+ @Override
+ public String getParameter(String name) {
+ String[] values = params.get(name);
+ if (values == null || values.length == 0)
+ return null;
+ return values[0];
+ }
+
+ @Override
+ public Enumeration getLocales() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Locale getLocale() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getLocalPort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getLocalName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getLocalAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ServletInputStream getInputStream() throws IOException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public DispatcherType getDispatcherType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getContentType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public long getContentLengthLong() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getContentLength() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getCharacterEncoding() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration getAttributeNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getAttribute(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public AsyncContext getAsyncContext() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public T upgrade(Class handlerClass) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void logout() throws ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void login(String username, String password) throws ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean isUserInRole(String role) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdValid() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromUrl() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromURL() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRequestedSessionIdFromCookie() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Principal getUserPrincipal() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public HttpSession getSession(boolean create) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public HttpSession getSession() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getServletPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRequestedSessionId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public StringBuffer getRequestURL() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRequestURI() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getRemoteUser() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getQueryString() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getPathTranslated() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getPathInfo() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Collection getParts() throws IOException, ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Part getPart(String name) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getMethod() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getIntHeader(String name) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Enumeration getHeaders(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Enumeration getHeaderNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getHeader(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public long getDateHeader(String name) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Cookie[] getCookies() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getContextPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getAuthType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String changeSessionId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean authenticate(HttpServletResponse response) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+ };
+ }
+
+ public static HttpServletResponse getResponse(StringWriter writer) {
+
+ return new HttpServletResponse() {
+
+ @Override
+ public void setLocale(Locale loc) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setContentType(String type) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setContentLengthLong(long len) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setContentLength(int len) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setCharacterEncoding(String charset) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setBufferSize(int size) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void resetBuffer() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void reset() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean isCommitted() {
+ return true;
+ }
+
+ @Override
+ public PrintWriter getWriter() throws IOException {
+ return new PrintWriter(writer, isCommitted());
+ }
+
+ @Override
+ public ServletOutputStream getOutputStream() throws IOException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Locale getLocale() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getContentType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCharacterEncoding() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getBufferSize() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void flushBuffer() throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setStatus(int sc, String sm) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setStatus(int sc) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setIntHeader(String name, int value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setHeader(String name, String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setDateHeader(String name, long date) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void sendRedirect(String location) throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void sendError(int sc, String msg) throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void sendError(int sc) throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getStatus() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public Collection getHeaders(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Collection getHeaderNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getHeader(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String encodeUrl(String url) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String encodeURL(String url) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String encodeRedirectUrl(String url) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String encodeRedirectURL(String url) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean containsHeader(String name) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void addIntHeader(String name, int value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void addHeader(String name, String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void addDateHeader(String name, long date) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void addCookie(Cookie cookie) {
+ // TODO Auto-generated method stub
+
+ }
+ };
+
+ }
+}
\ No newline at end of file
diff --git a/javax-servlets-2/src/test/java/com/baeldung/servlets/UserServletUnitTest.java b/javax-servlets-2/src/test/java/com/baeldung/servlets/UserServletUnitTest.java
new file mode 100644
index 0000000000..7c207d5be3
--- /dev/null
+++ b/javax-servlets-2/src/test/java/com/baeldung/servlets/UserServletUnitTest.java
@@ -0,0 +1,93 @@
+package com.baeldung.servlets;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import mockit.Expectations;
+import mockit.Mocked;
+
+class UserServletUnitTest {
+
+ private UserServlet servlet;
+ private StringWriter writer;
+
+ @Mocked
+ HttpServletRequest mockRequest;
+ @Mocked
+ HttpServletResponse mockResponse;
+
+ @BeforeEach
+ public void setUp() throws IOException {
+ servlet = new UserServlet();
+ writer = new StringWriter();
+ }
+
+ @Test
+ void givenHttpServletRequest_whenUsingAnonymousClass_thenReturnsParameterValues() throws IOException {
+ final Map params = new HashMap<>();
+ params.put("firstName", new String[] { "Anonymous Class" });
+ params.put("lastName", new String[] { "Test" });
+
+ servlet.doGet(TestUtil.getRequest(params), TestUtil.getResponse(writer));
+
+ assertThat(writer.toString()).isEqualTo("Full Name: Anonymous Class Test");
+ }
+
+ @Test
+ void givenHttpServletRequest_whenMockedWithMockito_thenReturnsParameterValues() throws IOException {
+ // mock HttpServletRequest & HttpServletResponse
+ HttpServletRequest request = mock(HttpServletRequest.class);
+ HttpServletResponse response = mock(HttpServletResponse.class);
+
+ // mock the returned value of request.getParameterMap()
+ when(request.getParameter("firstName")).thenReturn("Mockito");
+ when(request.getParameter("lastName")).thenReturn("Test");
+ when(response.getWriter()).thenReturn(new PrintWriter(writer));
+
+ servlet.doGet(request, response);
+
+ assertThat(writer.toString()).isEqualTo("Full Name: Mockito Test");
+ }
+
+ @Test
+ void givenHttpServletRequest_whenMockedWithJMockit_thenReturnsParameterValues() throws IOException {
+
+ new Expectations() {{
+ mockRequest.getParameter("firstName"); result = "JMockit";
+ mockRequest.getParameter("lastName"); result = "Test";
+ mockResponse.getWriter(); result = new PrintWriter(writer);
+ }};
+
+ servlet.doGet(mockRequest, mockResponse);
+
+ assertThat(writer.toString()).isEqualTo("Full Name: JMockit Test");
+ }
+
+ @Test
+ void givenHttpServletRequest_whenUsingMockHttpServletRequest_thenReturnsParameterValues() throws IOException {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setParameter("firstName", "Spring");
+ request.setParameter("lastName", "Test");
+ MockHttpServletResponse response = new MockHttpServletResponse();
+
+ servlet.doGet(request, response);
+
+ assertThat(response.getContentAsString()).isEqualTo("Full Name: Spring Test");
+ }
+
+}
diff --git a/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/namingstrategy/CustomPhysicalNamingStrategy.java b/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/namingstrategy/CustomPhysicalNamingStrategy.java
index 74bcb9e411..d0cc6e8be6 100644
--- a/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/namingstrategy/CustomPhysicalNamingStrategy.java
+++ b/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/namingstrategy/CustomPhysicalNamingStrategy.java
@@ -41,7 +41,7 @@ public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy {
final String newName = identifier.getText()
.replaceAll(regex, replacement)
.toLowerCase();
- return Identifier.toIdentifier(newName);
+ return Identifier.toIdentifier(newName, identifier.isQuoted());
}
}
diff --git a/persistence-modules/hibernate5/src/test/resources/hibernate-namingstrategy.properties b/persistence-modules/hibernate5/src/test/resources/hibernate-namingstrategy.properties
index 263033823c..d0e068d13f 100644
--- a/persistence-modules/hibernate5/src/test/resources/hibernate-namingstrategy.properties
+++ b/persistence-modules/hibernate5/src/test/resources/hibernate-namingstrategy.properties
@@ -5,6 +5,7 @@ hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop
+hibernate.globally_quoted_identifiers=true
hibernate.physical_naming_strategy=com.baeldung.hibernate.namingstrategy.CustomPhysicalNamingStrategy
hibernate.implicit_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10a19674ce..2f652e2acf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -402,7 +402,7 @@
- graphql
+ graphql-modules
grpc
gson
guava-modules
@@ -828,7 +828,7 @@
code-generation
core-groovy-modules
-
+
core-java-modules
couchbase
@@ -857,7 +857,7 @@
- graphql
+ graphql-modules
grpc
gson
guava-modules
@@ -1289,7 +1289,7 @@
core-java-modules/core-java-strings
core-java-modules/core-java-httpclient
ddd-contexts
- docker
+ docker-modules
apache-httpclient-2
libraries-concurrency
persistence-modules/sirix
@@ -1357,7 +1357,7 @@
core-java-modules/multimodulemavenproject
core-java-modules/core-java-strings
ddd-contexts
- docker
+ docker-modules
apache-httpclient-2
libraries-concurrency
persistence-modules/sirix
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/App.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/App.java
new file mode 100644
index 0000000000..9655c80cc0
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/App.java
@@ -0,0 +1,13 @@
+package com.baeldung.disablingkeycloak;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = { "com.baeldung.disablingkeycloak" })
+public class App {
+
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/DisableSecurityConfiguration.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/DisableSecurityConfiguration.java
new file mode 100644
index 0000000000..619fd63662
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/DisableSecurityConfiguration.java
@@ -0,0 +1,20 @@
+package com.baeldung.disablingkeycloak;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+
+@Configuration
+@ConditionalOnProperty(name = "keycloak.enabled", havingValue = "false")
+public class DisableSecurityConfiguration extends WebSecurityConfigurerAdapter {
+
+ @Override
+ protected void configure(final HttpSecurity http) throws Exception {
+ http.csrf()
+ .disable()
+ .authorizeRequests()
+ .anyRequest()
+ .permitAll();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakConfiguration.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakConfiguration.java
new file mode 100644
index 0000000000..a9a2ea6a18
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakConfiguration.java
@@ -0,0 +1,14 @@
+package com.baeldung.disablingkeycloak;
+
+import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class KeycloakConfiguration {
+
+ @Bean
+ public KeycloakSpringBootConfigResolver keycloakConfigResolver() {
+ return new KeycloakSpringBootConfigResolver();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakSecurityConfig.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakSecurityConfig.java
new file mode 100644
index 0000000000..d48c99d8fd
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/KeycloakSecurityConfig.java
@@ -0,0 +1,38 @@
+package com.baeldung.disablingkeycloak;
+
+import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
+import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
+import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
+
+@KeycloakConfiguration
+@ConditionalOnProperty(name = "keycloak.enabled", havingValue = "true", matchIfMissing = true)
+public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder auth) {
+ auth.authenticationProvider(keycloakAuthenticationProvider());
+ }
+
+ @Bean
+ @Override
+ protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
+ return new NullAuthenticatedSessionStrategy();
+ }
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ super.configure(http);
+
+ http.csrf()
+ .disable()
+ .authorizeRequests()
+ .anyRequest()
+ .authenticated();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/User.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/User.java
new file mode 100644
index 0000000000..78d4a9913a
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/User.java
@@ -0,0 +1,40 @@
+package com.baeldung.disablingkeycloak;
+
+public class User {
+ private Long id;
+ private String firstname;
+ private String lastname;
+
+ public User() {
+ }
+
+ public User(Long id, String firstname, String lastname) {
+ this.id = id;
+ this.firstname = firstname;
+ this.lastname = lastname;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/UserController.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/UserController.java
new file mode 100644
index 0000000000..19b429a78d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/disablingkeycloak/UserController.java
@@ -0,0 +1,17 @@
+package com.baeldung.disablingkeycloak;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+ @GetMapping("/{userId}")
+ public User getCustomer(@PathVariable Long userId) {
+ return new User(userId, "John", "Doe");
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/resources/application-disabling-keycloak.properties b/spring-boot-modules/spring-boot-keycloak/src/main/resources/application-disabling-keycloak.properties
new file mode 100644
index 0000000000..21263cf725
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/resources/application-disabling-keycloak.properties
@@ -0,0 +1,7 @@
+# Keycloak authentication is enabled for production.
+keycloak.enabled=true
+keycloak.realm=SpringBootKeycloak
+keycloak.auth-server-url=http://localhost:8180/auth
+keycloak.resource=login-app
+keycloak.bearer-only=true
+keycloak.ssl-required=external
diff --git a/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/disablingkeycloak/DisablingKeycloakIntegrationTest.java b/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/disablingkeycloak/DisablingKeycloakIntegrationTest.java
new file mode 100644
index 0000000000..cf70f7e7c3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/disablingkeycloak/DisablingKeycloakIntegrationTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.disablingkeycloak;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.http.HttpStatus;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest(classes = App.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@RunWith(SpringRunner.class)
+@ActiveProfiles("disablingkeycloak")
+public class DisablingKeycloakIntegrationTest {
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @Test
+ public void givenUnauthenticated_whenGettingUser_shouldReturnUser() {
+ ResponseEntity responseEntity = restTemplate.getForEntity("/users/1", User.class);
+
+ assertEquals(HttpStatus.SC_OK, responseEntity.getStatusCodeValue());
+ assertNotNull(responseEntity.getBody()
+ .getFirstname());
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-keycloak/src/test/resources/application-disablingkeycloak.properties b/spring-boot-modules/spring-boot-keycloak/src/test/resources/application-disablingkeycloak.properties
new file mode 100644
index 0000000000..db2c8fc59a
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak/src/test/resources/application-disablingkeycloak.properties
@@ -0,0 +1 @@
+keycloak.enabled=false
diff --git a/spring-cloud-modules/spring-cloud-docker/README.md b/spring-cloud-modules/spring-cloud-docker/README.md
index 018d4ab1eb..9c7eac5105 100644
--- a/spring-cloud-modules/spring-cloud-docker/README.md
+++ b/spring-cloud-modules/spring-cloud-docker/README.md
@@ -1,3 +1,4 @@
## Relevant Articles:
- [Dockerizing a Spring Boot Application](https://www.baeldung.com/dockerizing-spring-boot-application)
+- [Docker Compose Restart Policies](https://www.baeldung.com/ops/docker-compose-restart-policies)
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetController.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetController.java
new file mode 100644
index 0000000000..99b79d88ea
--- /dev/null
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetController.java
@@ -0,0 +1,37 @@
+package com.baeldung.reactive.security;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+
+import java.security.Principal;
+
+@RestController
+public class GreetController {
+
+ private GreetService greetService;
+
+ public GreetController(GreetService greetService) {
+ this.greetService = greetService;
+ }
+
+ @GetMapping("/")
+ public Mono greet(Mono principal) {
+ return principal
+ .map(Principal::getName)
+ .map(name -> String.format("Hello, %s", name));
+ }
+
+ @GetMapping("/admin")
+ public Mono greetAdmin(Mono principal) {
+ return principal
+ .map(Principal::getName)
+ .map(name -> String.format("Admin access: %s", name));
+ }
+
+ @GetMapping("/greetService")
+ public Mono greetService() {
+ return greetService.greet();
+ }
+
+}
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingService.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetService.java
similarity index 91%
rename from spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingService.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/security/GreetService.java
index b512f12bae..93df64bced 100644
--- a/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingService.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetService.java
@@ -5,7 +5,7 @@ import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;
@Service
-public class GreetingService {
+public class GreetService {
@PreAuthorize("hasRole('ADMIN')")
public Mono greet() {
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingController.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingController.java
deleted file mode 100644
index 10d6cf4df7..0000000000
--- a/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetingController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.baeldung.reactive.security;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import reactor.core.publisher.Mono;
-
-import java.security.Principal;
-
-@RestController
-public class GreetingController {
-
- private final GreetingService greetingService;
-
- public GreetingController(GreetingService greetingService) {
- this.greetingService = greetingService;
- }
-
- @GetMapping("/")
- public Mono greet(Mono principal) {
- return principal
- .map(Principal::getName)
- .map(name -> String.format("Hello, %s", name));
- }
-
- @GetMapping("/admin")
- public Mono greetAdmin(Mono principal) {
- return principal
- .map(Principal::getName)
- .map(name -> String.format("Admin access: %s", name));
- }
-
- @GetMapping("/greetingService")
- public Mono greetingService() {
- return greetingService.greet();
- }
-
-}
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
index 67e54ad26a..bb2f2d50e1 100644
--- a/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
@@ -16,37 +16,40 @@ import org.springframework.security.web.server.SecurityWebFilterChain;
public class SecurityConfig {
@Bean
- public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
+ public SecurityWebFilterChain securitygWebFilterChain(ServerHttpSecurity http) {
return http.authorizeExchange()
- .pathMatchers("/admin").hasAuthority("ROLE_ADMIN")
- .anyExchange().authenticated()
- .and()
- .formLogin()
- .and()
- .csrf().disable()
- .build();
+ .pathMatchers("/admin")
+ .hasAuthority("ROLE_ADMIN")
+ .anyExchange()
+ .authenticated()
+ .and()
+ .formLogin()
+ .and()
+ .csrf()
+ .disable()
+ .build();
}
@Bean
public MapReactiveUserDetailsService userDetailsService() {
UserDetails user = User
- .withUsername("user")
- .password(passwordEncoder().encode("password"))
- .roles("USER")
- .build();
+ .withUsername("user")
+ .password(passwordEncoder().encode("password"))
+ .roles("USER")
+ .build();
UserDetails admin = User
- .withUsername("admin")
- .password(passwordEncoder().encode("password"))
- .roles("ADMIN")
- .build();
+ .withUsername("admin")
+ .password(passwordEncoder().encode("password"))
+ .roles("ADMIN")
+ .build();
return new MapReactiveUserDetailsService(user, admin);
}
-
+
@Bean
public PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder();
+ return new BCryptPasswordEncoder();
}
}
diff --git a/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
index 0ef828df5a..06644fbf77 100644
--- a/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
@@ -15,32 +15,23 @@ import org.springframework.test.web.reactive.server.WebTestClient;
public class SecurityIntegrationTest {
@Autowired
- private ApplicationContext context;
+ ApplicationContext context;
- private WebTestClient webTestClient;
+ private WebTestClient rest;
@BeforeEach
public void setup() {
- webTestClient = WebTestClient.bindToApplicationContext(context)
- .configureClient()
- .build();
+ this.rest = WebTestClient.bindToApplicationContext(this.context).configureClient().build();
}
@Test
public void whenNoCredentials_thenRedirectToLogin() {
- webTestClient.get()
- .uri("/")
- .exchange()
- .expectStatus().is3xxRedirection();
+ this.rest.get().uri("/").exchange().expectStatus().is3xxRedirection();
}
@Test
@WithMockUser
public void whenHasCredentials_thenSeesGreeting() {
- webTestClient.get()
- .uri("/")
- .exchange()
- .expectStatus().isOk()
- .expectBody(String.class).isEqualTo("Hello, user");
+ this.rest.get().uri("/").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("Hello, user");
}
}
diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/additionalanswers/BookServiceUnitTest.java b/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/additionalanswers/BookServiceUnitTest.java
index ee32bcf70c..b2a998b8b9 100644
--- a/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/additionalanswers/BookServiceUnitTest.java
+++ b/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/additionalanswers/BookServiceUnitTest.java
@@ -1,5 +1,15 @@
package com.baeldung.mockito.additionalanswers;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.AdditionalAnswers.answer;
+import static org.mockito.AdditionalAnswers.answerVoid;
+
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.AdditionalAnswers;
@@ -7,8 +17,6 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
@RunWith(MockitoJUnitRunner.class)
public class BookServiceUnitTest {
@@ -65,4 +73,32 @@ public class BookServiceUnitTest {
assertEquals(bookOnIndex, book2);
}
+
+ @Test
+ public void givenMockedMethod_whenMethodInvoked_thenReturnBook() {
+ Long id = 1L;
+ when(bookRepository.getByBookId(anyLong())).thenAnswer(answer(BookServiceUnitTest::buildBook));
+
+ assertNotNull(bookService.getByBookId(id));
+ assertEquals("The Stranger", bookService.getByBookId(id).getTitle());
+ }
+
+ @Test
+ public void givenMockedMethod_whenMethodInvoked_thenReturnVoid() {
+ Long id = 2L;
+ when(bookRepository.getByBookId(anyLong())).thenAnswer(answerVoid(BookServiceUnitTest::printBookId));
+
+ bookService.getByBookId(id);
+
+ verify(bookRepository, times(1)).getByBookId(id);
+ }
+
+ private static Book buildBook(Long bookId) {
+ return new Book(bookId, "The Stranger", "Albert Camus", 456);
+ }
+
+ private static void printBookId(Long bookId) {
+ System.out.println(bookId);
+ }
+
}