diff --git a/core-groovy-2/src/main/groovy/com/baeldung/category/BaeldungCategory.groovy b/core-groovy-2/src/main/groovy/com/baeldung/category/BaeldungCategory.groovy
new file mode 100644
index 0000000000..479c39699f
--- /dev/null
+++ b/core-groovy-2/src/main/groovy/com/baeldung/category/BaeldungCategory.groovy
@@ -0,0 +1,17 @@
+package com.baeldung.category;
+
+class BaeldungCategory {
+
+ public static String capitalize(String self) {
+ String capitalizedStr = self;
+ if (self.size() > 0) {
+ capitalizedStr = self.substring(0, 1).toUpperCase() + self.substring(1);
+ }
+ return capitalizedStr
+ }
+
+ public static double toThePower(Number self, Number exponent) {
+ return Math.pow(self, exponent);
+ }
+
+}
diff --git a/core-groovy-2/src/main/groovy/com/baeldung/category/NumberCategory.groovy b/core-groovy-2/src/main/groovy/com/baeldung/category/NumberCategory.groovy
new file mode 100644
index 0000000000..ccf2ed519b
--- /dev/null
+++ b/core-groovy-2/src/main/groovy/com/baeldung/category/NumberCategory.groovy
@@ -0,0 +1,17 @@
+package com.baeldung.category;
+
+import groovy.lang.Category
+
+@Category(Number)
+class NumberCategory {
+
+ public Number cube() {
+ return this*this*this
+ }
+
+ public int divideWithRoundUp(BigDecimal divisor, boolean isRoundUp) {
+ def mathRound = isRoundUp ? BigDecimal.ROUND_UP : BigDecimal.ROUND_DOWN
+ return (int)new BigDecimal(this).divide(divisor, 0, mathRound)
+ }
+
+}
diff --git a/core-groovy-2/src/test/groovy/com/baeldung/category/CategoryUnitTest.groovy b/core-groovy-2/src/test/groovy/com/baeldung/category/CategoryUnitTest.groovy
new file mode 100644
index 0000000000..a1f67b1e2e
--- /dev/null
+++ b/core-groovy-2/src/test/groovy/com/baeldung/category/CategoryUnitTest.groovy
@@ -0,0 +1,101 @@
+package com.baeldung.category
+
+import groovy.time.*
+import java.text.SimpleDateFormat
+import groovy.xml.*
+import groovy.xml.dom.*
+import com.baeldung.category.BaeldungCategory
+import com.baeldung.category.NumberCategory
+
+class CategoryUnitTest extends GroovyTestCase {
+
+ void test_whenUsingTimeCategory_thenOperationOnDate() {
+ def jan_1_2019 = new Date("01/01/2019")
+ use (TimeCategory) {
+ assert jan_1_2019 + 10.seconds == new Date("01/01/2019 00:00:10")
+
+ assert jan_1_2019 + 20.minutes == new Date("01/01/2019 00:20:00")
+
+ assert jan_1_2019 + 2.hours == new Date("01/01/2019 02:00:00")
+
+ assert jan_1_2019 - 1.day == new Date("12/31/2018")
+
+ assert jan_1_2019 + 2.weeks == new Date("01/15/2019")
+
+ assert jan_1_2019 - 2.months == new Date("11/01/2018")
+
+ assert jan_1_2019 + 3.years == new Date("01/01/2022")
+ }
+ }
+
+ void test_whenUsingTimeCategory_thenOperationOnNumber() {
+ SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy")
+ use (TimeCategory) {
+ assert sdf.format(5.days.from.now) == sdf.format(new Date() + 5.days)
+
+ sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss")
+ assert sdf.format(10.minutes.from.now) == sdf.format(new Date() + 10.minutes)
+ assert sdf.format(2.hours.ago) == sdf.format(new Date() - 2.hours)
+ }
+ }
+
+ void test_whenUsingDOMCategory_thenOperationOnXML() {
+
+ def baeldungArticlesText = """
+
+
+ An Intro to the Java Debug Interface (JDI)
+ A quick and practical overview of Java Debug Interface.
+
+
+ A Quick Guide to Working with Web Services in Groovy
+ Learn how to work with Web Services in Groovy.
+
+
+"""
+ def baeldungArticlesDom = DOMBuilder.newInstance().parseText(baeldungArticlesText)
+
+ def root = baeldungArticlesDom.documentElement
+
+ use (DOMCategory) {
+ assert root.article.size() == 2
+
+ def articles = root.article
+
+ assert articles[0].title.text() == "An Intro to the Java Debug Interface (JDI)"
+ assert articles[1].desc.text() == "Learn how to work with Web Services in Groovy."
+
+ def articleNode3 = root.appendNode(new QName("article"), ["core-java": "false"])
+
+ articleNode3.appendNode("title", "Metaprogramming in Groovy")
+ articleNode3.appendNode("desc", "Explore the concept of runtime and compile-time metaprogramming in Groovy")
+
+ assert root.article.size() == 3
+
+ assert root.article[2].title.text() == "Metaprogramming in Groovy"
+ }
+ }
+
+ void test_whenUsingBaeldungCategory_thenCapitalizeString() {
+ use (BaeldungCategory) {
+ assert "norman".capitalize() == "Norman"
+ }
+ }
+
+ void test_whenUsingBaeldungCategory_thenOperationsOnNumber() {
+ use (BaeldungCategory) {
+ assert 50.toThePower(2) == 2500
+ assert 2.4.toThePower(4) == 33.1776
+ }
+ }
+
+ void test_whenUsingNumberCategory_thenOperationsOnNumber() {
+ use (NumberCategory) {
+ assert 3.cube() == 27
+ assert 25.divideWithRoundUp(6, true) == 5
+ assert 120.23.divideWithRoundUp(6.1, true) == 20
+ assert 150.9.divideWithRoundUp(12.1, false) == 12
+ }
+ }
+
+}
diff --git a/core-java-modules/core-java-concurrency-basic-2/README.md b/core-java-modules/core-java-concurrency-basic-2/README.md
new file mode 100644
index 0000000000..e72725b7cb
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-basic-2/README.md
@@ -0,0 +1,10 @@
+=========
+
+## Core Java Concurrency Basic 2 Examples
+
+### Relevant Articles:
+- [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution)
+- [wait and notify() Methods in Java](https://www.baeldung.com/java-wait-notify)
+- [Difference Between Wait and Sleep in Java](https://www.baeldung.com/java-wait-and-sleep)
+- [Guide to the Synchronized Keyword in Java](https://www.baeldung.com/java-synchronized)
+- [Life Cycle of a Thread in Java](https://www.baeldung.com/java-thread-lifecycle)
diff --git a/core-java-modules/core-java-concurrency-basic-2/pom.xml b/core-java-modules/core-java-concurrency-basic-2/pom.xml
new file mode 100644
index 0000000000..7e0a160456
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-basic-2/pom.xml
@@ -0,0 +1,33 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-concurrency-basic-2
+ 0.1.0-SNAPSHOT
+ core-java-concurrency-basic-2
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+
+
+ core-java-concurrency-basic-2
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/delay/Delay.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/delay/Delay.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/delay/Delay.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/delay/Delay.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java b/core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
rename to core-java-modules/core-java-concurrency-basic-2/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
diff --git a/core-java-modules/core-java-concurrency-basic-2/src/main/resources/logback.xml b/core-java-modules/core-java-concurrency-basic-2/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-basic-2/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java b/core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
rename to core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java b/core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
rename to core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java b/core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
rename to core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
index e2bc328df3..473fe6ff8e 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
+++ b/core-java-modules/core-java-concurrency-basic-2/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
@@ -1,15 +1,15 @@
package com.baeldung.concurrent.waitandnotify;
-import static org.junit.Assert.assertEquals;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
public class NetworkIntegrationTest {
diff --git a/core-java-modules/core-java-concurrency-basic/README.md b/core-java-modules/core-java-concurrency-basic/README.md
index c498bed315..2f9d014103 100644
--- a/core-java-modules/core-java-concurrency-basic/README.md
+++ b/core-java-modules/core-java-concurrency-basic/README.md
@@ -3,18 +3,13 @@
## Core Java Concurrency Basic Examples
### Relevant Articles:
-- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture)
-- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial)
-- [Guide to java.util.concurrent.Future](http://www.baeldung.com/java-future)
-- [Difference Between Wait and Sleep in Java](http://www.baeldung.com/java-wait-and-sleep)
-- [Guide to the Synchronized Keyword in Java](http://www.baeldung.com/java-synchronized)
-- [Overview of the java.util.concurrent](http://www.baeldung.com/java-util-concurrent)
-- [Implementing a Runnable vs Extending a Thread](http://www.baeldung.com/java-runnable-vs-extending-thread)
-- [How to Kill a Java Thread](http://www.baeldung.com/java-thread-stop)
-- [ExecutorService – Waiting for Threads to Finish](http://www.baeldung.com/java-executor-wait-for-threads)
-- [wait and notify() Methods in Java](http://www.baeldung.com/java-wait-notify)
-- [Life Cycle of a Thread in Java](http://www.baeldung.com/java-thread-lifecycle)
-- [Runnable vs. Callable in Java](http://www.baeldung.com/java-runnable-callable)
+- [Guide To CompletableFuture](https://www.baeldung.com/java-completablefuture)
+- [A Guide to the Java ExecutorService](https://www.baeldung.com/java-executor-service-tutorial)
+- [Guide to java.util.concurrent.Future](https://www.baeldung.com/java-future)
+- [Overview of the java.util.concurrent](https://www.baeldung.com/java-util-concurrent)
+- [Implementing a Runnable vs Extending a Thread](https://www.baeldung.com/java-runnable-vs-extending-thread)
+- [How to Kill a Java Thread](https://www.baeldung.com/java-thread-stop)
+- [ExecutorService – Waiting for Threads to Finish](https://www.baeldung.com/java-executor-wait-for-threads)
+- [Runnable vs. Callable in Java](https://www.baeldung.com/java-runnable-callable)
- [What is Thread-Safety and How to Achieve it?](https://www.baeldung.com/java-thread-safety)
- [How to Start a Thread in Java](https://www.baeldung.com/java-start-thread)
-- [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution)
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/CounterTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/CounterUnitTest.java
similarity index 91%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/CounterTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/CounterUnitTest.java
index 176151083c..6761b05282 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/CounterTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/CounterUnitTest.java
@@ -1,14 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
-import org.junit.Test;
-import static org.assertj.core.api.Assertions.assertThat;
import com.baeldung.concurrent.threadsafety.callables.CounterCallable;
import com.baeldung.concurrent.threadsafety.services.Counter;
+import org.junit.Test;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-public class CounterTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CounterUnitTest {
@Test
public void whenCalledIncrementCounter_thenCorrect() throws Exception {
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ExtrinsicLockCounterTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ExtrinsicLockCounterUnitTest.java
similarity index 91%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ExtrinsicLockCounterTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ExtrinsicLockCounterUnitTest.java
index e34eb250bf..2dcb846bf4 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ExtrinsicLockCounterTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ExtrinsicLockCounterUnitTest.java
@@ -1,14 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
-import org.junit.Test;
-import static org.assertj.core.api.Assertions.assertThat;
import com.baeldung.concurrent.threadsafety.callables.ExtrinsicLockCounterCallable;
import com.baeldung.concurrent.threadsafety.services.ExtrinsicLockCounter;
+import org.junit.Test;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-public class ExtrinsicLockCounterTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ExtrinsicLockCounterUnitTest {
@Test
public void whenCalledIncrementCounter_thenCorrect() throws Exception {
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MathUtilsTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MathUtilsUnitTest.java
similarity index 55%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MathUtilsTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MathUtilsUnitTest.java
index 2708152906..018d4164f0 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MathUtilsTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MathUtilsUnitTest.java
@@ -1,13 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
import com.baeldung.concurrent.threadsafety.mathutils.MathUtils;
import org.junit.Test;
+
+import java.math.BigInteger;
+
import static org.assertj.core.api.Assertions.assertThat;
-public class MathUtilsTest {
+public class MathUtilsUnitTest {
@Test
public void whenCalledFactorialMethod_thenCorrect() {
- assertThat(MathUtils.factorial(2)).isEqualTo(2);
+ assertThat(MathUtils.factorial(2)).isEqualTo(new BigInteger("2"));
}
}
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MessageServiceTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MessageServiceUnitTest.java
similarity index 91%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MessageServiceTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MessageServiceUnitTest.java
index e62206c09a..4df695a537 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/MessageServiceTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/MessageServiceUnitTest.java
@@ -1,14 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
-import org.junit.Test;
-import static org.assertj.core.api.Assertions.assertThat;
import com.baeldung.concurrent.threadsafety.callables.MessageServiceCallable;
import com.baeldung.concurrent.threadsafety.services.MessageService;
+import org.junit.Test;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-public class MessageServiceTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class MessageServiceUnitTest {
@Test
public void whenCalledgetMessage_thenCorrect() throws Exception {
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantLockCounterTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantLockCounterUnitTest.java
similarity index 91%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantLockCounterTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantLockCounterUnitTest.java
index 20fa2c74da..330d2d4c86 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantLockCounterTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantLockCounterUnitTest.java
@@ -1,14 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
import com.baeldung.concurrent.threadsafety.callables.ReentrantLockCounterCallable;
import com.baeldung.concurrent.threadsafety.services.ReentrantLockCounter;
+import org.junit.Test;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import static org.assertj.core.api.Assertions.assertThat;
-import org.junit.Test;
-public class ReentrantLockCounterTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ReentrantLockCounterUnitTest {
@Test
public void whenCalledIncrementCounter_thenCorrect() throws Exception {
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantReadWriteLockCounterTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantReadWriteLockCounterUnitTest.java
similarity index 90%
rename from core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantReadWriteLockCounterTest.java
rename to core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantReadWriteLockCounterUnitTest.java
index 6113473cac..71fad2c87f 100644
--- a/core-java-modules/core-java-concurrency-basic/src/test/com/baeldung/concurrent/threadsafety/tests/ReentrantReadWriteLockCounterTest.java
+++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/threadsafety/ReentrantReadWriteLockCounterUnitTest.java
@@ -1,14 +1,16 @@
-package com.baeldung.concurrent.threadsafety.tests;
+package com.baeldung.concurrent.threadsafety;
import com.baeldung.concurrent.threadsafety.callables.ReentranReadWriteLockCounterCallable;
import com.baeldung.concurrent.threadsafety.services.ReentrantReadWriteLockCounter;
+import org.junit.Test;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import static org.assertj.core.api.Assertions.assertThat;
-import org.junit.Test;
-public class ReentrantReadWriteLockCounterTest {
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ReentrantReadWriteLockCounterUnitTest {
@Test
public void whenCalledIncrementCounter_thenCorrect() throws Exception {
@@ -16,9 +18,9 @@ public class ReentrantReadWriteLockCounterTest {
ReentrantReadWriteLockCounter counter = new ReentrantReadWriteLockCounter();
Future future1 = (Future) executorService.submit(new ReentranReadWriteLockCounterCallable(counter));
Future future2 = (Future) executorService.submit(new ReentranReadWriteLockCounterCallable(counter));
-
- assertThat(future1.get()).isEqualTo(1);
+
assertThat(future2.get()).isEqualTo(2);
+ assertThat(future1.get()).isEqualTo(1);
}
}
diff --git a/java-collections-maps-2/README.md b/java-collections-maps-2/README.md
index ff84e93ce4..7aef942ff0 100644
--- a/java-collections-maps-2/README.md
+++ b/java-collections-maps-2/README.md
@@ -1,3 +1,11 @@
## Relevant Articles:
- [Map of Primitives in Java](https://www.baeldung.com/java-map-primitives)
- [Copying a HashMap in Java](https://www.baeldung.com/java-copy-hashmap)
+- [Guide to WeakHashMap in Java](https://www.baeldung.com/java-weakhashmap)
+- [Map to String Conversion in Java](https://www.baeldung.com/java-map-to-string-conversion)
+- [Iterate over a Map in Java](https://www.baeldung.com/java-iterate-map)
+- [Merging Two Maps with Java 8](https://www.baeldung.com/java-merge-maps)
+- [Sort a HashMap in Java](https://www.baeldung.com/java-hashmap-sort)
+- [Finding the Highest Value in a Java Map](https://www.baeldung.com/java-find-map-max)
+- [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap)
+- [Java TreeMap vs HashMap](https://www.baeldung.com/java-treemap-vs-hashmap)
diff --git a/java-collections-maps-2/pom.xml b/java-collections-maps-2/pom.xml
index e242a8655e..a246559f61 100644
--- a/java-collections-maps-2/pom.xml
+++ b/java-collections-maps-2/pom.xml
@@ -41,6 +41,22 @@
commons-lang3
${commons-lang3.version}
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ com.jayway.awaitility
+ awaitility
+ ${avaitility.version}
+ test
+
org.assertj
assertj-core
@@ -50,6 +66,9 @@
+ 0.6.5
+ 4.1
+ 1.7.0
8.2.0
3.0.2
8.1.0
diff --git a/java-collections-maps/src/main/java/com/baeldung/convert/MapToString.java b/java-collections-maps-2/src/main/java/com/baeldung/map/convert/MapToString.java
similarity index 96%
rename from java-collections-maps/src/main/java/com/baeldung/convert/MapToString.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/convert/MapToString.java
index aca0d05ef1..d13be924ff 100644
--- a/java-collections-maps/src/main/java/com/baeldung/convert/MapToString.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/convert/MapToString.java
@@ -1,4 +1,4 @@
-package com.baeldung.convert;
+package com.baeldung.map.convert;
import com.google.common.base.Joiner;
import org.apache.commons.lang3.StringUtils;
diff --git a/java-collections-maps/src/main/java/com/baeldung/convert/StringToMap.java b/java-collections-maps-2/src/main/java/com/baeldung/map/convert/StringToMap.java
similarity index 94%
rename from java-collections-maps/src/main/java/com/baeldung/convert/StringToMap.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/convert/StringToMap.java
index caabca4a09..416ba4dd9a 100644
--- a/java-collections-maps/src/main/java/com/baeldung/convert/StringToMap.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/convert/StringToMap.java
@@ -1,4 +1,4 @@
-package com.baeldung.convert;
+package com.baeldung.map.convert;
import com.google.common.base.Splitter;
diff --git a/java-collections-maps-2/src/main/java/com/baeldung/map/CopyHashMap.java b/java-collections-maps-2/src/main/java/com/baeldung/map/copyhashmap/CopyHashMap.java
similarity index 98%
rename from java-collections-maps-2/src/main/java/com/baeldung/map/CopyHashMap.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/copyhashmap/CopyHashMap.java
index 2ebc9413c8..cb18f3aa11 100644
--- a/java-collections-maps-2/src/main/java/com/baeldung/map/CopyHashMap.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/copyhashmap/CopyHashMap.java
@@ -1,4 +1,6 @@
-package com.baeldung.map;
+package com.baeldung.map.copyhashmap;
+
+import org.apache.commons.lang3.SerializationUtils;
import java.util.HashMap;
import java.util.Map;
@@ -6,8 +8,6 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
-import org.apache.commons.lang3.SerializationUtils;
-
public class CopyHashMap {
public static HashMap copyUsingConstructor(HashMap originalMap) {
diff --git a/java-collections-maps/src/main/java/com/baeldung/java/map/initialize/MapInitializer.java b/java-collections-maps-2/src/main/java/com/baeldung/map/initialize/MapInitializer.java
similarity index 98%
rename from java-collections-maps/src/main/java/com/baeldung/java/map/initialize/MapInitializer.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/initialize/MapInitializer.java
index 4dbaceac62..4d63abcfd0 100644
--- a/java-collections-maps/src/main/java/com/baeldung/java/map/initialize/MapInitializer.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/initialize/MapInitializer.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.map.initialize;
+package com.baeldung.map.initialize;
import java.util.AbstractMap;
import java.util.Collections;
diff --git a/java-collections-maps/src/main/java/com/baeldung/map/iteration/MapIteration.java b/java-collections-maps-2/src/main/java/com/baeldung/map/iteration/MapIteration.java
similarity index 100%
rename from java-collections-maps/src/main/java/com/baeldung/map/iteration/MapIteration.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/iteration/MapIteration.java
diff --git a/java-collections-maps/src/main/java/com/baeldung/map/util/MapMax.java b/java-collections-maps-2/src/main/java/com/baeldung/map/mapmax/MapMax.java
similarity index 94%
rename from java-collections-maps/src/main/java/com/baeldung/map/util/MapMax.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/mapmax/MapMax.java
index 93a98ba6fd..8c33c857ee 100644
--- a/java-collections-maps/src/main/java/com/baeldung/map/util/MapMax.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/mapmax/MapMax.java
@@ -1,11 +1,7 @@
-package com.baeldung.map.util;
+package com.baeldung.map.mapmax;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Optional;
public class MapMax {
diff --git a/java-collections-maps/src/main/java/com/baeldung/sort/Employee.java b/java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/Employee.java
similarity index 97%
rename from java-collections-maps/src/main/java/com/baeldung/sort/Employee.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/Employee.java
index b5e56f6141..d7fb0d1a1d 100644
--- a/java-collections-maps/src/main/java/com/baeldung/sort/Employee.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/Employee.java
@@ -1,4 +1,4 @@
-package com.baeldung.sort;
+package com.baeldung.map.mergemaps;
public class Employee implements Comparable {
diff --git a/java-collections-maps/src/main/java/com/baeldung/map/java_8/MergeMaps.java b/java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/MergeMaps.java
similarity index 97%
rename from java-collections-maps/src/main/java/com/baeldung/map/java_8/MergeMaps.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/MergeMaps.java
index 052cfb8bad..4f187bad90 100644
--- a/java-collections-maps/src/main/java/com/baeldung/map/java_8/MergeMaps.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/mergemaps/MergeMaps.java
@@ -1,7 +1,7 @@
-package com.baeldung.map.java_8;
+package com.baeldung.map.mergemaps;
-import com.baeldung.sort.Employee;
import one.util.streamex.EntryStream;
+
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
diff --git a/java-collections-maps-2/src/main/java/com/baeldung/map/PrimitiveMaps.java b/java-collections-maps-2/src/main/java/com/baeldung/map/primitives/PrimitiveMaps.java
similarity index 98%
rename from java-collections-maps-2/src/main/java/com/baeldung/map/PrimitiveMaps.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/primitives/PrimitiveMaps.java
index d835950c68..30bec12ccc 100644
--- a/java-collections-maps-2/src/main/java/com/baeldung/map/PrimitiveMaps.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/primitives/PrimitiveMaps.java
@@ -1,4 +1,4 @@
-package com.baeldung.map;
+package com.baeldung.map.primitives;
import cern.colt.map.AbstractIntDoubleMap;
import cern.colt.map.OpenIntDoubleHashMap;
diff --git a/java-collections-maps/src/main/java/com/baeldung/sort/SortHashMap.java b/java-collections-maps-2/src/main/java/com/baeldung/map/sort/SortHashMap.java
similarity index 97%
rename from java-collections-maps/src/main/java/com/baeldung/sort/SortHashMap.java
rename to java-collections-maps-2/src/main/java/com/baeldung/map/sort/SortHashMap.java
index b8a2b32060..14610ffb00 100644
--- a/java-collections-maps/src/main/java/com/baeldung/sort/SortHashMap.java
+++ b/java-collections-maps-2/src/main/java/com/baeldung/map/sort/SortHashMap.java
@@ -1,8 +1,8 @@
-package com.baeldung.sort;
+package com.baeldung.map.sort;
+import com.baeldung.map.mergemaps.Employee;
import com.google.common.base.Functions;
import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import java.util.*;
diff --git a/java-collections-maps/src/test/java/com/baeldung/convert/MapToStringUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/convert/MapToStringUnitTest.java
similarity index 97%
rename from java-collections-maps/src/test/java/com/baeldung/convert/MapToStringUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/convert/MapToStringUnitTest.java
index d9923e74a0..4517dea328 100644
--- a/java-collections-maps/src/test/java/com/baeldung/convert/MapToStringUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/convert/MapToStringUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.convert;
+package com.baeldung.map.convert;
import org.apache.commons.collections4.MapUtils;
import org.junit.Assert;
diff --git a/java-collections-maps/src/test/java/com/baeldung/convert/StringToMapUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/convert/StringToMapUnitTest.java
similarity index 95%
rename from java-collections-maps/src/test/java/com/baeldung/convert/StringToMapUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/convert/StringToMapUnitTest.java
index 8fb906efd0..2f80b30871 100644
--- a/java-collections-maps/src/test/java/com/baeldung/convert/StringToMapUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/convert/StringToMapUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.convert;
+package com.baeldung.map.convert;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
diff --git a/java-collections-maps-2/src/test/java/com/baeldung/map/CopyHashMapUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/CopyHashMapUnitTest.java
similarity index 98%
rename from java-collections-maps-2/src/test/java/com/baeldung/map/CopyHashMapUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/CopyHashMapUnitTest.java
index c400eea153..e2d5e327e1 100644
--- a/java-collections-maps-2/src/test/java/com/baeldung/map/CopyHashMapUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/CopyHashMapUnitTest.java
@@ -1,13 +1,12 @@
-package com.baeldung.map;
+package com.baeldung.map.copyhashmap;
-import static org.assertj.core.api.Assertions.assertThat;
+import com.google.common.collect.ImmutableMap;
+import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
+import static org.assertj.core.api.Assertions.assertThat;
public class CopyHashMapUnitTest {
diff --git a/java-collections-maps-2/src/test/java/com/baeldung/map/Employee.java b/java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/Employee.java
similarity index 91%
rename from java-collections-maps-2/src/test/java/com/baeldung/map/Employee.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/Employee.java
index 7963fa811c..5db55c26ea 100644
--- a/java-collections-maps-2/src/test/java/com/baeldung/map/Employee.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/copyhashmap/Employee.java
@@ -1,4 +1,4 @@
-package com.baeldung.map;
+package com.baeldung.map.copyhashmap;
import java.io.Serializable;
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/initialize/MapInitializerUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/initialize/MapInitializerUnitTest.java
similarity index 94%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/initialize/MapInitializerUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/initialize/MapInitializerUnitTest.java
index 80a8983d6f..7c6dffe787 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/initialize/MapInitializerUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/initialize/MapInitializerUnitTest.java
@@ -1,10 +1,10 @@
-package com.baeldung.java.map.initialize;
+package com.baeldung.map.initialize;
-import static org.junit.Assert.assertEquals;
+import org.junit.Test;
import java.util.Map;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
public class MapInitializerUnitTest {
diff --git a/java-collections-maps/src/test/java/com/baeldung/map/util/MapMaxUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/mapmax/MapMaxUnitTest.java
similarity index 97%
rename from java-collections-maps/src/test/java/com/baeldung/map/util/MapMaxUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/mapmax/MapMaxUnitTest.java
index 883265cc8b..30b945bfc8 100644
--- a/java-collections-maps/src/test/java/com/baeldung/map/util/MapMaxUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/mapmax/MapMaxUnitTest.java
@@ -1,14 +1,13 @@
-package com.baeldung.map.util;
+package com.baeldung.map.mapmax;
-
-import static org.junit.Assert.assertEquals;
+import org.junit.Before;
+import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
public class MapMaxUnitTest {
diff --git a/java-collections-maps/src/test/java/com/baeldung/collection/WhenComparingTreeMapVsHashMap.java b/java-collections-maps-2/src/test/java/com/baeldung/map/treemaphashmap/TreeMapVsHashMapUnitTest.java
similarity index 91%
rename from java-collections-maps/src/test/java/com/baeldung/collection/WhenComparingTreeMapVsHashMap.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/treemaphashmap/TreeMapVsHashMapUnitTest.java
index f2dfc992c2..1057e3b9f0 100644
--- a/java-collections-maps/src/test/java/com/baeldung/collection/WhenComparingTreeMapVsHashMap.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/treemaphashmap/TreeMapVsHashMapUnitTest.java
@@ -1,16 +1,14 @@
-package com.baeldung.collection;
-
-import java.util.ConcurrentModificationException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
+package com.baeldung.map.treemaphashmap;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
-public class WhenComparingTreeMapVsHashMap {
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class TreeMapVsHashMapUnitTest {
@Test
public void whenInsertObjectsTreeMap_thenNaturalOrder() {
diff --git a/java-collections-maps/src/test/java/com/baeldung/weakhashmap/WeakHashMapUnitTest.java b/java-collections-maps-2/src/test/java/com/baeldung/map/weakhashmap/WeakHashMapUnitTest.java
similarity index 98%
rename from java-collections-maps/src/test/java/com/baeldung/weakhashmap/WeakHashMapUnitTest.java
rename to java-collections-maps-2/src/test/java/com/baeldung/map/weakhashmap/WeakHashMapUnitTest.java
index d7bcb31867..293f24c378 100644
--- a/java-collections-maps/src/test/java/com/baeldung/weakhashmap/WeakHashMapUnitTest.java
+++ b/java-collections-maps-2/src/test/java/com/baeldung/map/weakhashmap/WeakHashMapUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.weakhashmap;
+package com.baeldung.map.weakhashmap;
import org.junit.Test;
diff --git a/java-collections-maps/README.md b/java-collections-maps/README.md
index 2eeb2c8843..3a6ad1d10c 100644
--- a/java-collections-maps/README.md
+++ b/java-collections-maps/README.md
@@ -3,21 +3,13 @@
## Java Collections Cookbooks and Examples
### Relevant Articles:
-- [Guide to WeakHashMap in Java](http://www.baeldung.com/java-weakhashmap)
-- [Guide to the Guava BiMap](http://www.baeldung.com/guava-bimap)
-- [The Java HashMap Under the Hood](http://www.baeldung.com/java-hashmap)
-- [A Guide to LinkedHashMap in Java](http://www.baeldung.com/java-linked-hashmap)
-- [A Guide to TreeMap in Java](http://www.baeldung.com/java-treemap)
-- [Iterate over a Map in Java](http://www.baeldung.com/java-iterate-map)
-- [Java TreeMap vs HashMap](http://www.baeldung.com/java-treemap-vs-hashmap)
-- [How to Store Duplicate Keys in a Map in Java?](http://www.baeldung.com/java-map-duplicate-keys)
-- [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap)
+- [Guide to the Guava BiMap](https://www.baeldung.com/guava-bimap)
+- [The Java HashMap Under the Hood](https://www.baeldung.com/java-hashmap)
+- [A Guide to LinkedHashMap in Java](https://www.baeldung.com/java-linked-hashmap)
+- [A Guide to TreeMap in Java](https://www.baeldung.com/java-treemap)
+- [How to Store Duplicate Keys in a Map in Java?](https://www.baeldung.com/java-map-duplicate-keys)
- [Get the Key for a Value from a Java Map](https://www.baeldung.com/java-map-key-from-value)
-- [Sort a HashMap in Java](https://www.baeldung.com/java-hashmap-sort)
-- [Finding the Highest Value in a Java Map](https://www.baeldung.com/java-find-map-max)
-- [Merging Two Maps with Java 8](https://www.baeldung.com/java-merge-maps)
- [How to Check If a Key Exists in a Map](https://www.baeldung.com/java-map-key-exists)
- [Comparing Two HashMaps in Java](https://www.baeldung.com/java-compare-hashmaps)
- [Immutable Map Implementations in Java](https://www.baeldung.com/java-immutable-maps)
-- [Map to String Conversion in Java](https://www.baeldung.com/java-map-to-string-conversion)
- [Guide to Apache Commons MultiValuedMap](https://www.baeldung.com/apache-commons-multi-valued-map)
diff --git a/java-collections-maps/pom.xml b/java-collections-maps/pom.xml
index 83cc97a21e..b755582580 100644
--- a/java-collections-maps/pom.xml
+++ b/java-collections-maps/pom.xml
@@ -36,11 +36,6 @@
${assertj.version}
test
-
- one.util
- streamex
- ${streamex.version}
-
@@ -49,6 +44,5 @@
1.7.0
3.6.1
7.1.0
- 0.6.5
diff --git a/java-collections-maps/src/main/java/com/baeldung/java/map/MapUtil.java b/java-collections-maps/src/main/java/com/baeldung/map/MapUtil.java
similarity index 96%
rename from java-collections-maps/src/main/java/com/baeldung/java/map/MapUtil.java
rename to java-collections-maps/src/main/java/com/baeldung/map/MapUtil.java
index 688c7592f3..91b7197a92 100644
--- a/java-collections-maps/src/main/java/com/baeldung/java/map/MapUtil.java
+++ b/java-collections-maps/src/main/java/com/baeldung/map/MapUtil.java
@@ -1,12 +1,12 @@
/**
*
*/
-package com.baeldung.java.map;
+package com.baeldung.map;
import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.Map.Entry;
+import java.util.Set;
import java.util.stream.Stream;
/**
diff --git a/java-collections-maps/src/main/java/com/baeldung/java/map/MyKey.java b/java-collections-maps/src/main/java/com/baeldung/map/MyKey.java
similarity index 97%
rename from java-collections-maps/src/main/java/com/baeldung/java/map/MyKey.java
rename to java-collections-maps/src/main/java/com/baeldung/map/MyKey.java
index ae3c3edc39..9993d7862c 100644
--- a/java-collections-maps/src/main/java/com/baeldung/java/map/MyKey.java
+++ b/java-collections-maps/src/main/java/com/baeldung/map/MyKey.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.map;
+package com.baeldung.map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/java-collections-maps/src/main/java/com/baeldung/java/map/MyLinkedHashMap.java b/java-collections-maps/src/main/java/com/baeldung/map/MyLinkedHashMap.java
similarity index 94%
rename from java-collections-maps/src/main/java/com/baeldung/java/map/MyLinkedHashMap.java
rename to java-collections-maps/src/main/java/com/baeldung/map/MyLinkedHashMap.java
index 1e237580ec..b687e57d85 100644
--- a/java-collections-maps/src/main/java/com/baeldung/java/map/MyLinkedHashMap.java
+++ b/java-collections-maps/src/main/java/com/baeldung/map/MyLinkedHashMap.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.map;
+package com.baeldung.map;
import java.util.LinkedHashMap;
import java.util.Map;
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/ImmutableMapUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java
similarity index 92%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/ImmutableMapUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java
index b239ae07d8..d308aac7eb 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/ImmutableMapUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java
@@ -1,16 +1,13 @@
-package com.baeldung.java.map;
+package com.baeldung.map;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import com.google.common.collect.ImmutableMap;
+import org.junit.jupiter.api.Test;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import org.junit.jupiter.api.Test;
-
-import com.google.common.collect.ImmutableMap;
+import static org.junit.jupiter.api.Assertions.*;
public class ImmutableMapUnitTest {
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/KeyCheckUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/KeyCheckUnitTest.java
similarity index 78%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/KeyCheckUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/KeyCheckUnitTest.java
index 2c97a97690..dbad2e5b5e 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/KeyCheckUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/KeyCheckUnitTest.java
@@ -1,13 +1,11 @@
-package com.baeldung.java.map;
+package com.baeldung.map;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
import java.util.Collections;
import java.util.Map;
-import org.junit.Test;
+import static org.junit.Assert.*;
public class KeyCheckUnitTest {
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/MapMultipleValuesUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/MapMultipleValuesUnitTest.java
similarity index 96%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/MapMultipleValuesUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/MapMultipleValuesUnitTest.java
index 3a0affa6f3..721b48ea7b 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/MapMultipleValuesUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/MapMultipleValuesUnitTest.java
@@ -1,13 +1,9 @@
-package com.baeldung.java.map;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+package com.baeldung.map;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.LinkedHashMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.MultiMapUtils;
import org.apache.commons.collections4.MultiValuedMap;
@@ -18,10 +14,9 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.TreeMultimap;
+import java.util.*;
+
+import static org.assertj.core.api.Assertions.assertThat;
public class MapMultipleValuesUnitTest {
private static final Logger LOG = LoggerFactory.getLogger(MapMultipleValuesUnitTest.class);
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/MapUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/MapUnitTest.java
similarity index 99%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/MapUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/MapUnitTest.java
index 7582eb87fb..eaf68ccba5 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/MapUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/MapUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.map;
+package com.baeldung.map;
import org.junit.Test;
import org.slf4j.Logger;
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/MapUtilUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/MapUtilUnitTest.java
similarity index 99%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/MapUtilUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/MapUtilUnitTest.java
index e31385e972..f8e4c8fd8a 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/MapUtilUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/MapUtilUnitTest.java
@@ -1,9 +1,12 @@
/**
*
*/
-package com.baeldung.java.map;
+package com.baeldung.map;
-import static org.junit.Assert.assertEquals;
+import com.google.common.collect.HashBiMap;
+import org.apache.commons.collections4.BidiMap;
+import org.apache.commons.collections4.bidimap.DualHashBidiMap;
+import org.junit.Test;
import java.util.Arrays;
import java.util.HashMap;
@@ -11,11 +14,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.stream.Collectors;
-import org.apache.commons.collections4.BidiMap;
-import org.apache.commons.collections4.bidimap.DualHashBidiMap;
-import org.junit.Test;
-
-import com.google.common.collect.HashBiMap;
+import static org.junit.Assert.assertEquals;
/**
* @author swpraman
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/MultiValuedMapUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/MultiValuedMapUnitTest.java
similarity index 99%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/MultiValuedMapUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/MultiValuedMapUnitTest.java
index b3aaf8925f..686c1cef87 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/MultiValuedMapUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/MultiValuedMapUnitTest.java
@@ -1,15 +1,4 @@
-package com.baeldung.java.map;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
+package com.baeldung.map;
import org.apache.commons.collections4.MultiMapUtils;
import org.apache.commons.collections4.MultiSet;
@@ -18,6 +7,17 @@ import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
import org.apache.commons.collections4.multimap.HashSetValuedHashMap;
import org.junit.Test;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
public class MultiValuedMapUnitTest {
@Test
diff --git a/java-collections-maps/src/test/java/com/baeldung/java/map/compare/HashMapComparisonUnitTest.java b/java-collections-maps/src/test/java/com/baeldung/map/compare/HashMapComparisonUnitTest.java
similarity index 97%
rename from java-collections-maps/src/test/java/com/baeldung/java/map/compare/HashMapComparisonUnitTest.java
rename to java-collections-maps/src/test/java/com/baeldung/map/compare/HashMapComparisonUnitTest.java
index e8aa12d4bd..0edd0cd87b 100644
--- a/java-collections-maps/src/test/java/com/baeldung/java/map/compare/HashMapComparisonUnitTest.java
+++ b/java-collections-maps/src/test/java/com/baeldung/map/compare/HashMapComparisonUnitTest.java
@@ -1,24 +1,21 @@
-package com.baeldung.java.map.compare;
+package com.baeldung.map.compare;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.collection.IsMapContaining.hasEntry;
-import static org.hamcrest.collection.IsMapContaining.hasKey;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import com.google.common.base.Equivalence;
+import com.google.common.collect.MapDifference;
+import com.google.common.collect.MapDifference.ValueDifference;
+import com.google.common.collect.Maps;
+import org.junit.Before;
+import org.junit.Test;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.base.Equivalence;
-import com.google.common.collect.MapDifference;
-import com.google.common.collect.MapDifference.ValueDifference;
-import com.google.common.collect.Maps;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.collection.IsMapContaining.hasEntry;
+import static org.hamcrest.collection.IsMapContaining.hasKey;
+import static org.junit.Assert.*;
public class HashMapComparisonUnitTest {
diff --git a/logging-modules/flogger/pom.xml b/logging-modules/flogger/pom.xml
index 2b96332bf6..0bba719616 100644
--- a/logging-modules/flogger/pom.xml
+++ b/logging-modules/flogger/pom.xml
@@ -17,11 +17,50 @@
flogger
0.4
+
com.google.flogger
flogger-system-backend
0.4
runtime
+
+
+ com.google.flogger
+ flogger-slf4j-backend
+ 0.4
+
+
+
+ com.google.flogger
+ flogger-log4j-backend
+ 0.4
+
+
+ com.sun.jmx
+ jmxri
+
+
+ com.sun.jdmk
+ jmxtools
+
+
+ javax.jms
+ jms
+
+
+
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+ log4j
+ apache-log4j-extras
+ 1.2.17
+
+
\ No newline at end of file
diff --git a/logging-modules/flogger/src/test/java/com/baeldung/flogger/FloggerIntegrationTest.java b/logging-modules/flogger/src/test/java/com/baeldung/flogger/FloggerIntegrationTest.java
index 69460dc045..80fa0edd96 100644
--- a/logging-modules/flogger/src/test/java/com/baeldung/flogger/FloggerIntegrationTest.java
+++ b/logging-modules/flogger/src/test/java/com/baeldung/flogger/FloggerIntegrationTest.java
@@ -12,6 +12,10 @@ import java.util.stream.IntStream;
import static com.google.common.flogger.LazyArgs.lazy;
public class FloggerIntegrationTest {
+ static {
+// System.setProperty("flogger.backend_factory", "com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance");
+ System.setProperty("flogger.backend_factory", "com.google.common.flogger.backend.slf4j.Slf4jBackendFactory#getInstance");
+ }
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@Test
@@ -28,6 +32,16 @@ public class FloggerIntegrationTest {
});
}
+ @Test
+ public void givenAnObject_shouldLogTheObject() {
+ User user = new User();
+ logger.atInfo().log("The user is: %s", user); //correct
+
+ //The following ways of logging are not recommended
+ logger.atInfo().log("The user is: %s", user.toString());
+ logger.atInfo().log("The user is: %s" + user);
+ }
+
@Test
public void givenASimpleOperation_shouldLogTheResult() {
int result = 45 / 3;
@@ -70,4 +84,13 @@ public class FloggerIntegrationTest {
int s = 30;
return String.format("%d seconds elapsed so far. %d items pending processing", s, items);
}
+
+ private class User {
+ String name = "Test";
+
+ @Override
+ public String toString() {
+ return name;
+ }
+ }
}
diff --git a/pom.xml b/pom.xml
index d44bae0453..6972736288 100644
--- a/pom.xml
+++ b/pom.xml
@@ -407,6 +407,7 @@
core-java-modules/core-java-collections-array-list
core-java-modules/core-java-collections-set
core-java-modules/core-java-concurrency-basic
+ core-java-modules/core-java-concurrency-basic-2
core-java-modules/core-java-concurrency-collections
core-java-modules/core-java-io
core-java-modules/core-java-io-files
@@ -1146,6 +1147,7 @@
core-java-modules/core-java-collections-array-list
core-java-modules/core-java-collections-set
core-java-modules/core-java-concurrency-basic
+ core-java-modules/core-java-concurrency-basic-2
core-java-modules/core-java-concurrency-collections
core-java-modules/core-java-io
core-java-modules/core-java-io-files
diff --git a/spring-5-reactive-2/README.md b/spring-5-reactive-2/README.md
index a8204932f7..1d21425fb8 100644
--- a/spring-5-reactive-2/README.md
+++ b/spring-5-reactive-2/README.md
@@ -3,3 +3,4 @@
This module contains articles about reactive Spring 5
- [Spring WebClient vs. RestTemplate](https://www.baeldung.com/spring-webclient-resttemplate)
+- More articles: [[<-- prev]](/spring-5-reactive)
diff --git a/spring-5-reactive-client/pom.xml b/spring-5-reactive-client/pom.xml
index 70771f6832..9e574b2196 100644
--- a/spring-5-reactive-client/pom.xml
+++ b/spring-5-reactive-client/pom.xml
@@ -54,6 +54,18 @@
org.apache.commons
commons-lang3
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.0.1
+
+
+ com.squareup.okhttp3
+ mockwebserver
+ 4.0.1
+ test
+
@@ -88,14 +100,25 @@
org.projectlombok
lombok
-
-
+
+ org.mockito
+ mockito-junit-jupiter
+ 2.23.0
+ test
+
+
+ io.projectreactor
+ reactor-test
+ 3.2.10.RELEASE
+ test
+
org.eclipse.jetty
jetty-reactive-httpclient
${jetty-reactive-httpclient.version}
test
+
@@ -108,6 +131,29 @@
JAR
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
+
+ maven-surefire-plugin
+ 2.22.0
+
+
+ maven-surefire-plugin
+ 2.19.1
+
+
+ org.junit.platform
+ junit-platform-surefire-provider
+ 1.0.1
+
+
+
diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/enums/Role.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/enums/Role.java
new file mode 100644
index 0000000000..6b11f14734
--- /dev/null
+++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/enums/Role.java
@@ -0,0 +1,5 @@
+package com.baeldung.reactive.enums;
+
+public enum Role {
+ ENGINEER, SENIOR_ENGINEER, LEAD_ENGINEER
+}
diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/model/Employee.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/model/Employee.java
new file mode 100644
index 0000000000..6a8daaf6de
--- /dev/null
+++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/model/Employee.java
@@ -0,0 +1,64 @@
+package com.baeldung.reactive.model;
+
+
+import com.baeldung.reactive.enums.Role;
+
+public class Employee {
+ private Integer employeeId;
+ private String firstName;
+ private String lastName;
+ private Integer age;
+ private Role role;
+
+ public Employee() {
+ }
+
+ public Employee(Integer employeeId, String firstName, String lastName, Integer age, Role role) {
+ this.employeeId = employeeId;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.role = role;
+ }
+
+ public Integer getEmployeeId() {
+ return employeeId;
+ }
+
+ public void setEmployeeId(Integer employeeId) {
+ this.employeeId = employeeId;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public Integer getAge() {
+ return age;
+ }
+
+ public void setAge(Integer age) {
+ this.age = age;
+ }
+
+ public Role getRole() {
+ return role;
+ }
+
+ public void setRole(Role role) {
+ this.role = role;
+ }
+}
+
diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/EmployeeService.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/EmployeeService.java
new file mode 100644
index 0000000000..b841dbfe3f
--- /dev/null
+++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/EmployeeService.java
@@ -0,0 +1,55 @@
+package com.baeldung.reactive.service;
+import com.baeldung.reactive.model.Employee;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+
+public class EmployeeService {
+
+ private WebClient webClient;
+ public static String PATH_PARAM_BY_ID = "/employee/{id}";
+ public static String ADD_EMPLOYEE = "/employee";
+
+ public EmployeeService(WebClient webClient) {
+ this.webClient = webClient;
+ }
+
+ public EmployeeService(String baseUrl) {
+ this.webClient = WebClient.create(baseUrl);
+ }
+
+ public Mono getEmployeeById(Integer employeeId) {
+ return webClient
+ .get()
+ .uri(PATH_PARAM_BY_ID, employeeId)
+ .retrieve()
+ .bodyToMono(Employee.class);
+ }
+
+ public Mono addNewEmployee(Employee newEmployee) {
+
+ return webClient
+ .post()
+ .uri(ADD_EMPLOYEE)
+ .syncBody(newEmployee)
+ .retrieve().
+ bodyToMono(Employee.class);
+ }
+
+ public Mono updateEmployee(Integer employeeId, Employee updateEmployee) {
+
+ return webClient
+ .put()
+ .uri(PATH_PARAM_BY_ID,employeeId)
+ .syncBody(updateEmployee)
+ .retrieve()
+ .bodyToMono(Employee.class);
+ }
+
+ public Mono deleteEmployeeById(Integer employeeId) {
+ return webClient
+ .delete()
+ .uri(PATH_PARAM_BY_ID,employeeId)
+ .retrieve()
+ .bodyToMono(String.class);
+ }
+}
diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceIntegrationTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceIntegrationTest.java
new file mode 100644
index 0000000000..f5d9529ada
--- /dev/null
+++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceIntegrationTest.java
@@ -0,0 +1,121 @@
+package com.baeldung.reactive.service;
+
+import com.baeldung.reactive.model.Employee;
+import com.baeldung.reactive.enums.Role;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
+import org.junit.Rule;
+import org.junit.jupiter.api.*;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class EmployeeServiceIntegrationTest {
+
+ public static MockWebServer mockBackEnd;
+ private EmployeeService employeeService;
+ private ObjectMapper MAPPER = new ObjectMapper();
+
+ @BeforeAll
+ static void setUp() throws IOException {
+ mockBackEnd = new MockWebServer();
+ mockBackEnd.start();
+ }
+
+ @AfterAll
+ static void tearDown() throws IOException {
+ mockBackEnd.shutdown();
+ }
+
+ @BeforeEach
+ void initialize() {
+
+ String baseUrl = String.format("http://localhost:%s", mockBackEnd.getPort());
+ employeeService = new EmployeeService(baseUrl);
+ }
+
+ @Test
+ void getEmployeeById() throws Exception {
+
+ Employee mockEmployee = new Employee(100, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ mockBackEnd.enqueue(new MockResponse().setBody(MAPPER.writeValueAsString(mockEmployee))
+ .addHeader("Content-Type", "application/json"));
+
+ Mono employeeMono = employeeService.getEmployeeById(100);
+
+ StepVerifier.create(employeeMono)
+ .expectNextMatches(employee -> employee.getRole().equals(Role.LEAD_ENGINEER))
+ .verifyComplete();
+
+ RecordedRequest recordedRequest = mockBackEnd.takeRequest();
+ assertEquals("GET", recordedRequest.getMethod());
+ assertEquals("/employee/100", recordedRequest.getPath());
+ }
+
+ @Test
+ void addNewEmployee() throws Exception {
+
+ Employee newEmployee = new Employee(null, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ Employee webClientResponse = new Employee(100, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ mockBackEnd.enqueue(new MockResponse().setBody(MAPPER.writeValueAsString(webClientResponse))
+ .addHeader("Content-Type", "application/json"));
+
+ Mono employeeMono = employeeService.addNewEmployee(newEmployee);
+
+ StepVerifier.create(employeeMono)
+ .expectNextMatches(employee -> employee.getEmployeeId().equals(100))
+ .verifyComplete();
+
+ RecordedRequest recordedRequest = mockBackEnd.takeRequest();
+ assertEquals("POST", recordedRequest.getMethod());
+ assertEquals("/employee", recordedRequest.getPath());
+ }
+
+ @Test
+ void updateEmployee() throws Exception {
+
+ Integer newAge = 33;
+ String newLastName = "Sandler New";
+ Employee updateEmployee = new Employee(100, "Adam", newLastName, newAge, Role.LEAD_ENGINEER);
+ mockBackEnd.enqueue(new MockResponse().setBody(MAPPER.writeValueAsString(updateEmployee))
+ .addHeader("Content-Type", "application/json"));
+
+ Mono updatedEmploye = employeeService.updateEmployee(100, updateEmployee);
+
+ StepVerifier.create(updatedEmploye)
+ .expectNextMatches(employee -> employee.getLastName().equals(newLastName) && employee.getAge() == newAge)
+ .verifyComplete();
+
+ RecordedRequest recordedRequest = mockBackEnd.takeRequest();
+ assertEquals("PUT", recordedRequest.getMethod());
+ assertEquals("/employee/100", recordedRequest.getPath());
+
+ }
+
+
+ @Test
+ void deleteEmployee() throws Exception {
+
+ String responseMessage = "Employee Deleted SuccessFully";
+ Integer employeeId = 100;
+ mockBackEnd.enqueue(new MockResponse().setBody(MAPPER.writeValueAsString(responseMessage))
+ .addHeader("Content-Type", "application/json"));
+
+ Mono deletedEmployee = employeeService.deleteEmployeeById(employeeId);
+
+ StepVerifier.create(deletedEmployee)
+ .expectNext("\"Employee Deleted SuccessFully\"")
+ .verifyComplete();
+
+ RecordedRequest recordedRequest = mockBackEnd.takeRequest();
+ assertEquals("DELETE", recordedRequest.getMethod());
+ assertEquals("/employee/100", recordedRequest.getPath());
+ }
+
+}
\ No newline at end of file
diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceUnitTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceUnitTest.java
new file mode 100644
index 0000000000..1d1a8fd2e4
--- /dev/null
+++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/EmployeeServiceUnitTest.java
@@ -0,0 +1,114 @@
+package com.baeldung.reactive.service;
+
+
+import com.baeldung.reactive.model.Employee;
+import com.baeldung.reactive.enums.Role;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.exceptions.base.MockitoException;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class EmployeeServiceUnitTest {
+
+ EmployeeService employeeService;
+ @Mock
+ private WebClient webClientMock;
+ @Mock
+ private WebClient.RequestHeadersSpec requestHeadersMock;
+ @Mock
+ private WebClient.RequestHeadersUriSpec requestHeadersUriMock;
+ @Mock
+ private WebClient.RequestBodySpec requestBodyMock;
+ @Mock
+ private WebClient.RequestBodyUriSpec requestBodyUriMock;
+ @Mock
+ private WebClient.ResponseSpec responseMock;
+
+ @BeforeEach
+ void setUp() {
+ employeeService = new EmployeeService(webClientMock);
+ }
+
+ @Test
+ void givenEmployeeId_whenGetEmployeeById_thenReturnEmployee() {
+
+ Integer employeeId = 100;
+ Employee mockEmployee = new Employee(100, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ when(webClientMock.get()).thenReturn(requestHeadersUriMock);
+ when(requestHeadersUriMock.uri("/employee/{id}", employeeId)).thenReturn(requestHeadersMock);
+ when(requestHeadersMock.retrieve()).thenReturn(responseMock);
+ when(responseMock.bodyToMono(Employee.class)).thenReturn(Mono.just(mockEmployee));
+
+ Mono employeeMono = employeeService.getEmployeeById(employeeId);
+
+ StepVerifier.create(employeeMono)
+ .expectNextMatches(employee -> employee.getRole().equals(Role.LEAD_ENGINEER))
+ .verifyComplete();
+ }
+
+ @Test
+ void givenEmployee_whenAddEmployee_thenAddNewEmployee() {
+
+ Employee newEmployee = new Employee(null, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ Employee webClientResponse = new Employee(100, "Adam", "Sandler", 32, Role.LEAD_ENGINEER);
+ when(webClientMock.post()).thenReturn(requestBodyUriMock);
+ when(requestBodyUriMock.uri(EmployeeService.ADD_EMPLOYEE)).thenReturn(requestBodyMock);
+ when(requestBodyMock.syncBody(newEmployee)).thenReturn(requestHeadersMock);
+ when(requestHeadersMock.retrieve()).thenReturn(responseMock);
+ when(responseMock.bodyToMono(Employee.class)).thenReturn(Mono.just(webClientResponse));
+
+ Mono employeeMono = employeeService.addNewEmployee(newEmployee);
+
+ StepVerifier.create(employeeMono)
+ .expectNextMatches(employee -> employee.getEmployeeId().equals(100))
+ .verifyComplete();
+ }
+
+ @Test
+ void givenEmployee_whenupdateEmployee_thenUpdatedEmployee() {
+
+ Integer newAge = 33;
+ String newLastName = "Sandler New";
+ Employee updateEmployee = new Employee(100, "Adam", newLastName, newAge, Role.LEAD_ENGINEER);
+ when(webClientMock.put()).thenReturn(requestBodyUriMock);
+ when(requestBodyUriMock.uri(EmployeeService.PATH_PARAM_BY_ID, 100)).thenReturn(requestBodyMock);
+ when(requestBodyMock.syncBody(updateEmployee)).thenReturn(requestHeadersMock);
+ when(requestHeadersMock.retrieve()).thenReturn(responseMock);
+ when(responseMock.bodyToMono(Employee.class)).thenReturn(Mono.just(updateEmployee));
+
+ Mono updatedEmployee = employeeService.updateEmployee(100, updateEmployee);
+
+ StepVerifier.create(updatedEmployee)
+ .expectNextMatches(employee -> employee.getLastName().equals(newLastName) && employee.getAge() == newAge)
+ .verifyComplete();
+
+ }
+
+ @Test
+ void givenEmployee_whenDeleteEmployeeById_thenDeleteSuccessful() {
+
+ String responseMessage = "Employee Deleted SuccessFully";
+ when(webClientMock.delete()).thenReturn(requestHeadersUriMock);
+ when(requestHeadersUriMock.uri(EmployeeService.PATH_PARAM_BY_ID, 100)).thenReturn(requestHeadersMock);
+ when(requestHeadersMock.retrieve()).thenReturn(responseMock);
+ when(responseMock.bodyToMono(String.class)).thenReturn(Mono.just(responseMessage));
+
+ Mono deletedEmployee = employeeService.deleteEmployeeById(100);
+
+ StepVerifier.create(deletedEmployee)
+ .expectNext(responseMessage)
+ .verifyComplete();
+ }
+}
\ No newline at end of file
diff --git a/spring-5-reactive/README.md b/spring-5-reactive/README.md
index b782f817ad..89ff4fea9f 100644
--- a/spring-5-reactive/README.md
+++ b/spring-5-reactive/README.md
@@ -22,4 +22,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Testing Reactive Streams Using StepVerifier and TestPublisher](https://www.baeldung.com/reactive-streams-step-verifier-test-publisher)
- [Debugging Reactive Streams in Spring 5](https://www.baeldung.com/spring-debugging-reactive-streams)
- [Static Content in Spring WebFlux](https://www.baeldung.com/spring-webflux-static-content)
-- [more...](/spring-5-reactive-2)
+- More articles: [[next -->]](/spring-5-reactive-2)
\ No newline at end of file
diff --git a/spring-boot-admin/spring-boot-admin-client/src/test/java/com/baeldung/springbootadminclient/SpringBootAdminClientApplicationIntegrationTest.java b/spring-boot-admin/spring-boot-admin-client/src/test/java/com/baeldung/springbootadminclient/SpringBootAdminClientApplicationIntegrationTest.java
index 0201deabca..f9e969c06a 100644
--- a/spring-boot-admin/spring-boot-admin-client/src/test/java/com/baeldung/springbootadminclient/SpringBootAdminClientApplicationIntegrationTest.java
+++ b/spring-boot-admin/spring-boot-admin-client/src/test/java/com/baeldung/springbootadminclient/SpringBootAdminClientApplicationIntegrationTest.java
@@ -15,7 +15,7 @@ import static org.junit.Assert.assertEquals;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@@ -36,20 +36,20 @@ public class SpringBootAdminClientApplicationIntegrationTest {
@Test
public void whenEnvironmentAvailable_ThenAdminServerPropertiesExist() {
- assertEquals(environment.getProperty("spring.boot.admin.url"), "http://localhost:8080");
- assertEquals(environment.getProperty("spring.boot.admin.username"), "admin");
- assertEquals(environment.getProperty("spring.boot.admin.password"), "admin");
+ assertEquals(environment.getProperty("spring.boot.admin.client.url"), "http://localhost:8080");
+ assertEquals(environment.getProperty("spring.boot.admin.client.username"), "admin");
+ assertEquals(environment.getProperty("spring.boot.admin.client.password"), "admin");
}
@Test
public void whenHttpBasicAttempted_ThenSuccess() throws Exception {
- mockMvc.perform(get("/env").with(httpBasic("client", "client")));
+ mockMvc.perform(get("/actuator/env").with(httpBasic("client", "client")));
}
@Test
public void whenInvalidHttpBasicAttempted_ThenUnauthorized() throws Exception {
mockMvc
- .perform(get("/env").with(httpBasic("client", "invalid")))
- .andExpect(status().isUnauthorized());
+ .perform(get("/actuator/env").with(httpBasic("client", "invalid")))
+ .andExpect(unauthenticated());
}
}
diff --git a/spring-boot-admin/spring-boot-admin-server/pom.xml b/spring-boot-admin/spring-boot-admin-server/pom.xml
index 142cf420f4..5ef99976c8 100644
--- a/spring-boot-admin/spring-boot-admin-server/pom.xml
+++ b/spring-boot-admin/spring-boot-admin-server/pom.xml
@@ -51,10 +51,12 @@
${spring-boot-admin-starter-client.version}
-
-
-
-
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java
index d43f4b430a..f9abee11b7 100644
--- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java
+++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java
@@ -1,32 +1,40 @@
package com.baeldung.springbootadminserver.configs;
import java.time.Duration;
+import java.util.Collections;
+import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
+import de.codecentric.boot.admin.server.notify.CompositeNotifier;
import de.codecentric.boot.admin.server.notify.LoggingNotifier;
+import de.codecentric.boot.admin.server.notify.Notifier;
import de.codecentric.boot.admin.server.notify.RemindingNotifier;
import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier;
@Configuration
public class NotifierConfiguration {
- @Autowired
- private InstanceRepository repository;
+ private final InstanceRepository repository;
+ private final ObjectProvider> otherNotifiers;
- // @Autowired private Notifier notifier;
-
- @Bean
- public LoggingNotifier notifier() {
- return new LoggingNotifier(repository);
+ public NotifierConfiguration(InstanceRepository repository, ObjectProvider> otherNotifiers) {
+ this.repository = repository;
+ this.otherNotifiers = otherNotifiers;
}
@Bean
public FilteringNotifier filteringNotifier() {
- return new FilteringNotifier(notifier(), repository);
+ CompositeNotifier delegate = new CompositeNotifier(this.otherNotifiers.getIfAvailable(Collections::emptyList));
+ return new FilteringNotifier(delegate, this.repository);
+ }
+
+ @Bean
+ public LoggingNotifier notifier() {
+ return new LoggingNotifier(repository);
}
@Primary
diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java
index ee37d2f0b3..1943c61ff4 100644
--- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java
+++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java
@@ -5,6 +5,7 @@ import java.util.UUID;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
@@ -13,6 +14,7 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import de.codecentric.boot.admin.server.config.AdminServerProperties;
@Configuration
+@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final AdminServerProperties adminServer;
diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties b/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties
index ba7a7de2a0..273c11468c 100644
--- a/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties
+++ b/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties
@@ -16,14 +16,14 @@ management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
#mail notifications
-#spring.mail.host=smtp.gmail.com
-#spring.mail.username=test@gmail.com
-#spring.mail.password=password
-#spring.mail.port=587
-#spring.mail.properties.mail.smtp.auth=true
-#spring.mail.properties.mail.smtp.starttls.enable=true
+spring.mail.host=
+spring.mail.username=
+spring.mail.password=
+spring.mail.port=
+spring.mail.properties.mail.smtp.auth=
+spring.mail.properties.mail.smtp.starttls.enable=
-#spring.boot.admin.notify.mail.to=test@gmail.com
+spring.boot.admin.notify.mail.to=
#hipchat notifications
#spring.boot.admin.notify.hipchat.auth-token=
diff --git a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java
index fc8acc4e4d..eca83b6f6c 100644
--- a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java
+++ b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java
@@ -1,10 +1,7 @@
package com.baeldung.springbootadminserver;
-import com.baeldung.springbootadminserver.configs.NotifierConfiguration;
-
-import de.codecentric.boot.admin.server.notify.Notifier;
-import de.codecentric.boot.admin.server.notify.RemindingNotifier;
-import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier;
+import static org.junit.Assert.assertNotEquals;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -13,11 +10,14 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
-import static org.junit.Assert.assertNotEquals;
-import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
+import com.baeldung.springbootadminserver.configs.NotifierConfiguration;
+
+import de.codecentric.boot.admin.server.notify.Notifier;
+import de.codecentric.boot.admin.server.notify.RemindingNotifier;
+import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = { NotifierConfiguration.class }, webEnvironment = NONE)
+@SpringBootTest(classes = { NotifierConfiguration.class, SpringBootAdminServerApplication.class }, webEnvironment = NONE)
public class NotifierConfigurationIntegrationTest {
@Autowired private ApplicationContext applicationContext;
diff --git a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/WebSecurityConfigIntegrationTest.java b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/WebSecurityConfigIntegrationTest.java
index 0c0695e6c2..e5018f5f5f 100644
--- a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/WebSecurityConfigIntegrationTest.java
+++ b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/WebSecurityConfigIntegrationTest.java
@@ -14,6 +14,7 @@ import static org.springframework.security.test.web.servlet.request.SecurityMock
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@@ -51,21 +52,21 @@ public class WebSecurityConfigIntegrationTest {
.password("admin"));
mockMvc
- .perform(get("/api/applications/"))
+ .perform(get("/applications/"))
.andExpect(status().is2xxSuccessful());
}
@Test
public void whenHttpBasicAttempted_ThenSuccess() throws Exception {
- mockMvc.perform(get("/env").with(httpBasic("admin", "admin")));
+ mockMvc.perform(get("/actuator/env").with(httpBasic("admin", "admin")));
}
@Test
public void whenInvalidHttpBasicAttempted_ThenUnauthorized() throws Exception {
mockMvc
- .perform(get("/env").with(httpBasic("admin", "invalid")))
- .andExpect(status().isUnauthorized());
+ .perform(get("/actuator/env").with(httpBasic("admin", "invalid")))
+ .andExpect(unauthenticated());
}
}
diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index 28dbc9a8d8..0000000000
--- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.baeldung.spring.cloud.DataFlowShellApplication;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = DataFlowShellApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void contextLoads() {
- }
-
-}
diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java
index 5be4f9c077..1784eb772a 100644
--- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java
@@ -6,6 +6,15 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+/**
+ * This live test requires:
+ * complete data-flow server and shell setup running
+ *
+ *
+ * For more info:
+ * https://www.baeldung.com/spring-cloud-data-flow-stream-processing
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DataFlowShellApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java
index a3cbb3310d..a5c6ab612a 100644
--- a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java
+++ b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java
@@ -5,6 +5,15 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+/**
+ * This live test requires:
+ * Eureka server and Gateway application up and running
+ *
+ *
+ * For more info:
+ * https://www.baeldung.com/spring-cloud-netflix-eureka
+ * https://www.baeldung.com/spring-cloud-gateway-pattern
+ */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringContextLiveTest {
diff --git a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextIntegrationTest.java b/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextIntegrationTest.java
deleted file mode 100644
index e1eb2f8e24..0000000000
--- a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.baeldung.spring.cloud.vaultsample;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = VaultSampleApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java b/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java
index 3be4d96964..82fe3d7a4a 100644
--- a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java
+++ b/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java
@@ -5,6 +5,15 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+/**
+ * This live test requires:
+ * vault server up and running on the environment
+ *
+ *
+ * For more info on setting up the vault server:
+ * https://www.baeldung.com/vault
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = VaultSampleApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-core/src/main/resources/factorybean-abstract-spring-ctx.xml b/spring-core-2/src/main/resources/factorybean-abstract-spring-ctx.xml
similarity index 100%
rename from spring-core/src/main/resources/factorybean-abstract-spring-ctx.xml
rename to spring-core-2/src/main/resources/factorybean-abstract-spring-ctx.xml
diff --git a/spring-core/src/main/resources/factorybean-spring-ctx.xml b/spring-core-2/src/main/resources/factorybean-spring-ctx.xml
similarity index 100%
rename from spring-core/src/main/resources/factorybean-spring-ctx.xml
rename to spring-core-2/src/main/resources/factorybean-spring-ctx.xml
diff --git a/spring-core/src/test/resources/beanfactory-example.xml b/spring-core-2/src/test/resources/beanfactory-example.xml
similarity index 100%
rename from spring-core/src/test/resources/beanfactory-example.xml
rename to spring-core-2/src/test/resources/beanfactory-example.xml
diff --git a/spring-di/src/main/java/com/baeldung/sample/AppConfig.java b/spring-di/src/main/java/com/baeldung/sample/AppConfig.java
index c948011c69..d13023d89e 100644
--- a/spring-di/src/main/java/com/baeldung/sample/AppConfig.java
+++ b/spring-di/src/main/java/com/baeldung/sample/AppConfig.java
@@ -4,7 +4,7 @@ import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
-@ComponentScan("org.baeldung.sample")
+@ComponentScan("com.baeldung.sample")
public class AppConfig {
}
diff --git a/spring-jenkins-pipeline/src/test/resources/application.properties b/spring-jenkins-pipeline/src/test/resources/application.properties
new file mode 100644
index 0000000000..4ee830556a
--- /dev/null
+++ b/spring-jenkins-pipeline/src/test/resources/application.properties
@@ -0,0 +1,2 @@
+#To use a randomly allocated free port during tests to avoid port conflict across tests
+spring.data.mongodb.port=0
diff --git a/spring-jms/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-jms/src/test/java/org/baeldung/SpringContextIntegrationTest.java
index e13809f571..483ffec208 100644
--- a/spring-jms/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ b/spring-jms/src/test/java/org/baeldung/SpringContextIntegrationTest.java
@@ -6,7 +6,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {"classpath:applicationContext.xml", "classpath:EmbeddedActiveMQ.xml"})
+@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class SpringContextIntegrationTest {
@Test
diff --git a/spring-jms/src/test/java/org/baeldung/SpringContextTest.java b/spring-jms/src/test/java/org/baeldung/SpringContextTest.java
index e89faeebb7..11c9d9bca6 100644
--- a/spring-jms/src/test/java/org/baeldung/SpringContextTest.java
+++ b/spring-jms/src/test/java/org/baeldung/SpringContextTest.java
@@ -6,7 +6,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {"classpath:applicationContext.xml", "classpath:EmbeddedActiveMQ.xml"})
+@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class SpringContextTest {
@Test
diff --git a/spring-jooq/src/test/resources/application.properties b/spring-jooq/src/test/resources/application.properties
new file mode 100644
index 0000000000..dc5d81acfb
--- /dev/null
+++ b/spring-jooq/src/test/resources/application.properties
@@ -0,0 +1,2 @@
+spring.datasource.url=jdbc:h2:tcp:~/jooq;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE
+spring.jpa.hibernate.ddl-auto=update
diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/MyMessageInterpolator.java b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/MyMessageInterpolator.java
new file mode 100644
index 0000000000..efa3d62b88
--- /dev/null
+++ b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/MyMessageInterpolator.java
@@ -0,0 +1,29 @@
+package com.baeldung.interpolation;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.validation.MessageInterpolator;
+import java.util.Locale;
+
+public class MyMessageInterpolator implements MessageInterpolator {
+
+ private static Logger logger = LoggerFactory.getLogger(MyMessageInterpolator.class);
+
+ private final MessageInterpolator defaultInterpolator;
+
+ public MyMessageInterpolator(MessageInterpolator interpolator) {
+ this.defaultInterpolator = interpolator;
+ }
+
+ @Override
+ public String interpolate(String messageTemplate, Context context) {
+ messageTemplate = messageTemplate.toUpperCase();
+ return defaultInterpolator.interpolate(messageTemplate, context, Locale.getDefault());
+ }
+
+ @Override
+ public String interpolate(String messageTemplate, Context context, Locale locale) {
+ messageTemplate = messageTemplate.toUpperCase();
+ return defaultInterpolator.interpolate(messageTemplate, context, locale);
+ }
+}
diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/NotNullRequest.java b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/NotNullRequest.java
new file mode 100644
index 0000000000..9a2b00be8f
--- /dev/null
+++ b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/NotNullRequest.java
@@ -0,0 +1,17 @@
+package com.baeldung.interpolation;
+
+import javax.validation.constraints.NotNull;
+
+public class NotNullRequest {
+
+ @NotNull(message = "stringValue has to be present")
+ private String stringValue;
+
+ public String getStringValue() {
+ return stringValue;
+ }
+
+ public void setStringValue(String stringValue) {
+ this.stringValue = stringValue;
+ }
+}
diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationController.java b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationController.java
new file mode 100644
index 0000000000..3fed170fdf
--- /dev/null
+++ b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationController.java
@@ -0,0 +1,15 @@
+package com.baeldung.interpolation;
+
+import javax.validation.Valid;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class ValidationController {
+
+ @PostMapping("/test-not-null")
+ public void testNotNull(@Valid @RequestBody NotNullRequest request) {
+
+ }
+}
diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationExamples.java b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationExamples.java
new file mode 100644
index 0000000000..6c9b924200
--- /dev/null
+++ b/spring-mvc-simple-2/src/main/java/com/baeldung/interpolation/ValidationExamples.java
@@ -0,0 +1,31 @@
+package com.baeldung.interpolation;
+
+import java.util.Formatter;
+import javax.validation.constraints.Size;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.DecimalMin;
+
+public class ValidationExamples {
+
+ private static final Formatter formatter = new Formatter();
+
+ @Size(
+ min = 5,
+ max = 14,
+ message = "The author email '${validatedValue}' must be between {min} and {max} characters long"
+ )
+ private String authorEmail;
+
+ @Min(
+ value = 1,
+ message = "There must be at least {value} test{value > 1 ? 's' : ''} in the test case"
+ )
+ private int testCount;
+
+ @DecimalMin(
+ value = "50",
+ message = "The code coverage ${formatter.format('%1$.2f', validatedValue)} must be higher than {value}%"
+ )
+ private double codeCoverage;
+
+}
diff --git a/spring-reactive-kotlin/README.md b/spring-reactive-kotlin/README.md
index cf5debc617..46f4b580fd 100644
--- a/spring-reactive-kotlin/README.md
+++ b/spring-reactive-kotlin/README.md
@@ -1,2 +1,6 @@
+## Spring Reactive Kotlin
+
+This module contains articles about reactive Kotlin
+
### Relevant Articles:
- [Spring Webflux with Kotlin](http://www.baeldung.com/spring-webflux-kotlin)
diff --git a/spring-reactor/README.md b/spring-reactor/README.md
index 0da2d6be51..e7d7eb927d 100644
--- a/spring-reactor/README.md
+++ b/spring-reactor/README.md
@@ -1,3 +1,7 @@
+## Spring Reactor
+
+This module contains articles about Spring Reactor
+
## Relevant articles:
- [Introduction to Spring Reactor](http://www.baeldung.com/spring-reactor)
diff --git a/spring-remoting/README.md b/spring-remoting/README.md
index 0898b9b002..247aa52db2 100644
--- a/spring-remoting/README.md
+++ b/spring-remoting/README.md
@@ -1,4 +1,6 @@
-## Spring Remoting Tutorials
+## Spring Remoting
+
+This module contains articles about Spring Remoting
### Relevant Articles
- [Intro to Spring Remoting with HTTP Invokers](http://www.baeldung.com/spring-remoting-http-invoker)
diff --git a/spring-rest-angular/README.md b/spring-rest-angular/README.md
index d2c2879649..5cd2570152 100644
--- a/spring-rest-angular/README.md
+++ b/spring-rest-angular/README.md
@@ -1,4 +1,6 @@
-## Spring REST Angular Example Project
+## Spring REST Angular
+
+This module contains articles about REST APIs with Spring and Angular
### Relevant Articles:
diff --git a/spring-rest-angular/src/main/java/org/baeldung/web/main/PersistenceConfig.java b/spring-rest-angular/src/main/java/org/baeldung/web/main/PersistenceConfig.java
index e0f6002733..0fc6b74892 100644
--- a/spring-rest-angular/src/main/java/org/baeldung/web/main/PersistenceConfig.java
+++ b/spring-rest-angular/src/main/java/org/baeldung/web/main/PersistenceConfig.java
@@ -26,7 +26,7 @@ public class PersistenceConfig {
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
- EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.HSQL).addScript("db/sql/data.sql").build();
+ EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.HSQL).build();
return db;
}
diff --git a/spring-rest-angular/src/main/resources/application.properties b/spring-rest-angular/src/main/resources/application.properties
index 2571d286a3..cfa27938c9 100644
--- a/spring-rest-angular/src/main/resources/application.properties
+++ b/spring-rest-angular/src/main/resources/application.properties
@@ -1,4 +1,5 @@
server.servlet.contextPath=/
spring.h2.console.enabled=true
logging.level.org.hibernate.SQL=info
-spring.jpa.hibernate.ddl-auto=none
\ No newline at end of file
+spring.jpa.generate-ddl=true
+spring.jpa.hibernate.ddl-auto=create
\ No newline at end of file
diff --git a/spring-rest-angular/src/main/resources/db/sql/data.sql b/spring-rest-angular/src/main/resources/data.sql
similarity index 90%
rename from spring-rest-angular/src/main/resources/db/sql/data.sql
rename to spring-rest-angular/src/main/resources/data.sql
index 418381a681..71e54b29ce 100644
--- a/spring-rest-angular/src/main/resources/db/sql/data.sql
+++ b/spring-rest-angular/src/main/resources/data.sql
@@ -1,10 +1,3 @@
-CREATE TABLE student (
- id INTEGER PRIMARY KEY,
- name VARCHAR(30),
- gender VARCHAR(10),
- age INTEGER
-);
-
INSERT INTO student (id,name,gender,age)
VALUES (1,'Bryan', 'Male',20);
INSERT INTO student (id,name,gender,age)
diff --git a/spring-rest-compress/README.md b/spring-rest-compress/README.md
index 238c28e4b5..ce627d8595 100644
--- a/spring-rest-compress/README.md
+++ b/spring-rest-compress/README.md
@@ -1,5 +1,6 @@
-=========================================================================
-## How to compress requests using the Spring RestTemplate Example Project
+## Spring REST Compress
+
+This module contains articles about request compression with Spring
### Relevant Articles:
-- [How to compress requests using the Spring RestTemplate]()
+- [How to compress requests using the Spring RestTemplate](https://www.baeldung.com/spring-resttemplate-compressing-requests)
diff --git a/spring-rest-full/README.md b/spring-rest-full/README.md
index b7b006d75e..a0e6e74179 100644
--- a/spring-rest-full/README.md
+++ b/spring-rest-full/README.md
@@ -1,8 +1,9 @@
-=========
+## Spring REST Full
-## REST Example Project with Spring
+This module contains articles about REST APIs with Spring
### Courses
+
The "REST With Spring" Classes: http://bit.ly/restwithspring
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
diff --git a/spring-rest-hal-browser/README.md b/spring-rest-hal-browser/README.md
index d9760c8295..027937f116 100644
--- a/spring-rest-hal-browser/README.md
+++ b/spring-rest-hal-browser/README.md
@@ -1,2 +1,6 @@
+## Spring REST HAL Browser
+
+This module contains articles about Spring REST with the HAL browser
+
### Relevant Articles:
- [Spring REST and HAL Browser](http://www.baeldung.com/spring-rest-hal)
diff --git a/spring-rest-query-language/README.md b/spring-rest-query-language/README.md
index 7677f96379..383cecec36 100644
--- a/spring-rest-query-language/README.md
+++ b/spring-rest-query-language/README.md
@@ -1,8 +1,9 @@
-=========
+## Spring REST Query Language
-## REST Example Project Query Language
+This module contains articles about the REST query language with Spring
### Courses
+
The "REST With Spring" Classes: http://bit.ly/restwithspring
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
@@ -16,15 +17,11 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
- [REST Query Language with RSQL](http://www.baeldung.com/rest-api-search-language-rsql-fiql)
- [REST Query Language – Implementing OR Operation](http://www.baeldung.com/rest-api-query-search-or-operation)
-
-
-
### Build the Project
```
mvn clean install
```
-
### Set up MySQL
```
mysql -u root -p
diff --git a/spring-rest-shell/README.md b/spring-rest-shell/README.md
index b250f06a4b..0b126e6b1c 100644
--- a/spring-rest-shell/README.md
+++ b/spring-rest-shell/README.md
@@ -1,4 +1,6 @@
-## Spring REST Shell Project
+## Spring REST Shell
+
+This module contains articles about Spring REST Shell
### Relevant Articles
diff --git a/spring-rest-simple/README.md b/spring-rest-simple/README.md
index c01f27bd98..d60f57b227 100644
--- a/spring-rest-simple/README.md
+++ b/spring-rest-simple/README.md
@@ -1,3 +1,7 @@
+## Spring REST Simple
+
+This module contains articles about REST APIs in Spring
+
## Relevant articles:
- [Guide to UriComponentsBuilder in Spring](http://www.baeldung.com/spring-uricomponentsbuilder)
diff --git a/spring-rest-simple/src/main/java/com/baeldung/Application.java b/spring-rest-simple/src/main/java/com/baeldung/Application.java
index dc6bfcb970..f4147568ce 100644
--- a/spring-rest-simple/src/main/java/com/baeldung/Application.java
+++ b/spring-rest-simple/src/main/java/com/baeldung/Application.java
@@ -4,11 +4,9 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.ComponentScan;
@EnableAutoConfiguration
@SpringBootApplication
-@ComponentScan("com.baeldung.cors")
public class Application extends SpringBootServletInitializer {
public static void main(final String[] args) {
diff --git a/spring-rest-simple/src/main/java/com/baeldung/config/MvcConfig.java b/spring-rest-simple/src/main/java/com/baeldung/config/MvcConfig.java
index 48b627a344..246049b722 100644
--- a/spring-rest-simple/src/main/java/com/baeldung/config/MvcConfig.java
+++ b/spring-rest-simple/src/main/java/com/baeldung/config/MvcConfig.java
@@ -2,6 +2,7 @@ package com.baeldung.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
@@ -17,6 +18,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.baeldung.config.converter.KryoHttpMessageConverter;
+import com.baeldung.config.converter.StringToEnumConverter;
import java.text.SimpleDateFormat;
import java.util.List;
@@ -71,4 +73,9 @@ public class MvcConfig implements WebMvcConfigurer {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
+
+ @Override
+ public void addFormatters(FormatterRegistry registry) {
+ registry.addConverter(new StringToEnumConverter());
+ }
}
diff --git a/spring-rest-simple/src/main/java/com/baeldung/config/converter/StringToEnumConverter.java b/spring-rest-simple/src/main/java/com/baeldung/config/converter/StringToEnumConverter.java
new file mode 100644
index 0000000000..349ee5a796
--- /dev/null
+++ b/spring-rest-simple/src/main/java/com/baeldung/config/converter/StringToEnumConverter.java
@@ -0,0 +1,20 @@
+package com.baeldung.config.converter;
+
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.stereotype.Component;
+
+import com.baeldung.model.Modes;
+
+@Component
+public class StringToEnumConverter implements Converter {
+ @Override
+ public Modes convert(String source) {
+ // Remove the try-catch block if we want to handle the exception globally in GlobalControllerExceptionHandler
+ try {
+ return Modes.valueOf(source.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+
+ }
+}
diff --git a/spring-rest-simple/src/main/java/com/baeldung/cors/EnumController.java b/spring-rest-simple/src/main/java/com/baeldung/cors/EnumController.java
new file mode 100644
index 0000000000..6bd5a16439
--- /dev/null
+++ b/spring-rest-simple/src/main/java/com/baeldung/cors/EnumController.java
@@ -0,0 +1,25 @@
+package com.baeldung.cors;
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.model.Modes;
+
+@CrossOrigin(maxAge = 3600)
+@RestController
+@RequestMapping("/enums")
+public class EnumController {
+
+ @RequestMapping("/mode2str")
+ public String getStringToMode(@RequestParam("mode") Modes mode) {
+ return "good";
+ }
+
+ @RequestMapping("/findbymode/{mode}")
+ public String findByEnum(@PathVariable Modes mode) {
+ return "good";
+ }
+}
\ No newline at end of file
diff --git a/spring-rest-simple/src/main/java/com/baeldung/exceptions/GlobalControllerExceptionHandler.java b/spring-rest-simple/src/main/java/com/baeldung/exceptions/GlobalControllerExceptionHandler.java
new file mode 100644
index 0000000000..78fbcf97dd
--- /dev/null
+++ b/spring-rest-simple/src/main/java/com/baeldung/exceptions/GlobalControllerExceptionHandler.java
@@ -0,0 +1,16 @@
+package com.baeldung.exceptions;
+
+import org.springframework.core.convert.ConversionFailedException;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class GlobalControllerExceptionHandler {
+ @ExceptionHandler(ConversionFailedException.class)
+ public ResponseEntity handleConflict(RuntimeException ex) {
+ // Remove the try-catch block in the StringToEnumConverter if we want to handle the exception here
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
+ }
+}
diff --git a/spring-rest-simple/src/main/java/com/baeldung/model/Modes.java b/spring-rest-simple/src/main/java/com/baeldung/model/Modes.java
new file mode 100644
index 0000000000..a82df17d7d
--- /dev/null
+++ b/spring-rest-simple/src/main/java/com/baeldung/model/Modes.java
@@ -0,0 +1,5 @@
+package com.baeldung.model;
+
+public enum Modes {
+ ALPHA, DELTA
+}
diff --git a/spring-rest/README.md b/spring-rest/README.md
index 54b47604d4..1d713c05c0 100644
--- a/spring-rest/README.md
+++ b/spring-rest/README.md
@@ -1,4 +1,6 @@
-## Spring REST Example Project
+## Spring REST
+
+This module contains articles about REST APIs with Spring
### The Course
The "REST With Spring" Classes: http://bit.ly/restwithspring
diff --git a/spring-resttemplate/README.md b/spring-resttemplate/README.md
index 97a89ff7aa..9b75e1aa81 100644
--- a/spring-resttemplate/README.md
+++ b/spring-resttemplate/README.md
@@ -1,4 +1,6 @@
-## Spring REST Example Project
+## Spring RestTemplate
+
+This module contains articles about Spring RestTemplate
### The Course
The "REST With Spring" Classes: http://bit.ly/restwithspring
diff --git a/spring-roo/README.md b/spring-roo/README.md
index b63b6f35d4..5a8ce6e30f 100644
--- a/spring-roo/README.md
+++ b/spring-roo/README.md
@@ -1,2 +1,6 @@
+## Spring Roo
+
+This module contains articles about Spring Roo
+
### Relevant Articles:
[Quick Guide to Spring Roo](http://www.baeldung.com/spring-roo)
diff --git a/spring-security-acl/README.md b/spring-security-acl/README.md
index fb3e8160ab..2f95793f8d 100644
--- a/spring-security-acl/README.md
+++ b/spring-security-acl/README.md
@@ -1,4 +1,6 @@
-## Spring Security ACL Project
+## Spring Security ACL
+
+This module contains articles about Spring Security ACL
### Relevant Articles
- [Introduction to Spring Security ACL](http://www.baeldung.com/spring-security-acl)
diff --git a/spring-security-angular/README.md b/spring-security-angular/README.md
index 80312c4bab..2b376a539f 100644
--- a/spring-security-angular/README.md
+++ b/spring-security-angular/README.md
@@ -1,2 +1,6 @@
+## Spring Security Angular
+
+This module contains articles about Spring Security with Angular
+
### Relevant Articles:
- [Spring Security Login Page with Angular](https://www.baeldung.com/spring-security-login-angular)
diff --git a/spring-security-cache-control/README.md b/spring-security-cache-control/README.md
index 4b0bab72cb..fc5bdda1f6 100644
--- a/spring-security-cache-control/README.md
+++ b/spring-security-cache-control/README.md
@@ -1,6 +1,6 @@
-=========
-
## Spring Security Cache Control
+This module contains articles about cache control with Spring Security
+
### Relevant Articles:
- [Spring Security – Cache Control Headers](http://www.baeldung.com/spring-security-cache-control-headers)
diff --git a/spring-security-core/README.md b/spring-security-core/README.md
index bc9a8afed7..3dfcb276d7 100644
--- a/spring-security-core/README.md
+++ b/spring-security-core/README.md
@@ -1,13 +1,17 @@
-## @PreFilter and @PostFilter annotations
+## Spring Security Core
-### Build the Project ###
-
-```
-mvn clean install
-```
+This module contains articles about core Spring Security
### Relevant Articles:
- [Spring Security – @PreFilter and @PostFilter](http://www.baeldung.com/spring-security-prefilter-postfilter)
- [Spring Boot Authentication Auditing Support](http://www.baeldung.com/spring-boot-authentication-audit)
- [Introduction to Spring Method Security](http://www.baeldung.com/spring-security-method-security)
-- [Overview and Need for DelegatingFilterProxy in Spring](https://www.baeldung.com/spring-delegating-filter-proxy)
\ No newline at end of file
+- [Overview and Need for DelegatingFilterProxy in Spring](https://www.baeldung.com/spring-delegating-filter-proxy)
+
+### @PreFilter and @PostFilter annotations
+
+#### Build the Project
+
+`mvn clean install`
+
+
diff --git a/spring-security-mvc-boot/README.MD b/spring-security-mvc-boot/README.md
similarity index 91%
rename from spring-security-mvc-boot/README.MD
rename to spring-security-mvc-boot/README.md
index 20036283a3..150ea3eee9 100644
--- a/spring-security-mvc-boot/README.MD
+++ b/spring-security-mvc-boot/README.md
@@ -1,3 +1,7 @@
+## Spring Boot Security MVC
+
+This module contains articles about Spring Security with Spring MVC in Boot applications
+
### The Course
The "REST With Spring" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc-custom/README.md b/spring-security-mvc-custom/README.md
index ca0731a0c3..84bdec3c10 100644
--- a/spring-security-mvc-custom/README.md
+++ b/spring-security-mvc-custom/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security MVC Custom
-## Spring Security Login Example Project
+This module contains articles about Spring Security with custom MVC applications
###The Course
The "REST With Spring" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc-digest-auth/README.md b/spring-security-mvc-digest-auth/README.md
index be0bf0a675..da612e273b 100644
--- a/spring-security-mvc-digest-auth/README.md
+++ b/spring-security-mvc-digest-auth/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security with Digest Authentication
-## Spring Security with Digest Authentication Example Project
+This module contains articles about digest authentication with Spring Security
###The Course
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc-jsonview/README.md b/spring-security-mvc-jsonview/README.md
index 35c806e856..0e28d4c292 100644
--- a/spring-security-mvc-jsonview/README.md
+++ b/spring-security-mvc-jsonview/README.md
@@ -1,3 +1,7 @@
+## Spring Security MVC Json View
+
+This module contains articles about Spring Security with JSON
+
### Relevant Articles:
- [Filtering Jackson JSON Output Based on Spring Security Role](https://www.baeldung.com/spring-security-role-filter-json)
diff --git a/spring-security-mvc-ldap/README.md b/spring-security-mvc-ldap/README.md
index 6f03143183..fe04cd23fa 100644
--- a/spring-security-mvc-ldap/README.md
+++ b/spring-security-mvc-ldap/README.md
@@ -1,5 +1,6 @@
+## Spring Security LDAP
-## Spring Security with LDAP Example Project
+This module contains articles about Spring Security LDAP
###The Course
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc-login/README.md b/spring-security-mvc-login/README.md
index 983d949cb8..a20a04edec 100644
--- a/spring-security-mvc-login/README.md
+++ b/spring-security-mvc-login/README.md
@@ -1,8 +1,8 @@
-=========
+## Spring Security Login
-## Spring Security Login Example Project
+This module contains articles about login mechanisms with Spring Security
-###The Course
+### The Course
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
### Relevant Articles:
diff --git a/spring-security-mvc-persisted-remember-me/README.md b/spring-security-mvc-persisted-remember-me/README.md
index db2ae890f9..260e55198a 100644
--- a/spring-security-mvc-persisted-remember-me/README.md
+++ b/spring-security-mvc-persisted-remember-me/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security Persisted Remember Me
-## Spring Security Persisted Remember Me Example Project
+This module contains articles about 'remember me' with Spring Security
###The Course
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc-socket/README.md b/spring-security-mvc-socket/README.md
index d3f28af387..187bbe82b0 100644
--- a/spring-security-mvc-socket/README.md
+++ b/spring-security-mvc-socket/README.md
@@ -1,3 +1,15 @@
+## Spring Security MVC Socket
+
+This module contains articles about WebSockets with Spring Security
+
+### Relevant Articles:
+
+- [Intro to Security and WebSockets](http://www.baeldung.com/spring-security-websockets)
+- [Spring WebSockets: Build an User Chat](https://www.baeldung.com/spring-websockets-send-message-to-user)
+- [REST vs WebSockets](https://www.baeldung.com/rest-vs-websockets)
+
+### Running This Project:
+
To build the project, run the command: mvn clean install. This will build a war file in the target folder that you can deploye on a server like Tomcat.
Alternatively, run the project from an IDE.
@@ -5,7 +17,3 @@ Alternatively, run the project from an IDE.
To login, use credentials from the data.sql file in src/main/resource, eg: user/password.
-### Relevant Articles:
-- [Intro to Security and WebSockets](http://www.baeldung.com/spring-security-websockets)
-- [Spring WebSockets: Build an User Chat](https://www.baeldung.com/spring-websockets-send-message-to-user)
-- [REST vs WebSockets](https://www.baeldung.com/rest-vs-websockets)
diff --git a/spring-security-mvc/README.md b/spring-security-mvc/README.md
index ce40ed5f5f..ad55e903c5 100644
--- a/spring-security-mvc/README.md
+++ b/spring-security-mvc/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security MVC
-## Spring Security Login Example Project
+This module contains articles about Spring Security in MVC applications
###The Course
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java
index 8e53a6371a..ac9da5ca60 100644
--- a/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java
+++ b/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -5,8 +5,10 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+import com.baeldung.session.SpringSessionApplication;
+
@RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest(classes = SpringSessionApplication.class)
public class SpringContextIntegrationTest {
@Test
diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextIntegrationTest.java b/spring-security-mvc/src/test/java/com/baeldung/SpringContextTest.java
similarity index 64%
rename from spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextIntegrationTest.java
rename to spring-security-mvc/src/test/java/com/baeldung/SpringContextTest.java
index dc635cd003..f1c3801c8a 100644
--- a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextIntegrationTest.java
+++ b/spring-security-mvc/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,16 +1,17 @@
-package com.baeldung.spring.cloud.bootstrap.gateway;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+import com.baeldung.session.SpringSessionApplication;
+
@RunWith(SpringRunner.class)
-@SpringBootTest
-public class SpringContextIntegrationTest {
+@SpringBootTest(classes = SpringSessionApplication.class)
+public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
}
-
}
diff --git a/spring-security-openid/README.md b/spring-security-openid/README.md
index 8c65c09f2f..1512ffbde5 100644
--- a/spring-security-openid/README.md
+++ b/spring-security-openid/README.md
@@ -1,16 +1,21 @@
+## Spring Security OpenID
+
+This module contains articles about OpenID with Spring Security
+
### Relevant articles
- [Spring Security and OpenID Connect](http://www.baeldung.com/spring-security-openid-connect)
-
-## OpenID Connect with Spring Security
+### OpenID Connect with Spring Security
### Run the Project
+
```
mvn spring-boot:run
```
### Obtain Google App - Client ID, Secret
+
- You need to get client id and client secret by creating a new project at [Google Developer Console](https://console.developers.google.com/project/_/apiui/credential?pli=1)
- Make sure to add OAuth2 credentials by selecting Add credentials > OAuth 2.0 client ID
- Make sure you set redirect URI to http://localhost:8081/google-login
diff --git a/spring-security-react/README.md b/spring-security-react/README.md
index 1a845f0daa..4eb402c699 100644
--- a/spring-security-react/README.md
+++ b/spring-security-react/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security React
-## Spring Security React Example Project
+This module contains articles about Spring Security with ReactJS
### The Course
diff --git a/spring-security-rest-basic-auth/README.md b/spring-security-rest-basic-auth/README.md
index b905824161..41d463f1e2 100644
--- a/spring-security-rest-basic-auth/README.md
+++ b/spring-security-rest-basic-auth/README.md
@@ -1,8 +1,9 @@
-=========
+## Spring Security REST Basic Authentication
-## REST API with Basic Authentication - Example Project
+This module contains articles about basic authentication in RESTful APIs with Spring Security
###The Course
+
The "Learn Spring Security" Classes: http://github.learnspringsecurity.com
### Relevant Articles:
diff --git a/spring-security-rest-custom/README.md b/spring-security-rest-custom/README.md
index d7cb31e784..846093b554 100644
--- a/spring-security-rest-custom/README.md
+++ b/spring-security-rest-custom/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security REST Custom
-## Spring Security for REST Example Project
+This module contains articles about REST APIs with Spring Security
###The Course
The "REST With Spring" Classes: http://github.learnspringsecurity.com
diff --git a/spring-security-rest/README.md b/spring-security-rest/README.md
index f450a514b2..c7ac45e38f 100644
--- a/spring-security-rest/README.md
+++ b/spring-security-rest/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Security REST
-## Spring Security for REST Example Project
+This module contains articles about REST APIs with Spring Security
### Courses
The "REST With Spring" Classes: http://bit.ly/restwithspring
diff --git a/spring-security-sso/README.md b/spring-security-sso/README.md
index 88e3fbb2f7..31694bee45 100644
--- a/spring-security-sso/README.md
+++ b/spring-security-sso/README.md
@@ -1,3 +1,7 @@
+## Spring Security Single Sign On
+
+This module contains modules about single-sign-on with Spring Security
+
### Relevant Articles:
- [Simple Single Sign-On with Spring Security OAuth2](http://www.baeldung.com/sso-spring-security-oauth2)
- [Spring Security Kerberos Integration](https://www.baeldung.com/spring-security-kerberos-integration)
diff --git a/spring-security-stormpath/README.md b/spring-security-stormpath/README.md
index f83882112f..abd65294a3 100644
--- a/spring-security-stormpath/README.md
+++ b/spring-security-stormpath/README.md
@@ -1,3 +1,7 @@
+## Spring Security Stormpath
+
+This module contains articles about Spring Security with Stormpath
+
### Relevant articles
- [Spring Security with Stormpath](http://www.baeldung.com/spring-security-stormpath)
diff --git a/spring-security-thymeleaf/README.MD b/spring-security-thymeleaf/README.MD
index 36007bce62..67b811fac8 100644
--- a/spring-security-thymeleaf/README.MD
+++ b/spring-security-thymeleaf/README.MD
@@ -1,5 +1,6 @@
-This module is for Spring Security Thymeleaf tutorial.
-Jira BAEL-1556
+## Spring Security Thymeleaf
+
+This module contains articles about Spring Security with Thymeleaf
### Relevant Articles:
diff --git a/spring-security-x509/README.md b/spring-security-x509/README.md
index 2a4b84eae6..2c0e25a229 100644
--- a/spring-security-x509/README.md
+++ b/spring-security-x509/README.md
@@ -1,2 +1,6 @@
-Relevant Articles:
+## Spring Security X.509
+
+This module contains articles about X.509 authentication with Spring Security
+
+### Relevant Articles:
- [X.509 Authentication in Spring Security](http://www.baeldung.com/x-509-authentication-in-spring-security)
diff --git a/spring-session/README.md b/spring-session/README.md
index c9875beadf..65040ec734 100644
--- a/spring-session/README.md
+++ b/spring-session/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Session
-## Spring Session Examples
+This module contains articles about Spring Session
### Relevant Articles:
- [Guide to Spring Session](https://www.baeldung.com/spring-session)
diff --git a/spring-session/spring-session-mongodb/pom.xml b/spring-session/spring-session-mongodb/pom.xml
index dc055ff32d..b9e06615de 100644
--- a/spring-session/spring-session-mongodb/pom.xml
+++ b/spring-session/spring-session-mongodb/pom.xml
@@ -40,6 +40,12 @@
spring-boot-starter-test
test
+
+
+ de.flapdoodle.embed
+ de.flapdoodle.embed.mongo
+ test
+
diff --git a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextIntegrationTest.java
index 16b7404f57..1acc6a5cb1 100644
--- a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextIntegrationTest.java
@@ -7,7 +7,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringSessionMongoDBApplication.class)
+@SpringBootTest(classes = SpringSessionMongoDBApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringContextIntegrationTest {
@Test
diff --git a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java
similarity index 71%
rename from spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java
rename to spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java
index b41f2b0338..cc935b8cfb 100644
--- a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java
@@ -7,8 +7,8 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringSessionMongoDBApplication.class)
-public class SpringContextLiveTest {
+@SpringBootTest(classes = SpringSessionMongoDBApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
diff --git a/spring-session/spring-session-mongodb/src/test/resources/application.properties b/spring-session/spring-session-mongodb/src/test/resources/application.properties
new file mode 100644
index 0000000000..4ee830556a
--- /dev/null
+++ b/spring-session/spring-session-mongodb/src/test/resources/application.properties
@@ -0,0 +1,2 @@
+#To use a randomly allocated free port during tests to avoid port conflict across tests
+spring.data.mongodb.port=0
diff --git a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index a62e728826..0000000000
--- a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.baeldung.spring.session.SessionWebApplication;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SessionWebApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java
index b23ce7dbbb..3a4f14e9e6 100644
--- a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java
@@ -7,6 +7,10 @@ import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.spring.session.SessionWebApplication;
+/**
+ * This live test requires:
+ * redis instance running on the environment
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SessionWebApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-sleuth/README.md b/spring-sleuth/README.md
index 47aa126939..692fbaa8b7 100644
--- a/spring-sleuth/README.md
+++ b/spring-sleuth/README.md
@@ -1,3 +1,7 @@
-## Relevant articles:
+## Spring Sleuth
+
+This module contains articles about Spring Cloud Sleuth
+
+### Relevant articles:
- [Spring Cloud Sleuth in a Monolith Application](http://www.baeldung.com/spring-cloud-sleuth-single-application)
diff --git a/spring-soap/README.md b/spring-soap/README.md
index 8d96350e1e..c23f0bc6f0 100644
--- a/spring-soap/README.md
+++ b/spring-soap/README.md
@@ -1,3 +1,7 @@
-## Relevant articles:
+## Spring SOAP
+
+This module contains articles about SOAP APIs with Spring
+
+### Relevant articles:
- [Creating a SOAP Web Service with Spring](https://www.baeldung.com/spring-boot-soap-web-service)
diff --git a/spring-social-login/README.md b/spring-social-login/README.md
index f745a90acb..c3ca867a95 100644
--- a/spring-social-login/README.md
+++ b/spring-social-login/README.md
@@ -1,2 +1,6 @@
+## Spring Social
+
+This module contains articles about Spring Social
+
### Relevant Articles:
- [A Secondary Facebook Login with Spring Social](http://www.baeldung.com/facebook-authentication-with-spring-security-and-social)
diff --git a/spring-spel/README.md b/spring-spel/README.md
index d7e69e114c..f81d304e1a 100644
--- a/spring-spel/README.md
+++ b/spring-spel/README.md
@@ -1,2 +1,6 @@
+## Spring Expression Language
+
+This module contains articles about the Spring Expression Language (SpEL)
+
### Relevant Articles:
- [Spring Expression Language Guide](http://www.baeldung.com/spring-expression-language)
diff --git a/spring-state-machine/README.md b/spring-state-machine/README.md
index a2668fb650..f80ef34ef8 100644
--- a/spring-state-machine/README.md
+++ b/spring-state-machine/README.md
@@ -1,3 +1,7 @@
+## Spring State Machine
+
+This module contains articles about Spring State Machine
+
### Relevant articles
- [A Guide to the Spring State Machine Project](http://www.baeldung.com/spring-state-machine)
diff --git a/spring-static-resources/README.md b/spring-static-resources/README.md
index 64f017b5dd..8d77e6fe94 100644
--- a/spring-static-resources/README.md
+++ b/spring-static-resources/README.md
@@ -1,3 +1,7 @@
+## Spring Static Resources
+
+This module contains articles about static resources with Spring
+
### Relevant Articles:
- [Cachable Static Assets with Spring MVC](http://www.baeldung.com/cachable-static-assets-with-spring-mvc)
- [Minification of JS and CSS Assets with Maven](http://www.baeldung.com/maven-minification-of-js-and-css-assets)
diff --git a/spring-swagger-codegen/README.md b/spring-swagger-codegen/README.md
index ee6b240c30..dbcf2b3e8d 100644
--- a/spring-swagger-codegen/README.md
+++ b/spring-swagger-codegen/README.md
@@ -1,3 +1,7 @@
+## Spring Swagger CodeGen
+
+This module contains articles about Spring with Swagger CodeGen
+
### Relevant articles
- [Generate Spring Boot REST Client with Swagger](http://www.baeldung.com/spring-boot-rest-client-swagger-codegen)
diff --git a/spring-thymeleaf/README.md b/spring-thymeleaf/README.md
index 082a65f55b..88f3e35f8c 100644
--- a/spring-thymeleaf/README.md
+++ b/spring-thymeleaf/README.md
@@ -1,6 +1,6 @@
-=========
+## Spring Thymeleaf
-## Spring Thymeleaf Example Project
+This module contains articles about Spring with Thymeleaf
### Relevant Articles:
- [Introduction to Using Thymeleaf in Spring](http://www.baeldung.com/thymeleaf-in-spring-mvc)
@@ -19,13 +19,14 @@
- [Working with Select and Option in Thymeleaf](http://www.baeldung.com/thymeleaf-select-option)
- [Working With Custom HTML Attributes in Thymeleaf](https://www.baeldung.com/thymeleaf-custom-html-attributes)
- [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters)
+- [[next -->]](/spring-thymeleaf-2)
### Build the Project
mvn clean install
-
### Run the Project
+
mvn cargo:run
- **note**: starts on port '8082'
diff --git a/spring-vault/README.md b/spring-vault/README.md
index 8db065a3dd..9e1d14ba6b 100644
--- a/spring-vault/README.md
+++ b/spring-vault/README.md
@@ -1,2 +1,7 @@
+## Spring Vault
+
+This module contains articles about Spring Vault
+
### Relevant Articles:
+
- [Spring Vault](https://www.baeldung.com/spring-vault)
diff --git a/spring-vault/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-vault/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index a2d727ea79..0000000000
--- a/spring-vault/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.baeldung;
-
-import org.baeldung.springvault.SpringVaultApplication;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringVaultApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java
index 1b3db59ecb..60dc119f13 100644
--- a/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java
@@ -6,6 +6,15 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+/**
+ * This live test requires:
+ * vault server up and running on the environment
+ *
+ *
+ * For more info on setting up the vault server:
+ * https://www.baeldung.com/vault
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringVaultApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-vault/src/test/resources/application.properties b/spring-vault/src/test/resources/application.properties
new file mode 100644
index 0000000000..709574239b
--- /dev/null
+++ b/spring-vault/src/test/resources/application.properties
@@ -0,0 +1 @@
+spring.main.allow-bean-definition-overriding=true
\ No newline at end of file
diff --git a/spring-vertx/README.md b/spring-vertx/README.md
index 05d059e1b2..e9557f330b 100644
--- a/spring-vertx/README.md
+++ b/spring-vertx/README.md
@@ -1,2 +1,6 @@
+## Spring Vert.x
+
+This module contains articles about Spring with Vert.x
+
### Relevant Articles:
- [Vert.x Spring Integration](http://www.baeldung.com/spring-vertx)
diff --git a/spring-webflux-amqp/README.md b/spring-webflux-amqp/README.md
index 5cd3391c3e..b7ac73b53d 100644
--- a/spring-webflux-amqp/README.md
+++ b/spring-webflux-amqp/README.md
@@ -1,4 +1,7 @@
+## Spring WebFlux AMQP
+
+This module contains articles about Spring WebFlux with AMQP
+
### Relevant Articles:
-================================
- [Spring AMQP in Reactive Applications](http://www.baeldung.com/spring-amqp-reactive)
diff --git a/spring-webflux-amqp/src/main/resources/application.yml b/spring-webflux-amqp/src/main/resources/application.yml
index 3f527ce4c5..702aaba357 100755
--- a/spring-webflux-amqp/src/main/resources/application.yml
+++ b/spring-webflux-amqp/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
rabbitmq:
- host: 192.168.99.100
+ host: localhost
port: 5672
username: guest
password: guest
diff --git a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index 35efff49c2..0000000000
--- a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.baeldung;
-
-import org.baeldung.spring.amqp.SpringWebfluxAmqpApplication;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringWebfluxAmqpApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java
index effe8d2cfa..4d9f658cdc 100644
--- a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java
@@ -6,6 +6,15 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
+/**
+ * This live test requires:
+ * rabbitmq instance running on the environment
+ *
+ *
+ * To run rabbitmq using docker image:
+ * (e.g. `docker run -d --name rabbitmq -p 5672:5672 rabbitmq:3`)
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringWebfluxAmqpApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-zuul/README.md b/spring-zuul/README.md
index 41a77f70c8..a2ea211195 100644
--- a/spring-zuul/README.md
+++ b/spring-zuul/README.md
@@ -1,7 +1,6 @@
-=========
-
-## Spring REST with a Zuul
+## Spring Zuul
+This module contains articles about Spring with Netflix Zuul
### Relevant Articles:
- [Spring REST with a Zuul Proxy](http://www.baeldung.com/spring-rest-with-zuul-proxy)
diff --git a/static-analysis/README.md b/static-analysis/README.md
index e4d4bc7bfc..e3710831cf 100644
--- a/static-analysis/README.md
+++ b/static-analysis/README.md
@@ -1,3 +1,7 @@
+## Static Analysis
+
+This module contains articles about static program analysis
+
## Relevant articles:
- [Introduction to PMD](http://www.baeldung.com/pmd)
diff --git a/stripe/README.md b/stripe/README.md
index 8a44ff9d33..a7134b9633 100644
--- a/stripe/README.md
+++ b/stripe/README.md
@@ -1,6 +1,6 @@
-### Stripe API for Java Sample Project
+### Stripe
-This is Spring Boot project that displays a checkout form and charges a credit card using the Stripe API for Java.
+This module contains articles about Stripe
### Relevant articles
diff --git a/testing-modules/junit-5-basics/src/test/java/com/baeldung/example/EmployeeDAOIntegrationTest.java b/testing-modules/junit-5-basics/src/test/java/com/baeldung/example/EmployeeDAOIntegrationTest.java
index d3b6a52726..2595f2b13c 100644
--- a/testing-modules/junit-5-basics/src/test/java/com/baeldung/example/EmployeeDAOIntegrationTest.java
+++ b/testing-modules/junit-5-basics/src/test/java/com/baeldung/example/EmployeeDAOIntegrationTest.java
@@ -1,18 +1,22 @@
package com.baeldung.example;
-import com.baeldung.junit.tags.example.Employee;
-import com.baeldung.junit.tags.example.EmployeeDAO;
-import com.baeldung.junit.tags.example.SpringJdbcConfig;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import com.baeldung.junit.tags.example.Employee;
+import com.baeldung.junit.tags.example.EmployeeDAO;
+import com.baeldung.junit.tags.example.SpringJdbcConfig;
+
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringJdbcConfig.class }, loader = AnnotationConfigContextLoader.class)
+@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
public class EmployeeDAOIntegrationTest {
@Autowired
diff --git a/testing-modules/junit-5-basics/src/test/java/com/baeldung/tags/EmployeeDAOIntegrationTest.java b/testing-modules/junit-5-basics/src/test/java/com/baeldung/tags/EmployeeDAOIntegrationTest.java
index bcd76cb4c2..7f0720b96d 100644
--- a/testing-modules/junit-5-basics/src/test/java/com/baeldung/tags/EmployeeDAOIntegrationTest.java
+++ b/testing-modules/junit-5-basics/src/test/java/com/baeldung/tags/EmployeeDAOIntegrationTest.java
@@ -1,8 +1,5 @@
package com.baeldung.tags;
-import com.baeldung.junit.tags.example.Employee;
-import com.baeldung.junit.tags.example.EmployeeDAO;
-import com.baeldung.junit.tags.example.SpringJdbcConfig;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
@@ -13,12 +10,19 @@ import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import com.baeldung.junit.tags.example.Employee;
+import com.baeldung.junit.tags.example.EmployeeDAO;
+import com.baeldung.junit.tags.example.SpringJdbcConfig;
+
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringJdbcConfig.class }, loader = AnnotationConfigContextLoader.class)
+@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
public class EmployeeDAOIntegrationTest {
@Autowired
diff --git a/testing-modules/mockito/pom.xml b/testing-modules/mockito/pom.xml
index 7b6d6e7735..f307b80370 100644
--- a/testing-modules/mockito/pom.xml
+++ b/testing-modules/mockito/pom.xml
@@ -96,7 +96,7 @@
19.0
- 1.7.0
+ 2.0.2
2.0.0.0
2.1.1
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorUnitTest.java
similarity index 97%
rename from testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorIntegrationTest.java
rename to testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorUnitTest.java
index 5e311c60f2..5b66aa0a9e 100644
--- a/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/LuckyNumberGeneratorUnitTest.java
@@ -14,7 +14,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "com.baeldung.powermockito.introduction.LuckyNumberGenerator")
-public class LuckyNumberGeneratorIntegrationTest {
+public class LuckyNumberGeneratorUnitTest {
@Test
public final void givenPrivateMethodWithReturn_whenUsingPowerMockito_thenCorrect() throws Exception {
diff --git a/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoIntegrationTest.java b/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoUnitTest.java
similarity index 94%
rename from testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoIntegrationTest.java
rename to testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoUnitTest.java
index 1b6431f0c2..4943b0486a 100644
--- a/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/com/baeldung/powermockito/introduction/PowerMockitoUnitTest.java
@@ -13,7 +13,7 @@ import static org.powermock.api.mockito.PowerMockito.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "com.baeldung.powermockito.introduction.*")
-public class PowerMockitoIntegrationTest {
+public class PowerMockitoUnitTest {
@Test
public void givenFinalMethods_whenUsingPowerMockito_thenCorrect() throws Exception {
@@ -44,10 +44,10 @@ public class PowerMockitoIntegrationTest {
assertEquals("Hello Baeldung!", firstWelcome);
assertEquals("Hello Baeldung!", secondWelcome);
- verifyStatic(times(2));
+ verifyStatic(CollaboratorWithStaticMethods.class, times(2));
CollaboratorWithStaticMethods.firstMethod(Mockito.anyString());
- verifyStatic(Mockito.never());
+ verifyStatic(CollaboratorWithStaticMethods.class, Mockito.never());
CollaboratorWithStaticMethods.secondMethod();
CollaboratorWithStaticMethods.thirdMethod();
@@ -60,7 +60,6 @@ public class PowerMockitoIntegrationTest {
spy(CollaboratorForPartialMocking.class);
when(CollaboratorForPartialMocking.staticMethod()).thenReturn("I am a static mock method.");
returnValue = CollaboratorForPartialMocking.staticMethod();
- verifyStatic();
CollaboratorForPartialMocking.staticMethod();
assertEquals("I am a static mock method.", returnValue);
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoUnitTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoUnitTest.java
index e0ca6f0a35..977a60933f 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/bddmockito/BDDMockitoUnitTest.java
@@ -10,7 +10,7 @@ import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
-public class BDDMockitoIntegrationTest {
+public class BDDMockitoUnitTest {
PhoneBookService phoneBookService;
PhoneBookRepository phoneBookRepository;
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinals.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinalsUnitTest.java
similarity index 95%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinals.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinalsUnitTest.java
index caa456c891..000774592c 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinals.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockFinalsUnitTest.java
@@ -8,7 +8,7 @@ import static org.mockito.Mockito.when;
import org.baeldung.mockito.voidmethods.MyList;
-public class MockFinals {
+public class MockFinalsUnitTest {
@Test
public void whenMockFinalClassMockWorks() {
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationUnitTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationUnitTest.java
index 5e083adbf5..6bc0e69e65 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationUnitTest.java
@@ -11,7 +11,7 @@ import java.util.Map;
import static org.junit.Assert.assertEquals;
//@RunWith(MockitoJUnitRunner.class)
-public class MockitoAnnotationIntegrationTest {
+public class MockitoAnnotationUnitTest {
@Mock
private List mockedList;
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesUnitTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesUnitTest.java
index 096bbe1ed7..c065e164c5 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoConfigExamplesUnitTest.java
@@ -13,7 +13,7 @@ import static org.mockito.Mockito.*;
import org.baeldung.mockito.voidmethods.MyList;
-public class MockitoConfigExamplesIntegrationTest {
+public class MockitoConfigExamplesUnitTest {
// tests
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionUnitTest.java
similarity index 97%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionUnitTest.java
index 9a25ccb28c..88da16ae2b 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoExceptionUnitTest.java
@@ -8,7 +8,7 @@ import static org.mockito.Mockito.when;
import org.junit.Test;
import org.mockito.Mockito;
-public class MockitoExceptionIntegrationTest {
+public class MockitoExceptionUnitTest {
@Test(expected = NullPointerException.class)
public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockUnitTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockUnitTest.java
index de26642ede..30c843ff13 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoMockUnitTest.java
@@ -17,7 +17,7 @@ import org.mockito.exceptions.verification.TooLittleActualInvocations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
-public class MockitoMockIntegrationTest {
+public class MockitoMockUnitTest {
private static class CustomAnswer implements Answer {
@Override
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
index 9c71b1fc4f..a6e40b84e1 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoVerifyExamplesUnitTest.java
@@ -16,7 +16,7 @@ import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
-public class MockitoVerifyExamplesIntegrationTest {
+public class MockitoVerifyExamplesUnitTest {
// tests
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyUnitTest.java
similarity index 97%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyUnitTest.java
index d0b838a789..068a4c6de9 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyUnitTest.java
@@ -12,7 +12,7 @@ import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
-public class MockitoSpyIntegrationTest {
+public class MockitoSpyUnitTest {
@Spy
private List aSpyList = new ArrayList();