diff --git a/akka-modules/pom.xml b/akka-modules/pom.xml
index 490da5b7a8..0e3563f31a 100644
--- a/akka-modules/pom.xml
+++ b/akka-modules/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
akka-modules
akka-modules
diff --git a/apache-spark/src/test/java/com/baeldung/dataframes/CustomerToDataFrameConverterAppUnitTest.java b/apache-spark/src/test/java/com/baeldung/dataframes/CustomerToDataFrameConverterAppUnitTest.java
index 06c8f66bcd..c16ca34fdc 100644
--- a/apache-spark/src/test/java/com/baeldung/dataframes/CustomerToDataFrameConverterAppUnitTest.java
+++ b/apache-spark/src/test/java/com/baeldung/dataframes/CustomerToDataFrameConverterAppUnitTest.java
@@ -8,6 +8,8 @@ import java.util.List;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
+import org.apache.spark.sql.SparkSession;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
class CustomerToDataFrameConverterAppUnitTest {
@@ -59,4 +61,9 @@ class CustomerToDataFrameConverterAppUnitTest {
assertEquals( "Male", row2.getAs("gender"));
assertEquals( 1200, (int)row2.getAs("transaction_amount"));
}
+
+ @AfterEach
+ public void cleanup() {
+ SparkSession.getActiveSession().get().close();
+ }
}
diff --git a/cas/cas-secured-app/pom.xml b/cas/cas-secured-app/pom.xml
index eac47bc093..ad6922e327 100644
--- a/cas/cas-secured-app/pom.xml
+++ b/cas/cas-secured-app/pom.xml
@@ -1,6 +1,5 @@
-
4.0.0
@@ -59,4 +58,4 @@
-
+
\ No newline at end of file
diff --git a/cas/pom.xml b/cas/pom.xml
index 4d8695dad8..2f24e41453 100644
--- a/cas/pom.xml
+++ b/cas/pom.xml
@@ -19,4 +19,4 @@
cas-secured-app
-
+
\ No newline at end of file
diff --git a/core-groovy-modules/pom.xml b/core-groovy-modules/pom.xml
index 2fd4da17f9..ccbd5cdcb5 100644
--- a/core-groovy-modules/pom.xml
+++ b/core-groovy-modules/pom.xml
@@ -17,9 +17,7 @@
core-groovy
core-groovy-2
core-groovy-collections
- core-groovy-strings
+ core-groovy-strings
-
-
-
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-14/README.md b/core-java-modules/core-java-14/README.md
index 07cdf9859c..00fd2fa320 100644
--- a/core-java-modules/core-java-14/README.md
+++ b/core-java-modules/core-java-14/README.md
@@ -11,3 +11,4 @@ This module contains articles about Java 14.
- [Foreign Memory Access API in Java 14](https://www.baeldung.com/java-foreign-memory-access)
- [Java 14 Record Keyword](https://www.baeldung.com/java-record-keyword)
- [New Features in Java 14](https://www.baeldung.com/java-14-new-features)
+- [Java 14 Record vs. Lombok](https://www.baeldung.com/java-record-vs-lombok)
diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java
index 960a75a58e..314fbeeeb5 100644
--- a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java
+++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java
@@ -4,15 +4,15 @@ import java.util.IntSummaryStatistics;
public class BlogPost {
-
+
private String title;
private String author;
private BlogPostType type;
private int likes;
record AuthPostTypesLikes(String author, BlogPostType type, int likes) {};
- record PostcountTitlesLikesStats(long postCount, String titles, IntSummaryStatistics likesStats){};
+ record PostCountTitlesLikesStats(long postCount, String titles, IntSummaryStatistics likesStats){};
record TitlesBoundedSumOfLikes(String titles, int boundedSumOfLikes) {};
-
+
public BlogPost(String title, String author, BlogPostType type, int likes) {
this.title = title;
this.author = author;
diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java
index 0dea142658..603bebb7c5 100644
--- a/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java
+++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java
@@ -257,7 +257,7 @@ public class JavaGroupingByCollectorUnitTest {
@Test
public void givenListOfPosts_whenGroupedByAuthor_thenGetAMapUsingCollectingAndThen() {
- Map postsPerAuthor = posts.stream()
+ Map postsPerAuthor = posts.stream()
.collect(groupingBy(BlogPost::getAuthor, collectingAndThen(toList(), list -> {
long count = list.stream()
.map(BlogPost::getTitle)
@@ -267,10 +267,10 @@ public class JavaGroupingByCollectorUnitTest {
.collect(joining(" : "));
IntSummaryStatistics summary = list.stream()
.collect(summarizingInt(BlogPost::getLikes));
- return new BlogPost.PostcountTitlesLikesStats(count, titles, summary);
+ return new BlogPost.PostCountTitlesLikesStats(count, titles, summary);
})));
- BlogPost.PostcountTitlesLikesStats result = postsPerAuthor.get("Author 1");
+ BlogPost.PostCountTitlesLikesStats result = postsPerAuthor.get("Author 1");
assertThat(result.postCount()).isEqualTo(3L);
assertThat(result.titles()).isEqualTo("News item 1 : Programming guide : Tech review 2");
assertThat(result.likesStats().getMax()).isEqualTo(20);
@@ -294,7 +294,7 @@ public class JavaGroupingByCollectorUnitTest {
.toUpperCase(),
u1.boundedSumOfLikes() + likes);
}));
-
+
BlogPost.TitlesBoundedSumOfLikes result = postsPerAuthor.get("Author 1");
assertThat(result.titles()).isEqualTo("NEWS ITEM 1 : PROGRAMMING GUIDE : TECH REVIEW 2");
assertThat(result.boundedSumOfLikes()).isEqualTo(47);
diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java
index 814824e580..69c2e7d69d 100644
--- a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java
+++ b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/inputstream/outputstream/InputStreamToOutputStreamUnitTest.java
@@ -20,7 +20,7 @@ public class InputStreamToOutputStreamUnitTest {
void copy(InputStream source, OutputStream target) throws IOException {
byte[] buf = new byte[8192];
int length;
- while ((length = source.read(buf)) > 0) {
+ while ((length = source.read(buf)) != -1) {
target.write(buf, 0, length);
}
}
diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml
index 8060e4f606..aaf63a2b2a 100644
--- a/core-java-modules/core-java-collections-4/pom.xml
+++ b/core-java-modules/core-java-collections-4/pom.xml
@@ -25,4 +25,5 @@
2.2
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-list-4/pom.xml b/core-java-modules/core-java-collections-list-4/pom.xml
index b546c5af2a..ef815b790d 100644
--- a/core-java-modules/core-java-collections-list-4/pom.xml
+++ b/core-java-modules/core-java-collections-list-4/pom.xml
@@ -45,18 +45,19 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.apache.commons
- commons-lang3
- ${apache-commons.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
+
+ org.apache.commons
+ commons-lang3
+ ${apache-commons.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
3.0.2
8.1.0
diff --git a/core-java-modules/core-java-jar/README.md b/core-java-modules/core-java-jar/README.md
index b1e24e3ab9..c99ea63b22 100644
--- a/core-java-modules/core-java-jar/README.md
+++ b/core-java-modules/core-java-jar/README.md
@@ -10,3 +10,5 @@ This module contains articles about JAR files
- [Get Names of Classes Inside a JAR File](https://www.baeldung.com/jar-file-get-class-names)
- [Find All Jars Containing Given Class](https://baeldung.com/find-all-jars-containing-given-class/)
- [Creating JAR Files Programmatically](https://www.baeldung.com/jar-create-programatically)
+- [Guide to Creating Jar Executables and Windows Executables from Java](https://www.baeldung.com/jar-windows-executables)
+- [Get the Full Path of a JAR File From a Class](https://www.baeldung.com/java-full-path-of-jar-from-class)
diff --git a/core-java-modules/core-java-lang-5/README.md b/core-java-modules/core-java-lang-5/README.md
index 8920e9c231..9505d02fc2 100644
--- a/core-java-modules/core-java-lang-5/README.md
+++ b/core-java-modules/core-java-lang-5/README.md
@@ -5,3 +5,4 @@ This module contains articles about core features in the Java language
### Relevant Articles:
- [Difference Between == and equals() in Java](https://www.baeldung.com/java-equals-method-operator-difference)
+- [Advantages and Disadvantages of Using Java Wildcard Imports](https://www.baeldung.com/java-wildcard-imports)
diff --git a/core-java-modules/core-java-streams-4/pom.xml b/core-java-modules/core-java-streams-4/pom.xml
index 8c4d98979c..beed277f78 100644
--- a/core-java-modules/core-java-streams-4/pom.xml
+++ b/core-java-modules/core-java-streams-4/pom.xml
@@ -43,7 +43,6 @@
3.23.1
test
-
diff --git a/core-java-modules/core-java-string-apis/README.md b/core-java-modules/core-java-string-apis/README.md
index 0dd24d7e9a..68f2176ed6 100644
--- a/core-java-modules/core-java-string-apis/README.md
+++ b/core-java-modules/core-java-string-apis/README.md
@@ -11,3 +11,4 @@ This module contains articles about string APIs.
- [StringBuilder vs StringBuffer in Java](https://www.baeldung.com/java-string-builder-string-buffer)
- [Generate a Secure Random Password in Java](https://www.baeldung.com/java-generate-secure-password)
- [Getting a Character by Index From a String in Java](https://www.baeldung.com/java-character-at-position)
+- [Clearing a StringBuilder or StringBuffer](https://www.baeldung.com/java-clear-stringbuilder-stringbuffer)
diff --git a/core-java-modules/core-java-string-operations-4/README.md b/core-java-modules/core-java-string-operations-4/README.md
index ff6d887154..ac52ee4ab5 100644
--- a/core-java-modules/core-java-string-operations-4/README.md
+++ b/core-java-modules/core-java-string-operations-4/README.md
@@ -7,4 +7,4 @@
- [String equals() Vs contentEquals() in Java](https://www.baeldung.com/java-string-equals-vs-contentequals)
- [Check if a String Ends with a Certain Pattern in Java](https://www.baeldung.com/java-string-ends-pattern)
- [Check if a Character is a Vowel in Java](https://www.baeldung.com/java-check-character-vowel)
-
+- [How to Truncate a String in Java](https://www.baeldung.com/java-truncating-strings)
diff --git a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java
index 191a3628e8..f7efd7c731 100644
--- a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java
+++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/Java8EncodeDecodeUnitTest.java
@@ -96,7 +96,23 @@ public class Java8EncodeDecodeUnitTest {
assertNotNull(decodedMime);
}
- //
+ @Test
+ public void whenEncodedStringHasValidCharacters_thenStringCanBeDecoded() {
+ final String encodedString = "dGVzdCMkaW5wdXQ+";
+ final byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
+ final String decodedString = new String(decodedBytes);
+
+ assertNotNull(decodedString);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void whenEncodedStringHasInvalidCharacters_thenIllegalArgumentException() {
+ final String encodedString = "dGVzdCMkaW5wdXQ#";
+ final byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
+ final String decodedString = new String(decodedBytes);
+
+ assertNotNull(decodedString);
+ }
private static StringBuilder getMimeBuffer() {
final StringBuilder buffer = new StringBuilder();
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 6911ace6eb..c650f064ab 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -33,7 +33,7 @@
core-java-collections-4
core-java-collections-array-list
core-java-collections-conversions
- core-java-collections-conversions-2
+ core-java-collections-conversions-2
core-java-collections-list
core-java-collections-list-2
core-java-collections-list-3
@@ -126,7 +126,7 @@
core-java-regex
core-java-regex-2
core-java-uuid
- pre-jpms
+ pre-jpms
@@ -146,4 +146,4 @@
-
+
\ No newline at end of file
diff --git a/docker-modules/docker-compose/pom.xml b/docker-modules/docker-compose/pom.xml
index 29981f2ccc..7215d6e159 100644
--- a/docker-modules/docker-compose/pom.xml
+++ b/docker-modules/docker-compose/pom.xml
@@ -6,7 +6,7 @@
docker-compose
Demo project for Spring Boot and Docker
-
+
com.baeldung
parent-boot-2
0.0.1-SNAPSHOT
@@ -22,7 +22,6 @@
org.springframework.boot
spring-boot-starter-web
-
org.springframework.boot
spring-boot-starter-test
diff --git a/docker-modules/docker-images/pom.xml b/docker-modules/docker-images/pom.xml
index 5f6510cf8d..4d0b20eea0 100644
--- a/docker-modules/docker-images/pom.xml
+++ b/docker-modules/docker-images/pom.xml
@@ -22,7 +22,6 @@
org.springframework.boot
spring-boot-starter-web
-
org.springframework.boot
spring-boot-starter-test
diff --git a/docker-modules/docker-spring-boot/pom.xml b/docker-modules/docker-spring-boot/pom.xml
index 9732ed294d..e633583ebf 100644
--- a/docker-modules/docker-spring-boot/pom.xml
+++ b/docker-modules/docker-spring-boot/pom.xml
@@ -7,7 +7,7 @@
docker-spring-boot
Demo project showing Spring Boot and Docker
-
+
com.baeldung
parent-boot-2
0.0.1-SNAPSHOT
diff --git a/feign/pom.xml b/feign/pom.xml
index 8fa864fa46..369fa00137 100644
--- a/feign/pom.xml
+++ b/feign/pom.xml
@@ -14,12 +14,6 @@
../parent-boot-2
-
- 1.8
- 11.8
- 1.6.3
-
-
io.github.openfeign
@@ -121,4 +115,10 @@
+
+ 1.8
+ 11.8
+ 1.6.3
+
+
\ No newline at end of file
diff --git a/gradle-modules/README.md b/gradle-modules/README.md
new file mode 100644
index 0000000000..a4d8875b15
--- /dev/null
+++ b/gradle-modules/README.md
@@ -0,0 +1,3 @@
+## Gradle Modules
+
+This module contains submodules of Gradle.
\ No newline at end of file
diff --git a/gradle-5/.gitignore b/gradle-modules/gradle-5/.gitignore
similarity index 100%
rename from gradle-5/.gitignore
rename to gradle-modules/gradle-5/.gitignore
diff --git a/gradle-5/README.md b/gradle-modules/gradle-5/README.md
similarity index 100%
rename from gradle-5/README.md
rename to gradle-modules/gradle-5/README.md
diff --git a/gradle-5/build.gradle b/gradle-modules/gradle-5/build.gradle
similarity index 100%
rename from gradle-5/build.gradle
rename to gradle-modules/gradle-5/build.gradle
diff --git a/gradle-5/cmd-line-args/README.md b/gradle-modules/gradle-5/cmd-line-args/README.md
similarity index 100%
rename from gradle-5/cmd-line-args/README.md
rename to gradle-modules/gradle-5/cmd-line-args/README.md
diff --git a/gradle-5/cmd-line-args/build.gradle b/gradle-modules/gradle-5/cmd-line-args/build.gradle
similarity index 100%
rename from gradle-5/cmd-line-args/build.gradle
rename to gradle-modules/gradle-5/cmd-line-args/build.gradle
diff --git a/gradle-5/cmd-line-args/src/main/java/com/baeldung/cmd/MainClass.java b/gradle-modules/gradle-5/cmd-line-args/src/main/java/com/baeldung/cmd/MainClass.java
similarity index 100%
rename from gradle-5/cmd-line-args/src/main/java/com/baeldung/cmd/MainClass.java
rename to gradle-modules/gradle-5/cmd-line-args/src/main/java/com/baeldung/cmd/MainClass.java
diff --git a/gradle-5/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle-5/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle-5/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle-5/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle-5/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-5/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle-5/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle-5/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle-5/gradlew b/gradle-modules/gradle-5/gradlew
similarity index 100%
rename from gradle-5/gradlew
rename to gradle-modules/gradle-5/gradlew
diff --git a/gradle-5/gradlew.bat b/gradle-modules/gradle-5/gradlew.bat
similarity index 100%
rename from gradle-5/gradlew.bat
rename to gradle-modules/gradle-5/gradlew.bat
diff --git a/gradle-5/java-exec/.gitignore b/gradle-modules/gradle-5/java-exec/.gitignore
similarity index 100%
rename from gradle-5/java-exec/.gitignore
rename to gradle-modules/gradle-5/java-exec/.gitignore
diff --git a/gradle-5/java-exec/build.gradle b/gradle-modules/gradle-5/java-exec/build.gradle
similarity index 100%
rename from gradle-5/java-exec/build.gradle
rename to gradle-modules/gradle-5/java-exec/build.gradle
diff --git a/gradle-5/java-exec/src/main/java/com/baeldung/gradle/exec/MainClass.java b/gradle-modules/gradle-5/java-exec/src/main/java/com/baeldung/gradle/exec/MainClass.java
similarity index 100%
rename from gradle-5/java-exec/src/main/java/com/baeldung/gradle/exec/MainClass.java
rename to gradle-modules/gradle-5/java-exec/src/main/java/com/baeldung/gradle/exec/MainClass.java
diff --git a/gradle-5/settings.gradle b/gradle-modules/gradle-5/settings.gradle
similarity index 54%
rename from gradle-5/settings.gradle
rename to gradle-modules/gradle-5/settings.gradle
index ede73daf0a..c73af319a3 100644
--- a/gradle-5/settings.gradle
+++ b/gradle-modules/gradle-5/settings.gradle
@@ -1,4 +1,4 @@
-rootProject.name='gradle-5-articles'
+rootProject.name='gradle-5'
include 'java-exec'
include 'unused-dependencies'
include 'source-sets'
diff --git a/gradle-5/source-sets/.gitignore b/gradle-modules/gradle-5/source-sets/.gitignore
similarity index 100%
rename from gradle-5/source-sets/.gitignore
rename to gradle-modules/gradle-5/source-sets/.gitignore
diff --git a/gradle-5/source-sets/README.md b/gradle-modules/gradle-5/source-sets/README.md
similarity index 100%
rename from gradle-5/source-sets/README.md
rename to gradle-modules/gradle-5/source-sets/README.md
diff --git a/gradle-5/source-sets/build.gradle b/gradle-modules/gradle-5/source-sets/build.gradle
similarity index 100%
rename from gradle-5/source-sets/build.gradle
rename to gradle-modules/gradle-5/source-sets/build.gradle
diff --git a/gradle-5/source-sets/src/itest/java/com/baeldung/itest/SourceSetsItest.java b/gradle-modules/gradle-5/source-sets/src/itest/java/com/baeldung/itest/SourceSetsItest.java
similarity index 100%
rename from gradle-5/source-sets/src/itest/java/com/baeldung/itest/SourceSetsItest.java
rename to gradle-modules/gradle-5/source-sets/src/itest/java/com/baeldung/itest/SourceSetsItest.java
diff --git a/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsMain.java b/gradle-modules/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsMain.java
similarity index 100%
rename from gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsMain.java
rename to gradle-modules/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsMain.java
diff --git a/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsObject.java b/gradle-modules/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsObject.java
similarity index 100%
rename from gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsObject.java
rename to gradle-modules/gradle-5/source-sets/src/main/java/com/baeldung/main/SourceSetsObject.java
diff --git a/gradle-5/source-sets/src/test/java/com/baeldung/test/SourceSetsTest.java b/gradle-modules/gradle-5/source-sets/src/test/java/com/baeldung/test/SourceSetsTest.java
similarity index 100%
rename from gradle-5/source-sets/src/test/java/com/baeldung/test/SourceSetsTest.java
rename to gradle-modules/gradle-5/source-sets/src/test/java/com/baeldung/test/SourceSetsTest.java
diff --git a/gradle-5/unused-dependencies/.gitignore b/gradle-modules/gradle-5/unused-dependencies/.gitignore
similarity index 100%
rename from gradle-5/unused-dependencies/.gitignore
rename to gradle-modules/gradle-5/unused-dependencies/.gitignore
diff --git a/gradle-5/unused-dependencies/build.gradle b/gradle-modules/gradle-5/unused-dependencies/build.gradle
similarity index 100%
rename from gradle-5/unused-dependencies/build.gradle
rename to gradle-modules/gradle-5/unused-dependencies/build.gradle
diff --git a/gradle-5/unused-dependencies/src/main/java/com/baeldung/unused/UnusedDependencies.java b/gradle-modules/gradle-5/unused-dependencies/src/main/java/com/baeldung/unused/UnusedDependencies.java
similarity index 100%
rename from gradle-5/unused-dependencies/src/main/java/com/baeldung/unused/UnusedDependencies.java
rename to gradle-modules/gradle-5/unused-dependencies/src/main/java/com/baeldung/unused/UnusedDependencies.java
diff --git a/gradle-6/.gitignore b/gradle-modules/gradle-6/.gitignore
similarity index 100%
rename from gradle-6/.gitignore
rename to gradle-modules/gradle-6/.gitignore
diff --git a/gradle-6/README.md b/gradle-modules/gradle-6/README.md
similarity index 100%
rename from gradle-6/README.md
rename to gradle-modules/gradle-6/README.md
diff --git a/gradle-6/build.gradle.kts b/gradle-modules/gradle-6/build.gradle.kts
similarity index 100%
rename from gradle-6/build.gradle.kts
rename to gradle-modules/gradle-6/build.gradle.kts
diff --git a/gradle-6/configuration-avoidance/build.gradle.kts b/gradle-modules/gradle-6/configuration-avoidance/build.gradle.kts
similarity index 100%
rename from gradle-6/configuration-avoidance/build.gradle.kts
rename to gradle-modules/gradle-6/configuration-avoidance/build.gradle.kts
diff --git a/gradle-6/dependency-constraints/build.gradle.kts b/gradle-modules/gradle-6/dependency-constraints/build.gradle.kts
similarity index 100%
rename from gradle-6/dependency-constraints/build.gradle.kts
rename to gradle-modules/gradle-6/dependency-constraints/build.gradle.kts
diff --git a/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java b/gradle-modules/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java
similarity index 100%
rename from gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java
rename to gradle-modules/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java
diff --git a/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java b/gradle-modules/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java
similarity index 100%
rename from gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java
rename to gradle-modules/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java
diff --git a/gradle-6/fibonacci-recursive/build.gradle.kts b/gradle-modules/gradle-6/fibonacci-recursive/build.gradle.kts
similarity index 100%
rename from gradle-6/fibonacci-recursive/build.gradle.kts
rename to gradle-modules/gradle-6/fibonacci-recursive/build.gradle.kts
diff --git a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java b/gradle-modules/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java
similarity index 100%
rename from gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java
rename to gradle-modules/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java
diff --git a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java b/gradle-modules/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java
similarity index 100%
rename from gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java
rename to gradle-modules/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java
diff --git a/gradle-6/fibonacci-spi/build.gradle.kts b/gradle-modules/gradle-6/fibonacci-spi/build.gradle.kts
similarity index 100%
rename from gradle-6/fibonacci-spi/build.gradle.kts
rename to gradle-modules/gradle-6/fibonacci-spi/build.gradle.kts
diff --git a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java b/gradle-modules/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java
similarity index 100%
rename from gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java
rename to gradle-modules/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java
diff --git a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java b/gradle-modules/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java
similarity index 100%
rename from gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java
rename to gradle-modules/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java
diff --git a/gradle-6/gradle.properties b/gradle-modules/gradle-6/gradle.properties
similarity index 100%
rename from gradle-6/gradle.properties
rename to gradle-modules/gradle-6/gradle.properties
diff --git a/gradle-6/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle-6/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle-6/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle-6/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle-6/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-6/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle-6/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle-6/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle-6/gradlew b/gradle-modules/gradle-6/gradlew
similarity index 100%
rename from gradle-6/gradlew
rename to gradle-modules/gradle-6/gradlew
diff --git a/gradle-6/gradlew.bat b/gradle-modules/gradle-6/gradlew.bat
similarity index 100%
rename from gradle-6/gradlew.bat
rename to gradle-modules/gradle-6/gradlew.bat
diff --git a/gradle-6/httpclient-platform/build.gradle.kts b/gradle-modules/gradle-6/httpclient-platform/build.gradle.kts
similarity index 100%
rename from gradle-6/httpclient-platform/build.gradle.kts
rename to gradle-modules/gradle-6/httpclient-platform/build.gradle.kts
diff --git a/gradle-6/module-metadata-publishing/build.gradle.kts b/gradle-modules/gradle-6/module-metadata-publishing/build.gradle.kts
similarity index 100%
rename from gradle-6/module-metadata-publishing/build.gradle.kts
rename to gradle-modules/gradle-6/module-metadata-publishing/build.gradle.kts
diff --git a/gradle-6/person-rest-client/build.gradle.kts b/gradle-modules/gradle-6/person-rest-client/build.gradle.kts
similarity index 100%
rename from gradle-6/person-rest-client/build.gradle.kts
rename to gradle-modules/gradle-6/person-rest-client/build.gradle.kts
diff --git a/gradle-6/settings.gradle.kts b/gradle-modules/gradle-6/settings.gradle.kts
similarity index 100%
rename from gradle-6/settings.gradle.kts
rename to gradle-modules/gradle-6/settings.gradle.kts
diff --git a/gradle-6/widget-rest-client/build.gradle.kts b/gradle-modules/gradle-6/widget-rest-client/build.gradle.kts
similarity index 100%
rename from gradle-6/widget-rest-client/build.gradle.kts
rename to gradle-modules/gradle-6/widget-rest-client/build.gradle.kts
diff --git a/gradle/.gitignore b/gradle-modules/gradle/.gitignore
similarity index 100%
rename from gradle/.gitignore
rename to gradle-modules/gradle/.gitignore
diff --git a/gradle/.travis.yml b/gradle-modules/gradle/.travis.yml
similarity index 100%
rename from gradle/.travis.yml
rename to gradle-modules/gradle/.travis.yml
diff --git a/gradle/README.md b/gradle-modules/gradle/README.md
similarity index 100%
rename from gradle/README.md
rename to gradle-modules/gradle/README.md
diff --git a/gradle/build.gradle b/gradle-modules/gradle/build.gradle
similarity index 100%
rename from gradle/build.gradle
rename to gradle-modules/gradle/build.gradle
diff --git a/gradle/buildSrc/src/main/groovy/com/baeldung/PrintToolVersionBuildSrcTask.groovy b/gradle-modules/gradle/buildSrc/src/main/groovy/com/baeldung/PrintToolVersionBuildSrcTask.groovy
similarity index 100%
rename from gradle/buildSrc/src/main/groovy/com/baeldung/PrintToolVersionBuildSrcTask.groovy
rename to gradle-modules/gradle/buildSrc/src/main/groovy/com/baeldung/PrintToolVersionBuildSrcTask.groovy
diff --git a/gradle/gradle-cucumber/README.md b/gradle-modules/gradle/gradle-cucumber/README.md
similarity index 100%
rename from gradle/gradle-cucumber/README.md
rename to gradle-modules/gradle/gradle-cucumber/README.md
diff --git a/gradle/gradle-cucumber/build.gradle b/gradle-modules/gradle/gradle-cucumber/build.gradle
similarity index 100%
rename from gradle/gradle-cucumber/build.gradle
rename to gradle-modules/gradle/gradle-cucumber/build.gradle
diff --git a/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/gradle-cucumber/gradlew b/gradle-modules/gradle/gradle-cucumber/gradlew
similarity index 100%
rename from gradle/gradle-cucumber/gradlew
rename to gradle-modules/gradle/gradle-cucumber/gradlew
diff --git a/gradle/gradle-cucumber/gradlew.bat b/gradle-modules/gradle/gradle-cucumber/gradlew.bat
similarity index 100%
rename from gradle/gradle-cucumber/gradlew.bat
rename to gradle-modules/gradle/gradle-cucumber/gradlew.bat
diff --git a/gradle/gradle-cucumber/settings.gradle b/gradle-modules/gradle/gradle-cucumber/settings.gradle
similarity index 100%
rename from gradle/gradle-cucumber/settings.gradle
rename to gradle-modules/gradle/gradle-cucumber/settings.gradle
diff --git a/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java b/gradle-modules/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java
similarity index 100%
rename from gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java
rename to gradle-modules/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java
diff --git a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java b/gradle-modules/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java
similarity index 100%
rename from gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java
rename to gradle-modules/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java
diff --git a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java b/gradle-modules/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java
similarity index 100%
rename from gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java
rename to gradle-modules/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java
diff --git a/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature b/gradle-modules/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature
similarity index 100%
rename from gradle/gradle-cucumber/src/test/resources/features/account_credited.feature
rename to gradle-modules/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature
diff --git a/gradle/gradle-dependency-management/README.md b/gradle-modules/gradle/gradle-dependency-management/README.md
similarity index 100%
rename from gradle/gradle-dependency-management/README.md
rename to gradle-modules/gradle/gradle-dependency-management/README.md
diff --git a/gradle/gradle-dependency-management/build.gradle b/gradle-modules/gradle/gradle-dependency-management/build.gradle
similarity index 100%
rename from gradle/gradle-dependency-management/build.gradle
rename to gradle-modules/gradle/gradle-dependency-management/build.gradle
diff --git a/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/gradle-dependency-management/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/gradle-dependency-management/gradlew b/gradle-modules/gradle/gradle-dependency-management/gradlew
similarity index 100%
rename from gradle/gradle-dependency-management/gradlew
rename to gradle-modules/gradle/gradle-dependency-management/gradlew
diff --git a/gradle/gradle-dependency-management/gradlew.bat b/gradle-modules/gradle/gradle-dependency-management/gradlew.bat
similarity index 100%
rename from gradle/gradle-dependency-management/gradlew.bat
rename to gradle-modules/gradle/gradle-dependency-management/gradlew.bat
diff --git a/gradle/gradle-dependency-management/libs/sampleOne.jar b/gradle-modules/gradle/gradle-dependency-management/libs/sampleOne.jar
similarity index 100%
rename from gradle/gradle-dependency-management/libs/sampleOne.jar
rename to gradle-modules/gradle/gradle-dependency-management/libs/sampleOne.jar
diff --git a/gradle/gradle-dependency-management/libs/sampleTwo.jar b/gradle-modules/gradle/gradle-dependency-management/libs/sampleTwo.jar
similarity index 100%
rename from gradle/gradle-dependency-management/libs/sampleTwo.jar
rename to gradle-modules/gradle/gradle-dependency-management/libs/sampleTwo.jar
diff --git a/gradle/gradle-dependency-management/settings.gradle b/gradle-modules/gradle/gradle-dependency-management/settings.gradle
similarity index 100%
rename from gradle/gradle-dependency-management/settings.gradle
rename to gradle-modules/gradle/gradle-dependency-management/settings.gradle
diff --git a/gradle/gradle-dependency-management/src/main/java/com/gradle/dependencymanagement/DependencyManagementApplication.java b/gradle-modules/gradle/gradle-dependency-management/src/main/java/com/gradle/dependencymanagement/DependencyManagementApplication.java
similarity index 100%
rename from gradle/gradle-dependency-management/src/main/java/com/gradle/dependencymanagement/DependencyManagementApplication.java
rename to gradle-modules/gradle/gradle-dependency-management/src/main/java/com/gradle/dependencymanagement/DependencyManagementApplication.java
diff --git a/gradle/gradle-dependency-management/src/main/resources/application.properties b/gradle-modules/gradle/gradle-dependency-management/src/main/resources/application.properties
similarity index 100%
rename from gradle/gradle-dependency-management/src/main/resources/application.properties
rename to gradle-modules/gradle/gradle-dependency-management/src/main/resources/application.properties
diff --git a/gradle/gradle-dependency-management/src/test/java/com/gradle/dependencymanagement/DependencyManagementApplicationUnitTests.java b/gradle-modules/gradle/gradle-dependency-management/src/test/java/com/gradle/dependencymanagement/DependencyManagementApplicationUnitTests.java
similarity index 100%
rename from gradle/gradle-dependency-management/src/test/java/com/gradle/dependencymanagement/DependencyManagementApplicationUnitTests.java
rename to gradle-modules/gradle/gradle-dependency-management/src/test/java/com/gradle/dependencymanagement/DependencyManagementApplicationUnitTests.java
diff --git a/gradle/gradle-employee-app/.gitignore b/gradle-modules/gradle/gradle-employee-app/.gitignore
similarity index 100%
rename from gradle/gradle-employee-app/.gitignore
rename to gradle-modules/gradle/gradle-employee-app/.gitignore
diff --git a/gradle/gradle-employee-app/README.md b/gradle-modules/gradle/gradle-employee-app/README.md
similarity index 100%
rename from gradle/gradle-employee-app/README.md
rename to gradle-modules/gradle/gradle-employee-app/README.md
diff --git a/gradle/gradle-employee-app/build.gradle b/gradle-modules/gradle/gradle-employee-app/build.gradle
similarity index 100%
rename from gradle/gradle-employee-app/build.gradle
rename to gradle-modules/gradle/gradle-employee-app/build.gradle
diff --git a/gradle/gradle-employee-app/settings.gradle b/gradle-modules/gradle/gradle-employee-app/settings.gradle
similarity index 100%
rename from gradle/gradle-employee-app/settings.gradle
rename to gradle-modules/gradle/gradle-employee-app/settings.gradle
diff --git a/gradle/gradle-employee-app/src/main/java/employee/Employee.java b/gradle-modules/gradle/gradle-employee-app/src/main/java/employee/Employee.java
similarity index 100%
rename from gradle/gradle-employee-app/src/main/java/employee/Employee.java
rename to gradle-modules/gradle/gradle-employee-app/src/main/java/employee/Employee.java
diff --git a/gradle/gradle-employee-app/src/main/java/employee/EmployeeApp.java b/gradle-modules/gradle/gradle-employee-app/src/main/java/employee/EmployeeApp.java
similarity index 100%
rename from gradle/gradle-employee-app/src/main/java/employee/EmployeeApp.java
rename to gradle-modules/gradle/gradle-employee-app/src/main/java/employee/EmployeeApp.java
diff --git a/gradle/gradle-employee-app/src/test/java/employee/EmployeeAppTest.java b/gradle-modules/gradle/gradle-employee-app/src/test/java/employee/EmployeeAppTest.java
similarity index 100%
rename from gradle/gradle-employee-app/src/test/java/employee/EmployeeAppTest.java
rename to gradle-modules/gradle/gradle-employee-app/src/test/java/employee/EmployeeAppTest.java
diff --git a/gradle/gradle-fat-jar/README.md b/gradle-modules/gradle/gradle-fat-jar/README.md
similarity index 100%
rename from gradle/gradle-fat-jar/README.md
rename to gradle-modules/gradle/gradle-fat-jar/README.md
diff --git a/gradle/gradle-fat-jar/build.gradle b/gradle-modules/gradle/gradle-fat-jar/build.gradle
similarity index 100%
rename from gradle/gradle-fat-jar/build.gradle
rename to gradle-modules/gradle/gradle-fat-jar/build.gradle
diff --git a/gradle/gradle-fat-jar/settings.gradle b/gradle-modules/gradle/gradle-fat-jar/settings.gradle
similarity index 100%
rename from gradle/gradle-fat-jar/settings.gradle
rename to gradle-modules/gradle/gradle-fat-jar/settings.gradle
diff --git a/gradle/gradle-fat-jar/src/main/java/com/baeldung/fatjar/Application.java b/gradle-modules/gradle/gradle-fat-jar/src/main/java/com/baeldung/fatjar/Application.java
similarity index 100%
rename from gradle/gradle-fat-jar/src/main/java/com/baeldung/fatjar/Application.java
rename to gradle-modules/gradle/gradle-fat-jar/src/main/java/com/baeldung/fatjar/Application.java
diff --git a/gradle/gradle-jacoco/README.md b/gradle-modules/gradle/gradle-jacoco/README.md
similarity index 100%
rename from gradle/gradle-jacoco/README.md
rename to gradle-modules/gradle/gradle-jacoco/README.md
diff --git a/gradle/gradle-jacoco/build.gradle b/gradle-modules/gradle/gradle-jacoco/build.gradle
similarity index 100%
rename from gradle/gradle-jacoco/build.gradle
rename to gradle-modules/gradle/gradle-jacoco/build.gradle
diff --git a/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/gradle-jacoco/gradlew b/gradle-modules/gradle/gradle-jacoco/gradlew
similarity index 100%
rename from gradle/gradle-jacoco/gradlew
rename to gradle-modules/gradle/gradle-jacoco/gradlew
diff --git a/gradle/gradle-jacoco/gradlew.bat b/gradle-modules/gradle/gradle-jacoco/gradlew.bat
similarity index 100%
rename from gradle/gradle-jacoco/gradlew.bat
rename to gradle-modules/gradle/gradle-jacoco/gradlew.bat
diff --git a/gradle/gradle-jacoco/lombok.config b/gradle-modules/gradle/gradle-jacoco/lombok.config
similarity index 100%
rename from gradle/gradle-jacoco/lombok.config
rename to gradle-modules/gradle/gradle-jacoco/lombok.config
diff --git a/gradle/gradle-jacoco/settings.gradle b/gradle-modules/gradle/gradle-jacoco/settings.gradle
similarity index 100%
rename from gradle/gradle-jacoco/settings.gradle
rename to gradle-modules/gradle/gradle-jacoco/settings.gradle
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java
diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java b/gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java
similarity index 100%
rename from gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java
rename to gradle-modules/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java
diff --git a/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java b/gradle-modules/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java
similarity index 100%
rename from gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java
rename to gradle-modules/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java
diff --git a/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java b/gradle-modules/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java
similarity index 100%
rename from gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java
rename to gradle-modules/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java
diff --git a/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature b/gradle-modules/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature
similarity index 100%
rename from gradle/gradle-jacoco/src/test/resources/features/account_credited.feature
rename to gradle-modules/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature
diff --git a/gradle/gradle-source-vs-target-compatibility/README.md b/gradle-modules/gradle/gradle-source-vs-target-compatibility/README.md
similarity index 100%
rename from gradle/gradle-source-vs-target-compatibility/README.md
rename to gradle-modules/gradle/gradle-source-vs-target-compatibility/README.md
diff --git a/gradle/gradle-source-vs-target-compatibility/build.gradle b/gradle-modules/gradle/gradle-source-vs-target-compatibility/build.gradle
similarity index 100%
rename from gradle/gradle-source-vs-target-compatibility/build.gradle
rename to gradle-modules/gradle/gradle-source-vs-target-compatibility/build.gradle
diff --git a/gradle/gradle-source-vs-target-compatibility/settings.gradle b/gradle-modules/gradle/gradle-source-vs-target-compatibility/settings.gradle
similarity index 100%
rename from gradle/gradle-source-vs-target-compatibility/settings.gradle
rename to gradle-modules/gradle/gradle-source-vs-target-compatibility/settings.gradle
diff --git a/gradle/gradle-source-vs-target-compatibility/src/main/java/com/baeldung/helloworld/HelloWorldApp.java b/gradle-modules/gradle/gradle-source-vs-target-compatibility/src/main/java/com/baeldung/helloworld/HelloWorldApp.java
similarity index 100%
rename from gradle/gradle-source-vs-target-compatibility/src/main/java/com/baeldung/helloworld/HelloWorldApp.java
rename to gradle-modules/gradle/gradle-source-vs-target-compatibility/src/main/java/com/baeldung/helloworld/HelloWorldApp.java
diff --git a/gradle/gradle-to-maven/README.md b/gradle-modules/gradle/gradle-to-maven/README.md
similarity index 100%
rename from gradle/gradle-to-maven/README.md
rename to gradle-modules/gradle/gradle-to-maven/README.md
diff --git a/gradle/gradle-to-maven/build.gradle b/gradle-modules/gradle/gradle-to-maven/build.gradle
similarity index 100%
rename from gradle/gradle-to-maven/build.gradle
rename to gradle-modules/gradle/gradle-to-maven/build.gradle
diff --git a/gradle/gradle-to-maven/settings.gradle b/gradle-modules/gradle/gradle-to-maven/settings.gradle
similarity index 100%
rename from gradle/gradle-to-maven/settings.gradle
rename to gradle-modules/gradle/gradle-to-maven/settings.gradle
diff --git a/gradle/gradle-wrapper/README.md b/gradle-modules/gradle/gradle-wrapper/README.md
similarity index 100%
rename from gradle/gradle-wrapper/README.md
rename to gradle-modules/gradle/gradle-wrapper/README.md
diff --git a/gradle/gradle-wrapper/gradle/wrapper/README.md b/gradle-modules/gradle/gradle-wrapper/gradle/wrapper/README.md
similarity index 100%
rename from gradle/gradle-wrapper/gradle/wrapper/README.md
rename to gradle-modules/gradle/gradle-wrapper/gradle/wrapper/README.md
diff --git a/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/gradle-wrapper/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/gradle-wrapper/gradlew b/gradle-modules/gradle/gradle-wrapper/gradlew
similarity index 100%
rename from gradle/gradle-wrapper/gradlew
rename to gradle-modules/gradle/gradle-wrapper/gradlew
diff --git a/gradle/gradle-wrapper/gradlew.bat b/gradle-modules/gradle/gradle-wrapper/gradlew.bat
similarity index 100%
rename from gradle/gradle-wrapper/gradlew.bat
rename to gradle-modules/gradle/gradle-wrapper/gradlew.bat
diff --git a/gradle/gradle-wrapper/settings.gradle b/gradle-modules/gradle/gradle-wrapper/settings.gradle
similarity index 100%
rename from gradle/gradle-wrapper/settings.gradle
rename to gradle-modules/gradle/gradle-wrapper/settings.gradle
diff --git a/gradle/gradle/shipkit.gradle b/gradle-modules/gradle/gradle/shipkit.gradle
similarity index 100%
rename from gradle/gradle/shipkit.gradle
rename to gradle-modules/gradle/gradle/shipkit.gradle
diff --git a/gradle/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/gradletaskdemo/aplugin.gradle b/gradle-modules/gradle/gradletaskdemo/aplugin.gradle
similarity index 100%
rename from gradle/gradletaskdemo/aplugin.gradle
rename to gradle-modules/gradle/gradletaskdemo/aplugin.gradle
diff --git a/gradle/gradletaskdemo/build.gradle b/gradle-modules/gradle/gradletaskdemo/build.gradle
similarity index 100%
rename from gradle/gradletaskdemo/build.gradle
rename to gradle-modules/gradle/gradletaskdemo/build.gradle
diff --git a/gradle/gradlew b/gradle-modules/gradle/gradlew
similarity index 100%
rename from gradle/gradlew
rename to gradle-modules/gradle/gradlew
diff --git a/gradle/gradlew.bat b/gradle-modules/gradle/gradlew.bat
similarity index 100%
rename from gradle/gradlew.bat
rename to gradle-modules/gradle/gradlew.bat
diff --git a/gradle/greeter/.gitignore b/gradle-modules/gradle/greeter/.gitignore
similarity index 100%
rename from gradle/greeter/.gitignore
rename to gradle-modules/gradle/greeter/.gitignore
diff --git a/gradle/greeter/build.gradle b/gradle-modules/gradle/greeter/build.gradle
similarity index 100%
rename from gradle/greeter/build.gradle
rename to gradle-modules/gradle/greeter/build.gradle
diff --git a/gradle/greeter/src/main/java/greeter/Greeter.java b/gradle-modules/gradle/greeter/src/main/java/greeter/Greeter.java
similarity index 100%
rename from gradle/greeter/src/main/java/greeter/Greeter.java
rename to gradle-modules/gradle/greeter/src/main/java/greeter/Greeter.java
diff --git a/gradle/greeter/src/test/java/greetertest/TestGreeting.java b/gradle-modules/gradle/greeter/src/test/java/greetertest/TestGreeting.java
similarity index 100%
rename from gradle/greeter/src/test/java/greetertest/TestGreeting.java
rename to gradle-modules/gradle/greeter/src/test/java/greetertest/TestGreeting.java
diff --git a/gradle/greeting-library-java/.gitignore b/gradle-modules/gradle/greeting-library-java/.gitignore
similarity index 100%
rename from gradle/greeting-library-java/.gitignore
rename to gradle-modules/gradle/greeting-library-java/.gitignore
diff --git a/gradle/greeting-library-java/build.gradle b/gradle-modules/gradle/greeting-library-java/build.gradle
similarity index 100%
rename from gradle/greeting-library-java/build.gradle
rename to gradle-modules/gradle/greeting-library-java/build.gradle
diff --git a/gradle/greeting-library-java/src/main/java/baeldunggreeter/Formatter.java b/gradle-modules/gradle/greeting-library-java/src/main/java/baeldunggreeter/Formatter.java
similarity index 100%
rename from gradle/greeting-library-java/src/main/java/baeldunggreeter/Formatter.java
rename to gradle-modules/gradle/greeting-library-java/src/main/java/baeldunggreeter/Formatter.java
diff --git a/gradle/greeting-library-java/src/test/java/baeldunggreetertest/FormatterTest.java b/gradle-modules/gradle/greeting-library-java/src/test/java/baeldunggreetertest/FormatterTest.java
similarity index 100%
rename from gradle/greeting-library-java/src/test/java/baeldunggreetertest/FormatterTest.java
rename to gradle-modules/gradle/greeting-library-java/src/test/java/baeldunggreetertest/FormatterTest.java
diff --git a/gradle/greeting-library/.gitignore b/gradle-modules/gradle/greeting-library/.gitignore
similarity index 100%
rename from gradle/greeting-library/.gitignore
rename to gradle-modules/gradle/greeting-library/.gitignore
diff --git a/gradle/greeting-library/bin/greeter/GreetingFormatter.groovy b/gradle-modules/gradle/greeting-library/bin/greeter/GreetingFormatter.groovy
similarity index 100%
rename from gradle/greeting-library/bin/greeter/GreetingFormatter.groovy
rename to gradle-modules/gradle/greeting-library/bin/greeter/GreetingFormatter.groovy
diff --git a/gradle/greeting-library/build.gradle b/gradle-modules/gradle/greeting-library/build.gradle
similarity index 100%
rename from gradle/greeting-library/build.gradle
rename to gradle-modules/gradle/greeting-library/build.gradle
diff --git a/gradle/greeting-library/src/main/groovy/greeter/GreetingFormatter.groovy b/gradle-modules/gradle/greeting-library/src/main/groovy/greeter/GreetingFormatter.groovy
similarity index 100%
rename from gradle/greeting-library/src/main/groovy/greeter/GreetingFormatter.groovy
rename to gradle-modules/gradle/greeting-library/src/main/groovy/greeter/GreetingFormatter.groovy
diff --git a/gradle/greeting-library/bin/greeter/GreetingFormatterSpec.groovy b/gradle-modules/gradle/greeting-library/src/test/groovy/greeter/GreetingFormatterSpec.groovy
similarity index 100%
rename from gradle/greeting-library/bin/greeter/GreetingFormatterSpec.groovy
rename to gradle-modules/gradle/greeting-library/src/test/groovy/greeter/GreetingFormatterSpec.groovy
diff --git a/gradle/junit5/README.md b/gradle-modules/gradle/junit5/README.md
similarity index 100%
rename from gradle/junit5/README.md
rename to gradle-modules/gradle/junit5/README.md
diff --git a/gradle/junit5/build.gradle b/gradle-modules/gradle/junit5/build.gradle
similarity index 100%
rename from gradle/junit5/build.gradle
rename to gradle-modules/gradle/junit5/build.gradle
diff --git a/gradle/junit5/settings.gradle b/gradle-modules/gradle/junit5/settings.gradle
similarity index 100%
rename from gradle/junit5/settings.gradle
rename to gradle-modules/gradle/junit5/settings.gradle
diff --git a/gradle/junit5/src/test/java/com/example/CalculatorJUnit4Test.java b/gradle-modules/gradle/junit5/src/test/java/com/example/CalculatorJUnit4Test.java
similarity index 100%
rename from gradle/junit5/src/test/java/com/example/CalculatorJUnit4Test.java
rename to gradle-modules/gradle/junit5/src/test/java/com/example/CalculatorJUnit4Test.java
diff --git a/gradle/junit5/src/test/java/com/example/CalculatorJUnit5Test.java b/gradle-modules/gradle/junit5/src/test/java/com/example/CalculatorJUnit5Test.java
similarity index 100%
rename from gradle/junit5/src/test/java/com/example/CalculatorJUnit5Test.java
rename to gradle-modules/gradle/junit5/src/test/java/com/example/CalculatorJUnit5Test.java
diff --git a/gradle/maven-to-gradle/README.md b/gradle-modules/gradle/maven-to-gradle/README.md
similarity index 100%
rename from gradle/maven-to-gradle/README.md
rename to gradle-modules/gradle/maven-to-gradle/README.md
diff --git a/gradle/maven-to-gradle/build.gradle b/gradle-modules/gradle/maven-to-gradle/build.gradle
similarity index 100%
rename from gradle/maven-to-gradle/build.gradle
rename to gradle-modules/gradle/maven-to-gradle/build.gradle
diff --git a/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.jar
rename to gradle-modules/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.properties
rename to gradle-modules/gradle/maven-to-gradle/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/maven-to-gradle/gradlew b/gradle-modules/gradle/maven-to-gradle/gradlew
similarity index 100%
rename from gradle/maven-to-gradle/gradlew
rename to gradle-modules/gradle/maven-to-gradle/gradlew
diff --git a/gradle/maven-to-gradle/gradlew.bat b/gradle-modules/gradle/maven-to-gradle/gradlew.bat
similarity index 100%
rename from gradle/maven-to-gradle/gradlew.bat
rename to gradle-modules/gradle/maven-to-gradle/gradlew.bat
diff --git a/gradle/maven-to-gradle/pom.xml b/gradle-modules/gradle/maven-to-gradle/pom.xml
similarity index 100%
rename from gradle/maven-to-gradle/pom.xml
rename to gradle-modules/gradle/maven-to-gradle/pom.xml
diff --git a/gradle/maven-to-gradle/settings.gradle b/gradle-modules/gradle/maven-to-gradle/settings.gradle
similarity index 100%
rename from gradle/maven-to-gradle/settings.gradle
rename to gradle-modules/gradle/maven-to-gradle/settings.gradle
diff --git a/gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java b/gradle-modules/gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
similarity index 100%
rename from gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
rename to gradle-modules/gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
diff --git a/gradle/plugin/build.gradle b/gradle-modules/gradle/plugin/build.gradle
similarity index 100%
rename from gradle/plugin/build.gradle
rename to gradle-modules/gradle/plugin/build.gradle
diff --git a/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPlugin.java b/gradle-modules/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPlugin.java
similarity index 100%
rename from gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPlugin.java
rename to gradle-modules/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPlugin.java
diff --git a/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPluginExtension.java b/gradle-modules/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPluginExtension.java
similarity index 100%
rename from gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPluginExtension.java
rename to gradle-modules/gradle/plugin/buildSrc/src/main/java/com/baeldung/GreetingPluginExtension.java
diff --git a/gradle/settings.gradle b/gradle-modules/gradle/settings.gradle
similarity index 82%
rename from gradle/settings.gradle
rename to gradle-modules/gradle/settings.gradle
index ba255f25c2..c049dbc7e9 100644
--- a/gradle/settings.gradle
+++ b/gradle-modules/gradle/settings.gradle
@@ -1,4 +1,4 @@
-rootProject.name = 'gradletutorial'
+rootProject.name = 'gradle'
include 'greeting-library'
include 'greeting-library-java'
diff --git a/gradle/version.properties b/gradle-modules/gradle/version.properties
similarity index 100%
rename from gradle/version.properties
rename to gradle-modules/gradle/version.properties
diff --git a/gradle-modules/settings.gradle b/gradle-modules/settings.gradle
new file mode 100644
index 0000000000..f6e0614a10
--- /dev/null
+++ b/gradle-modules/settings.gradle
@@ -0,0 +1,4 @@
+rootProject.name = 'gradle-modules'
+include 'gradle'
+include 'gradle-5'
+include 'gradle-6'
diff --git a/gradle/greeting-library/src/test/groovy/greeter/GreetingFormatterSpec.groovy b/gradle/greeting-library/src/test/groovy/greeter/GreetingFormatterSpec.groovy
deleted file mode 100644
index f1c1211552..0000000000
--- a/gradle/greeting-library/src/test/groovy/greeter/GreetingFormatterSpec.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-package greeter
-
-import spock.lang.Specification
-
-class GreetingFormatterSpec extends Specification {
-
- def 'Creating a greeting'() {
-
- expect: 'The greeeting to be correctly capitalized'
- GreetingFormatter.greeting('gradlephant') == 'Hello, Gradlephant'
-
- }
-}
diff --git a/graphql-modules/graphql-java/pom.xml b/graphql-modules/graphql-java/pom.xml
index 1993130b12..01b7a4fbc3 100644
--- a/graphql-modules/graphql-java/pom.xml
+++ b/graphql-modules/graphql-java/pom.xml
@@ -1,4 +1,3 @@
-
graphql-spqr
-
+
\ No newline at end of file
diff --git a/javax-servlets-2/pom.xml b/javax-servlets-2/pom.xml
index 6469c66db6..5fa1e76e0b 100644
--- a/javax-servlets-2/pom.xml
+++ b/javax-servlets-2/pom.xml
@@ -65,19 +65,19 @@
-
-
-
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
- -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
-
-
-
-
-
+
+
+
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
+
+
+
+
+
4.5.13
diff --git a/javax-sound/pom.xml b/javax-sound/pom.xml
index 7b5fabb9a7..dcd08cbcb8 100644
--- a/javax-sound/pom.xml
+++ b/javax-sound/pom.xml
@@ -8,11 +8,13 @@
1.0-SNAPSHOT
javax-sound
jar
+
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+
javazoom
@@ -30,8 +32,10 @@
${org.openjfx.version}
+
11.0.2
1.0.1
+
\ No newline at end of file
diff --git a/json-modules/gson/pom.xml b/json-modules/gson/pom.xml
index bd0b562785..45054b6664 100644
--- a/json-modules/gson/pom.xml
+++ b/json-modules/gson/pom.xml
@@ -52,7 +52,6 @@
gson
${gson.version}
-
diff --git a/json-modules/pom.xml b/json-modules/pom.xml
index 171086db2e..2deb53d533 100644
--- a/json-modules/pom.xml
+++ b/json-modules/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
json-modules
json-modules
@@ -31,5 +31,4 @@
-
\ No newline at end of file
diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml
index d68a9e0703..b0672633c1 100644
--- a/libraries-3/pom.xml
+++ b/libraries-3/pom.xml
@@ -86,7 +86,6 @@
error_prone_core
${errorprone.version}
-
com.structurizr
structurizr-core
diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
index eefc265457..fa1f232d1c 100644
--- a/libraries-5/pom.xml
+++ b/libraries-5/pom.xml
@@ -118,17 +118,18 @@
${jmh-core.version}
-
-
+
+
org.apache.maven.plugins
maven-surefire-plugin
-
- target/mypacts
-
-
+
+ target/mypacts
+
+
+
diff --git a/libraries-apache-commons-collections/pom.xml b/libraries-apache-commons-collections/pom.xml
index ac7a327ead..ccc2158d07 100644
--- a/libraries-apache-commons-collections/pom.xml
+++ b/libraries-apache-commons-collections/pom.xml
@@ -26,5 +26,4 @@
-
\ No newline at end of file
diff --git a/libraries-http/src/main/java/com/baeldung/javalin/User/User.java b/libraries-http/src/main/java/com/baeldung/javalin/User/User.java
index 288c027c8b..ac96ece03e 100644
--- a/libraries-http/src/main/java/com/baeldung/javalin/User/User.java
+++ b/libraries-http/src/main/java/com/baeldung/javalin/User/User.java
@@ -1,5 +1,5 @@
package com.baeldung.javalin.User;
-import com.fasterxml.jackson.annotation.JsonProperty;
+
public class User {
public int id;
diff --git a/libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java b/libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java
index 685890c6d7..1b3cc950e8 100644
--- a/libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java
+++ b/libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java
@@ -3,6 +3,7 @@ package com.baeldung.javalin.User;
import io.javalin.Handler;
import java.util.Objects;
+import java.util.Optional;
public class UserController {
public static Handler fetchAllUsernames = ctx -> {
@@ -14,11 +15,11 @@ public class UserController {
public static Handler fetchById = ctx -> {
int id = Integer.parseInt(Objects.requireNonNull(ctx.param("id")));
UserDao dao = UserDao.instance();
- User user = dao.getUserById(id).get();
- if (user == null) {
- ctx.html("Not Found");
- } else {
+ Optional user = dao.getUserById(id);
+ if(user.isPresent()){
ctx.json(user);
+ } else {
+ ctx.html("User Not Found");
}
};
}
diff --git a/lightrun/api-service/pom.xml b/lightrun/api-service/pom.xml
index 3423c490f1..ed9fc2152b 100644
--- a/lightrun/api-service/pom.xml
+++ b/lightrun/api-service/pom.xml
@@ -1,21 +1,21 @@
-
+
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.6.7
-
-
com.baeldung
api-service
0.0.1-SNAPSHOT
api-service
Aggregator Service for LightRun Article
-
- 17
-
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.7
+
+
+
org.springframework.boot
@@ -25,7 +25,6 @@
org.springframework.boot
spring-boot-starter-web
-
org.springframework.boot
spring-boot-starter-test
@@ -42,4 +41,8 @@
-
+
+ 17
+
+
+
\ No newline at end of file
diff --git a/lightrun/pom.xml b/lightrun/pom.xml
index 3ce71069a9..4902688748 100644
--- a/lightrun/pom.xml
+++ b/lightrun/pom.xml
@@ -1,17 +1,19 @@
-
+
4.0.0
com.baelduung
lightrun
0.0.1-SNAPSHOT
- pom
lightrun
Services for LightRun Article
+ pom
tasks-service
users-service
api-service
-
+
+
\ No newline at end of file
diff --git a/lightrun/tasks-service/pom.xml b/lightrun/tasks-service/pom.xml
index 441b4d3713..5d4bf8b6d5 100644
--- a/lightrun/tasks-service/pom.xml
+++ b/lightrun/tasks-service/pom.xml
@@ -1,21 +1,21 @@
-
+
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.6.7
-
-
com.baeldung
tasks-service
0.0.1-SNAPSHOT
tasks-service
Tasks Service for LightRun Article
-
- 17
-
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.7
+
+
+
org.springframework.boot
@@ -37,7 +37,6 @@
org.flywaydb
flyway-core
-
com.h2database
h2
@@ -47,7 +46,6 @@
org.apache.activemq
artemis-jms-server
-
org.springframework.boot
spring-boot-starter-test
@@ -64,4 +62,8 @@
-
+
+ 17
+
+
+
\ No newline at end of file
diff --git a/lightrun/users-service/pom.xml b/lightrun/users-service/pom.xml
index 63596ed67b..0be696bbf0 100644
--- a/lightrun/users-service/pom.xml
+++ b/lightrun/users-service/pom.xml
@@ -1,21 +1,21 @@
-
+
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.6.7
-
-
com.baeldung
users-service
0.0.1-SNAPSHOT
users-service
Users Service for LightRun Article
-
- 17
-
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.7
+
+
+
org.springframework.boot
@@ -37,13 +37,11 @@
org.flywaydb
flyway-core
-
com.h2database
h2
runtime
-
org.springframework.boot
spring-boot-starter-test
@@ -60,4 +58,8 @@
-
+
+ 17
+
+
+
\ No newline at end of file
diff --git a/lombok-modules/pom.xml b/lombok-modules/pom.xml
index 905199a13c..d5a0a7fb1f 100644
--- a/lombok-modules/pom.xml
+++ b/lombok-modules/pom.xml
@@ -1,7 +1,7 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
lombok-modules
1.0.0-SNAPSHOT
diff --git a/maven-modules/host-maven-repo-example/pom.xml b/maven-modules/host-maven-repo-example/pom.xml
index 20528853cd..d7198d51bb 100644
--- a/maven-modules/host-maven-repo-example/pom.xml
+++ b/maven-modules/host-maven-repo-example/pom.xml
@@ -98,7 +98,7 @@
-
+
Put-repo-owner
Put-repository-name
Put-branch-name
diff --git a/maven-modules/maven-properties/pom.xml b/maven-modules/maven-properties/pom.xml
index 0e9986e3ac..c3061163da 100644
--- a/maven-modules/maven-properties/pom.xml
+++ b/maven-modules/maven-properties/pom.xml
@@ -32,35 +32,35 @@
-
+
org.apache.maven.plugins
maven-resources-plugin
3.2.0
-
-
+
+
-
+
org.apache.maven.plugins
maven-compiler-plugin
-
+
-
+
${project.name}
property-from-pom
-
-
-
+
+
+
UTF-8
UTF-8
diff --git a/maven-modules/pom.xml b/maven-modules/pom.xml
index 99d7b3ed14..253f5d9fa0 100644
--- a/maven-modules/pom.xml
+++ b/maven-modules/pom.xml
@@ -40,7 +40,7 @@
maven-surefire-plugin
maven-parent-pom-resolution
maven-simple
- maven-classifier
+ maven-classifier
diff --git a/persistence-modules/core-java-persistence-2/pom.xml b/persistence-modules/core-java-persistence-2/pom.xml
index c7547e1c46..d6109d2ae9 100644
--- a/persistence-modules/core-java-persistence-2/pom.xml
+++ b/persistence-modules/core-java-persistence-2/pom.xml
@@ -1,5 +1,7 @@
-
+
4.0.0
com.baeldung.core-java-persistence-2
core-java-persistence-2
@@ -39,20 +41,16 @@
mssql-jdbc
${mssql.driver.version}
-
-
org.jooq
jooq
3.11.11
-
org.json
json
20220320
-
diff --git a/persistence-modules/fauna/pom.xml b/persistence-modules/fauna/pom.xml
index ff18865e5f..2f5da68ede 100644
--- a/persistence-modules/fauna/pom.xml
+++ b/persistence-modules/fauna/pom.xml
@@ -31,7 +31,6 @@
4.2.0
compile
-
org.springframework.boot
spring-boot-starter-test
diff --git a/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/operations/MovieService.java b/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/operations/MovieService.java
new file mode 100644
index 0000000000..eca5807dec
--- /dev/null
+++ b/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/operations/MovieService.java
@@ -0,0 +1,31 @@
+package com.baeldung.hibernate.operations;
+
+import com.baeldung.hibernate.pojo.Movie;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+public class MovieService {
+
+ @PersistenceContext
+ private EntityManager entityManager;
+
+ public void saveMovie() {
+ entityManager.getTransaction()
+ .begin();
+
+ Movie movie = new Movie();
+ movie.setId(1L);
+ movie.setMovieName("The Godfather");
+ movie.setReleaseYear(1972);
+ movie.setLanguage("English");
+
+ entityManager.persist(movie);
+ entityManager.getTransaction()
+ .commit();
+ }
+
+ public Movie getMovie(Long movieId) {
+ return entityManager.find(Movie.class, movieId);
+ }
+}
diff --git a/persistence-modules/java-mongodb-3/pom.xml b/persistence-modules/java-mongodb-3/pom.xml
index 6b02172491..d9b299b516 100644
--- a/persistence-modules/java-mongodb-3/pom.xml
+++ b/persistence-modules/java-mongodb-3/pom.xml
@@ -25,4 +25,4 @@
3.12.1
-
+
\ No newline at end of file
diff --git a/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/find/FindWithObjectId.java b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/find/FindWithObjectId.java
index b82dcb6c5b..4e7dce2d72 100644
--- a/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/find/FindWithObjectId.java
+++ b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/find/FindWithObjectId.java
@@ -25,7 +25,7 @@ public class FindWithObjectId {
mongoClient = new MongoClient("localhost", 27017);
databaseName = "baeldung";
- collectionName = "employee";
+ collectionName = "vehicle";
database = mongoClient.getDatabase(databaseName);
collection = database.getCollection(collectionName);
diff --git a/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/find/FindWithObjectIdLiveTest.java b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/find/FindWithObjectIdLiveTest.java
index 590758855c..b8a34c809b 100644
--- a/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/find/FindWithObjectIdLiveTest.java
+++ b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/find/FindWithObjectIdLiveTest.java
@@ -26,7 +26,7 @@ public class FindWithObjectIdLiveTest {
private static MongoClient mongoClient;
private static MongoDatabase database;
private static MongoCollection collection;
- private static final String DATASET_JSON = "/employee.json";
+ private static final String DATASET_JSON = "/vehicle.json";
@BeforeClass
public static void setUp() throws IOException {
@@ -34,7 +34,7 @@ public class FindWithObjectIdLiveTest {
mongoClient = new MongoClient("localhost", 27017);
database = mongoClient.getDatabase("baeldung");
- collection = database.getCollection("employee");
+ collection = database.getCollection("vehicle");
collection.drop();
@@ -47,10 +47,10 @@ public class FindWithObjectIdLiveTest {
}
@Test
- public void givenEmployeeCollection_whenFetchingDocumentsUsingObjectId_thenCheckingForDocuments() {
- Document employee = collection.find()
+ public void givenVehicleCollection_whenFetchingDocumentsUsingObjectId_thenCheckingForDocuments() {
+ Document vehicle = collection.find()
.first();
- ObjectId objectId = (ObjectId) employee.get(OBJECT_ID_FIELD);
+ ObjectId objectId = (ObjectId) vehicle.get(OBJECT_ID_FIELD);
FindIterable documents = collection.find(eq(OBJECT_ID_FIELD, objectId));
MongoCursor cursor = documents.iterator();
@@ -60,24 +60,24 @@ public class FindWithObjectIdLiveTest {
}
@Test
- public void givenEmployeeCollection_whenFetchingFirstDocumentUsingObjectId_thenCheckingForDocument() {
- Document employee = collection.find()
+ public void givenVehicleCollection_whenFetchingFirstDocumentUsingObjectId_thenCheckingForDocument() {
+ Document vehicle = collection.find()
.first();
- ObjectId objectId = (ObjectId) employee.get(OBJECT_ID_FIELD);
+ ObjectId objectId = (ObjectId) vehicle.get(OBJECT_ID_FIELD);
- Document queriedEmployee = collection.find(eq(OBJECT_ID_FIELD, objectId))
+ Document queriedVehicle = collection.find(eq(OBJECT_ID_FIELD, objectId))
.first();
- assertNotNull(queriedEmployee);
- assertEquals(employee.get(OBJECT_ID_FIELD), queriedEmployee.get(OBJECT_ID_FIELD));
+ assertNotNull(queriedVehicle);
+ assertEquals(vehicle.get(OBJECT_ID_FIELD), queriedVehicle.get(OBJECT_ID_FIELD));
}
@Test
- public void givenEmployeeCollection_whenFetchingUsingRandomObjectId_thenCheckingForDocument() {
- Document employee = collection.find(eq(OBJECT_ID_FIELD, new ObjectId()))
+ public void givenVehicleCollection_whenFetchingUsingRandomObjectId_thenCheckingForDocument() {
+ Document vehicle = collection.find(eq(OBJECT_ID_FIELD, new ObjectId()))
.first();
- assertNull(employee);
+ assertNull(vehicle);
}
@AfterClass
diff --git a/persistence-modules/java-mongodb-3/src/test/resources/vehicle.json b/persistence-modules/java-mongodb-3/src/test/resources/vehicle.json
new file mode 100644
index 0000000000..567aba647f
--- /dev/null
+++ b/persistence-modules/java-mongodb-3/src/test/resources/vehicle.json
@@ -0,0 +1,3 @@
+{"companyName":"Skoda","modelName":"Octavia","launchYear":2016,"type":"Sports","registeredNo":"SKO 1134"}
+{"companyName":"BMW","modelName":"X5","launchYear":2020,"type":"SUV","registeredNo":"BMW 3325"}
+{"companyName":"Mercedes","modelName":"Maybach","launchYear":2021,"type":"Luxury","registeredNo":"MER 9754"}
\ No newline at end of file
diff --git a/persistence-modules/java-mongodb-queries/README.md b/persistence-modules/java-mongodb-queries/README.md
index e69de29bb2..30649b0db1 100644
--- a/persistence-modules/java-mongodb-queries/README.md
+++ b/persistence-modules/java-mongodb-queries/README.md
@@ -0,0 +1,3 @@
+
+### Relevant Articles:
+- [Using Dates in CRUD Operations in MongoDB](https://www.baeldung.com/mongodb-java-date-operations)
diff --git a/persistence-modules/java-mongodb-queries/pom.xml b/persistence-modules/java-mongodb-queries/pom.xml
index 58d7af1bc9..aa3003bef6 100644
--- a/persistence-modules/java-mongodb-queries/pom.xml
+++ b/persistence-modules/java-mongodb-queries/pom.xml
@@ -1,33 +1,34 @@
-
- com.baeldung
- persistence-modules
- 1.0.0-SNAPSHOT
-
- 4.0.0
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ java-mongodb-queries
- java-mongodb-queries
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+ ../../pom.xml
+
-
-
- org.mongodb
- mongodb-driver-sync
- 4.6.0
-
-
- org.junit.jupiter
- junit-jupiter-api
- 5.8.1
- compile
-
-
+
+
+ org.mongodb
+ mongodb-driver-sync
+ 4.6.0
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.8.1
+ compile
+
+
-
- 8
- 8
-
+
+ 8
+ 8
+
\ No newline at end of file
diff --git a/persistence-modules/read-only-transactions/pom.xml b/persistence-modules/read-only-transactions/pom.xml
index d3822f8e58..39621bfe26 100644
--- a/persistence-modules/read-only-transactions/pom.xml
+++ b/persistence-modules/read-only-transactions/pom.xml
@@ -1,8 +1,7 @@
-
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
read-only-transactions
0.0.1-SNAPSHOT
@@ -15,7 +14,6 @@
-
org.springframework.boot
spring-boot-starter-data-jpa
@@ -27,56 +25,47 @@
-
org.springframework.boot
spring-boot-starter-test
${spring-boot.version}
test
-
org.springframework
spring-test
${spring-test.version}
test
-
mysql
mysql-connector-java
${mysql.version}
-
org.hibernate
hibernate-core
${hibernate.version}
-
com.zaxxer
HikariCP
${hikari.version}
-
org.junit.jupiter
junit-jupiter-engine
${junit-jupiter.version}
test
-
com.h2database
h2
${h2.version}
runtime
-
-
8.0.21
4.0.3
@@ -86,4 +75,5 @@
5.8.2
1.4.200
+
\ No newline at end of file
diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/pom.xml b/persistence-modules/spring-boot-persistence-mongodb-2/pom.xml
index a172c28a80..a745d4efc4 100644
--- a/persistence-modules/spring-boot-persistence-mongodb-2/pom.xml
+++ b/persistence-modules/spring-boot-persistence-mongodb-2/pom.xml
@@ -16,7 +16,7 @@
-
+
org.springframework.boot
spring-boot-starter-web
@@ -36,4 +36,4 @@
3.2.6
-
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-mongodb-2/pom.xml b/persistence-modules/spring-data-mongodb-2/pom.xml
index 35353edfe3..6722e9fb41 100644
--- a/persistence-modules/spring-data-mongodb-2/pom.xml
+++ b/persistence-modules/spring-data-mongodb-2/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
spring-data-mongodb-2
spring-data-mongodb-2
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java
new file mode 100644
index 0000000000..90347859eb
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java
@@ -0,0 +1,31 @@
+package com.baeldung.serializeentityid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ /**
+ * This doesn't work without a projection
+ */
+ //@JsonProperty
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private String name;
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java
new file mode 100644
index 0000000000..890e0318e8
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java
@@ -0,0 +1,27 @@
+package com.baeldung.serializeentityid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.rest.webmvc.RepositoryRestController;
+import org.springframework.data.web.PagedResourcesAssembler;
+import org.springframework.hateoas.EntityModel;
+import org.springframework.hateoas.PagedModel;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@RepositoryRestController
+public class PersonController {
+
+ @Autowired
+ PersonRepository repository;
+
+ @GetMapping("/persons")
+ ResponseEntity> persons(PagedResourcesAssembler resourcesAssembler) {
+ Page persons = this.repository.findAll(Pageable.ofSize(20));
+ Page personDtos = persons.map(PersonDto::new);
+ PagedModel> pagedModel = resourcesAssembler.toModel(personDtos);
+ return ResponseEntity.ok(pagedModel);
+ }
+
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java
new file mode 100644
index 0000000000..80751cbd6b
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java
@@ -0,0 +1,21 @@
+package com.baeldung.serializeentityid;
+
+public class PersonDto {
+
+ private final Long id;
+
+ private final String name;
+
+ public PersonDto(Person person) {
+ this.id = person.getId();
+ this.name = person.getName();
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java
new file mode 100644
index 0000000000..36c81de2c2
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.serializeentityid;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface PersonRepository extends JpaRepository {
+
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java
new file mode 100644
index 0000000000..f66e765406
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java
@@ -0,0 +1,15 @@
+package com.baeldung.serializeentityid;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import org.springframework.data.rest.core.config.Projection;
+
+@JsonPropertyOrder({ "id", "name" })
+@Projection(name = "person-view", types = Person.class)
+public interface PersonView {
+
+ Long getId();
+
+ String getName();
+
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java
new file mode 100644
index 0000000000..dbad6565fc
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java
@@ -0,0 +1,27 @@
+package com.baeldung.serializeentityid;
+
+import javax.persistence.EntityManager;
+import javax.persistence.metamodel.Type;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+
+@Configuration
+public class RestConfiguration implements RepositoryRestConfigurer {
+
+ @Autowired
+ private EntityManager entityManager;
+
+ @Override
+ public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
+ final Class>[] classes = this.entityManager.getMetamodel()
+ .getEntities()
+ .stream()
+ .map(Type::getJavaType)
+ .toArray(Class[]::new);
+ config.exposeIdsFor(classes);
+ }
+}
diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java
new file mode 100644
index 0000000000..7af12f20b2
--- /dev/null
+++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java
@@ -0,0 +1,32 @@
+package com.baeldung.serializeentityid;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SerializeEntityIdApp {
+
+ private final PersonRepository repository;
+
+ public SerializeEntityIdApp(PersonRepository repository) {
+ this.repository = repository;
+ }
+
+ @PostConstruct
+ void onStart() {
+ final Person person1 = new Person();
+ person1.setName("John Doe");
+ final Person person2 = new Person();
+ person2.setName("Markus Boe");
+
+ this.repository.save(person1);
+ this.repository.save(person2);
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(SerializeEntityIdApp.class, args);
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 1fe42bd734..6f727d0dd0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -397,9 +397,7 @@
geotools
google-cloud
google-web-toolkit
-
-
-
+
graphql-modules
grpc
@@ -505,7 +503,7 @@
protobuffer
quarkus-modules
-
+
rabbitmq
ratpack
@@ -830,9 +828,7 @@
geotools
google-cloud
google-web-toolkit
-
-
-
+
graphql-modules
grpc
diff --git a/quarkus-modules/pom.xml b/quarkus-modules/pom.xml
index 86e2132035..94fe1ae10f 100644
--- a/quarkus-modules/pom.xml
+++ b/quarkus-modules/pom.xml
@@ -16,10 +16,7 @@
quarkus
quarkus-extension
-
+
-
+
\ No newline at end of file
diff --git a/resteasy/pom.xml b/resteasy/pom.xml
index a8c1f2815c..b12576e583 100644
--- a/resteasy/pom.xml
+++ b/resteasy/pom.xml
@@ -42,7 +42,6 @@
javax.servlet-api
4.0.1
-
diff --git a/rule-engines/jess/pom.xml b/rule-engines/jess/pom.xml
index be26d54a1e..e1c844c452 100644
--- a/rule-engines/jess/pom.xml
+++ b/rule-engines/jess/pom.xml
@@ -14,12 +14,8 @@
1.1
+ local m2, compile errors with this project would go away then gov.sandia
+ jess 7.1p2 -->
diff --git a/rxjava-modules/rxjava-observables/pom.xml b/rxjava-modules/rxjava-observables/pom.xml
index c54df19fa8..15b3ec8e36 100644
--- a/rxjava-modules/rxjava-observables/pom.xml
+++ b/rxjava-modules/rxjava-observables/pom.xml
@@ -6,9 +6,11 @@
rxjava-observables
1.0-SNAPSHOT
rxjava-observables
+
com.baeldung.rxjava-modules
rxjava-modules
0.0.1-SNAPSHOT
+
\ No newline at end of file
diff --git a/rxjava-modules/rxjava-operators/pom.xml b/rxjava-modules/rxjava-operators/pom.xml
index 1859edc23b..7b051c7290 100644
--- a/rxjava-modules/rxjava-operators/pom.xml
+++ b/rxjava-modules/rxjava-operators/pom.xml
@@ -25,4 +25,5 @@
0.20.4
+
\ No newline at end of file
diff --git a/spring-5-reactive-modules/pom.xml b/spring-5-reactive-modules/pom.xml
index 73ba4afd7c..193f3600e6 100644
--- a/spring-5-reactive-modules/pom.xml
+++ b/spring-5-reactive-modules/pom.xml
@@ -1,7 +1,7 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ 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.spring.reactive
spring-5-reactive-modules
@@ -58,7 +58,6 @@
-
\ No newline at end of file
diff --git a/spring-5-reactive-modules/spring-5-data-reactive/pom.xml b/spring-5-reactive-modules/spring-5-data-reactive/pom.xml
index ee3c2a83f7..cd77467bc8 100644
--- a/spring-5-reactive-modules/spring-5-data-reactive/pom.xml
+++ b/spring-5-reactive-modules/spring-5-data-reactive/pom.xml
@@ -7,8 +7,6 @@
spring-5-data-reactive
jar
-
-
com.baeldung.spring.reactive
spring-5-reactive-modules
diff --git a/spring-5-reactive-modules/spring-5-reactive-client/pom.xml b/spring-5-reactive-modules/spring-5-reactive-client/pom.xml
index f7ca8a86a5..6d66d30af0 100644
--- a/spring-5-reactive-modules/spring-5-reactive-client/pom.xml
+++ b/spring-5-reactive-modules/spring-5-reactive-client/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
spring-5-reactive-client
spring-5-reactive-client
diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml
index 1fd6202376..3304643ca1 100644
--- a/spring-boot-modules/pom.xml
+++ b/spring-boot-modules/pom.xml
@@ -51,7 +51,6 @@
spring-boot-libraries-2
spring-boot-libraries-comparison
spring-boot-logging-log4j2
- spring-boot-multiple-datasources
spring-boot-mvc
spring-boot-mvc-2
spring-boot-mvc-3
@@ -101,4 +100,4 @@
-
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-data-3/pom.xml b/spring-boot-modules/spring-boot-data-3/pom.xml
index a4fcd0c3f3..cac5016ebd 100644
--- a/spring-boot-modules/spring-boot-data-3/pom.xml
+++ b/spring-boot-modules/spring-boot-data-3/pom.xml
@@ -1,17 +1,20 @@
-
+
4.0.0
-
- com.baeldung.spring-boot-modules
- spring-boot-modules
- 1.0.0-SNAPSHOT
-
com.baeldung
spring-boot-data-3
0.0.1-SNAPSHOT
spring-boot-data-3
spring-boot-data-3
+
+
+ com.baeldung.spring-boot-modules
+ spring-boot-modules
+ 1.0.0-SNAPSHOT
+
+
org.springframework.boot
@@ -21,13 +24,11 @@
org.springframework.boot
spring-boot-starter-data-jpa
-
mysql
mysql-connector-java
runtime
-
org.springframework.boot
spring-boot-starter-test
@@ -44,4 +45,4 @@
-
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/SpringBootJspApplication.java b/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/SpringBootJspApplication.java
index c77554f9f6..98122bed50 100644
--- a/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/SpringBootJspApplication.java
+++ b/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/SpringBootJspApplication.java
@@ -8,6 +8,8 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
@SpringBootApplication(scanBasePackages = "com.baeldung.boot.jsp")
public class SpringBootJspApplication extends SpringBootServletInitializer {
+
+ //comment below if deploying outside web container -->
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootJspApplication.class);
diff --git a/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/controller/HomeController.java b/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/controller/HomeController.java
new file mode 100644
index 0000000000..7d7b9c3cbd
--- /dev/null
+++ b/spring-boot-modules/spring-boot-jsp/src/main/java/com/baeldung/boot/jsp/controller/HomeController.java
@@ -0,0 +1,15 @@
+package com.baeldung.boot.jsp.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("/")
+public class HomeController {
+
+ @GetMapping("")
+ public String index() {
+ return "index";
+ }
+}
diff --git a/spring-boot-modules/spring-boot-jsp/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-boot-modules/spring-boot-jsp/src/main/webapp/WEB-INF/jsp/index.jsp
new file mode 100644
index 0000000000..87b6beaf26
--- /dev/null
+++ b/spring-boot-modules/spring-boot-jsp/src/main/webapp/WEB-INF/jsp/index.jsp
@@ -0,0 +1,10 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+
+
+ Index page
+
+
+ This is index page
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/pom.xml b/spring-boot-modules/spring-boot-keycloak-2/pom.xml
index 3f83c99613..83c10c1a22 100644
--- a/spring-boot-modules/spring-boot-keycloak-2/pom.xml
+++ b/spring-boot-modules/spring-boot-keycloak-2/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.keycloak
spring-boot-keycloak-2
@@ -62,4 +62,4 @@
-
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/.gitignore b/spring-boot-modules/spring-boot-multiple-datasources/.gitignore
deleted file mode 100644
index 87a3fce287..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.local-db
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/pom.xml b/spring-boot-modules/spring-boot-multiple-datasources/pom.xml
deleted file mode 100644
index 9355de8a36..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
- 4.0.0
- spring-boot-multiple-datasources
- 0.1.0-SNAPSHOT
- spring-boot-multiple-datasources
- jar
- Module For Spring Boot With Multiple Datasources
-
-
- com.baeldung.spring-boot-modules
- spring-boot-modules
- 1.0.0-SNAPSHOT
- ../pom.xml
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- com.h2database
- h2
- provided
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
-
- org.springframework.boot
- spring-boot-starter-test
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
- 2.6.3
-
-
-
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/Todo.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/Todo.java
deleted file mode 100644
index 6f8557e258..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/Todo.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.baeldung.spring.datasources.todos;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-@Entity
-public class Todo {
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private Long id;
- private String title;
- private boolean completed;
-
- public Todo() {
- }
-
- public Todo(String title) {
- this.title = title;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public boolean isCompleted() {
- return completed;
- }
-
- public void setCompleted(boolean completed) {
- this.completed = completed;
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoDatasourceConfiguration.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoDatasourceConfiguration.java
deleted file mode 100644
index 3bfc8e2855..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoDatasourceConfiguration.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.baeldung.spring.datasources.todos;
-
-import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-
-import javax.sql.DataSource;
-
-@Configuration
-public class TodoDatasourceConfiguration {
-
- @Bean
- @ConfigurationProperties("spring.datasource.todos")
- public DataSourceProperties todosDataSourceProperties() {
- return new DataSourceProperties();
- }
-
- @Bean
- @Primary
- public DataSource todosDataSource() {
- return todosDataSourceProperties()
- .initializeDataSourceBuilder()
- .build();
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoJpaConfiguration.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoJpaConfiguration.java
deleted file mode 100644
index 655a3a55c2..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoJpaConfiguration.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.baeldung.spring.datasources.todos;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-import javax.sql.DataSource;
-import java.util.Objects;
-
-@Configuration
-@EnableTransactionManagement
-@EnableJpaRepositories(
- basePackageClasses = Todo.class,
- entityManagerFactoryRef = "todosEntityManagerFactory",
- transactionManagerRef = "todosTransactionManager"
-)
-public class TodoJpaConfiguration {
-
- @Bean
- public LocalContainerEntityManagerFactoryBean todosEntityManagerFactory(
- @Qualifier("todosDataSource") DataSource dataSource,
- EntityManagerFactoryBuilder builder) {
- return builder
- .dataSource(dataSource)
- .packages(Todo.class)
- .build();
- }
-
- @Bean
- public PlatformTransactionManager todosTransactionManager(
- @Qualifier("todosEntityManagerFactory") LocalContainerEntityManagerFactoryBean todosEntityManagerFactory) {
- return new JpaTransactionManager(Objects.requireNonNull(todosEntityManagerFactory.getObject()));
- }
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoRepository.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoRepository.java
deleted file mode 100644
index 09fb8c6500..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/todos/TodoRepository.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.baeldung.spring.datasources.todos;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface TodoRepository extends JpaRepository {
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/Topic.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/Topic.java
deleted file mode 100644
index 1d1f20f111..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/Topic.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.baeldung.spring.datasources.topics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-@Entity
-public class Topic {
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private Long id;
- private String title;
-
- public Topic() {
- }
-
- public Topic(String title) {
- this.title = title;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicDatasourceConfiguration.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicDatasourceConfiguration.java
deleted file mode 100644
index a06983d681..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicDatasourceConfiguration.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.baeldung.spring.datasources.topics;
-
-import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.sql.DataSource;
-
-@Configuration
-public class TopicDatasourceConfiguration {
-
- @Bean
- @ConfigurationProperties("spring.datasource.topics")
- public DataSourceProperties topicsDataSourceProperties() {
- return new DataSourceProperties();
- }
-
- @Bean
- public DataSource topicsDataSource() {
- return topicsDataSourceProperties()
- .initializeDataSourceBuilder()
- .build();
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicJpaConfiguration.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicJpaConfiguration.java
deleted file mode 100644
index d800813b8c..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicJpaConfiguration.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.baeldung.spring.datasources.topics;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-import javax.sql.DataSource;
-import java.util.Objects;
-
-@Configuration
-@EnableTransactionManagement
-@EnableJpaRepositories(
- basePackageClasses = Topic.class,
- entityManagerFactoryRef = "topicsEntityManagerFactory",
- transactionManagerRef = "topicsTransactionManager"
-)
-public class TopicJpaConfiguration {
-
- @Bean
- public LocalContainerEntityManagerFactoryBean topicsEntityManagerFactory(
- @Qualifier("topicsDataSource") DataSource dataSource,
- EntityManagerFactoryBuilder builder
- ) {
- return builder
- .dataSource(dataSource)
- .packages(Topic.class)
- .build();
- }
-
- @Bean
- public PlatformTransactionManager topicsTransactionManager(
- @Qualifier("topicsEntityManagerFactory") LocalContainerEntityManagerFactoryBean topicsEntityManagerFactory) {
- return new JpaTransactionManager(Objects.requireNonNull(topicsEntityManagerFactory.getObject()));
- }
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicRepository.java b/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicRepository.java
deleted file mode 100644
index 499b72650a..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/topics/TopicRepository.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.baeldung.spring.datasources.topics;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface TopicRepository extends JpaRepository {
-}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/resources/application.yml b/spring-boot-modules/spring-boot-multiple-datasources/src/main/resources/application.yml
deleted file mode 100644
index 4754acfc0f..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/resources/application.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-spring:
- datasource:
- todos:
- url: jdbc:h2:./.local-db/todos;DB_CLOSE_DELAY=-1;MODE=DB2;AUTO_SERVER=TRUE
- username: sa
- password: null
- driverClassName: org.h2.Driver
- topics:
- url: jdbc:h2:./.local-db/topics;DB_CLOSE_DELAY=-1;MODE=DB2;AUTO_SERVER=TRUE
- username: sa
- password: null
- driverClassName: org.h2.Driver
- h2:
- console:
- enabled: true
- path: /h2-console
- jpa:
- generate-ddl: true
- hibernate:
- ddl-auto: update
- properties:
- hibernate:
- dialect: org.hibernate.dialect.H2Dialect
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/test/java/com/baeldung/spring/datasources/MultipleDatasourcesIntegrationTest.java b/spring-boot-modules/spring-boot-multiple-datasources/src/test/java/com/baeldung/spring/datasources/MultipleDatasourcesIntegrationTest.java
deleted file mode 100644
index 397992f6c8..0000000000
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/test/java/com/baeldung/spring/datasources/MultipleDatasourcesIntegrationTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.baeldung.spring.datasources;
-
-import com.baeldung.spring.datasources.todos.Todo;
-import com.baeldung.spring.datasources.todos.TodoRepository;
-import com.baeldung.spring.datasources.topics.Topic;
-import com.baeldung.spring.datasources.topics.TopicRepository;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
-
-import java.util.Optional;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@DataJpaTest // no test database!
-class MultipleDatasourcesIntegrationTest {
-
- @Autowired
- TodoRepository todoRepo;
- @Autowired
- TopicRepository topicRepo;
-
- @Test
- void shouldSaveTodoToTodoDB() {
- Todo todo = new Todo("test");
- Todo saved =todoRepo.save(todo);
- Optional result= todoRepo.findById(saved.getId());
- assertThat(result).isPresent();
- }
-
- @Test
- void shouldSaveTopicToTopicDB() {
- Topic todo = new Topic("test");
- Topic saved =topicRepo.save(todo);
- Optional result= topicRepo.findById(saved.getId());
- assertThat(result).isPresent();
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-springdoc/pom.xml b/spring-boot-modules/spring-boot-springdoc/pom.xml
index 18b1774920..8cd94179cf 100644
--- a/spring-boot-modules/spring-boot-springdoc/pom.xml
+++ b/spring-boot-modules/spring-boot-springdoc/pom.xml
@@ -1,5 +1,7 @@
-
+
4.0.0
spring-boot-springdoc
0.0.1-SNAPSHOT
diff --git a/spring-boot-modules/spring-boot-testing-2/pom.xml b/spring-boot-modules/spring-boot-testing-2/pom.xml
index 556142b480..fbcdc19d56 100644
--- a/spring-boot-modules/spring-boot-testing-2/pom.xml
+++ b/spring-boot-modules/spring-boot-testing-2/pom.xml
@@ -23,6 +23,14 @@
org.springframework.boot
spring-boot-starter-web-services
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
wsdl4j
wsdl4j
@@ -38,8 +46,40 @@
3.1.3
test
+
+ org.keycloak
+ keycloak-spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+ test
+
+
+ com.github.dasniko
+ testcontainers-keycloak
+ ${testcontainers-keycloak.version}
+ test
+
+
+ org.testcontainers
+ testcontainers
+ ${testcontainers.version}
+
+
+
+
+ org.keycloak.bom
+ keycloak-adapter-bom
+ ${keycloak-adapter.version}
+ pom
+ import
+
+
+
+
@@ -67,6 +107,9 @@
com.baeldung.boot.Application
+ 1.17.2
+ 1.10.0
+ 13.0.1
-
\ No newline at end of file
+
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/Application.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/Application.java
new file mode 100644
index 0000000000..6619b9ccae
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.keycloaktestcontainers;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakConfiguration.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakConfiguration.java
new file mode 100644
index 0000000000..aa12e44cc9
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakConfiguration.java
@@ -0,0 +1,14 @@
+package com.baeldung.keycloaktestcontainers.configuration;
+
+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-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakSecurityConfiguration.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakSecurityConfiguration.java
new file mode 100644
index 0000000000..9bbf1b92ab
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/configuration/KeycloakSecurityConfiguration.java
@@ -0,0 +1,46 @@
+package com.baeldung.keycloaktestcontainers.configuration;
+
+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 KeycloakSecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter {
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder auth) {
+ auth.authenticationProvider(keycloakAuthenticationProvider());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Bean
+ @Override
+ protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
+ return new NullAuthenticatedSessionStrategy();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ super.configure(http);
+
+ http.csrf()
+ .disable()
+ .cors()
+ .and()
+ .authorizeRequests()
+ .anyRequest()
+ .authenticated();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/controller/UserController.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/controller/UserController.java
new file mode 100644
index 0000000000..7eb16a5922
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/controller/UserController.java
@@ -0,0 +1,17 @@
+package com.baeldung.keycloaktestcontainers.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.keycloaktestcontainers.dto.UserDto;
+
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+ @GetMapping("me")
+ public UserDto getMe() {
+ return new UserDto(1L, "janedoe", "Doe", "Jane", "jane.doe@baeldung.com");
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/dto/UserDto.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/dto/UserDto.java
new file mode 100644
index 0000000000..799db11c37
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/keycloaktestcontainers/dto/UserDto.java
@@ -0,0 +1,57 @@
+package com.baeldung.keycloaktestcontainers.dto;
+
+public class UserDto {
+ private long id;
+ private String username;
+ private String lastname;
+ private String firstname;
+ private String email;
+
+ public UserDto(long id, String username, String lastname, String firstname, String email) {
+ this.id = id;
+ this.username = username;
+ this.lastname = lastname;
+ this.firstname = firstname;
+ this.email = email;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/MultipleDatasourcesApplication.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/RedisTestcontainersApplication.java
similarity index 58%
rename from spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/MultipleDatasourcesApplication.java
rename to spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/RedisTestcontainersApplication.java
index efdff387df..50efd56751 100644
--- a/spring-boot-modules/spring-boot-multiple-datasources/src/main/java/com/baeldung/spring/datasources/MultipleDatasourcesApplication.java
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/RedisTestcontainersApplication.java
@@ -1,13 +1,13 @@
-package com.baeldung.spring.datasources;
+package com.baeldung.redistestcontainers;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
-public class MultipleDatasourcesApplication {
+public class RedisTestcontainersApplication {
public static void main(String[] args) {
- SpringApplication.run(MultipleDatasourcesApplication.class, args);
+ SpringApplication.run(RedisTestcontainersApplication.class, args);
}
}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/hash/Product.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/hash/Product.java
new file mode 100644
index 0000000000..3345a17c79
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/hash/Product.java
@@ -0,0 +1,55 @@
+package com.baeldung.redistestcontainers.hash;
+
+import org.springframework.data.redis.core.RedisHash;
+
+import java.io.Serializable;
+
+@RedisHash("product")
+public class Product implements Serializable {
+ private String id;
+ private String name;
+ private double price;
+
+ // Constructor, getters and setters
+ public Product() {
+ }
+
+ public Product(String id, String name, double price) {
+ this.id = id;
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+
+ @Override
+ public String toString() {
+ return "Product{" +
+ "id='" + id + '\'' +
+ ", name='" + name + '\'' +
+ ", price=" + price +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/repository/ProductRepository.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/repository/ProductRepository.java
new file mode 100644
index 0000000000..5851c282e0
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/repository/ProductRepository.java
@@ -0,0 +1,9 @@
+package com.baeldung.redistestcontainers.repository;
+
+import com.baeldung.redistestcontainers.hash.Product;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ProductRepository extends CrudRepository {
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/service/ProductService.java b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/service/ProductService.java
new file mode 100644
index 0000000000..3eb0149ef1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/java/com/baeldung/redistestcontainers/service/ProductService.java
@@ -0,0 +1,31 @@
+package com.baeldung.redistestcontainers.service;
+
+import com.baeldung.redistestcontainers.hash.Product;
+import com.baeldung.redistestcontainers.repository.ProductRepository;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProductService {
+
+ private final ProductRepository productRepository;
+
+ public ProductService(ProductRepository productRepository) {
+ this.productRepository = productRepository;
+ }
+
+ public Product getProduct(String id) {
+ return productRepository.findById(id).orElse(null);
+ }
+
+ void createProduct(Product product) {
+ productRepository.save(product);
+ }
+
+ void updateProduct(Product product) {
+ productRepository.save(product);
+ }
+
+ void deleteProduct(String id) {
+ productRepository.deleteById(id);
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-testing-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-testing-2/src/main/resources/application.properties
index 8b13789179..0076e1252d 100644
--- a/spring-boot-modules/spring-boot-testing-2/src/main/resources/application.properties
+++ b/spring-boot-modules/spring-boot-testing-2/src/main/resources/application.properties
@@ -1 +1,4 @@
-
+keycloak.enabled=true
+keycloak.realm=baeldung
+keycloak.resource=baeldung-api
+keycloak.auth-server-url=http://localhost:8081
diff --git a/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/IntegrationTest.java b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/IntegrationTest.java
new file mode 100644
index 0000000000..902c27b16e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/IntegrationTest.java
@@ -0,0 +1,85 @@
+package com.baeldung.keycloaktestcontainers;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.http.client.utils.URIBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.json.JacksonJsonParser;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.test.util.TestPropertyValues;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.context.ApplicationContextInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import dasniko.testcontainers.keycloak.KeycloakContainer;
+import io.restassured.RestAssured;
+
+@ContextConfiguration(initializers = { IntegrationTest.Initializer.class })
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+public abstract class IntegrationTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(IntegrationTest.class.getName());
+
+ @LocalServerPort
+ private int port;
+
+ static final KeycloakContainer keycloak = new KeycloakContainer().withRealmImportFile("keycloak/realm-export.json");
+
+ @PostConstruct
+ public void init() {
+ RestAssured.baseURI = "http://localhost:" + port;
+ }
+
+ static class Initializer implements ApplicationContextInitializer {
+
+ public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
+ keycloak.start();
+ TestPropertyValues.of("keycloak.auth-server-url=" + keycloak.getAuthServerUrl())
+ .applyTo(configurableApplicationContext.getEnvironment());
+ }
+ }
+
+ protected String getJaneDoeBearer() {
+
+ try {
+ URI authorizationURI = new URIBuilder(keycloak.getAuthServerUrl() + "/realms/baeldung/protocol/openid-connect/token").build();
+ WebClient webclient = WebClient.builder()
+ .build();
+ MultiValueMap formData = new LinkedMultiValueMap<>();
+ formData.put("grant_type", Collections.singletonList("password"));
+ formData.put("client_id", Collections.singletonList("baeldung-api"));
+ formData.put("username", Collections.singletonList("jane.doe@baeldung.com"));
+ formData.put("password", Collections.singletonList("s3cr3t"));
+
+ String result = webclient.post()
+ .uri(authorizationURI)
+ .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+ .body(BodyInserters.fromFormData(formData))
+ .retrieve()
+ .bodyToMono(String.class)
+ .block();
+
+ JacksonJsonParser jsonParser = new JacksonJsonParser();
+
+ return "Bearer " + jsonParser.parseMap(result)
+ .get("access_token")
+ .toString();
+ } catch (URISyntaxException e) {
+ LOGGER.error("Can't obtain an access token from Keycloak!", e);
+ }
+
+ return null;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/UserControllerIntegrationTest.java b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/UserControllerIntegrationTest.java
new file mode 100644
index 0000000000..4015612860
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/keycloaktestcontainers/UserControllerIntegrationTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.keycloaktestcontainers;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.equalTo;
+
+import org.junit.jupiter.api.Test;
+
+class UserControllerIntegrationTest extends IntegrationTest {
+
+ @Test
+ void givenAuthenticatedUser_whenGetMe_shouldReturnMyInfo() {
+
+ given().header("Authorization", getJaneDoeBearer())
+ .when()
+ .get("/users/me")
+ .then()
+ .body("username", equalTo("janedoe"))
+ .body("lastname", equalTo("Doe"))
+ .body("firstname", equalTo("Jane"))
+ .body("email", equalTo("jane.doe@baeldung.com"));
+
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/redistestcontainers/service/ProductServiceIntegrationTest.java b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/redistestcontainers/service/ProductServiceIntegrationTest.java
new file mode 100644
index 0000000000..519db1b335
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/test/java/com/baeldung/redistestcontainers/service/ProductServiceIntegrationTest.java
@@ -0,0 +1,75 @@
+package com.baeldung.redistestcontainers.service;
+
+import com.baeldung.redistestcontainers.hash.Product;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.utility.DockerImageName;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+@SpringBootTest
+public class ProductServiceIntegrationTest {
+
+ static {
+ GenericContainer> redis = new GenericContainer<>(DockerImageName.parse("redis:5.0.3-alpine"))
+ .withExposedPorts(6379);
+ redis.start();
+ System.setProperty("spring.redis.host", redis.getHost());
+ System.setProperty("spring.redis.port", redis.getMappedPort(6379).toString());
+ }
+
+ @Autowired
+ private ProductService productService;
+
+ @Test
+ void givenProductCreated_whenGettingProductById_thenProductExistsAndHasSameProperties() {
+ Product product = new Product("1", "Test Product", 10.0);
+ productService.createProduct(product);
+ Product productFromDb = productService.getProduct("1");
+ assertEquals("1", productFromDb.getId());
+ assertEquals("Test Product", productFromDb.getName());
+ assertEquals(10.0, productFromDb.getPrice());
+ }
+
+ @Test
+ void givenProductCreatedAndUpdated_whenGettingTheProduct_thenUpdatedProductReturned() {
+ Product product = new Product("1", "Test Product", 10.0);
+ productService.createProduct(product);
+ Product productFromDb = productService.getProduct("1");
+ assertEquals("1", productFromDb.getId());
+ assertEquals("Test Product", productFromDb.getName());
+ assertEquals(10.0, productFromDb.getPrice());
+ productFromDb.setName("Updated Product");
+ productFromDb.setPrice(20.0);
+ productService.updateProduct(productFromDb);
+ Product updatedProductFromDb = productService.getProduct("1");
+ assertEquals("Updated Product", updatedProductFromDb.getName());
+ assertEquals(20.0, updatedProductFromDb.getPrice());
+ }
+
+ @Test
+ void givenProductCreatedAndDeleted_whenGettingTheProduct_thenNoProductReturned() {
+ Product product = new Product("1", "Test Product", 10.0);
+ productService.createProduct(product);
+ Product productFromDb = productService.getProduct("1");
+ assertEquals("1", productFromDb.getId());
+ assertEquals("Test Product", productFromDb.getName());
+ assertEquals(10.0, productFromDb.getPrice());
+ productService.deleteProduct("1");
+ Product deletedProductFromDb = productService.getProduct("1");
+ assertNull(deletedProductFromDb);
+ }
+
+ @Test
+ void givenProductCreated_whenGettingProductById_thenSameProductReturned() {
+ Product product = new Product("1", "Test Product", 10.0);
+ productService.createProduct(product);
+ Product productFromDb = productService.getProduct("1");
+ assertEquals("1", productFromDb.getId());
+ assertEquals("Test Product", productFromDb.getName());
+ assertEquals(10.0, productFromDb.getPrice());
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-testing-2/src/test/resources/application.properties b/spring-boot-modules/spring-boot-testing-2/src/test/resources/application.properties
index 2b406d1c6e..0076e1252d 100644
--- a/spring-boot-modules/spring-boot-testing-2/src/test/resources/application.properties
+++ b/spring-boot-modules/spring-boot-testing-2/src/test/resources/application.properties
@@ -1,3 +1,4 @@
-# logging.level.com.baeldung.testloglevel=DEBUG
-
-# logging.level.root=INFO
+keycloak.enabled=true
+keycloak.realm=baeldung
+keycloak.resource=baeldung-api
+keycloak.auth-server-url=http://localhost:8081
diff --git a/spring-boot-modules/spring-boot-testing-2/src/test/resources/keycloak/realm-export.json b/spring-boot-modules/spring-boot-testing-2/src/test/resources/keycloak/realm-export.json
new file mode 100644
index 0000000000..e0cc25d233
--- /dev/null
+++ b/spring-boot-modules/spring-boot-testing-2/src/test/resources/keycloak/realm-export.json
@@ -0,0 +1,1803 @@
+{
+ "id": "baeldung",
+ "realm": "baeldung",
+ "notBefore": 0,
+ "defaultSignatureAlgorithm": "RS256",
+ "revokeRefreshToken": false,
+ "refreshTokenMaxReuse": 0,
+ "accessTokenLifespan": 300,
+ "accessTokenLifespanForImplicitFlow": 900,
+ "ssoSessionIdleTimeout": 1800,
+ "ssoSessionMaxLifespan": 36000,
+ "ssoSessionIdleTimeoutRememberMe": 0,
+ "ssoSessionMaxLifespanRememberMe": 0,
+ "offlineSessionIdleTimeout": 2592000,
+ "offlineSessionMaxLifespanEnabled": false,
+ "offlineSessionMaxLifespan": 5184000,
+ "clientSessionIdleTimeout": 0,
+ "clientSessionMaxLifespan": 0,
+ "clientOfflineSessionIdleTimeout": 0,
+ "clientOfflineSessionMaxLifespan": 0,
+ "accessCodeLifespan": 60,
+ "accessCodeLifespanUserAction": 300,
+ "accessCodeLifespanLogin": 1800,
+ "actionTokenGeneratedByAdminLifespan": 43200,
+ "actionTokenGeneratedByUserLifespan": 300,
+ "oauth2DeviceCodeLifespan": 600,
+ "oauth2DevicePollingInterval": 5,
+ "enabled": true,
+ "sslRequired": "external",
+ "registrationAllowed": false,
+ "registrationEmailAsUsername": false,
+ "rememberMe": false,
+ "verifyEmail": false,
+ "loginWithEmailAllowed": true,
+ "duplicateEmailsAllowed": false,
+ "resetPasswordAllowed": false,
+ "editUsernameAllowed": false,
+ "bruteForceProtected": false,
+ "permanentLockout": false,
+ "maxFailureWaitSeconds": 900,
+ "minimumQuickLoginWaitSeconds": 60,
+ "waitIncrementSeconds": 60,
+ "quickLoginCheckMilliSeconds": 1000,
+ "maxDeltaTimeSeconds": 43200,
+ "failureFactor": 30,
+ "defaultRole": {
+ "id": "ae0de638-8b16-4d7f-9c1d-e1a55129f895",
+ "name": "default-roles-baeldung",
+ "description": "${role_default-roles}",
+ "composite": true,
+ "clientRole": false,
+ "containerId": "baeldung"
+ },
+ "requiredCredentials": [
+ "password"
+ ],
+ "otpPolicyType": "totp",
+ "otpPolicyAlgorithm": "HmacSHA1",
+ "otpPolicyInitialCounter": 0,
+ "otpPolicyDigits": 6,
+ "otpPolicyLookAheadWindow": 1,
+ "otpPolicyPeriod": 30,
+ "otpSupportedApplications": [
+ "FreeOTP",
+ "Google Authenticator"
+ ],
+ "webAuthnPolicyRpEntityName": "keycloak",
+ "webAuthnPolicySignatureAlgorithms": [
+ "ES256"
+ ],
+ "webAuthnPolicyRpId": "",
+ "webAuthnPolicyAttestationConveyancePreference": "not specified",
+ "webAuthnPolicyAuthenticatorAttachment": "not specified",
+ "webAuthnPolicyRequireResidentKey": "not specified",
+ "webAuthnPolicyUserVerificationRequirement": "not specified",
+ "webAuthnPolicyCreateTimeout": 0,
+ "webAuthnPolicyAvoidSameAuthenticatorRegister": false,
+ "webAuthnPolicyAcceptableAaguids": [],
+ "webAuthnPolicyPasswordlessRpEntityName": "keycloak",
+ "webAuthnPolicyPasswordlessSignatureAlgorithms": [
+ "ES256"
+ ],
+ "webAuthnPolicyPasswordlessRpId": "",
+ "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified",
+ "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified",
+ "webAuthnPolicyPasswordlessRequireResidentKey": "not specified",
+ "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified",
+ "webAuthnPolicyPasswordlessCreateTimeout": 0,
+ "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false,
+ "webAuthnPolicyPasswordlessAcceptableAaguids": [],
+ "scopeMappings": [
+ {
+ "clientScope": "offline_access",
+ "roles": [
+ "offline_access"
+ ]
+ }
+ ],
+ "clientScopeMappings": {
+ "account": [
+ {
+ "client": "account-console",
+ "roles": [
+ "manage-account"
+ ]
+ }
+ ]
+ },
+ "clients": [
+ {
+ "id": "f4acf69c-1490-444e-9b1a-dfa4016b54a1",
+ "clientId": "account",
+ "name": "${client_account}",
+ "rootUrl": "${authBaseUrl}",
+ "baseUrl": "/realms/baeldung/account/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [
+ "/realms/baeldung/account/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "cbfe941f-fe9a-4b79-aeb6-043b7993ffcc",
+ "clientId": "account-console",
+ "name": "${client_account-console}",
+ "rootUrl": "${authBaseUrl}",
+ "baseUrl": "/realms/baeldung/account/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [
+ "/realms/baeldung/account/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "pkce.code.challenge.method": "S256"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "protocolMappers": [
+ {
+ "id": "bfff2bda-a626-489f-8b07-9989582dd452",
+ "name": "audience resolve",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-audience-resolve-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "6c504e4d-4ad5-48ee-a47b-6c31d8d9f67e",
+ "clientId": "admin-cli",
+ "name": "${client_admin-cli}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": false,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "c683c33f-a584-46b1-af9f-d401ba93af85",
+ "clientId": "baeldung-api",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "backchannel.logout.session.required": "true",
+ "backchannel.logout.revoke.offline.tokens": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "d71dc523-1f66-4cce-a23f-83a13ba3744b",
+ "clientId": "broker",
+ "name": "${client_broker}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": true,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "36b87703-dfab-4c8e-b2a6-2bd96c89c141",
+ "clientId": "realm-management",
+ "name": "${client_realm-management}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": true,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "440114dd-9b2c-4c4b-b192-8dec233715db",
+ "clientId": "security-admin-console",
+ "name": "${client_security-admin-console}",
+ "rootUrl": "${authAdminUrl}",
+ "baseUrl": "/admin/baeldung/console/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "redirectUris": [
+ "/admin/baeldung/console/*"
+ ],
+ "webOrigins": [
+ "+"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "pkce.code.challenge.method": "S256"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "protocolMappers": [
+ {
+ "id": "20f83504-601b-43d8-8725-38af0d7471d8",
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ }
+ ],
+ "clientScopes": [
+ {
+ "id": "b7ffedbd-ba94-4fd4-ba1e-0145252e10ef",
+ "name": "email",
+ "description": "OpenID Connect built-in scope: email",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${emailScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "7f93ba40-1f5e-48ff-b332-3cfe659072cb",
+ "name": "email",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "email",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "014cf82a-ac04-4fff-880b-019a225d3bbd",
+ "name": "email verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "emailVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email_verified",
+ "jsonType.label": "boolean"
+ }
+ }
+ ]
+ },
+ {
+ "id": "0c36e47f-4e3d-4cad-aa18-5521d3bbc7f2",
+ "name": "roles",
+ "description": "OpenID Connect scope for add user roles to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${rolesScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "abf78f87-6282-4a04-9ea6-4270978c7507",
+ "name": "audience resolve",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-audience-resolve-mapper",
+ "consentRequired": false,
+ "config": {}
+ },
+ {
+ "id": "171f5552-b4dc-45c1-b166-5738b7bbb08d",
+ "name": "realm roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "realm_access.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ },
+ {
+ "id": "92c00b3e-ec76-4497-aa56-3df225e82e24",
+ "name": "client roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-client-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "resource_access.${client_id}.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ }
+ ]
+ },
+ {
+ "id": "b1856e10-88e1-4f14-b9f0-6673523f6e39",
+ "name": "offline_access",
+ "description": "OpenID Connect built-in scope: offline_access",
+ "protocol": "openid-connect",
+ "attributes": {
+ "consent.screen.text": "${offlineAccessScopeConsentText}",
+ "display.on.consent.screen": "true"
+ }
+ },
+ {
+ "id": "d94d0d20-6329-47ce-a4d4-b0f80d702ab7",
+ "name": "address",
+ "description": "OpenID Connect built-in scope: address",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${addressScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "9dc9f261-26ed-4dab-bdbb-735f7a50f90e",
+ "name": "address",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-address-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute.formatted": "formatted",
+ "user.attribute.country": "country",
+ "user.attribute.postal_code": "postal_code",
+ "userinfo.token.claim": "true",
+ "user.attribute.street": "street",
+ "id.token.claim": "true",
+ "user.attribute.region": "region",
+ "access.token.claim": "true",
+ "user.attribute.locality": "locality"
+ }
+ }
+ ]
+ },
+ {
+ "id": "b9e049bb-7cbf-483a-a55a-c777b7403229",
+ "name": "phone",
+ "description": "OpenID Connect built-in scope: phone",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${phoneScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "35bdeedc-92e7-484b-9282-70574247d263",
+ "name": "phone number",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumber",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "ab2aac65-a55e-406e-b42e-40d42e6c4388",
+ "name": "phone number verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumberVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number_verified",
+ "jsonType.label": "boolean"
+ }
+ }
+ ]
+ },
+ {
+ "id": "c8df543e-eb97-42e6-8aa2-63a8252afc9e",
+ "name": "microprofile-jwt",
+ "description": "Microprofile - JWT built-in scope",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "false"
+ },
+ "protocolMappers": [
+ {
+ "id": "b8714689-b19f-40da-b184-cc882028e8a4",
+ "name": "groups",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "multivalued": "true",
+ "user.attribute": "foo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "groups",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "e00ad84f-2f3c-4f13-be8a-3931103042c6",
+ "name": "upn",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "upn",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "id": "54a0ac8d-4b46-413a-8d63-1822b424e2f1",
+ "name": "role_list",
+ "description": "SAML role list",
+ "protocol": "saml",
+ "attributes": {
+ "consent.screen.text": "${samlRoleListScopeConsentText}",
+ "display.on.consent.screen": "true"
+ },
+ "protocolMappers": [
+ {
+ "id": "d52bd17c-98c1-4dcc-9e16-5736ddf6347e",
+ "name": "role list",
+ "protocol": "saml",
+ "protocolMapper": "saml-role-list-mapper",
+ "consentRequired": false,
+ "config": {
+ "single": "false",
+ "attribute.nameformat": "Basic",
+ "attribute.name": "Role"
+ }
+ }
+ ]
+ },
+ {
+ "id": "18f13b5b-b7b3-4daa-afc5-ec25d6395075",
+ "name": "web-origins",
+ "description": "OpenID Connect scope for add allowed web origins to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "false",
+ "consent.screen.text": ""
+ },
+ "protocolMappers": [
+ {
+ "id": "9371941e-b465-4413-a742-1036fafb2485",
+ "name": "allowed web origins",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-allowed-origins-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ]
+ },
+ {
+ "id": "09b1bbe9-5be6-477f-bcf5-bb661d7fe2a2",
+ "name": "profile",
+ "description": "OpenID Connect built-in scope: profile",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${profileScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "58083ae1-5f33-4830-b975-e9f8da33920f",
+ "name": "updated at",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "updatedAt",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "updated_at",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "6a87985d-12e6-4ea6-9e40-14fe46ad4668",
+ "name": "zoneinfo",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "zoneinfo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "zoneinfo",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "d2393d95-5f3e-4f08-a876-d4971845e5ad",
+ "name": "picture",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "picture",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "picture",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "7ce8e5e6-2f50-4b32-bd0a-7db014146baf",
+ "name": "birthdate",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "birthdate",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "birthdate",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "e935814c-cf70-447d-85da-854bee14f403",
+ "name": "nickname",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "nickname",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "nickname",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "b2a73b0c-fd84-4894-85cf-05b9a8b9a329",
+ "name": "profile",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "profile",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "profile",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "1f4d67e2-7083-4bb8-a666-361a6762161d",
+ "name": "website",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "website",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "website",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "5425cfb0-f259-43ba-bd31-8ab2b935e76c",
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "2fb74508-49c3-46dd-b620-61a4a461c7bc",
+ "name": "username",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "preferred_username",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "457d4a3f-f47e-4ed4-a7da-5950c822e434",
+ "name": "gender",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "gender",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "gender",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "d2748ba4-aac9-486f-bbfc-ec398e273eec",
+ "name": "full name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-full-name-mapper",
+ "consentRequired": false,
+ "config": {
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "userinfo.token.claim": "true"
+ }
+ },
+ {
+ "id": "6e78fd09-6cac-4c66-84e4-299b58a1eefc",
+ "name": "given name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "firstName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "given_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "e44bd071-8a85-49a3-8649-09985f7e8a61",
+ "name": "family name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "lastName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "family_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "da7000a8-8a8b-4df7-a4b9-7f78f3d13406",
+ "name": "middle name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "middleName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "middle_name",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ }
+ ],
+ "defaultDefaultClientScopes": [
+ "profile",
+ "roles",
+ "web-origins",
+ "role_list",
+ "email"
+ ],
+ "defaultOptionalClientScopes": [
+ "offline_access",
+ "phone",
+ "microprofile-jwt",
+ "address"
+ ],
+ "browserSecurityHeaders": {
+ "contentSecurityPolicyReportOnly": "",
+ "xContentTypeOptions": "nosniff",
+ "xRobotsTag": "none",
+ "xFrameOptions": "SAMEORIGIN",
+ "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "xXSSProtection": "1; mode=block",
+ "strictTransportSecurity": "max-age=31536000; includeSubDomains"
+ },
+ "smtpServer": {},
+ "eventsEnabled": false,
+ "eventsListeners": [
+ "jboss-logging"
+ ],
+ "enabledEventTypes": [],
+ "adminEventsEnabled": false,
+ "adminEventsDetailsEnabled": false,
+ "identityProviders": [],
+ "identityProviderMappers": [],
+ "components": {
+ "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [
+ {
+ "id": "80d5424d-79ab-44f4-818e-bc3b593641de",
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ },
+ {
+ "id": "b578a18a-e340-49a1-ace1-8092ed29f28c",
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "oidc-usermodel-attribute-mapper",
+ "oidc-full-name-mapper",
+ "oidc-sha256-pairwise-sub-mapper",
+ "saml-user-property-mapper",
+ "oidc-usermodel-property-mapper",
+ "saml-role-list-mapper",
+ "oidc-address-mapper",
+ "saml-user-attribute-mapper"
+ ]
+ }
+ },
+ {
+ "id": "9311fd52-8330-4065-b987-7a0ce8589d6a",
+ "name": "Full Scope Disabled",
+ "providerId": "scope",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "id": "dcd5d2fe-da81-492e-ae6b-c026792e3154",
+ "name": "Consent Required",
+ "providerId": "consent-required",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "id": "1ed1d774-d6d9-45ee-8a22-61125a01a479",
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ },
+ {
+ "id": "717825ce-f267-4468-99cb-b09126b00570",
+ "name": "Trusted Hosts",
+ "providerId": "trusted-hosts",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "host-sending-registration-request-must-match": [
+ "true"
+ ],
+ "client-uris-must-match": [
+ "true"
+ ]
+ }
+ },
+ {
+ "id": "6fb4db12-299d-4b7e-a100-8c318248d5e3",
+ "name": "Max Clients Limit",
+ "providerId": "max-clients",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "max-clients": [
+ "200"
+ ]
+ }
+ },
+ {
+ "id": "bf2d5422-07a0-4317-9e01-0d2a1be9b582",
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "oidc-usermodel-property-mapper",
+ "saml-role-list-mapper",
+ "oidc-usermodel-attribute-mapper",
+ "saml-user-attribute-mapper",
+ "oidc-address-mapper",
+ "oidc-full-name-mapper",
+ "saml-user-property-mapper",
+ "oidc-sha256-pairwise-sub-mapper"
+ ]
+ }
+ }
+ ],
+ "org.keycloak.keys.KeyProvider": [
+ {
+ "id": "be18f5ef-4151-43e2-a607-1852f53acc76",
+ "name": "rsa-enc-generated",
+ "providerId": "rsa-enc-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ],
+ "algorithm": [
+ "RSA-OAEP"
+ ]
+ }
+ },
+ {
+ "id": "52fb51ee-b5aa-41c3-88d2-a0b11b6d4072",
+ "name": "rsa-generated",
+ "providerId": "rsa-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ]
+ }
+ },
+ {
+ "id": "9e839a58-a36e-420f-bebc-7466c4b578c9",
+ "name": "hmac-generated",
+ "providerId": "hmac-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ],
+ "algorithm": [
+ "HS256"
+ ]
+ }
+ },
+ {
+ "id": "93d3b307-cf5a-484c-a612-43cb4923501a",
+ "name": "aes-generated",
+ "providerId": "aes-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ]
+ }
+ }
+ ]
+ },
+ "internationalizationEnabled": false,
+ "supportedLocales": [],
+ "authenticationFlows": [
+ {
+ "id": "e285f1b9-bc15-4457-851d-abc9cb54953d",
+ "alias": "Account verification options",
+ "description": "Method with which to verity the existing account",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-email-verification",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "Verify Existing Account by Re-authentication",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "65944e23-1f0d-47cf-b5d8-358463b0d382",
+ "alias": "Authentication Options",
+ "description": "Authentication options.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "basic-auth",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "basic-auth-otp",
+ "authenticatorFlow": false,
+ "requirement": "DISABLED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "authenticatorFlow": false,
+ "requirement": "DISABLED",
+ "priority": 30,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "235ca7f6-27ad-4817-a686-cec020f7a091",
+ "alias": "Browser - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "3d8dc16b-07e8-4535-ad1a-4ce79df1dd07",
+ "alias": "Direct Grant - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "direct-grant-validate-otp",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "3fa38b47-45a2-4eea-85a6-620b877db701",
+ "alias": "First broker login - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "126eee75-5f90-4a46-92c5-6fbb209d764a",
+ "alias": "Handle Existing Account",
+ "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-confirm-link",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "Account verification options",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "d9d8e610-41f8-45e3-a097-9961aa5e6d5f",
+ "alias": "Reset - Conditional OTP",
+ "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "reset-otp",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "b01b7a9e-597b-4a12-8ccb-bfb707686dbf",
+ "alias": "User creation or linking",
+ "description": "Flow for the existing/non-existing user alternatives",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticatorConfig": "create unique user config",
+ "authenticator": "idp-create-user-if-unique",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "Handle Existing Account",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "33a40ef5-e611-4182-b1a5-55aa930a839b",
+ "alias": "Verify Existing Account by Re-authentication",
+ "description": "Reauthentication of existing account",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-username-password-form",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "CONDITIONAL",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "First broker login - Conditional OTP",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "5e148805-8a3f-4cbd-9a75-862da8e3fcdf",
+ "alias": "browser",
+ "description": "browser based authentication",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-cookie",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "authenticatorFlow": false,
+ "requirement": "DISABLED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "identity-provider-redirector",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 25,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "autheticatorFlow": true,
+ "flowAlias": "forms",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "38fd27d7-9914-47b3-aa11-1079cc059236",
+ "alias": "clients",
+ "description": "Base authentication for clients",
+ "providerId": "client-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "client-secret",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "client-jwt",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "client-secret-jwt",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "client-x509",
+ "authenticatorFlow": false,
+ "requirement": "ALTERNATIVE",
+ "priority": 40,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "58a3dcd5-56d1-4003-a1a1-dfafaf71ffa1",
+ "alias": "direct grant",
+ "description": "OpenID Connect Resource Owner Grant",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "direct-grant-validate-username",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "direct-grant-validate-password",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "CONDITIONAL",
+ "priority": 30,
+ "autheticatorFlow": true,
+ "flowAlias": "Direct Grant - Conditional OTP",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "4ed42c08-7dc6-47bf-8ac6-27e262973fdb",
+ "alias": "docker auth",
+ "description": "Used by Docker clients to authenticate against the IDP",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "docker-http-basic-authenticator",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "b4ff61a6-56c7-4160-9047-b9abab13cfd9",
+ "alias": "first broker login",
+ "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticatorConfig": "review profile config",
+ "authenticator": "idp-review-profile",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "User creation or linking",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "68b55fff-3f1e-4cce-a181-0b4fdc8ab1e5",
+ "alias": "forms",
+ "description": "Username, password, otp and other auth forms.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-username-password-form",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "CONDITIONAL",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "Browser - Conditional OTP",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "d3456a10-f6a1-4767-9385-baed652e82c4",
+ "alias": "http challenge",
+ "description": "An authentication flow based on challenge-response HTTP Authentication Schemes",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "no-cookie-redirect",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": true,
+ "flowAlias": "Authentication Options",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "7b50c4ff-25c2-4ff9-8f4b-95c1144bb30a",
+ "alias": "registration",
+ "description": "registration flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-page-form",
+ "authenticatorFlow": true,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": true,
+ "flowAlias": "registration form",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "edc22a19-8b8d-4bca-bdfb-446df319e4b5",
+ "alias": "registration form",
+ "description": "registration form",
+ "providerId": "form-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-user-creation",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "registration-profile-action",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 40,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "registration-password-action",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 50,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "registration-recaptcha-action",
+ "authenticatorFlow": false,
+ "requirement": "DISABLED",
+ "priority": 60,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "b5f2931c-badf-4c09-96fb-7a0af5860b9f",
+ "alias": "reset credentials",
+ "description": "Reset credentials for a user if they forgot their password or something",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "reset-credentials-choose-user",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "reset-credential-email",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticator": "reset-password",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 30,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ },
+ {
+ "authenticatorFlow": true,
+ "requirement": "CONDITIONAL",
+ "priority": 40,
+ "autheticatorFlow": true,
+ "flowAlias": "Reset - Conditional OTP",
+ "userSetupAllowed": false
+ }
+ ]
+ },
+ {
+ "id": "cc118d9d-31b8-4fa9-ba7c-2fc65936612a",
+ "alias": "saml ecp",
+ "description": "SAML ECP Profile Authentication Flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "http-basic-authenticator",
+ "authenticatorFlow": false,
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "autheticatorFlow": false,
+ "userSetupAllowed": false
+ }
+ ]
+ }
+ ],
+ "authenticatorConfig": [
+ {
+ "id": "5219b9c4-0664-4b61-8fd4-c9ecc9954c4b",
+ "alias": "create unique user config",
+ "config": {
+ "require.password.update.after.registration": "false"
+ }
+ },
+ {
+ "id": "f48e0b44-86c9-4db0-87da-97433d873b80",
+ "alias": "review profile config",
+ "config": {
+ "update.profile.on.first.login": "missing"
+ }
+ }
+ ],
+ "requiredActions": [
+ {
+ "alias": "CONFIGURE_TOTP",
+ "name": "Configure OTP",
+ "providerId": "CONFIGURE_TOTP",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 10,
+ "config": {}
+ },
+ {
+ "alias": "terms_and_conditions",
+ "name": "Terms and Conditions",
+ "providerId": "terms_and_conditions",
+ "enabled": false,
+ "defaultAction": false,
+ "priority": 20,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PASSWORD",
+ "name": "Update Password",
+ "providerId": "UPDATE_PASSWORD",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 30,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PROFILE",
+ "name": "Update Profile",
+ "providerId": "UPDATE_PROFILE",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 40,
+ "config": {}
+ },
+ {
+ "alias": "VERIFY_EMAIL",
+ "name": "Verify Email",
+ "providerId": "VERIFY_EMAIL",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 50,
+ "config": {}
+ },
+ {
+ "alias": "delete_account",
+ "name": "Delete Account",
+ "providerId": "delete_account",
+ "enabled": false,
+ "defaultAction": false,
+ "priority": 60,
+ "config": {}
+ },
+ {
+ "alias": "update_user_locale",
+ "name": "Update User Locale",
+ "providerId": "update_user_locale",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 1000,
+ "config": {}
+ }
+ ],
+ "browserFlow": "browser",
+ "registrationFlow": "registration",
+ "directGrantFlow": "direct grant",
+ "resetCredentialsFlow": "reset credentials",
+ "clientAuthenticationFlow": "clients",
+ "dockerAuthenticationFlow": "docker auth",
+ "attributes": {
+ "cibaBackchannelTokenDeliveryMode": "poll",
+ "cibaExpiresIn": "120",
+ "cibaAuthRequestedUserHint": "login_hint",
+ "oauth2DeviceCodeLifespan": "600",
+ "oauth2DevicePollingInterval": "5",
+ "parRequestUriLifespan": "60",
+ "cibaInterval": "5"
+ },
+ "keycloakVersion": "17.0.1",
+ "userManagedAccessAllowed": false,
+ "clientProfiles": {
+ "profiles": []
+ },
+ "clientPolicies": {
+ "policies": []
+ },
+ "users": [
+ {
+ "username": "janedoe",
+ "email": "jane.doe@baeldung.com",
+ "firstName": "Jane",
+ "lastName": "Doe",
+ "enabled": true,
+ "credentials": [
+ {
+ "type": "password",
+ "value": "s3cr3t"
+ }
+ ],
+ "clientRoles": {
+ "account": [
+ "view-profile",
+ "manage-account"
+ ]
+ }
+ }
+ ]
+}
diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml
index 77c45eb640..6d44cb015b 100644
--- a/spring-cloud-modules/pom.xml
+++ b/spring-cloud-modules/pom.xml
@@ -22,7 +22,7 @@
spring-cloud-eureka
spring-cloud-hystrix
spring-cloud-bootstrap
- spring-cloud-ribbon-client
+ spring-cloud-ribbon-client
spring-cloud-zookeeper
spring-cloud-gateway
spring-cloud-stream
@@ -94,4 +94,4 @@
3.1.3
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml b/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml
index c521b77c4d..9b33411aaa 100644
--- a/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml
+++ b/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml
@@ -17,13 +17,13 @@
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
org.springframework.cloud
spring-cloud-dataflow-dependencies
diff --git a/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml b/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml
index 6e6367ecad..ba923c4ae6 100644
--- a/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml
+++ b/spring-cloud-modules/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml
@@ -24,17 +24,16 @@
-
io.rest-assured
rest-assured
${rest-assured.version}
-
-
-
-
-
+
+
+
+
+
net.bytebuddy
byte-buddy
@@ -51,5 +50,4 @@
3.1.0
-
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml
index 98828a76f2..8af035e1db 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml
@@ -86,4 +86,4 @@
1.1.8.RELEASE
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/pom.xml
index ffd9097f2a..ab7685a764 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/pom.xml
@@ -18,4 +18,4 @@
travel-agency-service
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml
index 1e93f7eaac..e5612e8e3d 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml
@@ -61,4 +61,4 @@
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-minikube/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-minikube/pom.xml
index 4550750f58..b778ee1b57 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-minikube/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-minikube/pom.xml
@@ -18,4 +18,4 @@
demo-frontend
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-selfhealing/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-selfhealing/pom.xml
index ff49aa12d4..d9e004dea7 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-selfhealing/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/kubernetes-selfhealing/pom.xml
@@ -18,4 +18,4 @@
readiness-example
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-kubernetes/pom.xml b/spring-cloud-modules/spring-cloud-kubernetes/pom.xml
index 1bd1aaeebd..be555d01e9 100644
--- a/spring-cloud-modules/spring-cloud-kubernetes/pom.xml
+++ b/spring-cloud-modules/spring-cloud-kubernetes/pom.xml
@@ -36,4 +36,4 @@
2021.0.0
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-modules/spring-cloud-netflix-sidecar/pom.xml
index 254a0376b6..0d95714bf9 100644
--- a/spring-cloud-modules/spring-cloud-netflix-sidecar/pom.xml
+++ b/spring-cloud-modules/spring-cloud-netflix-sidecar/pom.xml
@@ -16,12 +16,15 @@
0.0.1-SNAPSHOT
../../parent-boot-2
+
sidecar-demo
echo-demo
+
2.2.10.RELEASE
2.3.12.RELEASE
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-netflix-sidecar/sidecar-demo/pom.xml b/spring-cloud-modules/spring-cloud-netflix-sidecar/sidecar-demo/pom.xml
index 22032d5081..3c8d498456 100644
--- a/spring-cloud-modules/spring-cloud-netflix-sidecar/sidecar-demo/pom.xml
+++ b/spring-cloud-modules/spring-cloud-netflix-sidecar/sidecar-demo/pom.xml
@@ -1,16 +1,19 @@
-
+
4.0.0
sidecar-demo
sidecar-demo
Sidecar demo for hello endpoint
+
com.baeldung.cloud
spring-cloud-netflix-sidecar
0.0.1-SNAPSHOT
../pom.xml
+
org.springframework.boot
@@ -41,6 +44,7 @@
test
+
@@ -49,4 +53,5 @@
-
+
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-sleuth/pom.xml b/spring-cloud-modules/spring-cloud-sleuth/pom.xml
index 14db7e02ea..dbc922e446 100644
--- a/spring-cloud-modules/spring-cloud-sleuth/pom.xml
+++ b/spring-cloud-modules/spring-cloud-sleuth/pom.xml
@@ -42,4 +42,4 @@
3.1.0
-
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-stream-starters/pom.xml b/spring-cloud-modules/spring-cloud-stream-starters/pom.xml
index 82252b3a55..845436d4e0 100644
--- a/spring-cloud-modules/spring-cloud-stream-starters/pom.xml
+++ b/spring-cloud-modules/spring-cloud-stream-starters/pom.xml
@@ -34,4 +34,4 @@
2021.0.0
-
+
\ No newline at end of file
diff --git a/spring-core-6/README.md b/spring-core-6/README.md
new file mode 100644
index 0000000000..e5d425aa74
--- /dev/null
+++ b/spring-core-6/README.md
@@ -0,0 +1,3 @@
+
+### Relevant Articles:
+- [Instantiating Multiple Beans of the Same Class with Spring Annotations](https://www.baeldung.com/spring-same-class-multiple-beans)
diff --git a/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserRepository.java b/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserRepository.java
new file mode 100644
index 0000000000..aec9e51af9
--- /dev/null
+++ b/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.constructordi.service;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class UserRepository {
+}
diff --git a/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserService.java b/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserService.java
new file mode 100644
index 0000000000..7762ff324c
--- /dev/null
+++ b/spring-di-2/src/main/java/com/baeldung/constructordi/service/UserService.java
@@ -0,0 +1,11 @@
+package com.baeldung.constructordi.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService {
+
+ @Autowired
+ private UserRepository userRepository;
+}
diff --git a/spring-di-3/pom.xml b/spring-di-3/pom.xml
index c6a2687606..2d635d1f85 100644
--- a/spring-di-3/pom.xml
+++ b/spring-di-3/pom.xml
@@ -38,7 +38,6 @@
org.springframework.boot
spring-boot-starter-web
-
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-ejb-modules/pom.xml b/spring-ejb-modules/pom.xml
index 9a4bfa2823..152194e72a 100755
--- a/spring-ejb-modules/pom.xml
+++ b/spring-ejb-modules/pom.xml
@@ -24,7 +24,7 @@
-
junit
@@ -93,4 +93,4 @@
3.2
-
+
\ No newline at end of file
diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml
index ce718e5661..a75638d085 100644
--- a/spring-security-modules/pom.xml
+++ b/spring-security-modules/pom.xml
@@ -15,20 +15,20 @@
- spring-5-security
- spring-5-security-cognito
- spring-5-security-oauth
- spring-ldap
+ spring-5-security
spring-security-acl
spring-security-auth0
+ spring-security-cognito
spring-security-core
spring-security-core-2
spring-security-ldap
spring-security-legacy-oidc
+ spring-security-oauth2
spring-security-oauth2-sso
spring-security-oidc
spring-security-okta
spring-security-saml
+ spring-security-social-login
spring-security-web-angular
spring-security-web-boot-1
spring-security-web-boot-2
@@ -45,7 +45,6 @@
spring-security-web-sockets
spring-security-web-thymeleaf
spring-security-web-x509
- spring-social-login
spring-security-opa
diff --git a/spring-security-modules/spring-ldap/.gitignore b/spring-security-modules/spring-ldap/.gitignore
deleted file mode 100644
index 83c05e60c8..0000000000
--- a/spring-security-modules/spring-ldap/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.class
-
-#folders#
-/target
-/neoDb*
-/data
-/src/main/webapp/WEB-INF/classes
-*/META-INF/*
-
-# Packaged files #
-*.jar
-*.war
-*.ear
\ No newline at end of file
diff --git a/spring-security-modules/spring-ldap/README.md b/spring-security-modules/spring-ldap/README.md
deleted file mode 100644
index 4872f897e1..0000000000
--- a/spring-security-modules/spring-ldap/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Spring LDAP
-
-This module contains articles about Spring LDAP
-
-### Relevant articles
-
-- [Spring LDAP Overview](https://www.baeldung.com/spring-ldap)
-- [Guide to Spring Data LDAP](https://www.baeldung.com/spring-data-ldap)
diff --git a/spring-security-modules/spring-ldap/pom.xml b/spring-security-modules/spring-ldap/pom.xml
deleted file mode 100644
index 086be2df5a..0000000000
--- a/spring-security-modules/spring-ldap/pom.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
- 4.0.0
- spring-ldap
- 0.1-SNAPSHOT
- spring-ldap
- jar
-
-
- com.baeldung
- spring-security-modules
- 0.0.1-SNAPSHOT
-
-
-
-
- org.springframework.ldap
- spring-ldap-core
- ${spring-ldap.version}
-
-
- commons-logging
- commons-logging
-
-
-
-
- org.springframework
- spring-context
- ${spring-context.version}
-
-
-
- org.springframework.ldap
- spring-ldap-test
- ${spring-ldap.version}
- test
-
-
- commons-logging
- commons-logging
-
-
-
-
-
- org.apache.directory.server
- apacheds-core
- ${apacheds.version}
- test
-
-
- org.apache.directory.server
- apacheds-core-entry
- ${apacheds.version}
- test
-
-
- org.apache.directory.server
- apacheds-protocol-shared
- ${apacheds.version}
- test
-
-
- org.apache.directory.server
- apacheds-protocol-ldap
- ${apacheds.version}
- test
-
-
- org.apache.directory.server
- apacheds-server-jndi
- ${apacheds.version}
- test
-
-
- org.apache.directory.shared
- shared-ldap
- ${shared-ldap.version}
- test
-
-
-
- org.springframework.data
- spring-data-ldap
- ${spring-data-ldap.version}
-
-
- org.springframework.data
- spring-data-jpa
- ${spring-data-jpa.version}
-
-
-
-
- spring-ldap
-
-
-
-
- live
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*IntegrationTest.java
- **/*IntTest.java
-
-
- **/*LiveTest.java
-
-
-
-
-
-
-
-
-
-
-
- 2.3.1.RELEASE
- 4.3.6.RELEASE
- 1.5.5
- 0.9.15
- 1.0.6.RELEASE
- 1.11.6.RELEASE
-
-
-
\ No newline at end of file
diff --git a/spring-security-modules/spring-ldap/src/main/resources/application.properties b/spring-security-modules/spring-ldap/src/main/resources/application.properties
deleted file mode 100644
index 670fb79234..0000000000
--- a/spring-security-modules/spring-ldap/src/main/resources/application.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-ldap.partitionSuffix=dc=example,dc=com
-ldap.partition=example
-ldap.principal=uid=admin,ou=system
-ldap.password=secret
-ldap.port=18889
-ldap.url=ldap://localhost:18889
\ No newline at end of file
diff --git a/spring-security-modules/spring-ldap/src/main/resources/logback.xml b/spring-security-modules/spring-ldap/src/main/resources/logback.xml
deleted file mode 100644
index 7bd5154680..0000000000
--- a/spring-security-modules/spring-ldap/src/main/resources/logback.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/spring-security-modules/spring-ldap/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-modules/spring-ldap/src/test/java/org/baeldung/SpringContextTest.java
deleted file mode 100644
index 8f0c3d4612..0000000000
--- a/spring-security-modules/spring-ldap/src/test/java/org/baeldung/SpringContextTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-import com.baeldung.ldap.javaconfig.AppConfig;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = AppConfig.class)
-public class SpringContextTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-security-modules/spring-5-security-cognito/README.md b/spring-security-modules/spring-security-cognito/README.md
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/README.md
rename to spring-security-modules/spring-security-cognito/README.md
diff --git a/spring-security-modules/spring-5-security-cognito/pom.xml b/spring-security-modules/spring-security-cognito/pom.xml
similarity index 95%
rename from spring-security-modules/spring-5-security-cognito/pom.xml
rename to spring-security-modules/spring-security-cognito/pom.xml
index 4da8b2fae5..56754ddf99 100644
--- a/spring-security-modules/spring-5-security-cognito/pom.xml
+++ b/spring-security-modules/spring-security-cognito/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-5-security-cognito
+ spring-security-cognito
0.0.1-SNAPSHOT
- spring-5-security-cognito
+ spring-security-cognito
jar
spring 5 security oauth cognito sample project
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/CognitoWebConfiguration.java b/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/CognitoWebConfiguration.java
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/CognitoWebConfiguration.java
rename to spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/CognitoWebConfiguration.java
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java b/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
rename to spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/SpringCognitoApplication.java b/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SpringCognitoApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/java/com/baeldung/cognito/SpringCognitoApplication.java
rename to spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SpringCognitoApplication.java
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/resources/application.yml b/spring-security-modules/spring-security-cognito/src/main/resources/application.yml
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/resources/application.yml
rename to spring-security-modules/spring-security-cognito/src/main/resources/application.yml
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/resources/logback.xml b/spring-security-modules/spring-security-cognito/src/main/resources/logback.xml
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/resources/logback.xml
rename to spring-security-modules/spring-security-cognito/src/main/resources/logback.xml
diff --git a/spring-security-modules/spring-5-security-cognito/src/main/resources/templates/home.html b/spring-security-modules/spring-security-cognito/src/main/resources/templates/home.html
similarity index 100%
rename from spring-security-modules/spring-5-security-cognito/src/main/resources/templates/home.html
rename to spring-security-modules/spring-security-cognito/src/main/resources/templates/home.html
diff --git a/spring-security-modules/spring-security-core-2/pom.xml b/spring-security-modules/spring-security-core-2/pom.xml
index cf150bfd42..e540d7bc01 100644
--- a/spring-security-modules/spring-security-core-2/pom.xml
+++ b/spring-security-modules/spring-security-core-2/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
spring-security-core-2
0.1-SNAPSHOT
@@ -52,7 +52,7 @@
- spring-security-core
+ spring-security-core-2
src/main/resources
diff --git a/spring-security-modules/spring-security-ldap/README.md b/spring-security-modules/spring-security-ldap/README.md
index 288791b389..d396d67f56 100644
--- a/spring-security-modules/spring-security-ldap/README.md
+++ b/spring-security-modules/spring-security-ldap/README.md
@@ -8,8 +8,9 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
### Relevant Article:
-- [Spring Security – security none, filters none, access permitAll](https://www.baeldung.com/security-none-filters-none-access-permitAll)
- [Intro to Spring Security LDAP](https://www.baeldung.com/spring-security-ldap)
+- [Spring LDAP Overview](https://www.baeldung.com/spring-ldap)
+- [Guide to Spring Data LDAP](https://www.baeldung.com/spring-data-ldap)
### Notes
diff --git a/spring-security-modules/spring-security-ldap/pom.xml b/spring-security-modules/spring-security-ldap/pom.xml
index 3755c33125..73b77184d1 100644
--- a/spring-security-modules/spring-security-ldap/pom.xml
+++ b/spring-security-modules/spring-security-ldap/pom.xml
@@ -44,6 +44,27 @@
apacheds-server-jndi
${apacheds.version}
+
+
+ org.springframework.data
+ spring-data-ldap
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+
+ org.springframework.ldap
+ spring-ldap-test
+ test
+
+
+ commons-logging
+ commons-logging
+
+
+
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/client/LdapClient.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/client/LdapClient.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/client/LdapClient.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/client/LdapClient.java
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/repository/User.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/repository/User.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/repository/User.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/repository/User.java
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/repository/UserRepository.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/repository/UserRepository.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/repository/UserRepository.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/repository/UserRepository.java
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/service/LdapClient.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/service/LdapClient.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/service/LdapClient.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/service/LdapClient.java
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/service/UserService.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/service/UserService.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/data/service/UserService.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/data/service/UserService.java
diff --git a/spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/javaconfig/AppConfig.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/javaconfig/AppConfig.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/main/java/com/baeldung/ldap/javaconfig/AppConfig.java
rename to spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/ldap/javaconfig/AppConfig.java
diff --git a/spring-security-modules/spring-security-ldap/src/main/resources/application.properties b/spring-security-modules/spring-security-ldap/src/main/resources/application.properties
index 3d0221bb7b..cbe57f420f 100644
--- a/spring-security-modules/spring-security-ldap/src/main/resources/application.properties
+++ b/spring-security-modules/spring-security-ldap/src/main/resources/application.properties
@@ -1 +1,8 @@
-management.health.ldap.enabled=false
\ No newline at end of file
+management.health.ldap.enabled=false
+
+ldap.partitionSuffix=dc=example,dc=com
+ldap.partition=example
+ldap.principal=uid=admin,ou=system
+ldap.password=secret
+ldap.port=18889
+ldap.url=ldap://localhost:18889
\ No newline at end of file
diff --git a/spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/client/LdapClientLiveTest.java b/spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/client/LdapClientLiveTest.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/client/LdapClientLiveTest.java
rename to spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/client/LdapClientLiveTest.java
diff --git a/spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/client/LdapDataRepositoryIntegrationTest.java b/spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/client/LdapDataRepositoryIntegrationTest.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/client/LdapDataRepositoryIntegrationTest.java
rename to spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/client/LdapDataRepositoryIntegrationTest.java
diff --git a/spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/javaconfig/TestConfig.java b/spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/javaconfig/TestConfig.java
similarity index 100%
rename from spring-security-modules/spring-ldap/src/test/java/com/baeldung/ldap/javaconfig/TestConfig.java
rename to spring-security-modules/spring-security-ldap/src/test/java/com/baeldung/ldap/javaconfig/TestConfig.java
diff --git a/spring-security-modules/spring-ldap/src/test/resources/test.ldif b/spring-security-modules/spring-security-ldap/src/test/resources/test.ldif
similarity index 100%
rename from spring-security-modules/spring-ldap/src/test/resources/test.ldif
rename to spring-security-modules/spring-security-ldap/src/test/resources/test.ldif
diff --git a/spring-security-modules/spring-ldap/src/test/resources/test_application.properties b/spring-security-modules/spring-security-ldap/src/test/resources/test_application.properties
similarity index 100%
rename from spring-security-modules/spring-ldap/src/test/resources/test_application.properties
rename to spring-security-modules/spring-security-ldap/src/test/resources/test_application.properties
diff --git a/spring-security-modules/spring-5-security-oauth/README.md b/spring-security-modules/spring-security-oauth2/README.md
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/README.md
rename to spring-security-modules/spring-security-oauth2/README.md
diff --git a/spring-security-modules/spring-5-security-oauth/pom.xml b/spring-security-modules/spring-security-oauth2/pom.xml
similarity index 97%
rename from spring-security-modules/spring-5-security-oauth/pom.xml
rename to spring-security-modules/spring-security-oauth2/pom.xml
index 8449b01ec0..e2ff51f98f 100644
--- a/spring-security-modules/spring-5-security-oauth/pom.xml
+++ b/spring-security-modules/spring-security-oauth2/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-5-security-oauth
+ spring-5-oauth2
0.0.1-SNAPSHOT
- spring-5-security-oauth
+ spring-security-oauth2
jar
spring 5 security oauth sample project
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyApplication.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/JerseyApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyApplication.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/JerseyApplication.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyResource.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/JerseyResource.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyResource.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/JerseyResource.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/RestConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/RestConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/RestConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/RestConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/SecurityConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/SecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/jersey/SecurityConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/jersey/SecurityConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomRequestSecurityConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/CustomRequestSecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/CustomRequestSecurityConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/CustomRequestSecurityConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/LoginController.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/LoginController.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/LoginController.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/MvcConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/MvcConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/MvcConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/MvcConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/SecurityConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/SecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/SecurityConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/SecurityConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/SpringOAuthApplication.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/SpringOAuthApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2/SpringOAuthApplication.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2/SpringOAuthApplication.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/ExtractorsApplication.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/ExtractorsApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/ExtractorsApplication.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/ExtractorsApplication.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/configuration/SecurityConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/configuration/SecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/configuration/SecurityConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/configuration/SecurityConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungAuthoritiesExtractor.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungAuthoritiesExtractor.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungAuthoritiesExtractor.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungAuthoritiesExtractor.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungPrincipalExtractor.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungPrincipalExtractor.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungPrincipalExtractor.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/custom/BaeldungPrincipalExtractor.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubAuthoritiesExtractor.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubAuthoritiesExtractor.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubAuthoritiesExtractor.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubAuthoritiesExtractor.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubPrincipalExtractor.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubPrincipalExtractor.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubPrincipalExtractor.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2extractors/extractor/github/GithubPrincipalExtractor.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomAuthorizationRequestResolver.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomAuthorizationRequestResolver.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomAuthorizationRequestResolver.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomAuthorizationRequestResolver.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomRequestEntityConverter.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomRequestEntityConverter.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomRequestEntityConverter.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomRequestEntityConverter.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomTokenResponseConverter.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomTokenResponseConverter.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/CustomTokenResponseConverter.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/CustomTokenResponseConverter.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/LinkedinTokenResponseConverter.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/LinkedinTokenResponseConverter.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2request/LinkedinTokenResponseConverter.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2request/LinkedinTokenResponseConverter.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/AppController.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/AppController.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/AppController.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/AppController.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/GithubRepo.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/GithubRepo.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/GithubRepo.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/GithubRepo.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/SecurityConfig.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/SecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/SecurityConfig.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/SecurityConfig.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/SpringSecurityOauth2ClientApplication.java b/spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/SpringSecurityOauth2ClientApplication.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/java/com/baeldung/oauth2resttemplate/SpringSecurityOauth2ClientApplication.java
rename to spring-security-modules/spring-security-oauth2/src/main/java/com/baeldung/oauth2resttemplate/SpringSecurityOauth2ClientApplication.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-extractors-baeldung.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-extractors-baeldung.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-extractors-baeldung.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-extractors-baeldung.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-extractors-github.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-extractors-github.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-extractors-github.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-extractors-github.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-rest-template.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-rest-template.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2-rest-template.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2-rest-template.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/application-oauth2.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/application-oauth2.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/application.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/application.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/application.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/application.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/default-application.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/default-application.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/default-application.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/default-application.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/jersey-application.properties b/spring-security-modules/spring-security-oauth2/src/main/resources/jersey-application.properties
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/jersey-application.properties
rename to spring-security-modules/spring-security-oauth2/src/main/resources/jersey-application.properties
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/logback.xml b/spring-security-modules/spring-security-oauth2/src/main/resources/logback.xml
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/logback.xml
rename to spring-security-modules/spring-security-oauth2/src/main/resources/logback.xml
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/static/css/main.css b/spring-security-modules/spring-security-oauth2/src/main/resources/static/css/main.css
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/static/css/main.css
rename to spring-security-modules/spring-security-oauth2/src/main/resources/static/css/main.css
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/index.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/index.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/index.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/index.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/loginFailure.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/loginFailure.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/loginFailure.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/loginFailure.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/loginSuccess.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/loginSuccess.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/loginSuccess.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/loginSuccess.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2_extractors.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2_extractors.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2_extractors.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2_extractors.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/error.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/error.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/error.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/error.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/home.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/home.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/home.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/home.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/index.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/index.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/index.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/index.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/repositories.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/repositories.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth2resttemplate/repositories.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth2resttemplate/repositories.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth_login.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth_login.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/oauth_login.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/oauth_login.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/main/resources/templates/securedPage.html b/spring-security-modules/spring-security-oauth2/src/main/resources/templates/securedPage.html
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/main/resources/templates/securedPage.html
rename to spring-security-modules/spring-security-oauth2/src/main/resources/templates/securedPage.html
diff --git a/spring-security-modules/spring-5-security-oauth/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java b/spring-security-modules/spring-security-oauth2/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java
rename to spring-security-modules/spring-security-oauth2/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java
diff --git a/spring-security-modules/spring-5-security-oauth/src/test/java/com/baeldung/oauth2extractors/ExtractorsUnitTest.java b/spring-security-modules/spring-security-oauth2/src/test/java/com/baeldung/oauth2extractors/ExtractorsUnitTest.java
similarity index 100%
rename from spring-security-modules/spring-5-security-oauth/src/test/java/com/baeldung/oauth2extractors/ExtractorsUnitTest.java
rename to spring-security-modules/spring-security-oauth2/src/test/java/com/baeldung/oauth2extractors/ExtractorsUnitTest.java
diff --git a/spring-security-modules/spring-social-login/README.md b/spring-security-modules/spring-security-social-login/README.md
similarity index 100%
rename from spring-security-modules/spring-social-login/README.md
rename to spring-security-modules/spring-security-social-login/README.md
diff --git a/spring-security-modules/spring-social-login/pom.xml b/spring-security-modules/spring-security-social-login/pom.xml
similarity index 94%
rename from spring-security-modules/spring-social-login/pom.xml
rename to spring-security-modules/spring-security-social-login/pom.xml
index ad4b7c72a6..ddda4235be 100644
--- a/spring-security-modules/spring-social-login/pom.xml
+++ b/spring-security-modules/spring-security-social-login/pom.xml
@@ -3,8 +3,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-social-login
- spring-social-login
+ spring-security-social-login
+ spring-security-social-login
war
@@ -66,7 +66,7 @@
- spring-social-login
+ spring-security-social-login
src/main/resources
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/Application.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/Application.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/Application.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/Application.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/SecurityConfig.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/SecurityConfig.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/SecurityConfig.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/SecurityConfig.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/WebConfig.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/WebConfig.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/config/WebConfig.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/config/WebConfig.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/persistence/dao/UserRepository.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/persistence/dao/UserRepository.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/persistence/dao/UserRepository.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/persistence/dao/UserRepository.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/persistence/model/User.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/persistence/model/User.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/persistence/model/User.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/persistence/model/User.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/FacebookConnectionSignup.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/FacebookConnectionSignup.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/FacebookConnectionSignup.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/FacebookConnectionSignup.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/FacebookSignInAdapter.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/FacebookSignInAdapter.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/FacebookSignInAdapter.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/FacebookSignInAdapter.java
diff --git a/spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/MyUserDetailsService.java b/spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/MyUserDetailsService.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/java/com/baeldung/security/MyUserDetailsService.java
rename to spring-security-modules/spring-security-social-login/src/main/java/com/baeldung/security/MyUserDetailsService.java
diff --git a/spring-security-modules/spring-social-login/src/main/resources/application.properties b/spring-security-modules/spring-security-social-login/src/main/resources/application.properties
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/resources/application.properties
rename to spring-security-modules/spring-security-social-login/src/main/resources/application.properties
diff --git a/spring-security-modules/spring-social-login/src/main/resources/data.sql b/spring-security-modules/spring-security-social-login/src/main/resources/data.sql
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/resources/data.sql
rename to spring-security-modules/spring-security-social-login/src/main/resources/data.sql
diff --git a/spring-security-modules/spring-social-login/src/main/resources/logback.xml b/spring-security-modules/spring-security-social-login/src/main/resources/logback.xml
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/resources/logback.xml
rename to spring-security-modules/spring-security-social-login/src/main/resources/logback.xml
diff --git a/spring-security-modules/spring-social-login/src/main/resources/templates/index.html b/spring-security-modules/spring-security-social-login/src/main/resources/templates/index.html
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/resources/templates/index.html
rename to spring-security-modules/spring-security-social-login/src/main/resources/templates/index.html
diff --git a/spring-security-modules/spring-social-login/src/main/resources/templates/login.html b/spring-security-modules/spring-security-social-login/src/main/resources/templates/login.html
similarity index 100%
rename from spring-security-modules/spring-social-login/src/main/resources/templates/login.html
rename to spring-security-modules/spring-security-social-login/src/main/resources/templates/login.html
diff --git a/spring-security-modules/spring-social-login/src/test/java/com/baeldung/SpringContextTest.java b/spring-security-modules/spring-security-social-login/src/test/java/com/baeldung/SpringContextTest.java
similarity index 100%
rename from spring-security-modules/spring-social-login/src/test/java/com/baeldung/SpringContextTest.java
rename to spring-security-modules/spring-security-social-login/src/test/java/com/baeldung/SpringContextTest.java
diff --git a/spring-security-modules/spring-security-web-angular/pom.xml b/spring-security-modules/spring-security-web-angular/pom.xml
index 18d35708f6..cf23501dff 100644
--- a/spring-security-modules/spring-security-web-angular/pom.xml
+++ b/spring-security-modules/spring-security-web-angular/pom.xml
@@ -18,4 +18,4 @@
server
-
+
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-web-mvc/README.md b/spring-security-modules/spring-security-web-mvc/README.md
index bb4cfe1a4f..49831ea970 100644
--- a/spring-security-modules/spring-security-web-mvc/README.md
+++ b/spring-security-modules/spring-security-web-mvc/README.md
@@ -11,6 +11,7 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
- [HttpSessionListener Example – Monitoring](https://www.baeldung.com/httpsessionlistener_with_metrics)
- [Control the Session with Spring Security](https://www.baeldung.com/spring-security-session)
- [The Clear-Site-Data Header in Spring Security](https://www.baeldung.com/spring-security-clear-site-data-header)
+- [Spring Security – security none, filters none, access permitAll](https://www.baeldung.com/security-none-filters-none-access-permitAll)
### Build the Project
diff --git a/spring-vault/pom.xml b/spring-vault/pom.xml
index 24726985f6..faf4b33e08 100644
--- a/spring-vault/pom.xml
+++ b/spring-vault/pom.xml
@@ -15,7 +15,7 @@
0.0.1-SNAPSHOT
../parent-boot-2
-
+
diff --git a/testing-modules/junit-5/README.md b/testing-modules/junit-5/README.md
index 5101f92928..1f78e7c9c6 100644
--- a/testing-modules/junit-5/README.md
+++ b/testing-modules/junit-5/README.md
@@ -1,7 +1,6 @@
### Relevant Articles:
- [A Guide to JUnit 5 Extensions](https://www.baeldung.com/junit-5-extensions)
- [Inject Parameters into JUnit Jupiter Unit Tests](https://www.baeldung.com/junit-5-parameters)
-- [Mockito and JUnit 5 – Using ExtendWith](https://www.baeldung.com/mockito-junit-5-extension)
- [The Order of Tests in JUnit](https://www.baeldung.com/junit-5-test-order)
- [Running JUnit Tests Programmatically, from a Java Application](https://www.baeldung.com/junit-tests-run-programmatically-from-java)
- [Testing an Abstract Class With JUnit](https://www.baeldung.com/junit-test-abstract-class)
diff --git a/testing-modules/mockito-2/README.md b/testing-modules/mockito-2/README.md
index 4bd2ff9759..6fd71bf305 100644
--- a/testing-modules/mockito-2/README.md
+++ b/testing-modules/mockito-2/README.md
@@ -6,7 +6,5 @@
- [Mockito and Fluent APIs](https://www.baeldung.com/mockito-fluent-apis)
- [Mocking the ObjectMapper readValue() Method](https://www.baeldung.com/mockito-mock-jackson-read-value)
- [Introduction to Mockito’s AdditionalAnswers](https://www.baeldung.com/mockito-additionalanswers)
-- [Mockito – Using Spies](https://www.baeldung.com/mockito-spy)
-- [Using Mockito ArgumentCaptor](https://www.baeldung.com/mockito-argumentcaptor)
- [Difference Between when() and doXxx() Methods in Mockito](https://www.baeldung.com/java-mockito-when-vs-do)
- [Overview of Mockito MockSettings](https://www.baeldung.com/mockito-mocksettings)
diff --git a/testing-modules/mockito-3/.gitignore b/testing-modules/mockito-3/.gitignore
deleted file mode 100644
index 38fe5148c1..0000000000
--- a/testing-modules/mockito-3/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/target/
-/.settings/
-/.classpath
-/.project
\ No newline at end of file
diff --git a/testing-modules/mockito-3/README.md b/testing-modules/mockito-3/README.md
deleted file mode 100644
index c9766031a3..0000000000
--- a/testing-modules/mockito-3/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Relevant Articles:
-
-- [Mocking Static Methods With Mockito](https://www.baeldung.com/mockito-mock-static-methods)
diff --git a/testing-modules/mockito-3/pom.xml b/testing-modules/mockito-3/pom.xml
deleted file mode 100644
index 70c76f15ff..0000000000
--- a/testing-modules/mockito-3/pom.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- 4.0.0
- mockito-3
- 0.0.1-SNAPSHOT
- mockito-3
- jar
-
-
- com.baeldung
- testing-modules
- 1.0.0-SNAPSHOT
-
-
-
-
- org.mockito
- mockito-inline
- ${mockito.version}
- test
-
-
-
-
\ No newline at end of file
diff --git a/testing-modules/mockito-3/src/main/resources/logback.xml b/testing-modules/mockito-3/src/main/resources/logback.xml
deleted file mode 100644
index 7d900d8ea8..0000000000
--- a/testing-modules/mockito-3/src/main/resources/logback.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/testing-modules/mockito-simple/README.md b/testing-modules/mockito-simple/README.md
new file mode 100644
index 0000000000..56b3482c60
--- /dev/null
+++ b/testing-modules/mockito-simple/README.md
@@ -0,0 +1,23 @@
+### Mockito Articles that are also part of the e-book
+
+This module contains articles about Mockito that are also part of an Ebook.
+
+## Relevant articles:
+
+- [Getting Started with Mockito @Mock, @Spy, @Captor and @InjectMocks](https://www.baeldung.com/mockito-annotations)
+- [Mockito When/Then Cookbook](https://www.baeldung.com/mockito-behavior)
+- [Mockito’s Mock Methods](https://www.baeldung.com/mockito-mock-methods)
+- [Mockito Verify Cookbook](https://www.baeldung.com/mockito-verify)
+- [Mockito ArgumentMatchers](https://www.baeldung.com/mockito-argument-matchers)
+- [Mockito – Using Spies](https://www.baeldung.com/mockito-spy)
+- [Using Mockito ArgumentCaptor](https://www.baeldung.com/mockito-argumentcaptor)
+- [Mocking Void Methods with Mockito](https://www.baeldung.com/mockito-void-methods)
+- [Mocking Static Methods With Mockito](https://www.baeldung.com/mockito-mock-static-methods)
+- [Mock Final Classes and Methods with Mockito](https://www.baeldung.com/mockito-final)
+- [Mocking Exception Throwing using Mockito](https://www.baeldung.com/mockito-exceptions)
+- [Mockito and JUnit 5 – Using ExtendWith](https://www.baeldung.com/mockito-junit-5-extension)
+
+
+### NOTE:
+
+Since this is a module tied to an e-book, it should **not** be moved or used to store the code for any further article.
diff --git a/testing-modules/mockito-simple/pom.xml b/testing-modules/mockito-simple/pom.xml
new file mode 100644
index 0000000000..af0c63520a
--- /dev/null
+++ b/testing-modules/mockito-simple/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+ mockito-simple
+ mockito-simple
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ org.springframework
+ spring-web
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-core
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-context
+ ${spring-framework.version}
+
+
+ org.springframework.data
+ spring-data-jpa
+ ${spring-data.version}
+
+
+ org.eclipse.persistence
+ javax.persistence
+ ${javax.persistence.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ ${spring-boot.version}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ ${mockito.version}
+ test
+
+
+
+
+ mockito-simple
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ 2.0.4.RELEASE
+ 5.0.8.RELEASE
+ 2.0.9.RELEASE
+
+ 2.0.2
+ 2.1.1
+
+
+
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/Flower.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/app/api/Flower.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/Flower.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/app/api/Flower.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/app/api/MessageApi.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/app/api/MessageApi.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/app/api/MessageApi.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/app/rest/FlowerController.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/FlowerController.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/app/rest/FlowerController.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/app/rest/MessageController.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/app/rest/MessageController.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/app/rest/MessageController.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/model/Message.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/domain/model/Message.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/domain/model/Message.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/domain/model/Message.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/domain/service/FlowerService.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/FlowerService.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/domain/service/FlowerService.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/domain/service/MessageService.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/domain/service/MessageService.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/domain/service/MessageService.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/User.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/User.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/User.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/User.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/MailClient.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/MailClient.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/MailClient.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/MailClient.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/SettingRepository.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/SettingRepository.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/SettingRepository.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/SettingRepository.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/UserRepository.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/UserRepository.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/repository/UserRepository.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/repository/UserRepository.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/DefaultUserService.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/DefaultUserService.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/DefaultUserService.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/DefaultUserService.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/Errors.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/Errors.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/Errors.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/Errors.java
diff --git a/testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/UserService.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/UserService.java
similarity index 100%
rename from testing-modules/junit-5/src/main/java/com/baeldung/junit5/mockito/service/UserService.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/junit5/mockito/service/UserService.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/AuthenticationStatus.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/AuthenticationStatus.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/AuthenticationStatus.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/AuthenticationStatus.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Credentials.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Credentials.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Credentials.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Credentials.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/DeliveryPlatform.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/DeliveryPlatform.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/DeliveryPlatform.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/DeliveryPlatform.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Email.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Email.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Email.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Email.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/EmailService.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/EmailService.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/EmailService.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/EmailService.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Format.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Format.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/Format.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/Format.java
diff --git a/testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/ServiceStatus.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/ServiceStatus.java
similarity index 100%
rename from testing-modules/mockito-2/src/main/java/com/baeldung/mockito/argumentcaptor/ServiceStatus.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/argumentcaptor/ServiceStatus.java
diff --git a/testing-modules/mockito-3/src/main/java/com/baeldung/mockito/mockedstatic/StaticUtils.java b/testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/mockedstatic/StaticUtils.java
similarity index 100%
rename from testing-modules/mockito-3/src/main/java/com/baeldung/mockito/mockedstatic/StaticUtils.java
rename to testing-modules/mockito-simple/src/main/java/com/baeldung/mockito/mockedstatic/StaticUtils.java
diff --git a/testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
similarity index 100%
rename from testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java
diff --git a/testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
similarity index 100%
rename from testing-modules/spring-mockito/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java
diff --git a/testing-modules/spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/domain/util/MessageMatcher.java
similarity index 100%
rename from testing-modules/spring-mockito/src/main/java/com/baeldung/domain/util/MessageMatcher.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/domain/util/MessageMatcher.java
diff --git a/testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java
similarity index 100%
rename from testing-modules/junit-5/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/FinalList.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/FinalList.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/FinalList.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/FinalList.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockFinals.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinals.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockFinals.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinals.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoConfigExamplesUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoConfigExamplesUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoConfigExamplesUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoConfigExamplesUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoInitWithMockitoJUnitRuleUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoInitWithMockitoJUnitRuleUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoInitWithMockitoJUnitRuleUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoInitWithMockitoJUnitRuleUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoInjectIntoSpyUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoInjectIntoSpyUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoInjectIntoSpyUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoInjectIntoSpyUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoMockIntegrationTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockIntegrationTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoMockIntegrationTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockIntegrationTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MyDictionary.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MyDictionary.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MyDictionary.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MyDictionary.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MyList.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MyList.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/MyList.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MyList.java
diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java
similarity index 100%
rename from testing-modules/mockito-2/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java
diff --git a/testing-modules/mockito-3/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java
similarity index 100%
rename from testing-modules/mockito-3/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java
diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/spy/MockitoMisusingUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingUnitTest.java
similarity index 100%
rename from testing-modules/mockito-2/src/test/java/com/baeldung/mockito/spy/MockitoMisusingUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingUnitTest.java
diff --git a/testing-modules/mockito-2/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java
similarity index 100%
rename from testing-modules/mockito-2/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java
rename to testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java
diff --git a/testing-modules/mockito/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/testing-modules/mockito-simple/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from testing-modules/mockito/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to testing-modules/mockito-simple/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/testing-modules/mockito/README.md b/testing-modules/mockito/README.md
index 38fb8225a6..6cc6bb8955 100644
--- a/testing-modules/mockito/README.md
+++ b/testing-modules/mockito/README.md
@@ -4,12 +4,5 @@
### Relevant Articles:
-- [Mockito Verify Cookbook](https://www.baeldung.com/mockito-verify)
-- [Mockito When/Then Cookbook](https://www.baeldung.com/mockito-behavior)
-- [Getting Started with Mockito @Mock, @Spy, @Captor and @InjectMocks](https://www.baeldung.com/mockito-annotations)
-- [Mockito’s Mock Methods](https://www.baeldung.com/mockito-mock-methods)
-- [Mocking Exception Throwing using Mockito](https://www.baeldung.com/mockito-exceptions)
-- [Mocking Void Methods with Mockito](https://www.baeldung.com/mockito-void-methods)
-- [Mock Final Classes and Methods with Mockito](https://www.baeldung.com/mockito-final)
- [Testing Callbacks with Mockito](https://www.baeldung.com/mockito-callbacks)
- [Quick Guide to BDDMockito](https://www.baeldung.com/bdd-mockito)
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationIntegrationTest.java
deleted file mode 100644
index 94054d1cbb..0000000000
--- a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoAnnotationIntegrationTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.baeldung.mockito;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
-//@RunWith(MockitoJUnitRunner.class)
-public class MockitoAnnotationIntegrationTest {
-
- @Mock
- private List mockedList;
-
- @Spy
- private List spiedList = new ArrayList<>();
-
- @Before
- public void init() {
- MockitoAnnotations.initMocks(this);
- }
-
- // tests
-
- @Test
- public void whenNotUseMockAnnotation_thenCorrect() {
- final List mockList = Mockito.mock(List.class);
- mockList.add("one");
- Mockito.verify(mockList).add("one");
- assertEquals(0, mockList.size());
-
- Mockito.when(mockList.size()).thenReturn(100);
- assertEquals(100, mockList.size());
- }
-
- @Test
- public void whenUseMockAnnotation_thenMockIsInjected() {
- mockedList.add("one");
- Mockito.verify(mockedList).add("one");
- assertEquals(0, mockedList.size());
-
- Mockito.when(mockedList.size()).thenReturn(100);
- assertEquals(100, mockedList.size());
- }
-
- @Test
- public void whenNotUseSpyAnnotation_thenCorrect() {
- final List spyList = Mockito.spy(new ArrayList());
- spyList.add("one");
- spyList.add("two");
-
- Mockito.verify(spyList).add("one");
- Mockito.verify(spyList).add("two");
-
- assertEquals(2, spyList.size());
-
- Mockito.doReturn(100).when(spyList).size();
- assertEquals(100, spyList.size());
- }
-
- @Test
- public void whenUseSpyAnnotation_thenSpyIsInjectedCorrectly() {
- spiedList.add("one");
- spiedList.add("two");
-
- Mockito.verify(spiedList).add("one");
- Mockito.verify(spiedList).add("two");
-
- assertEquals(2, spiedList.size());
-
- Mockito.doReturn(100).when(spiedList).size();
- assertEquals(100, spiedList.size());
- }
-
- @Test
- public void whenNotUseCaptorAnnotation_thenCorrect() {
- final List mockList = Mockito.mock(List.class);
- final ArgumentCaptor arg = ArgumentCaptor.forClass(String.class);
- mockList.add("one");
- Mockito.verify(mockList).add(arg.capture());
-
- assertEquals("one", arg.getValue());
- }
-
- @Captor
- private
- ArgumentCaptor argCaptor;
-
- @Test
- public void whenUseCaptorAnnotation_thenTheSam() {
- mockedList.add("one");
- Mockito.verify(mockedList).add(argCaptor.capture());
-
- assertEquals("one", argCaptor.getValue());
- }
-
- @Mock
- private Map wordMap;
-
- @InjectMocks
- private MyDictionary dic = new MyDictionary();
-
- @Test
- public void whenUseInjectMocksAnnotation_thenCorrect() {
- Mockito.when(wordMap.get("aWord")).thenReturn("aMeaning");
-
- assertEquals("aMeaning", dic.getMeaning("aWord"));
- }
-
-}
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java
deleted file mode 100644
index b9df6a456c..0000000000
--- a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.baeldung.mockito;
-
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.*;
-
-public class MockitoConfigExamplesIntegrationTest {
-
- // tests
-
- @Test
- public final void whenMockReturnBehaviorIsConfigured_thenBehaviorIsVerified() {
- final MyList listMock = Mockito.mock(MyList.class);
- when(listMock.add(anyString())).thenReturn(false);
-
- final boolean added = listMock.add(randomAlphabetic(6));
- assertThat(added, is(false));
- }
-
- @Test
- public final void whenMockReturnBehaviorIsConfigured2_thenBehaviorIsVerified() {
- final MyList listMock = Mockito.mock(MyList.class);
- doReturn(false).when(listMock).add(anyString());
-
- final boolean added = listMock.add(randomAlphabetic(6));
- assertThat(added, is(false));
- }
-
- @Test(expected = IllegalStateException.class)
- public final void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() {
- final MyList listMock = Mockito.mock(MyList.class);
- when(listMock.add(anyString())).thenThrow(IllegalStateException.class);
-
- listMock.add(randomAlphabetic(6));
- }
-
- @Test(expected = NullPointerException.class)
- public final void whenMethodHasNoReturnType_whenConfiguringBehaviorOfMethod_thenPossible() {
- final MyList listMock = Mockito.mock(MyList.class);
- doThrow(NullPointerException.class).when(listMock).clear();
-
- listMock.clear();
- }
-
- @Test
- public final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingOnlyOnce_thenNoExceptionIsThrown() {
- final MyList listMock = Mockito.mock(MyList.class);
- when(listMock.add(anyString())).thenReturn(false).thenThrow(IllegalStateException.class);
-
- listMock.add(randomAlphabetic(6));
- }
-
- @Test(expected = IllegalStateException.class)
- public final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingTwice_thenExceptionIsThrown() {
- final MyList listMock = Mockito.mock(MyList.class);
- when(listMock.add(anyString())).thenReturn(false).thenThrow(IllegalStateException.class);
-
- listMock.add(randomAlphabetic(6));
- listMock.add(randomAlphabetic(6));
- }
-
- @Test
- public final void whenMockMethodCallIsConfiguredToCallTheRealMethod_thenRealMethodIsCalled() {
- final MyList listMock = Mockito.mock(MyList.class);
- when(listMock.size()).thenCallRealMethod();
-
- assertThat(listMock.size(), equalTo(1));
- }
-
- @Test
- public final void whenMockMethodCallIsConfiguredWithCustomAnswer_thenRealMethodIsCalled() {
- final MyList listMock = Mockito.mock(MyList.class);
- doAnswer(invocation -> "Always the same").when(listMock).get(anyInt());
-
- final String element = listMock.get(1);
- assertThat(element, is(equalTo("Always the same")));
- }
-
- @Test(expected = NullPointerException.class)
- public final void givenSpy_whenConfiguringBehaviorOfSpy_thenCorrectlyConfigured() {
- final MyList instance = new MyList();
- final MyList spy = Mockito.spy(instance);
-
- doThrow(NullPointerException.class).when(spy).size();
- spy.size();
- }
-
-}
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoExceptionIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoExceptionIntegrationTest.java
deleted file mode 100644
index 23fcba60b8..0000000000
--- a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoExceptionIntegrationTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.baeldung.mockito;
-
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.*;
-
-public class MockitoExceptionIntegrationTest {
-
- @Test(expected = NullPointerException.class)
- public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
- MyDictionary dictMock = mock(MyDictionary.class);
- when(dictMock.getMeaning(anyString())).thenThrow(NullPointerException.class);
-
- dictMock.getMeaning("word");
- }
-
- @Test(expected = IllegalStateException.class)
- public void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() {
- MyDictionary dictMock = mock(MyDictionary.class);
- doThrow(IllegalStateException.class).when(dictMock)
- .add(anyString(), anyString());
-
- dictMock.add("word", "meaning");
- }
-
- @Test(expected = NullPointerException.class)
- public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() {
- MyDictionary dictMock = mock(MyDictionary.class);
- when(dictMock.getMeaning(anyString())).thenThrow(new NullPointerException("Error occurred"));
-
- dictMock.getMeaning("word");
- }
-
- @Test(expected = IllegalStateException.class)
- public void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() {
- MyDictionary dictMock = mock(MyDictionary.class);
- doThrow(new IllegalStateException("Error occurred")).when(dictMock)
- .add(anyString(), anyString());
-
- dictMock.add("word", "meaning");
- }
-
- // =====
-
- @Test(expected = NullPointerException.class)
- public void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
- MyDictionary dict = new MyDictionary();
- MyDictionary spy = Mockito.spy(dict);
-
- when(spy.getMeaning(anyString())).thenThrow(NullPointerException.class);
- spy.getMeaning("word");
- }
-}
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java
deleted file mode 100644
index 6dfe7f9d6b..0000000000
--- a/testing-modules/mockito/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.baeldung.mockito;
-
-import com.google.common.collect.Lists;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.InOrder;
-import org.mockito.Mockito;
-import org.mockito.exceptions.verification.NoInteractionsWanted;
-
-import java.util.List;
-
-import static org.hamcrest.Matchers.hasItem;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.*;
-
-public class MockitoVerifyExamplesIntegrationTest {
-
- // tests
-
- @Test
- public final void givenInteractionWithMockOccurred_whenVerifyingInteraction_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.size();
- verify(mockedList).size();
- }
-
- @Test
- public final void givenOneInteractionWithMockOccurred_whenVerifyingNumberOfInteractions_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.size();
- verify(mockedList, times(1)).size();
- }
-
- @Test
- public final void givenNoInteractionWithMockOccurred_whenVerifyingInteractions_thenCorrect() {
- final List mockedList = mock(MyList.class);
- verifyNoInteractions(mockedList);
- }
-
- @Test
- public final void givenNoInteractionWithMethodOfMockOccurred_whenVerifyingInteractions_thenCorrect() {
- final List mockedList = mock(MyList.class);
- verify(mockedList, times(0)).size();
- }
-
- @Test(expected = NoInteractionsWanted.class)
- public final void givenUnverifiedInteraction_whenVerifyingNoUnexpectedInteractions_thenFail() {
- final List mockedList = mock(MyList.class);
- mockedList.size();
- mockedList.clear();
-
- verify(mockedList).size();
- verifyNoMoreInteractions(mockedList);
- }
-
- @Test
- public final void whenVerifyingOrderOfInteractions_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.size();
- mockedList.add("a parameter");
- mockedList.clear();
-
- final InOrder inOrder = Mockito.inOrder(mockedList);
- inOrder.verify(mockedList).size();
- inOrder.verify(mockedList).add("a parameter");
- inOrder.verify(mockedList).clear();
- }
-
- @Test
- public final void whenVerifyingAnInteractionHasNotOccurred_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.size();
-
- verify(mockedList, never()).clear();
- }
-
- @Test
- public final void whenVerifyingAnInteractionHasOccurredAtLeastOnce_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.clear();
- mockedList.clear();
- mockedList.clear();
-
- verify(mockedList, atLeast(1)).clear();
- verify(mockedList, atMost(10)).clear();
- }
-
- // with arguments
-
- @Test
- public final void whenVerifyingAnInteractionWithExactArgument_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.add("test");
-
- verify(mockedList).add("test");
- }
-
- @Test
- public final void whenVerifyingAnInteractionWithAnyArgument_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.add("test");
-
- verify(mockedList).add(anyString());
- }
-
- @Test
- public final void whenVerifyingAnInteractionWithArgumentCapture_thenCorrect() {
- final List mockedList = mock(MyList.class);
- mockedList.addAll(Lists.newArrayList("someElement"));
- final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(List.class);
- verify(mockedList).addAll(argumentCaptor.capture());
- final List capturedArgument = argumentCaptor.>getValue();
- assertThat(capturedArgument, hasItem("someElement"));
- }
-
-}
diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml
index 8213637631..f931cf6947 100644
--- a/testing-modules/pom.xml
+++ b/testing-modules/pom.xml
@@ -30,8 +30,8 @@
junit5-migration
load-testing-comparison
mockito-2
- mockito-3
mockito
+ mockito-simple
mocks
mockserver
parallel-tests-junit
@@ -51,4 +51,4 @@
zerocode
-
\ No newline at end of file
+
diff --git a/testing-modules/spring-mockito/README.md b/testing-modules/spring-mockito/README.md
index 0ad8e05ce3..3fda392c0f 100644
--- a/testing-modules/spring-mockito/README.md
+++ b/testing-modules/spring-mockito/README.md
@@ -4,4 +4,3 @@ This module contains articles about Spring with Mockito
### Relevant Articles:
- [Injecting Mockito Mocks into Spring Beans](https://www.baeldung.com/injecting-mocks-in-spring)
-- [Mockito ArgumentMatchers](https://www.baeldung.com/mockito-argument-matchers)
diff --git a/undertow/pom.xml b/undertow/pom.xml
index 9ec3aa8e6c..8bbdfe6e29 100644
--- a/undertow/pom.xml
+++ b/undertow/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
com.baeldung.undertow
undertow
@@ -26,20 +27,10 @@
${project.artifactId}
-
+
org.apache.maven.plugins
maven-jar-plugin
@@ -57,7 +48,7 @@
1.4.18.Final
-
+
3.0.2