diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml
index ba6dfc62bc..8165549d8c 100644
--- a/core-java-modules/core-java-12/pom.xml
+++ b/core-java-modules/core-java-12/pom.xml
@@ -8,9 +8,9 @@
jar
- com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
@@ -21,30 +21,8 @@
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- ${maven.compiler.source.version}
- ${maven.compiler.target.version}
- --enable-preview
-
-
-
- maven-surefire-plugin
-
- --enable-preview
-
-
-
-
-
- 12
- 12
+ 17
\ No newline at end of file
diff --git a/core-java-modules/core-java-12/src/test/java/com/baeldung/switchExpression/SwitchUnitTest.java b/core-java-modules/core-java-12/src/test/java/com/baeldung/switchExpression/SwitchUnitTest.java
index 708e416090..994c6d9a73 100644
--- a/core-java-modules/core-java-12/src/test/java/com/baeldung/switchExpression/SwitchUnitTest.java
+++ b/core-java-modules/core-java-12/src/test/java/com/baeldung/switchExpression/SwitchUnitTest.java
@@ -19,19 +19,6 @@ public class SwitchUnitTest {
Assert.assertEquals(value, 2);
}
- @Test
- public void switchLocalVariable(){
- var month = Month.AUG;
- int i = switch (month){
- case JAN,JUN, JUL -> 3;
- case FEB,SEP, OCT, NOV, DEC -> 1;
- case MAR,MAY, APR, AUG -> {
- int j = month.toString().length() * 4;
- break j;
- }
- };
- Assert.assertEquals(12, i);
- }
enum Month {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}
}
diff --git a/core-java-modules/core-java-13/pom.xml b/core-java-modules/core-java-13/pom.xml
index 11d6ee7007..52cf227583 100644
--- a/core-java-modules/core-java-13/pom.xml
+++ b/core-java-modules/core-java-13/pom.xml
@@ -8,39 +8,13 @@
jar
- com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- ${maven.compiler.source.version}
- ${maven.compiler.target.version}
- 13
- --enable-preview
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire.plugin.version}
-
- --enable-preview
-
-
-
-
-
- 13
- 13
- 3.0.0-M3
+ 17
\ No newline at end of file
diff --git a/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/SwitchExpressionsWithYieldUnitTest.java b/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/SwitchExpressionsWithYieldUnitTest.java
index be1fcfd167..3d3f319218 100644
--- a/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/SwitchExpressionsWithYieldUnitTest.java
+++ b/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/SwitchExpressionsWithYieldUnitTest.java
@@ -7,7 +7,6 @@ import org.junit.Test;
public class SwitchExpressionsWithYieldUnitTest {
@Test
- @SuppressWarnings("preview")
public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {
var me = 4;
var operation = "squareMe";
diff --git a/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/TextBlocksUnitTest.java b/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/TextBlocksUnitTest.java
index 1f8ddcbfb4..e028e5f02c 100644
--- a/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/TextBlocksUnitTest.java
+++ b/core-java-modules/core-java-13/src/test/java/com/baeldung/newfeatures/TextBlocksUnitTest.java
@@ -8,7 +8,6 @@ public class TextBlocksUnitTest {
private static final String JSON_STRING = "{\r\n" + "\"name\" : \"Baeldung\",\r\n" + "\"website\" : \"https://www.%s.com/\"\r\n" + "}";
- @SuppressWarnings("preview")
private static final String TEXT_BLOCK_JSON = """
{
"name" : "Baeldung",
@@ -25,7 +24,6 @@ public class TextBlocksUnitTest {
}
- @SuppressWarnings("removal")
@Test
public void whenTextBlocks_thenFormattedWorksAsFormat() {
assertThat(TEXT_BLOCK_JSON.formatted("baeldung")
diff --git a/core-java-modules/core-java-13/src/test/java/com/baeldung/switchExpression/SwitchExpressionsUnitTest.java b/core-java-modules/core-java-13/src/test/java/com/baeldung/switchExpression/SwitchExpressionsUnitTest.java
index bb9250f000..04aea79a67 100644
--- a/core-java-modules/core-java-13/src/test/java/com/baeldung/switchExpression/SwitchExpressionsUnitTest.java
+++ b/core-java-modules/core-java-13/src/test/java/com/baeldung/switchExpression/SwitchExpressionsUnitTest.java
@@ -13,7 +13,6 @@ import org.junit.Test;
public class SwitchExpressionsUnitTest {
@Test
- @SuppressWarnings ("preview")
public void whenSwitchingOverMonthJune_thenWillReturn3() {
var month = JUNE;
@@ -29,7 +28,6 @@ public class SwitchExpressionsUnitTest {
}
@Test
- @SuppressWarnings ("preview")
public void whenSwitchingOverMonthAugust_thenWillReturn24() {
var month = AUGUST;
@@ -47,7 +45,6 @@ public class SwitchExpressionsUnitTest {
}
@Test
- @SuppressWarnings ("preview")
public void whenSwitchingOverMonthJanuary_thenWillReturn3() {
Function func = (month) -> {
@@ -61,7 +58,6 @@ public class SwitchExpressionsUnitTest {
}
@Test
- @SuppressWarnings ("preview")
public void whenSwitchingOverMonthAugust_thenWillReturn2() {
var month = AUGUST;
diff --git a/core-java-modules/core-java-15/pom.xml b/core-java-modules/core-java-15/pom.xml
index 3ac45d26ba..3996c69fa4 100644
--- a/core-java-modules/core-java-15/pom.xml
+++ b/core-java-modules/core-java-15/pom.xml
@@ -8,10 +8,9 @@
jar
- com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
- ../../pom.xml
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
@@ -27,33 +26,8 @@
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- ${maven.compiler.release}
- --enable-preview
- 14
- 14
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire.plugin.version}
-
- --enable-preview
-
-
-
-
-
- 15
- 3.0.0-M3
+ 17
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/PutIfAbsentVsComputeIfAbsentUnitTest.java b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/PutIfAbsentVsComputeIfAbsentUnitTest.java
new file mode 100644
index 0000000000..304045ab9d
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/PutIfAbsentVsComputeIfAbsentUnitTest.java
@@ -0,0 +1,98 @@
+package com.baeldung.map;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.*;
+
+class Magic {
+ public String nullFunc() {
+ return null;
+ }
+
+ public String strFunc(String input) {
+ return input + ": A nice string";
+ }
+}
+
+public class PutIfAbsentVsComputeIfAbsentUnitTest {
+
+ private static final Map MY_MAP = new HashMap<>();
+ private Magic magic = new Magic();
+
+ @BeforeEach
+ void resetTheMap() {
+ MY_MAP.clear();
+ MY_MAP.put("Key A", "value A");
+ MY_MAP.put("Key B", "value B");
+ MY_MAP.put("Key C", "value C");
+ MY_MAP.put("Key Null", null);
+ }
+
+ @Test
+ void whenCallingPutIfAbsentWithAbsentKey_thenGetNull() {
+ String putResult = MY_MAP.putIfAbsent("new key1", magic.nullFunc());
+ assertNull(putResult);
+
+ putResult = MY_MAP.putIfAbsent("new key2", magic.strFunc("new key2"));
+ assertNull(putResult);
+
+ putResult = MY_MAP.putIfAbsent("Key Null", magic.strFunc("Key Null"));
+ assertNull(putResult);
+ }
+
+ @Test
+ void whenCallingComputeIfAbsentWithAbsentKey_thenGetExpectedResult() {
+ String computeResult = MY_MAP.computeIfAbsent("new key1", k -> magic.nullFunc());
+ assertNull(computeResult);
+
+ computeResult = MY_MAP.computeIfAbsent("new key2", k -> magic.strFunc(k));
+ assertEquals("new key2: A nice string", computeResult);
+
+ computeResult = MY_MAP.computeIfAbsent("Key Null", k -> magic.strFunc(k));
+ assertEquals("Key Null: A nice string", computeResult);
+ }
+
+ @Test
+ void whenCallingPutIfAbsentWithAbsentKey_thenNullIsPut() {
+ assertEquals(4, MY_MAP.size()); // initial: 4 entries
+ MY_MAP.putIfAbsent("new key", magic.nullFunc());
+ assertEquals(5, MY_MAP.size());
+ assertTrue(MY_MAP.containsKey("new key")); // new entry has been added to the map
+ assertNull(MY_MAP.get("new key"));
+ }
+
+ @Test
+ void whenCallingComputeIfAbsentWithAbsentKey_thenNullIsNotPut() {
+ assertEquals(4, MY_MAP.size()); // initial: 4 entries
+ MY_MAP.computeIfAbsent("new key", k -> magic.nullFunc());
+ assertEquals(4, MY_MAP.size());
+ assertFalse(MY_MAP.containsKey("new key")); // <- no new entry added
+ }
+
+ @Test
+ void whenCallingPutIfAbsent_thenFunctionIsAlwaysCalled() {
+ Magic spyMagic = spy(magic);
+ MY_MAP.putIfAbsent("Key A", spyMagic.strFunc("Key A"));
+ verify(spyMagic, times(1)).strFunc(anyString());
+
+ MY_MAP.putIfAbsent("new key", spyMagic.strFunc("new key"));
+ verify(spyMagic, times(2)).strFunc(anyString());
+ }
+
+ @Test
+ void whenCallingComputeIfAbsent_thenFunctionIsCalledOnDemand() {
+ Magic spyMagic = spy(magic);
+ MY_MAP.computeIfAbsent("Key A", k -> spyMagic.strFunc(k));
+ verify(spyMagic, never()).strFunc(anyString());
+
+ MY_MAP.computeIfAbsent("new key", k -> spyMagic.strFunc(k));
+ verify(spyMagic, times(1)).strFunc(anyString());
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/writehashmaptocsvfile/WriteHashmaptoCVSFileUnitTest.java b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/writehashmaptocsvfile/WriteHashmaptoCVSFileUnitTest.java
new file mode 100644
index 0000000000..ddebaf2468
--- /dev/null
+++ b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/writehashmaptocsvfile/WriteHashmaptoCVSFileUnitTest.java
@@ -0,0 +1,62 @@
+package com.baeldung.writehashmaptocsvfile;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class WriteHashmaptoCVSFileUnitTest {
+
+ @Test
+ public void givenEmployeeData_whenWriteToCSV_thenCSVFileIsCreated() {
+ Map employeeData = new HashMap<>();
+ employeeData.put("Name", "John Doe");
+ employeeData.put("Title", "Software Engineer");
+ employeeData.put("Department", "Engineering");
+ employeeData.put("Salary", "75000");
+ try (FileWriter csvWriter = new FileWriter("employee_data.csv")) {
+ // Write header row
+ csvWriter.append("Name,Title,Department,Salary\n");
+
+ // Write data row
+ csvWriter.append(employeeData.get("Name")).append(",");
+ csvWriter.append(employeeData.get("Title")).append(",");
+ csvWriter.append(employeeData.get("Department")).append(",");
+ csvWriter.append(employeeData.get("Salary")).append("\n");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ // Ensure the CSV file exists
+ assertTrue(new File("employee_data.csv").exists(), "CSV file does not exist!");
+
+ }
+
+ @Test
+ public void givenCSVFile_whenRead_thenContentsMatchExpected() {
+ // Read the actual content of the CSV file
+ StringBuilder actualCsvContent = new StringBuilder();
+ try {
+ Files.lines(Paths.get("employee_data.csv"))
+ .forEach(line -> actualCsvContent.append(line).append("\n"));
+
+ // Define the expected CSV content
+ String expectedCsvContent = "Name,Title,Department,Salary\n" +
+ "John Doe,Software Engineer,Engineering,75000\n";
+
+ // Compare the actual content with the expected content
+ assertEquals(expectedCsvContent, actualCsvContent.toString());
+
+ System.out.println("CSV file created successfully.");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/core-java-modules/core-java-concurrency-advanced-5/pom.xml b/core-java-modules/core-java-concurrency-advanced-5/pom.xml
new file mode 100644
index 0000000000..b84d3810bb
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-advanced-5/pom.xml
@@ -0,0 +1,36 @@
+
+
+
+ 4.0.0
+ core-java-concurrency-advanced-5
+ core-java-concurrency-advanced-5
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+ core-java-concurrency-advanced-5
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+ 1.8
+ 1.8
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/wait_synchronization/ConditionChecker.java b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/wait_synchronization/ConditionChecker.java
new file mode 100644
index 0000000000..dca36fe7cb
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/wait_synchronization/ConditionChecker.java
@@ -0,0 +1,24 @@
+package com.baeldung.wait_synchronization;
+
+public class ConditionChecker {
+
+ private volatile Boolean jobIsDone;
+ private final Object lock = new Object();
+
+ public void ensureCondition() {
+ synchronized (lock) {
+ while (!jobIsDone) {
+ try {
+ lock.wait();
+ } catch (InterruptedException e) { }
+ }
+ }
+ }
+
+ public void complete() {
+ synchronized (lock) {
+ jobIsDone = true;
+ lock.notify();
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-advanced-5/src/test/java/com/baeldung/wait_synchronization/ConditionCheckerUnitTest.java b/core-java-modules/core-java-concurrency-advanced-5/src/test/java/com/baeldung/wait_synchronization/ConditionCheckerUnitTest.java
new file mode 100644
index 0000000000..2698640e6a
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-advanced-5/src/test/java/com/baeldung/wait_synchronization/ConditionCheckerUnitTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.wait_synchronization;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class ConditionCheckerUnitTest {
+
+ @Test
+ public void givenBothMethodsAreSynchronized_whenBothMethodsAreCalled_thenNoExceptionsOrDeadlocks() {
+ ConditionChecker conditionChecker = new ConditionChecker();
+
+ ExecutorService executorService = Executors.newFixedThreadPool(2);
+
+ Assertions.assertThatCode(() -> {
+ executorService.submit(conditionChecker::ensureCondition);
+ executorService.submit(conditionChecker::complete);
+ }).doesNotThrowAnyException();
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml
index 3efb2fe728..a33114852c 100644
--- a/core-java-modules/core-java-datetime-string/pom.xml
+++ b/core-java-modules/core-java-datetime-string/pom.xml
@@ -65,7 +65,7 @@
1.6
- 2.10.10
+ 2.12.5
RELEASE
1.9
1.9
diff --git a/core-java-modules/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java b/core-java-modules/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
index ca04263689..5c93d955a7 100644
--- a/core-java-modules/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
+++ b/core-java-modules/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
@@ -15,6 +15,7 @@ import java.util.Map;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.message.BasicNameValuePair;
+import org.junit.Assert;
import org.junit.Test;
import org.springframework.web.util.UriComponentsBuilder;
@@ -23,95 +24,101 @@ import com.google.common.collect.ImmutableMap;
public class UrlUnitTest {
@Test
- public void givenUrl_whenCanIdentifyProtocol_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com");
+ public void givenUrl_whenCanIdentifyProtocol_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com").toURL();
assertEquals("http", url.getProtocol());
}
@Test
- public void givenUrl_whenCanGetHost_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com");
+ public void givenUrl_whenCanGetHost_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com").toURL();
assertEquals("baeldung.com", url.getHost());
}
@Test
- public void givenUrl_whenCanGetFileName_thenCorrect2() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com/articles?topic=java&version=8");
+ public void givenUrl_whenCanGetFileName_thenCorrect2() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com/articles?topic=java&version=8").toURL();
assertEquals("/articles?topic=java&version=8", url.getFile());
}
@Test
- public void givenUrl_whenCanGetFileName_thenCorrect1() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com/guidelines.txt");
+ public void givenUrl_whenCanGetFileName_thenCorrect1() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com/guidelines.txt").toURL();
assertEquals("/guidelines.txt", url.getFile());
}
@Test
- public void givenUrl_whenCanGetPathParams_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com/articles?topic=java&version=8");
+ public void givenUrl_whenCanGetPathParams_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com/articles?topic=java&version=8").toURL();
assertEquals("/articles", url.getPath());
}
@Test
- public void givenUrl_whenCanGetQueryParams_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com/articles?topic=java");
- assertEquals("topic=java", url.getQuery());
+ public void givenUrl_whenCanGetQueryParams_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com/articles?topic=java&version=8").toURL();
+ assertEquals("topic=java&version=8", url.getQuery());
}
@Test
- public void givenUrl_whenGetsDefaultPort_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com");
+ public void givenUrl_whenGetsDefaultPort_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com").toURL();
assertEquals(-1, url.getPort());
assertEquals(80, url.getDefaultPort());
}
@Test
- public void givenUrl_whenGetsPort_thenCorrect() throws MalformedURLException {
- final URL url = new URL("http://baeldung.com:8090");
+ public void givenUrl_whenGetsPort_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URL url = new URI("http://baeldung.com:8090").toURL();
assertEquals(8090, url.getPort());
assertEquals(80, url.getDefaultPort());
}
@Test
- public void givenBaseUrl_whenCreatesRelativeUrl_thenCorrect() throws MalformedURLException {
- final URL baseUrl = new URL("http://baeldung.com");
- final URL relativeUrl = new URL(baseUrl, "a-guide-to-java-sockets");
- assertEquals("http://baeldung.com/a-guide-to-java-sockets", relativeUrl.toString());
+ public void givenHomeUrlAndFullUrl_whenRelativize_thenCorrect() throws MalformedURLException, URISyntaxException {
+ final URI homeUri = new URI("http://baeldung.com");
+ final URI fullUri = new URI("http://baeldung.com" + "/a-guide-to-java-sockets");
+ final URI relativeUri = homeUri.relativize(fullUri);
+ assertEquals("a-guide-to-java-sockets", relativeUri.toString());
}
@Test
- public void givenAbsoluteUrl_whenIgnoresBaseUrl_thenCorrect() throws MalformedURLException {
- final URL baseUrl = new URL("http://baeldung.com");
- final URL relativeUrl = new URL(baseUrl, "http://baeldung.com/a-guide-to-java-sockets");
- assertEquals("http://baeldung.com/a-guide-to-java-sockets", relativeUrl.toString());
- }
-
- @Test
- public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException {
+ public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException, URISyntaxException {
final String protocol = "http";
final String host = "baeldung.com";
final String file = "/guidelines.txt";
- final URL url = new URL(protocol, host, file);
- assertEquals("http://baeldung.com/guidelines.txt", url.toString());
+ final String fragment = "myImage";
+ final URL url = new URI(protocol, host, file, fragment).toURL();
+ assertEquals("http://baeldung.com/guidelines.txt#myImage", url.toString());
}
@Test
- public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect2() throws MalformedURLException {
+ public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect2() throws MalformedURLException, URISyntaxException {
final String protocol = "http";
+ final String username = "admin";
final String host = "baeldung.com";
- final String file = "/articles?topic=java&version=8";
- final URL url = new URL(protocol, host, file);
- assertEquals("http://baeldung.com/articles?topic=java&version=8", url.toString());
+ final String file = "/articles";
+ final String query = "topic=java&version=8";
+ final String fragment = "myImage";
+ final URL url = new URI(protocol, username, host, -1, file, query, fragment).toURL();
+ assertEquals("http://admin@baeldung.com/articles?topic=java&version=8#myImage", url.toString());
}
@Test
- public void givenUrlComponentsWithPort_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException {
+ public void givenRelativeUrl_whenCreatesRelativeUrl_thenThrows() throws URISyntaxException, MalformedURLException {
+ final URI uri = new URI("/a-guide-to-java-sockets");
+ Assert.assertThrows(IllegalArgumentException.class, () -> uri.toURL());
+ }
+
+ @Test
+ public void givenUrlComponentsWithPort_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException, URISyntaxException {
final String protocol = "http";
+ final String username = "admin";
final String host = "baeldung.com";
final int port = 9000;
final String file = "/guidelines.txt";
- final URL url = new URL(protocol, host, port, file);
- assertEquals("http://baeldung.com:9000/guidelines.txt", url.toString());
+ final String fragment = "myImage";
+ final URL url = new URI(protocol, username, host, port, file, null, fragment).toURL();
+ assertEquals("http://admin@baeldung.com:9000/guidelines.txt#myImage", url.toString());
}
@Test
@@ -120,7 +127,8 @@ public class UrlUnitTest {
uriBuilder.setPort(9090);
uriBuilder.addParameter("topic", "java");
uriBuilder.addParameter("version", "8");
- URL url = uriBuilder.build().toURL();
+ URL url = uriBuilder.build()
+ .toURL();
assertEquals("http://baeldung.com:9090/articles?topic=java&version=8", url.toString());
}
@@ -130,26 +138,27 @@ public class UrlUnitTest {
URIBuilder uriBuilder = new URIBuilder("http://baeldung.com/articles");
uriBuilder.setPort(9090);
uriBuilder.addParameters(paramMap.entrySet()
- .stream()
- .map(entry -> new BasicNameValuePair(entry.getKey(), entry.getValue()))
- .collect(toList()));
+ .stream()
+ .map(entry -> new BasicNameValuePair(entry.getKey(), entry.getValue()))
+ .collect(toList()));
- URL url = uriBuilder.build().toURL();
+ URL url = uriBuilder.build()
+ .toURL();
assertEquals("http://baeldung.com:9090/articles?topic=java&version=8", url.toString());
}
@Test
public void givenUrlParameters_whenBuildUrlWithSpringUriComponentsBuilder_thenSuccess() throws MalformedURLException {
URL url = UriComponentsBuilder.newInstance()
- .scheme("http")
- .host("baeldung.com")
- .port(9090)
- .path("articles")
- .queryParam("topic", "java")
- .queryParam("version", "8")
- .build()
- .toUri()
- .toURL();
+ .scheme("http")
+ .host("baeldung.com")
+ .port(9090)
+ .path("articles")
+ .queryParam("topic", "java")
+ .queryParam("version", "8")
+ .build()
+ .toUri()
+ .toURL();
assertEquals("http://baeldung.com:9090/articles?topic=java&version=8", url.toString());
}
diff --git a/core-java-modules/core-java-string-operations-7/README.md b/core-java-modules/core-java-string-operations-7/README.md
new file mode 100644
index 0000000000..2dce44d217
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-7/README.md
@@ -0,0 +1,2 @@
+
+### Relevant Articles:
diff --git a/core-java-modules/core-java-string-operations-7/pom.xml b/core-java-modules/core-java-string-operations-7/pom.xml
new file mode 100644
index 0000000000..595f918fcd
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-7/pom.xml
@@ -0,0 +1,72 @@
+
+
+ 4.0.0
+ core-java-string-operations-7
+ core-java-string-operations-7
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${apache.commons.lang3.version}
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
+
+ org.liquibase
+ liquibase-core
+ 4.9.1
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ org.liquibase
+ liquibase-core
+ 4.9.1
+ test
+
+
+ junit
+ junit
+ 4.13.2
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+ 11
+ 11
+ 3.12.0
+ 1.10.0
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-7/src/test/java/com/baeldung/centertext/CenteringTextUnitTest.java b/core-java-modules/core-java-string-operations-7/src/test/java/com/baeldung/centertext/CenteringTextUnitTest.java
new file mode 100644
index 0000000000..ff53d8b3fa
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-7/src/test/java/com/baeldung/centertext/CenteringTextUnitTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.centertext;
+
+import liquibase.repackaged.org.apache.commons.lang3.StringUtils;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import static org.junit.Assert.assertEquals;
+
+public class CenteringTextUnitTest {
+
+ @Test
+ public void givenTextAndTotalWidth_whenUsingStringFormat_thenTextIsCentered() {
+ String text = "Centered Text";
+ int totalWidth = 20;
+ int padding = (totalWidth - text.length()) / 2;
+ String centeredText = String.format("%" + padding + "s%s%" + padding + "s", "", text, "");
+ String expectedCenteredText = " Centered Text ";
+ Assert.assertEquals("Centered Text", expectedCenteredText, centeredText);
+ }
+
+ @Test
+ public void givenTextAndTotalWidth_whenCenterUsingStringBuilder_thenTextIsCentered() {
+ String text = "Centered Text";
+ int width = 20;
+ int padding = (width - text.length()) / 2;
+ StringBuilder centeredText = new StringBuilder();
+ for (int i = 0; i < padding; i++) {
+ centeredText.append(" ");
+ }
+ centeredText.append(text);
+ for (int i = 0; i < padding; i++) {
+ centeredText.append(" ");
+ }
+ String centeredTextString = centeredText.toString();
+ String expectedCenteredText = " Centered Text ";
+ Assert.assertEquals("Centered Text", expectedCenteredText, centeredTextString);
+ }
+
+ @Test
+ public void givenTextAndTotalWidth_whenUsingStringUtilsCenterMethod_thenTextIsCentered() {
+ String text = "Centered Text";
+ int width = 20;
+ String centeredText = StringUtils.center(text, width);
+ String expectedCenteredText = StringUtils.center("Centered Text", width);
+ assertEquals("Centered Text", expectedCenteredText, centeredText);
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 5b37db6e1a..8cfd67aed3 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -34,6 +34,9 @@
core-java-11
core-java-11-2
core-java-11-3
+ core-java-12
+ core-java-13
+ core-java-15
core-java-collections-array-list
core-java-collections-array-list-2
core-java-collections-list-4
@@ -178,6 +181,7 @@
core-java-string-operations
core-java-string-operations-2
core-java-string-operations-6
+ core-java-string-operations-7
core-java-regex
core-java-regex-2
core-java-uuid
diff --git a/json-modules/json-2/pom.xml b/json-modules/json-2/pom.xml
index 7253088516..6cca576fb1 100644
--- a/json-modules/json-2/pom.xml
+++ b/json-modules/json-2/pom.xml
@@ -237,7 +237,6 @@
0.9.23
1.9.2
1.2.21
- 20211205
1.1.1
0.1.1
0.4.2
diff --git a/json-modules/json-arrays/pom.xml b/json-modules/json-arrays/pom.xml
index 0eefbc86fc..10c487fbda 100644
--- a/json-modules/json-arrays/pom.xml
+++ b/json-modules/json-arrays/pom.xml
@@ -38,7 +38,6 @@
1.0
- 20230227
2.8.5
1.1.2
2.28.0
diff --git a/json-modules/json-conversion/pom.xml b/json-modules/json-conversion/pom.xml
index 680f27fa38..638216f4c5 100644
--- a/json-modules/json-conversion/pom.xml
+++ b/json-modules/json-conversion/pom.xml
@@ -37,7 +37,6 @@
- 20211205
2.10.1
32.1.2-jre
diff --git a/json-modules/json/pom.xml b/json-modules/json/pom.xml
index 8210f026e7..27c9262279 100644
--- a/json-modules/json/pom.xml
+++ b/json-modules/json/pom.xml
@@ -68,7 +68,6 @@
1.0.72
1.0
1.0.1
- 20230227
2.8.5
1.1.2
2.28.0
diff --git a/json-modules/pom.xml b/json-modules/pom.xml
index 306b404049..7ac6ba19ad 100644
--- a/json-modules/pom.xml
+++ b/json-modules/pom.xml
@@ -34,4 +34,8 @@
+
+ 20230618
+
+
\ No newline at end of file
diff --git a/lightrun/api-service/.gitignore b/lightrun/lightrun-api-service/.gitignore
similarity index 100%
rename from lightrun/api-service/.gitignore
rename to lightrun/lightrun-api-service/.gitignore
diff --git a/lightrun/api-service/pom.xml b/lightrun/lightrun-api-service/pom.xml
similarity index 94%
rename from lightrun/api-service/pom.xml
rename to lightrun/lightrun-api-service/pom.xml
index f44ad07edb..b7ed5f951b 100644
--- a/lightrun/api-service/pom.xml
+++ b/lightrun/lightrun-api-service/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- api-service
+ lightrun-api-service
0.0.1-SNAPSHOT
- api-service
+ lightrun-api-service
Aggregator Service for LightRun Article
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/ApiServiceApplication.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/ApiServiceApplication.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/ApiServiceApplication.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/ApiServiceApplication.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/RequestIdGenerator.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/RequestIdGenerator.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/RequestIdGenerator.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/RequestIdGenerator.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/RestTemplateConfig.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/RestTemplateConfig.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/RestTemplateConfig.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/RestTemplateConfig.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/WebConfig.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/WebConfig.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/WebConfig.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/WebConfig.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/TaskResponse.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/TaskResponse.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/TaskResponse.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/TaskResponse.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/TasksController.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/TasksController.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/TasksController.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/TasksController.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/UnknownTaskException.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/UnknownTaskException.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/UnknownTaskException.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/UnknownTaskException.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/UserResponse.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/UserResponse.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/http/UserResponse.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/http/UserResponse.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/Task.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/Task.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/Task.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/Task.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/TaskRepository.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/TaskRepository.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/TaskRepository.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/tasks/TaskRepository.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/users/User.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/users/User.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/users/User.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/users/User.java
diff --git a/lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/users/UserRepository.java b/lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/users/UserRepository.java
similarity index 100%
rename from lightrun/api-service/src/main/java/com/baeldung/apiservice/adapters/users/UserRepository.java
rename to lightrun/lightrun-api-service/src/main/java/com/baeldung/apiservice/adapters/users/UserRepository.java
diff --git a/lightrun/api-service/src/main/resources/application.properties b/lightrun/lightrun-api-service/src/main/resources/application.properties
similarity index 100%
rename from lightrun/api-service/src/main/resources/application.properties
rename to lightrun/lightrun-api-service/src/main/resources/application.properties
diff --git a/lightrun/tasks-service/.gitignore b/lightrun/lightrun-tasks-service/.gitignore
similarity index 100%
rename from lightrun/tasks-service/.gitignore
rename to lightrun/lightrun-tasks-service/.gitignore
diff --git a/lightrun/tasks-service/pom.xml b/lightrun/lightrun-tasks-service/pom.xml
similarity index 96%
rename from lightrun/tasks-service/pom.xml
rename to lightrun/lightrun-tasks-service/pom.xml
index c3542b0089..2689a9794d 100644
--- a/lightrun/tasks-service/pom.xml
+++ b/lightrun/lightrun-tasks-service/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- tasks-service
+ lightrun-tasks-service
0.0.1-SNAPSHOT
- tasks-service
+ lightrun-tasks-service
Tasks Service for LightRun Article
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/ArtemisConfig.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/ArtemisConfig.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/ArtemisConfig.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/ArtemisConfig.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/CreateTaskRequest.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/CreateTaskRequest.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/CreateTaskRequest.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/CreateTaskRequest.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/PatchTaskRequest.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/PatchTaskRequest.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/PatchTaskRequest.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/PatchTaskRequest.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TaskResponse.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TaskResponse.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TaskResponse.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TaskResponse.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TasksController.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TasksController.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TasksController.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/TasksController.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/http-client.env.json b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/http-client.env.json
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/http-client.env.json
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/http-client.env.json
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/tasks.http b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/tasks.http
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/tasks.http
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/http/tasks.http
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/jms/JmsConsumer.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/jms/JmsConsumer.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/jms/JmsConsumer.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/jms/JmsConsumer.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TaskRecord.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TaskRecord.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TaskRecord.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TaskRecord.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TasksRepository.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TasksRepository.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TasksRepository.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/adapters/repository/TasksRepository.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/DeletedUserService.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/DeletedUserService.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/DeletedUserService.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/DeletedUserService.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java
diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/UnknownTaskException.java b/lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/UnknownTaskException.java
similarity index 100%
rename from lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/UnknownTaskException.java
rename to lightrun/lightrun-tasks-service/src/main/java/com/baeldung/tasksservice/service/UnknownTaskException.java
diff --git a/lightrun/tasks-service/src/main/resources/application.properties b/lightrun/lightrun-tasks-service/src/main/resources/application.properties
similarity index 100%
rename from lightrun/tasks-service/src/main/resources/application.properties
rename to lightrun/lightrun-tasks-service/src/main/resources/application.properties
diff --git a/lightrun/tasks-service/src/main/resources/db/migration/V1_0_0__create-tasks-table.sql b/lightrun/lightrun-tasks-service/src/main/resources/db/migration/V1_0_0__create-tasks-table.sql
similarity index 100%
rename from lightrun/tasks-service/src/main/resources/db/migration/V1_0_0__create-tasks-table.sql
rename to lightrun/lightrun-tasks-service/src/main/resources/db/migration/V1_0_0__create-tasks-table.sql
diff --git a/lightrun/users-service/.gitignore b/lightrun/lightrun-users-service/.gitignore
similarity index 100%
rename from lightrun/users-service/.gitignore
rename to lightrun/lightrun-users-service/.gitignore
diff --git a/lightrun/users-service/README.md b/lightrun/lightrun-users-service/README.md
similarity index 100%
rename from lightrun/users-service/README.md
rename to lightrun/lightrun-users-service/README.md
diff --git a/lightrun/users-service/pom.xml b/lightrun/lightrun-users-service/pom.xml
similarity index 95%
rename from lightrun/users-service/pom.xml
rename to lightrun/lightrun-users-service/pom.xml
index 9560dcf23b..40594db725 100644
--- a/lightrun/users-service/pom.xml
+++ b/lightrun/lightrun-users-service/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- users-service
+ lightrun-users-service
0.0.1-SNAPSHOT
- users-service
+ lightrun-users-service
Users Service for LightRun Article
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/JmsConfig.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/JmsConfig.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/JmsConfig.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/JmsConfig.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/UsersServiceApplication.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/UsersServiceApplication.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/UsersServiceApplication.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/UsersServiceApplication.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/CreateUserRequest.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/CreateUserRequest.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/CreateUserRequest.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/CreateUserRequest.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/PatchUserRequest.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/PatchUserRequest.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/PatchUserRequest.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/PatchUserRequest.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/UserResponse.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/UserResponse.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/UserResponse.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/UserResponse.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/UsersController.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/UsersController.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/UsersController.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/UsersController.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/http-client.env.json b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/http-client.env.json
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/http-client.env.json
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/http-client.env.json
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/users.http b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/users.http
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/http/users.http
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/http/users.http
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/jms/JmsSender.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/jms/JmsSender.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/jms/JmsSender.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/jms/JmsSender.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UserRecord.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UserRecord.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UserRecord.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UserRecord.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UsersRepository.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UsersRepository.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UsersRepository.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/adapters/repository/UsersRepository.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/service/UnknownUserException.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/service/UnknownUserException.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/service/UnknownUserException.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/service/UnknownUserException.java
diff --git a/lightrun/users-service/src/main/java/com/baeldung/usersservice/service/UsersService.java b/lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/service/UsersService.java
similarity index 100%
rename from lightrun/users-service/src/main/java/com/baeldung/usersservice/service/UsersService.java
rename to lightrun/lightrun-users-service/src/main/java/com/baeldung/usersservice/service/UsersService.java
diff --git a/lightrun/users-service/src/main/resources/application.properties b/lightrun/lightrun-users-service/src/main/resources/application.properties
similarity index 100%
rename from lightrun/users-service/src/main/resources/application.properties
rename to lightrun/lightrun-users-service/src/main/resources/application.properties
diff --git a/lightrun/users-service/src/main/resources/db/migration/V1_0_0__create-users-table.sql b/lightrun/lightrun-users-service/src/main/resources/db/migration/V1_0_0__create-users-table.sql
similarity index 100%
rename from lightrun/users-service/src/main/resources/db/migration/V1_0_0__create-users-table.sql
rename to lightrun/lightrun-users-service/src/main/resources/db/migration/V1_0_0__create-users-table.sql
diff --git a/lightrun/pom.xml b/lightrun/pom.xml
index 3fcec48cbd..78534922f6 100644
--- a/lightrun/pom.xml
+++ b/lightrun/pom.xml
@@ -18,9 +18,9 @@
- tasks-service
- users-service
- api-service
+ lightrun-tasks-service
+ lightrun-users-service
+ lightrun-api-service
\ No newline at end of file
diff --git a/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutIntegrationTest.java b/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutIntegrationTest.java
index 06962c1ea1..f012769710 100644
--- a/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutIntegrationTest.java
+++ b/logging-modules/logback/src/test/java/com/baeldung/logback/JSONLayoutIntegrationTest.java
@@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
public class JSONLayoutIntegrationTest {
private static Logger logger;
+ private static Logger jsonlogger;
private ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream();
private PrintStream ps = new PrintStream(consoleOutput);
@@ -23,16 +24,24 @@ public class JSONLayoutIntegrationTest {
public void setUp() {
// Redirect console output to our stream
System.setOut(ps);
- logger = LoggerFactory.getLogger("jsonLogger");
}
@Test
- public void whenLogLayoutInJSON_thenOutputIsCorrectJSON() {
+ public void givenJsonLayout_whenLogInJSON_thenOutputIsCorrectJSON() {
+ logger = LoggerFactory.getLogger("jsonLogger");
logger.debug("Debug message");
String currentLog = consoleOutput.toString();
assertTrue(!currentLog.isEmpty() && isValidJSON(currentLog));
}
+ @Test
+ public void givenJsonEncoder_whenLogInJSON_thenOutputIsCorrectJSON() {
+ jsonlogger = LoggerFactory.getLogger("jsonEncoderLogger");
+ jsonlogger.debug("Debug message");
+ String currentLog = consoleOutput.toString();
+ assertTrue(!currentLog.isEmpty() && isValidJSON(currentLog));
+ }
+
public static boolean isValidJSON(String jsonInString) {
try {
final ObjectMapper mapper = new ObjectMapper();
diff --git a/logging-modules/logback/src/test/resources/logback-test.xml b/logging-modules/logback/src/test/resources/logback-test.xml
index 89c0124738..24082a673d 100644
--- a/logging-modules/logback/src/test/resources/logback-test.xml
+++ b/logging-modules/logback/src/test/resources/logback-test.xml
@@ -19,10 +19,18 @@
+
+
+
+
+
+
+
+
diff --git a/maven-modules/jacoco-coverage-aggregation/aggregate-report/pom.xml b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-aggregate-report/pom.xml
similarity index 95%
rename from maven-modules/jacoco-coverage-aggregation/aggregate-report/pom.xml
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-aggregate-report/pom.xml
index 1a076cacae..627a9f3206 100644
--- a/maven-modules/jacoco-coverage-aggregation/aggregate-report/pom.xml
+++ b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-aggregate-report/pom.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.jacoco-coverage-aggregation
- aggregate-report
- aggregate-report
+ jacoco-coverage-aggregate-report
+ jacoco-coverage-aggregate-report
pom
diff --git a/maven-modules/jacoco-coverage-aggregation/controllers/pom.xml b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/pom.xml
similarity index 94%
rename from maven-modules/jacoco-coverage-aggregation/controllers/pom.xml
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/pom.xml
index 5aa54f042f..886e931224 100644
--- a/maven-modules/jacoco-coverage-aggregation/controllers/pom.xml
+++ b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/pom.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.jacoco-coverage-aggregation
- controllers
- controllers
+ jacoco-coverage-controllers-example
+ jacoco-coverage-controllers-example
jar
diff --git a/maven-modules/jacoco-coverage-aggregation/controllers/src/main/java/com/baeldung/coverageaggregation/MyApplication.java b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/main/java/com/baeldung/coverageaggregation/MyApplication.java
similarity index 100%
rename from maven-modules/jacoco-coverage-aggregation/controllers/src/main/java/com/baeldung/coverageaggregation/MyApplication.java
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/main/java/com/baeldung/coverageaggregation/MyApplication.java
diff --git a/maven-modules/jacoco-coverage-aggregation/controllers/src/main/java/com/baeldung/coverageaggregation/MyController.java b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/main/java/com/baeldung/coverageaggregation/MyController.java
similarity index 100%
rename from maven-modules/jacoco-coverage-aggregation/controllers/src/main/java/com/baeldung/coverageaggregation/MyController.java
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/main/java/com/baeldung/coverageaggregation/MyController.java
diff --git a/maven-modules/jacoco-coverage-aggregation/controllers/src/test/java/com/baeldung/coverageaggregation/MyControllerIntegrationTest.java b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/test/java/com/baeldung/coverageaggregation/MyControllerIntegrationTest.java
similarity index 100%
rename from maven-modules/jacoco-coverage-aggregation/controllers/src/test/java/com/baeldung/coverageaggregation/MyControllerIntegrationTest.java
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-controllers-example/src/test/java/com/baeldung/coverageaggregation/MyControllerIntegrationTest.java
diff --git a/maven-modules/jacoco-coverage-aggregation/services/pom.xml b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/pom.xml
similarity index 93%
rename from maven-modules/jacoco-coverage-aggregation/services/pom.xml
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/pom.xml
index 50c8c87f54..2c06694b46 100644
--- a/maven-modules/jacoco-coverage-aggregation/services/pom.xml
+++ b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/pom.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.jacoco-coverage-aggregation
- services
- services
+ jacoco-coverage-services-example
+ jacoco-coverage-services-example
jar
diff --git a/maven-modules/jacoco-coverage-aggregation/services/src/main/java/com/baeldung/coverageaggregation/MyService.java b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/src/main/java/com/baeldung/coverageaggregation/MyService.java
similarity index 100%
rename from maven-modules/jacoco-coverage-aggregation/services/src/main/java/com/baeldung/coverageaggregation/MyService.java
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/src/main/java/com/baeldung/coverageaggregation/MyService.java
diff --git a/maven-modules/jacoco-coverage-aggregation/services/src/test/java/com/baeldung/coverageaggregation/MyServiceUnitTest.java b/maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/src/test/java/com/baeldung/coverageaggregation/MyServiceUnitTest.java
similarity index 100%
rename from maven-modules/jacoco-coverage-aggregation/services/src/test/java/com/baeldung/coverageaggregation/MyServiceUnitTest.java
rename to maven-modules/jacoco-coverage-aggregation/jacoco-coverage-services-example/src/test/java/com/baeldung/coverageaggregation/MyServiceUnitTest.java
diff --git a/maven-modules/jacoco-coverage-aggregation/pom.xml b/maven-modules/jacoco-coverage-aggregation/pom.xml
index d85f41968d..70243973e8 100644
--- a/maven-modules/jacoco-coverage-aggregation/pom.xml
+++ b/maven-modules/jacoco-coverage-aggregation/pom.xml
@@ -17,9 +17,9 @@
- services
- controllers
- aggregate-report
+ jacoco-coverage-services-example
+ jacoco-coverage-controllers-example
+ jacoco-coverage-aggregate-report
diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module1/pom.xml
similarity index 83%
rename from maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml
rename to maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module1/pom.xml
index 67e60fb386..94164b472c 100644
--- a/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml
+++ b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module1/pom.xml
@@ -3,12 +3,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- module1
+ parent-pom-module1
pom
com.baeldung.maven-parent-pom-resolution
- aggregator
+ maven-parent-pom-aggregator
1.0.0-SNAPSHOT
diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/parent-pom-module3/pom.xml
similarity index 86%
rename from maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml
rename to maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/parent-pom-module3/pom.xml
index f4e3e81e7d..533157d621 100644
--- a/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml
+++ b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/parent-pom-module3/pom.xml
@@ -3,12 +3,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- module3
+ parent-pom-module3
pom
com.baeldung.maven-parent-pom-resolution
- aggregator
+ maven-parent-pom-aggregator
1.0.0-SNAPSHOT
diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/pom.xml
similarity index 72%
rename from maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml
rename to maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/pom.xml
index 9b36ef37fb..9cb4407125 100644
--- a/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml
+++ b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/parent-pom-module2/pom.xml
@@ -3,19 +3,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- module2
+ parent-pom-module2
pom
com.baeldung.maven-parent-pom-resolution
- module1
+ parent-pom-module1
1.0.0-SNAPSHOT
- ../module1/pom.xml
+ ../parent-pom-module1/pom.xml
- module3
+ parent-pom-module3
\ No newline at end of file
diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/pom.xml
similarity index 78%
rename from maven-modules/maven-parent-pom-resolution/aggregator/pom.xml
rename to maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/pom.xml
index dde2c46370..8e3a922e76 100644
--- a/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml
+++ b/maven-modules/maven-parent-pom-resolution/maven-parent-pom-aggregator/pom.xml
@@ -4,19 +4,18 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.maven-parent-pom-resolution
- aggregator
+ maven-parent-pom-aggregator
pom
com.baeldung
maven-parent-pom-resolution
1.0.0-SNAPSHOT
-
- module1
- module2
+ parent-pom-module1
+ parent-pom-module2
\ No newline at end of file
diff --git a/maven-modules/maven-parent-pom-resolution/pom.xml b/maven-modules/maven-parent-pom-resolution/pom.xml
index 288bf5f780..fa3ca3dc9a 100644
--- a/maven-modules/maven-parent-pom-resolution/pom.xml
+++ b/maven-modules/maven-parent-pom-resolution/pom.xml
@@ -9,7 +9,7 @@
pom
- aggregator
+ maven-parent-pom-aggregator
disable-plugin-examples
diff --git a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
index 31d18a2347..78e20a15be 100644
--- a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
+++ b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
@@ -1,14 +1,16 @@
package com.baeldung.bridge;
+import static com.baeldung.util.LoggerUtil.LOG;
+
public class BridgePatternDriver {
public static void main(String[] args) {
//a square with red color
Shape square = new Square(new Red());
- System.out.println(square.draw());
+ LOG.info(square.draw());
//a triangle with blue color
Shape triangle = new Triangle(new Blue());
- System.out.println(triangle.draw());
+ LOG.info(triangle.draw());
}
}
diff --git a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java
index 173281f833..b8ec67afab 100644
--- a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java
+++ b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java
@@ -1,5 +1,7 @@
package com.baeldung.composite;
+import static com.baeldung.util.LoggerUtil.LOG;
+
/**
* Created by Gebruiker on 5/1/2018.
*/
@@ -14,7 +16,7 @@ public class FinancialDepartment implements Department {
}
public void printDepartmentName() {
- System.out.println(getClass().getSimpleName());
+ LOG.info(getClass().getSimpleName());
}
public Integer getId() {
diff --git a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java
index 7f5e903100..fdc3076b53 100644
--- a/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java
+++ b/patterns-modules/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java
@@ -1,5 +1,7 @@
package com.baeldung.composite;
+import static com.baeldung.util.LoggerUtil.LOG;
+
/**
* Created by Gebruiker on 5/1/2018.
*/
@@ -14,7 +16,7 @@ public class SalesDepartment implements Department {
}
public void printDepartmentName() {
- System.out.println(getClass().getSimpleName());
+ LOG.info(getClass().getSimpleName());
}
public Integer getId() {
diff --git a/patterns-modules/design-patterns-structural/src/main/resources/log4jstructuraldp.properties b/patterns-modules/design-patterns-structural/src/main/resources/log4jstructuraldp.properties
index 5bc2bfe4b9..d7bfb41d12 100644
--- a/patterns-modules/design-patterns-structural/src/main/resources/log4jstructuraldp.properties
+++ b/patterns-modules/design-patterns-structural/src/main/resources/log4jstructuraldp.properties
@@ -1,6 +1,6 @@
# Root logger
-log4j.rootLogger=INFO, file, stdout
+log4j.rootLogger=INFO, stdout
# Write to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
diff --git a/pom.xml b/pom.xml
index 5d8358f05e..2bd9aaa0d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -361,7 +361,6 @@
muleesb
web-modules/java-lite
- web-modules/restx
persistence-modules/deltaspike
persistence-modules/hibernate-ogm
persistence-modules/spring-data-cassandra-reactive
@@ -534,7 +533,6 @@
lombok-modules/lombok-custom
muleesb
web-modules/java-lite
- web-modules/restx
persistence-modules/deltaspike
persistence-modules/hibernate-ogm
persistence-modules/spring-data-cassandra-reactive
@@ -770,10 +768,7 @@
core-java-modules
-
-
-
@@ -942,6 +937,7 @@
gradle-modules/gradle/maven-to-gradle
persistence-modules/spring-data-neo4j
parent-boot-3
+ spring-kafka-2
@@ -1050,10 +1046,7 @@
core-java-modules
gcp-firebase
-
-
-
@@ -1225,6 +1218,9 @@
gradle-modules/gradle/maven-to-gradle
persistence-modules/spring-data-neo4j
spring-actuator
+ spring-cloud-modules/spring-cloud-contract
+ spring-kafka-2
+
diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/model/User.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/model/User.java
new file mode 100644
index 0000000000..37008bb061
--- /dev/null
+++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/model/User.java
@@ -0,0 +1,22 @@
+package com.baeldung.webflux.zipwhen.model;
+
+public class User {
+
+ private final String id;
+ private final String email;
+
+ public User(String id, String email) {
+ this.id = id;
+ this.email = email;
+
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+}
diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/DatabaseService.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/DatabaseService.java
new file mode 100644
index 0000000000..d420646871
--- /dev/null
+++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/DatabaseService.java
@@ -0,0 +1,24 @@
+package com.baeldung.webflux.zipwhen.service;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.baeldung.webflux.zipwhen.model.User;
+
+import reactor.core.publisher.Mono;
+
+public class DatabaseService {
+ private Map dataStore = new ConcurrentHashMap<>();
+
+ public Mono saveUserData(User user) {
+ return Mono.create(sink -> {
+ try {
+ dataStore.put(user.getId(), user);
+ sink.success(true);
+ } catch (Exception e) {
+ sink.success(false);
+ }
+ });
+ }
+}
+
diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/EmailService.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/EmailService.java
new file mode 100644
index 0000000000..9c0340b7ee
--- /dev/null
+++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/EmailService.java
@@ -0,0 +1,20 @@
+package com.baeldung.webflux.zipwhen.service;
+
+import reactor.core.publisher.Mono;
+
+public class EmailService {
+ private final UserService userService;
+
+ public EmailService(UserService userService) {
+ this.userService = userService;
+ }
+
+ public Mono sendEmail(String userId) {
+ return userService.getUser(userId)
+ .flatMap(user -> {
+ System.out.println("Sending email to: " + user.getEmail());
+ return Mono.just(true);
+ })
+ .defaultIfEmpty(false);
+ }
+}
diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/UserService.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/UserService.java
new file mode 100644
index 0000000000..fe602fbc33
--- /dev/null
+++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/service/UserService.java
@@ -0,0 +1,12 @@
+package com.baeldung.webflux.zipwhen.service;
+
+import com.baeldung.webflux.zipwhen.model.User;
+
+import reactor.core.publisher.Mono;
+
+public class UserService {
+ public Mono getUser(String userId) {
+ return Mono.just(new User(userId, "john Major"));
+ }
+}
+
diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/web/UserController.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/web/UserController.java
new file mode 100644
index 0000000000..dbd89c45d3
--- /dev/null
+++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/zipwhen/web/UserController.java
@@ -0,0 +1,43 @@
+package com.baeldung.webflux.zipwhen.web;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import com.baeldung.webflux.zipwhen.model.User;
+import com.baeldung.webflux.zipwhen.service.DatabaseService;
+import com.baeldung.webflux.zipwhen.service.EmailService;
+import com.baeldung.webflux.zipwhen.service.UserService;
+
+import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
+import reactor.util.function.Tuples;
+
+public class UserController {
+ private final UserService userService;
+ private final EmailService emailService;
+ private final DatabaseService databaseService;
+
+ public UserController(UserService userService, EmailService emailService, DatabaseService databaseService) {
+ this.userService = userService;
+ this.emailService = emailService;
+ this.databaseService = databaseService;
+ }
+
+ @GetMapping("/example/{userId}")
+ public Mono> combineAllDataFor(@PathVariable String userId) {
+ Mono userMono = userService.getUser(userId);
+ Mono emailSentMono = emailService.sendEmail(userId)
+ .subscribeOn(Schedulers.parallel());
+ Mono databaseResultMono = userMono.flatMap(user -> databaseService.saveUserData(user)
+ .map(Object::toString));
+
+ return userMono.zipWhen(user -> emailSentMono, Tuples::of)
+ .zipWhen(tuple -> databaseResultMono, (tuple, databaseResult) -> {
+ User user = tuple.getT1();
+ Boolean emailSent = tuple.getT2();
+ return ResponseEntity.ok()
+ .body("Response: " + user + ", Email Sent: " + emailSent + ", Database Result: " + databaseResult);
+ });
+ }
+}
diff --git a/spring-5-webflux-2/src/test/java/com/baeldung/webflux/zipwhen/UserControllerUnitTest.java b/spring-5-webflux-2/src/test/java/com/baeldung/webflux/zipwhen/UserControllerUnitTest.java
new file mode 100644
index 0000000000..8ed4cfb6c6
--- /dev/null
+++ b/spring-5-webflux-2/src/test/java/com/baeldung/webflux/zipwhen/UserControllerUnitTest.java
@@ -0,0 +1,43 @@
+package com.baeldung.webflux.zipwhen;
+
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import com.baeldung.webflux.zipwhen.model.User;
+import com.baeldung.webflux.zipwhen.service.DatabaseService;
+import com.baeldung.webflux.zipwhen.service.EmailService;
+import com.baeldung.webflux.zipwhen.service.UserService;
+import com.baeldung.webflux.zipwhen.web.UserController;
+
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+public class UserControllerUnitTest {
+ @Test
+ public void givenUserId_whenCombineAllData_thenReturnsMonoWithCombinedData() {
+ UserService userService = Mockito.mock(UserService.class);
+ EmailService emailService = Mockito.mock(EmailService.class);
+ DatabaseService databaseService = Mockito.mock(DatabaseService.class);
+
+ String userId = "123";
+ User user = new User(userId, "John Doe");
+
+ Mockito.when(userService.getUser(userId))
+ .thenReturn(Mono.just(user));
+ Mockito.when(emailService.sendEmail(userId))
+ .thenReturn(Mono.just(true));
+ Mockito.when(databaseService.saveUserData(user))
+ .thenReturn(Mono.just(true));
+
+ UserController userController = new UserController(userService, emailService, databaseService);
+
+ Mono> responseMono = userController.combineAllDataFor(userId);
+
+ StepVerifier.create(responseMono)
+ .expectNextMatches(responseEntity -> responseEntity.getStatusCode() == HttpStatus.OK && responseEntity.getBody()
+ .equals("Response: " + user + ", Email Sent: true, Database Result: " + true))
+ .verifyComplete();
+ }
+}
diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml
index 461264012a..259a40dc38 100644
--- a/spring-boot-modules/pom.xml
+++ b/spring-boot-modules/pom.xml
@@ -106,6 +106,7 @@
spring-boot-documentation
spring-boot-3-url-matching
spring-boot-graalvm-docker
+ spring-boot-validations
diff --git a/spring-boot-modules/spring-boot-keycloak/pom.xml b/spring-boot-modules/spring-boot-keycloak/pom.xml
index 13339c9de1..ebba1f7f67 100644
--- a/spring-boot-modules/spring-boot-keycloak/pom.xml
+++ b/spring-boot-modules/spring-boot-keycloak/pom.xml
@@ -11,9 +11,10 @@
This is a simple application demonstrating integration between Keycloak and Spring Boot.
- com.baeldung.spring-boot-modules
- spring-boot-modules
- 1.0.0-SNAPSHOT
+ com.baeldung
+ parent-boot-3
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-3
@@ -105,7 +106,7 @@
com.baeldung.keycloak.SpringBootKeycloakApp
4.0.0
1.6.3
- 2.5.0
+ 3.1.0
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/Customer.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/Customer.java
index 3293446b1d..b0aff5e724 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/Customer.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/Customer.java
@@ -1,9 +1,9 @@
package com.baeldung.keycloak;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Customer {
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/KeycloakLogoutHandler.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/KeycloakLogoutHandler.java
index 06c41e9b1d..d04fff8378 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/KeycloakLogoutHandler.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/KeycloakLogoutHandler.java
@@ -10,8 +10,8 @@ import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
@Component
public class KeycloakLogoutHandler implements LogoutHandler {
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/SecurityConfig.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/SecurityConfig.java
index 3423f8eb2b..eb7767480f 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/SecurityConfig.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/SecurityConfig.java
@@ -12,6 +12,7 @@ import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
@EnableWebSecurity
@@ -32,7 +33,7 @@ class SecurityConfig {
@Bean
public SecurityFilterChain clientFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
- .antMatchers("/")
+ .requestMatchers(new AntPathRequestMatcher("/"))
.permitAll()
.anyRequest()
.authenticated();
@@ -48,7 +49,7 @@ class SecurityConfig {
@Bean
public SecurityFilterChain resourceServerFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
- .antMatchers("/customers*")
+ .requestMatchers(new AntPathRequestMatcher("/customers*"))
.hasRole("USER")
.anyRequest()
.authenticated();
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java
index bbd96c8135..8843aee25a 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java
@@ -8,7 +8,7 @@ import java.security.Principal;
import org.springframework.beans.factory.annotation.Autowired;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@Controller
public class WebController {
diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloaksoap/ProductsEndpoint.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloaksoap/ProductsEndpoint.java
index 58f7739af0..b072789078 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloaksoap/ProductsEndpoint.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloaksoap/ProductsEndpoint.java
@@ -10,7 +10,7 @@ import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
-import javax.annotation.security.RolesAllowed;
+import jakarta.annotation.security.RolesAllowed;
import java.util.Map;
@Endpoint
diff --git a/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/keycloaksoap/KeycloakSoapLiveTest.java b/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/keycloaksoap/KeycloakSoapLiveTest.java
index 171c7bf330..508061396f 100644
--- a/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/keycloaksoap/KeycloakSoapLiveTest.java
+++ b/spring-boot-modules/spring-boot-keycloak/src/test/java/com/baeldung/keycloaksoap/KeycloakSoapLiveTest.java
@@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
diff --git a/spring-boot-modules/spring-boot-springdoc-2/pom.xml b/spring-boot-modules/spring-boot-springdoc-2/pom.xml
index 1ea52667c5..dace3d17ef 100644
--- a/spring-boot-modules/spring-boot-springdoc-2/pom.xml
+++ b/spring-boot-modules/spring-boot-springdoc-2/pom.xml
@@ -112,7 +112,7 @@
- 2.1.0
+ 2.2.0
1.4
diff --git a/spring-boot-modules/spring-boot-validations/README.md b/spring-boot-modules/spring-boot-validations/README.md
new file mode 100644
index 0000000000..0d07204f3f
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles
+
+- [Validate Boolean Type in Spring Boot](https://www.baeldung.com/spring-boot-validate-boolean-type)
diff --git a/spring-boot-modules/spring-boot-validations/pom.xml b/spring-boot-modules/spring-boot-validations/pom.xml
new file mode 100644
index 0000000000..13044471af
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/pom.xml
@@ -0,0 +1,35 @@
+
+ 4.0.0
+
+ com.baeldung.spring-boot-modules
+ spring-boot-modules
+ 1.0.0-SNAPSHOT
+
+ spring-boot-validations
+ spring-boot-validations
+ Demo of Validations in Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/Application.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/Application.java
new file mode 100644
index 0000000000..c0490d50c6
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controller/ValidationController.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controller/ValidationController.java
new file mode 100644
index 0000000000..d4ea9a6336
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controller/ValidationController.java
@@ -0,0 +1,33 @@
+package com.baeldung.controller;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.dto.BooleanObject;
+import com.baeldung.service.ValidationService;
+
+@RestController
+public class ValidationController {
+
+ @Autowired
+ ValidationService service;
+
+ @PostMapping("/validateBoolean")
+ public ResponseEntity processBooleanObject(@RequestBody @Valid BooleanObject booleanObj) {
+ return ResponseEntity.ok("BooleanObject is valid");
+ }
+
+ @PostMapping("/validateBooleanAtService")
+ public ResponseEntity processBooleanObjectAtService() {
+ BooleanObject boolObj = new BooleanObject();
+ boolObj.setBoolField(Boolean.TRUE);
+ boolObj.setTrueField(Boolean.FALSE);
+ service.processBoolean(boolObj);
+ return ResponseEntity.ok("BooleanObject is valid");
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controlleradvice/GlobalExceptionHandler.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controlleradvice/GlobalExceptionHandler.java
new file mode 100644
index 0000000000..82f0839acf
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/controlleradvice/GlobalExceptionHandler.java
@@ -0,0 +1,37 @@
+package com.baeldung.controlleradvice;
+
+import java.util.stream.Collectors;
+
+import javax.validation.ConstraintViolationException;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ @ResponseStatus(value = HttpStatus.BAD_REQUEST)
+ public String handleValidationException(MethodArgumentNotValidException ex) {
+ return ex.getBindingResult()
+ .getFieldErrors()
+ .stream()
+ .map(e -> e.getDefaultMessage())
+ .collect(Collectors.joining(","));
+ }
+
+ @ExceptionHandler(IllegalArgumentException.class)
+ @ResponseStatus(value = HttpStatus.BAD_REQUEST)
+ public String handleIllegalArugmentException(IllegalArgumentException ex) {
+ return ex.getMessage();
+ }
+
+ @ExceptionHandler(ConstraintViolationException.class)
+ @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
+ public String handleConstraintViolationException(ConstraintViolationException ex) {
+ return ex.getMessage();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/deserializer/BooleanDeserializer.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/deserializer/BooleanDeserializer.java
new file mode 100644
index 0000000000..01a8e0eba0
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/deserializer/BooleanDeserializer.java
@@ -0,0 +1,21 @@
+package com.baeldung.deserializer;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+public class BooleanDeserializer extends JsonDeserializer {
+ @Override
+ public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException {
+ String value = parser.getText();
+ if (value != null && value.equals("+")) {
+ return Boolean.TRUE;
+ } else if (value != null && value.equals("-")) {
+ return Boolean.FALSE;
+ } else {
+ throw new IllegalArgumentException("Only values accepted as Boolean are + and -");
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/dto/BooleanObject.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/dto/BooleanObject.java
new file mode 100644
index 0000000000..750b23fe11
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/dto/BooleanObject.java
@@ -0,0 +1,56 @@
+package com.baeldung.dto;
+
+import javax.validation.constraints.AssertFalse;
+import javax.validation.constraints.AssertTrue;
+import javax.validation.constraints.NotNull;
+
+import com.baeldung.deserializer.BooleanDeserializer;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+public class BooleanObject {
+
+ @NotNull(message = "boolField cannot be null")
+ Boolean boolField;
+
+ @AssertTrue(message = "trueField must have true value")
+ Boolean trueField;
+
+ @NotNull(message = "falseField cannot be null")
+ @AssertFalse(message = "falseField must have false value")
+ Boolean falseField;
+
+ @JsonDeserialize(using = BooleanDeserializer.class)
+ Boolean boolStringVar;
+
+ public Boolean getBoolField() {
+ return boolField;
+ }
+
+ public void setBoolField(Boolean boolField) {
+ this.boolField = boolField;
+ }
+
+ public Boolean getTrueField() {
+ return trueField;
+ }
+
+ public void setTrueField(Boolean trueField) {
+ this.trueField = trueField;
+ }
+
+ public Boolean getFalseField() {
+ return falseField;
+ }
+
+ public void setFalseField(Boolean falseField) {
+ this.falseField = falseField;
+ }
+
+ public Boolean getBoolStringVar() {
+ return boolStringVar;
+ }
+
+ public void setBoolStringVar(Boolean boolStringVar) {
+ this.boolStringVar = boolStringVar;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/service/ValidationService.java b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/service/ValidationService.java
new file mode 100644
index 0000000000..3fc7160bd5
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/main/java/com/baeldung/service/ValidationService.java
@@ -0,0 +1,17 @@
+package com.baeldung.service;
+
+import javax.validation.Valid;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import com.baeldung.dto.BooleanObject;
+
+@Service
+@Validated
+public class ValidationService {
+
+ public void processBoolean(@Valid BooleanObject booleanObj) {
+ // further processing
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/controller/ValidationControllerUnitTest.java b/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/controller/ValidationControllerUnitTest.java
new file mode 100644
index 0000000000..f05d76e3f1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/controller/ValidationControllerUnitTest.java
@@ -0,0 +1,125 @@
+package com.baeldung.controller;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.web.servlet.MockMvc;
+
+import com.baeldung.service.ValidationService;
+
+@ExtendWith(SpringExtension.class)
+@WebMvcTest(controllers = ValidationController.class)
+class ValidationControllerUnitTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @TestConfiguration
+ static class EmployeeServiceImplTestContextConfiguration {
+ @Bean
+ public ValidationService validationService() {
+ return new ValidationService() {
+ };
+ }
+ }
+
+ @Autowired
+ ValidationService service;
+
+ @Test
+ void whenNullInputForBooleanField_thenHttpBadRequestAsHttpResponse() throws Exception {
+ String postBody = "{\"boolField\":null,\"trueField\":true,\"falseField\":false,\"boolStringVar\":\"+\"}";
+
+ mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andExpect(status().isBadRequest());
+ }
+
+ @Test
+ void whenInvalidInputForTrueBooleanField_thenErrorResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":false,\"falseField\":false,\"boolStringVar\":\"+\"}";
+
+ String output = mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ assertEquals("trueField must have true value", output);
+ }
+
+ @Test
+ void whenInvalidInputForFalseBooleanField_thenErrorResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":true,\"falseField\":true,\"boolStringVar\":\"+\"}";
+
+ String output = mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ assertEquals("falseField must have false value", output);
+ }
+
+ @Test
+ void whenInvalidBooleanFromJson_thenErrorResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":true,\"falseField\":false,\"boolStringVar\":\"plus\"}";
+
+ String output = mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ assertEquals("Only values accepted as Boolean are + and -", output);
+ }
+
+ @Test
+ void whenAllBooleanFieldsValid_thenCorrectResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":true,\"falseField\":false,\"boolStringVar\":\"+\"}";
+
+ String output = mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ assertEquals("BooleanObject is valid", output);
+ }
+
+ @Test
+ void givenAllBooleanFieldsValid_whenServiceValidationFails_thenErrorResponse() throws Exception {
+ mockMvc.perform(post("/validateBooleanAtService").contentType("application/json"))
+ .andExpect(status().isInternalServerError());
+ }
+
+ @Test
+ void whenNullInputForTrueBooleanField_thenCorrectResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":null,\"falseField\":false,\"boolStringVar\":\"+\"}";
+
+ mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andExpect(status().isOk());
+ }
+
+ @Test
+ void whenNullInputForFalseBooleanField_thenHttpBadRequestAsHttpResponse() throws Exception {
+ String postBody = "{\"boolField\":true,\"trueField\":true,\"falseField\":null,\"boolStringVar\":\"+\"}";
+
+ String output = mockMvc.perform(post("/validateBoolean").contentType("application/json")
+ .content(postBody))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ assertEquals("falseField cannot be null", output);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/dto/BooleanUnitTest.java b/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/dto/BooleanUnitTest.java
new file mode 100644
index 0000000000..9ab04794c6
--- /dev/null
+++ b/spring-boot-modules/spring-boot-validations/src/test/java/com/baeldung/dto/BooleanUnitTest.java
@@ -0,0 +1,21 @@
+package com.baeldung.dto;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class BooleanUnitTest {
+
+ @Test
+ void givenInputAsString_whenStringToBoolean_thenValidBooleanConversion() {
+ assertEquals(Boolean.TRUE, Boolean.valueOf("TRUE"));
+ assertEquals(Boolean.FALSE, Boolean.valueOf("false"));
+ assertEquals(Boolean.TRUE, Boolean.parseBoolean("True"));
+ }
+
+ @Test
+ void givenInputAsboolean_whenbooleanToBoolean_thenValidBooleanConversion() {
+ assertEquals(Boolean.TRUE, Boolean.valueOf(true));
+ assertEquals(Boolean.FALSE, Boolean.valueOf(false));
+ }
+}
diff --git a/spring-boot-rest/README.md b/spring-boot-rest/README.md
index 365a21781c..ee12036528 100644
--- a/spring-boot-rest/README.md
+++ b/spring-boot-rest/README.md
@@ -1,6 +1,6 @@
## Spring Boot REST
-This module contains articles about Spring Boot RESTful APIs.
+### ! This module contains articles about Spring Boot RESTful APIs. It should not be moved or used to store the code for any further article.
### Relevant Articles
diff --git a/spring-kafka-2/src/main/resources/application.properties b/spring-kafka-2/src/main/resources/application.properties
index 4725ace2d9..ed844cadf8 100644
--- a/spring-kafka-2/src/main/resources/application.properties
+++ b/spring-kafka-2/src/main/resources/application.properties
@@ -1,4 +1,4 @@
-spring.kafka.bootstrap-servers=localhost:9092
+spring.kafka.bootstrap-servers=localhost:9092,localhost:9093,localhost:9094
message.topic.name=baeldung
long.message.topic.name=longMessage
greeting.topic.name=greeting
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/multiplelisteners/KafkaMultipleListenersIntegrationTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/multiplelisteners/KafkaMultipleListenersIntegrationTest.java
index b6634ec7ed..9dfebb104e 100644
--- a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/multiplelisteners/KafkaMultipleListenersIntegrationTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/multiplelisteners/KafkaMultipleListenersIntegrationTest.java
@@ -19,7 +19,7 @@ import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
import org.springframework.kafka.test.context.EmbeddedKafka;
@SpringBootTest(classes = MultipleListenersApplicationKafkaApp.class)
-@EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+@EmbeddedKafka(partitions = 1, controlledShutdown = true, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
class KafkaMultipleListenersIntegrationTest {
@Autowired
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/retryable/KafkaRetryableIntegrationTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/retryable/KafkaRetryableIntegrationTest.java
index 52cda85f90..daec8232bf 100644
--- a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/retryable/KafkaRetryableIntegrationTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/retryable/KafkaRetryableIntegrationTest.java
@@ -22,7 +22,7 @@ import com.baeldung.spring.kafka.retryable.RetryableApplicationKafkaApp;
import com.fasterxml.jackson.databind.ObjectMapper;
@SpringBootTest(classes = RetryableApplicationKafkaApp.class)
-@EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+@EmbeddedKafka(partitions = 1, controlledShutdown = true, brokerProperties = { "listeners=PLAINTEXT://localhost:9093", "port=9093" })
public class KafkaRetryableIntegrationTest {
@ClassRule
public static EmbeddedKafkaBroker embeddedKafka = new EmbeddedKafkaBroker(1, true, "multitype");
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/topicsandpartitions/KafkaTopicsAndPartitionsIntegrationTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/topicsandpartitions/KafkaTopicsAndPartitionsIntegrationTest.java
index de720ef955..4413239c78 100644
--- a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/topicsandpartitions/KafkaTopicsAndPartitionsIntegrationTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/topicsandpartitions/KafkaTopicsAndPartitionsIntegrationTest.java
@@ -8,7 +8,7 @@ import org.springframework.kafka.test.EmbeddedKafkaBroker;
import org.springframework.kafka.test.context.EmbeddedKafka;
@SpringBootTest(classes = ThermostatApplicationKafkaApp.class)
-@EmbeddedKafka(partitions = 2, brokerProperties = {"listeners=PLAINTEXT://localhost:9092", "port=9092"})
+@EmbeddedKafka(partitions = 2, controlledShutdown = true, brokerProperties = {"listeners=PLAINTEXT://localhost:9094", "port=9094"})
public class KafkaTopicsAndPartitionsIntegrationTest {
@ClassRule
public static EmbeddedKafkaBroker embeddedKafka = new EmbeddedKafkaBroker(1, true, "multitype");
diff --git a/spring-reactive-modules/pom.xml b/spring-reactive-modules/pom.xml
index 06519d723a..dd827d796e 100644
--- a/spring-reactive-modules/pom.xml
+++ b/spring-reactive-modules/pom.xml
@@ -19,7 +19,6 @@
spring-reactive-data
spring-reactive-data-2
- spring-5-reactive
spring-reactive-2
spring-reactive-3
spring-reactive-client
@@ -27,7 +26,7 @@
spring-reactive-filters
spring-reactive-oauth
spring-reactive-security
- spring-data-couchbase
+ spring-reactive-data-couchbase
spring-reactive
spring-reactive-exceptions
spring-reactor
@@ -64,7 +63,4 @@
-
-
-
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/.gitignore b/spring-reactive-modules/spring-5-reactive/.gitignore
deleted file mode 100644
index dec013dfa4..0000000000
--- a/spring-reactive-modules/spring-5-reactive/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-#folders#
-.idea
-/target
-/neoDb*
-/data
-/src/main/webapp/WEB-INF/classes
-*/META-INF/*
-
-# Packaged files #
-*.jar
-*.war
-*.ear
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/README.md b/spring-reactive-modules/spring-5-reactive/README.md
deleted file mode 100644
index 3f44267234..0000000000
--- a/spring-reactive-modules/spring-5-reactive/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Spring 5 Reactive Project
-
-This module contains articles about reactive Spring Boot
-
-### The Course
-The "REST With Spring" Classes: https://bit.ly/restwithspring
-
-### Relevant Articles
-
-- [Exploring the Spring 5 WebFlux URL Matching](https://www.baeldung.com/spring-5-mvc-url-matching)
-- [Reactive WebSockets with Spring 5](https://www.baeldung.com/spring-5-reactive-websockets)
-- [How to Set a Header on a Response with Spring 5](https://www.baeldung.com/spring-response-header)
-- [A Guide to Spring Session Reactive Support: WebSession](https://www.baeldung.com/spring-session-reactive)
-- More articles: [[next -->]](../spring-5-reactive-2)
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/pom.xml b/spring-reactive-modules/spring-5-reactive/pom.xml
deleted file mode 100644
index fd47c70a07..0000000000
--- a/spring-reactive-modules/spring-5-reactive/pom.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
- 4.0.0
- spring-5-reactive
- 0.0.1-SNAPSHOT
- spring-5-reactive
- jar
- spring 5 sample project about new features
-
-
- com.baeldung.spring.reactive
- spring-reactive-modules
- 1.0.0-SNAPSHOT
-
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.springframework.boot
- spring-boot-starter-tomcat
-
-
- org.springframework.boot
- spring-boot-starter-integration
-
-
- org.springframework.boot
- spring-boot-starter-websocket
-
-
- javax.json.bind
- javax.json.bind-api
-
-
- org.projectlombok
- lombok
- compile
-
-
- org.apache.geronimo.specs
- geronimo-json_1.1_spec
- ${geronimo-json_1.1_spec.version}
-
-
- org.apache.johnzon
- johnzon-jsonb
-
-
-
- org.apache.commons
- commons-lang3
-
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
-
-
- org.springframework
- spring-test
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.security
- spring-security-test
- test
-
-
- io.projectreactor
- reactor-test
- test
-
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.session
- spring-session-core
-
-
- org.springframework.session
- spring-session-data-redis
-
-
- org.apache.commons
- commons-collections4
- ${commons-collections4.version}
- test
-
-
- io.reactivex.rxjava2
- rxjava
-
-
- org.apache.httpcomponents
- httpclient
-
-
- io.netty
- netty-all
-
-
-
-
-
-
- maven-resources-plugin
- 3.0.1
-
-
- copy-resources
- validate
-
- copy-resources
-
-
-
-
- src/main/assets
- true
-
-
- ${basedir}/target/classes/assets
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
- com.baeldung.reactive.Spring5ReactiveApplication
- JAR
-
-
-
-
-
-
- 1.1.3
- 1.0
- 1.0
-
-
-
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/assets/index.html b/spring-reactive-modules/spring-5-reactive/src/main/assets/index.html
deleted file mode 100644
index 047514df1c..0000000000
--- a/spring-reactive-modules/spring-5-reactive/src/main/assets/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- Baeldung: Static Content in Spring WebFlux
-
-
-Example Spring Web Flux and web resources configuration
-
-
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxSecurityConfig.java b/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxSecurityConfig.java
deleted file mode 100644
index 61927e47ab..0000000000
--- a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxSecurityConfig.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.baeldung.websession.configuration;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
-import org.springframework.security.config.web.server.ServerHttpSecurity;
-import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.server.SecurityWebFilterChain;
-import org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository;
-
-@Configuration
-@EnableWebFluxSecurity
-public class WebFluxSecurityConfig {
-
- @Bean
- public MapReactiveUserDetailsService userDetailsService() {
- UserDetails admin = User
- .withUsername("admin")
- .password(encoder().encode("password"))
- .roles("ADMIN")
- .build();
-
- UserDetails user = User
- .withUsername("user")
- .password(encoder().encode("password"))
- .roles("USER")
- .build();
-
- return new MapReactiveUserDetailsService(admin, user);
- }
-
- @Bean
- public SecurityWebFilterChain webSessionSpringSecurityFilterChain(ServerHttpSecurity http) {
- http.authorizeExchange()
- .anyExchange().authenticated()
- .and()
- .httpBasic()
- .securityContextRepository(new WebSessionServerSecurityContextRepository())
- .and()
- .formLogin();
-
- http.csrf().disable();
-
- return http.build();
-
- }
-
- @Bean
- public PasswordEncoder encoder() {
- return new BCryptPasswordEncoder();
- }
-}
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/application.properties b/spring-reactive-modules/spring-5-reactive/src/main/resources/application.properties
deleted file mode 100644
index dfe4a4d994..0000000000
--- a/spring-reactive-modules/spring-5-reactive/src/main/resources/application.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-logging.level.root=INFO
-server.tomcat.max-keep-alive-requests=1
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-reactive-2/README.md b/spring-reactive-modules/spring-reactive-2/README.md
index a5df5187bf..a6a4c4f5d0 100644
--- a/spring-reactive-modules/spring-reactive-2/README.md
+++ b/spring-reactive-modules/spring-reactive-2/README.md
@@ -7,4 +7,6 @@ This module contains articles about reactive Spring Boot.
- [Static Content in Spring WebFlux](https://www.baeldung.com/spring-webflux-static-content)
- [Server-Sent Events in Spring](https://www.baeldung.com/spring-server-sent-events)
- [Backpressure Mechanism in Spring WebFlux](https://www.baeldung.com/spring-webflux-backpressure)
+- [Exploring the Spring 5 WebFlux URL Matching](https://www.baeldung.com/spring-5-mvc-url-matching)
+- [How to Set a Header on a Response with Spring 5](https://www.baeldung.com/spring-response-header)
- More articles: [[<-- prev]](../spring-5-reactive) [[next -->]](../spring-5-reactive-3)
diff --git a/spring-reactive-modules/spring-reactive-2/pom.xml b/spring-reactive-modules/spring-reactive-2/pom.xml
index ba40f3b48a..13970851cd 100644
--- a/spring-reactive-modules/spring-reactive-2/pom.xml
+++ b/spring-reactive-modules/spring-reactive-2/pom.xml
@@ -59,6 +59,10 @@
spring-security-test
test
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/Spring5ReactiveApplication.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/Spring5ReactiveApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/Spring5ReactiveApplication.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/Spring5ReactiveApplication.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/FooReactiveController.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/controller/FooReactiveController.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/FooReactiveController.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/controller/FooReactiveController.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/PathPatternController.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/controller/PathPatternController.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/PathPatternController.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/controller/PathPatternController.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Foo.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/model/Foo.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Foo.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/model/Foo.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/controllers/ResponseHeaderController.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/controllers/ResponseHeaderController.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/controllers/ResponseHeaderController.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/controllers/ResponseHeaderController.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/filter/AddResponseHeaderWebFilter.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/filter/AddResponseHeaderWebFilter.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/filter/AddResponseHeaderWebFilter.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/filter/AddResponseHeaderWebFilter.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/functional/handlers/ResponseHeaderHandler.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/functional/handlers/ResponseHeaderHandler.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/functional/handlers/ResponseHeaderHandler.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/functional/handlers/ResponseHeaderHandler.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/functional/routers/ResponseHeadersRouterFunctions.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/functional/routers/ResponseHeadersRouterFunctions.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/responseheaders/functional/routers/ResponseHeadersRouterFunctions.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/responseheaders/functional/routers/ResponseHeadersRouterFunctions.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/Actor.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/Actor.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/Actor.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/Actor.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java
similarity index 98%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java
index b7bb53600e..6007597220 100644
--- a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java
+++ b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctions.java
@@ -32,7 +32,7 @@ public class ExploreSpring5URLPatternUsingRouterFunctions {
.and(RouterFunctions.resources("/resources/**", new ClassPathResource("resources/")));
}
- WebServer start() throws Exception {
+ WebServer start() {
WebHandler webHandler = (WebHandler) toHttpHandler(routingFunction());
HttpHandler httpHandler = WebHttpHandlerBuilder.webHandler(webHandler)
.filter(new IndexRewriteFilter())
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/FormHandler.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/FormHandler.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/FormHandler.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/FormHandler.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/FunctionalWebApplication.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/FunctionalWebApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/FunctionalWebApplication.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/FunctionalWebApplication.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/IndexRewriteFilter.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/IndexRewriteFilter.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/urlmatch/IndexRewriteFilter.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/urlmatch/IndexRewriteFilter.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/util/CpuUtils.java b/spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/util/CpuUtils.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/reactive/util/CpuUtils.java
rename to spring-reactive-modules/spring-reactive-2/src/main/java/com/baeldung/reactive/util/CpuUtils.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/files/hello.txt b/spring-reactive-modules/spring-reactive-2/src/main/resources/files/hello.txt
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/resources/files/hello.txt
rename to spring-reactive-modules/spring-reactive-2/src/main/resources/files/hello.txt
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/files/test/test.txt b/spring-reactive-modules/spring-reactive-2/src/main/resources/files/test/test.txt
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/resources/files/test/test.txt
rename to spring-reactive-modules/spring-reactive-2/src/main/resources/files/test/test.txt
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/resources/test/test.txt b/spring-reactive-modules/spring-reactive-2/src/main/resources/resources/test/test.txt
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/resources/resources/test/test.txt
rename to spring-reactive-modules/spring-reactive-2/src/main/resources/resources/test/test.txt
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/FluxUnitTest.java b/spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/FluxUnitTest.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/FluxUnitTest.java
rename to spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/FluxUnitTest.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/responseheaders/ResponseHeaderLiveTest.java b/spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/responseheaders/ResponseHeaderLiveTest.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/responseheaders/ResponseHeaderLiveTest.java
rename to spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/responseheaders/ResponseHeaderLiveTest.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctionsIntegrationTest.java b/spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctionsIntegrationTest.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctionsIntegrationTest.java
rename to spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/urlmatch/ExploreSpring5URLPatternUsingRouterFunctionsIntegrationTest.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/urlmatch/PathPatternsUsingHandlerMethodIntegrationTest.java b/spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/urlmatch/PathPatternsUsingHandlerMethodIntegrationTest.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/reactive/urlmatch/PathPatternsUsingHandlerMethodIntegrationTest.java
rename to spring-reactive-modules/spring-reactive-2/src/test/java/com/baeldung/reactive/urlmatch/PathPatternsUsingHandlerMethodIntegrationTest.java
diff --git a/spring-reactive-modules/spring-reactive-3/README.md b/spring-reactive-modules/spring-reactive-3/README.md
index 640a60d63d..631763fa59 100644
--- a/spring-reactive-modules/spring-reactive-3/README.md
+++ b/spring-reactive-modules/spring-reactive-3/README.md
@@ -5,4 +5,7 @@ This module contains articles about reactive Spring Boot.
- [Logging a Reactive Sequence](https://www.baeldung.com/spring-reactive-sequence-logging)
- [Reading Flux Into a Single InputStream Using Spring Reactive WebClient](https://www.baeldung.com/spring-reactive-read-flux-into-inputstream)
- [Cancel an Ongoing Flux in Spring WebFlux](https://www.baeldung.com/spring-webflux-cancel-flux)
+- [Spring Boot Actuator](https://www.baeldung.com/spring-boot-actuators)
+- [Reactive WebSockets with Spring 5](https://www.baeldung.com/spring-5-reactive-websockets)
+- [A Guide to Spring Session Reactive Support: WebSession](https://www.baeldung.com/spring-session-reactive)
- More articles: [[<-- prev]](../spring-5-reactive-2)
diff --git a/spring-reactive-modules/spring-reactive-3/pom.xml b/spring-reactive-modules/spring-reactive-3/pom.xml
index 7672fa29f3..96f23f1339 100644
--- a/spring-reactive-modules/spring-reactive-3/pom.xml
+++ b/spring-reactive-modules/spring-reactive-3/pom.xml
@@ -47,6 +47,22 @@
org.projectlombok
lombok
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+ org.springframework.session
+ spring-session-core
+
+
+ org.springframework.session
+ spring-session-data-redis
+
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/WEB-INF/web.xml b/spring-reactive-modules/spring-reactive-3/src/main/WEB-INF/web.xml
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/WEB-INF/web.xml
rename to spring-reactive-modules/spring-reactive-3/src/main/WEB-INF/web.xml
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/Actor.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/Actor.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/Actor.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/Actor.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FormHandler.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FormHandler.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FormHandler.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FormHandler.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FunctionalSpringBootApplication.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FunctionalSpringBootApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FunctionalSpringBootApplication.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FunctionalSpringBootApplication.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FunctionalWebApplication.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FunctionalWebApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/FunctionalWebApplication.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/FunctionalWebApplication.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/IndexRewriteFilter.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/IndexRewriteFilter.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/IndexRewriteFilter.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/IndexRewriteFilter.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/RootServlet.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/RootServlet.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/functional/RootServlet.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/functional/RootServlet.java
diff --git a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/DownstreamServiceHealthIndicator.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/DownstreamServiceHealthIndicator.java
similarity index 100%
rename from spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/DownstreamServiceHealthIndicator.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/DownstreamServiceHealthIndicator.java
diff --git a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/FeaturesEndpoint.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/FeaturesEndpoint.java
similarity index 100%
rename from spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/FeaturesEndpoint.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/FeaturesEndpoint.java
diff --git a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/InfoWebEndpointExtension.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/InfoWebEndpointExtension.java
similarity index 100%
rename from spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/InfoWebEndpointExtension.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/InfoWebEndpointExtension.java
diff --git a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java
similarity index 73%
rename from spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java
index 600bff5948..19b83ee651 100644
--- a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java
+++ b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/reactive/actuator/Spring5ReactiveApplication.java
@@ -2,8 +2,10 @@ package com.baeldung.reactive.actuator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
+@ComponentScan(basePackages = "com.baeldung.reactive.actuator")
public class Spring5ReactiveApplication {
public static void main(String[] args) {
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/Application.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/Application.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/Application.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/Application.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/RedisConfig.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/RedisConfig.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/RedisConfig.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/RedisConfig.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/SessionConfig.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/SessionConfig.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/SessionConfig.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/SessionConfig.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java
similarity index 89%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java
index 964b544916..041c37e7fc 100644
--- a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java
+++ b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/configuration/WebFluxConfig.java
@@ -4,7 +4,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.EnableWebFlux;
-import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@Configuration
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/controller/SessionController.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/controller/SessionController.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/controller/SessionController.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/controller/SessionController.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/transfer/CustomResponse.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/transfer/CustomResponse.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websession/transfer/CustomResponse.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websession/transfer/CustomResponse.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/Event.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/Event.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/Event.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/Event.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveJavaClientWebSocket.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveJavaClientWebSocket.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveJavaClientWebSocket.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveJavaClientWebSocket.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketApplication.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketApplication.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketApplication.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketConfiguration.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketConfiguration.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketConfiguration.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketConfiguration.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketHandler.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketHandler.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/ReactiveWebSocketHandler.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/ReactiveWebSocketHandler.java
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/WebSocketController.java b/spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/WebSocketController.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/java/com/baeldung/websocket/WebSocketController.java
rename to spring-reactive-modules/spring-reactive-3/src/main/java/com/baeldung/websocket/WebSocketController.java
diff --git a/spring-reactive-modules/spring-reactive-3/src/main/resources/application.properties b/spring-reactive-modules/spring-reactive-3/src/main/resources/application.properties
index 815cc2b76d..767f8106dd 100644
--- a/spring-reactive-modules/spring-reactive-3/src/main/resources/application.properties
+++ b/spring-reactive-modules/spring-reactive-3/src/main/resources/application.properties
@@ -1 +1,13 @@
-# application properties
\ No newline at end of file
+# application properties
+management.endpoints.web.exposure.include=*
+
+info.app.name=Spring Boot 2 actuator Application
+management.endpoint.health.group.custom.include=diskSpace,ping
+management.endpoint.health.group.custom.show-components=always
+management.endpoint.health.group.custom.show-details=always
+management.endpoint.health.group.custom.status.http-mapping.up=207
+
+spring.main.allow-bean-definition-overriding=true
+
+logging.level.root=INFO
+server.tomcat.max-keep-alive-requests=1
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-reactive-3/src/main/resources/files/hello.txt b/spring-reactive-modules/spring-reactive-3/src/main/resources/files/hello.txt
new file mode 100644
index 0000000000..b6fc4c620b
--- /dev/null
+++ b/spring-reactive-modules/spring-reactive-3/src/main/resources/files/hello.txt
@@ -0,0 +1 @@
+hello
\ No newline at end of file
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/logback.xml b/spring-reactive-modules/spring-reactive-3/src/main/resources/logback.xml
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/resources/logback.xml
rename to spring-reactive-modules/spring-reactive-3/src/main/resources/logback.xml
diff --git a/spring-reactive-modules/spring-5-reactive/src/main/resources/static/client-websocket.html b/spring-reactive-modules/spring-reactive-3/src/main/resources/static/client-websocket.html
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/main/resources/static/client-websocket.html
rename to spring-reactive-modules/spring-reactive-3/src/main/resources/static/client-websocket.html
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/SpringContextTest.java b/spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/SpringContextTest.java
similarity index 75%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/SpringContextTest.java
rename to spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/SpringContextTest.java
index bedb30fcaa..2dbd45349f 100644
--- a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/SpringContextTest.java
@@ -5,10 +5,10 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.reactive.Spring5ReactiveApplication;
+import com.baeldung.functional.FunctionalWebApplication;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Spring5ReactiveApplication.class)
+@SpringBootTest(classes = FunctionalWebApplication.class)
public class SpringContextTest {
@Test
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java b/spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java
rename to spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/functional/FunctionalWebApplicationIntegrationTest.java
diff --git a/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java b/spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java
similarity index 87%
rename from spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java
rename to spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java
index 94979a18ca..79c694e6b9 100644
--- a/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java
+++ b/spring-reactive-modules/spring-reactive-3/src/test/java/com/baeldung/reactive/actuator/ActuatorInfoIntegrationTest.java
@@ -9,8 +9,6 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
-import java.io.IOException;
-
import static org.junit.Assert.assertEquals;
@RunWith(SpringRunner.class)
@@ -21,13 +19,13 @@ public class ActuatorInfoIntegrationTest {
private TestRestTemplate restTemplate;
@Test
- public void whenGetInfo_thenReturns200() throws IOException {
+ public void whenGetInfo_thenReturns200() {
final ResponseEntity responseEntity = this.restTemplate.getForEntity("/actuator/info", String.class);
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
}
@Test
- public void whenFeatures_thenReturns200() throws IOException {
+ public void whenFeatures_thenReturns200() {
final ResponseEntity responseEntity = this.restTemplate.getForEntity("/actuator/features", String.class);
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
}
diff --git a/spring-reactive-modules/spring-5-reactive/src/test/resources/baeldung-weekly.png b/spring-reactive-modules/spring-reactive-3/src/test/resources/baeldung-weekly.png
similarity index 100%
rename from spring-reactive-modules/spring-5-reactive/src/test/resources/baeldung-weekly.png
rename to spring-reactive-modules/spring-reactive-3/src/test/resources/baeldung-weekly.png
diff --git a/spring-reactive-modules/spring-data-couchbase/README.md b/spring-reactive-modules/spring-reactive-data-couchbase/README.md
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/README.md
rename to spring-reactive-modules/spring-reactive-data-couchbase/README.md
diff --git a/spring-reactive-modules/spring-data-couchbase/pom.xml b/spring-reactive-modules/spring-reactive-data-couchbase/pom.xml
similarity index 98%
rename from spring-reactive-modules/spring-data-couchbase/pom.xml
rename to spring-reactive-modules/spring-reactive-data-couchbase/pom.xml
index d7b36f97fa..52b10f39d9 100644
--- a/spring-reactive-modules/spring-data-couchbase/pom.xml
+++ b/spring-reactive-modules/spring-reactive-data-couchbase/pom.xml
@@ -3,7 +3,7 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-data-couchbase
+ spring-reactive-data-couchbase
spring-data-couchbase
jar
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/Person.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/Person.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/Person.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/Person.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/resources/couchbase.properties b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/resources/couchbase.properties
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/resources/couchbase.properties
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/resources/couchbase.properties
diff --git a/spring-reactive-modules/spring-data-couchbase/src/main/resources/logback.xml b/spring-reactive-modules/spring-reactive-data-couchbase/src/main/resources/logback.xml
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/main/resources/logback.xml
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/main/resources/logback.xml
diff --git a/spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java
diff --git a/spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java b/spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java
similarity index 100%
rename from spring-reactive-modules/spring-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java
rename to spring-reactive-modules/spring-reactive-data-couchbase/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java
diff --git a/spring-reactive-modules/spring-reactive-security/README.md b/spring-reactive-modules/spring-reactive-security/README.md
index 37f999648c..a25fa3728b 100644
--- a/spring-reactive-modules/spring-reactive-security/README.md
+++ b/spring-reactive-modules/spring-reactive-security/README.md
@@ -7,6 +7,5 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
### Relevant Articles
-- [Spring Boot Actuator](https://www.baeldung.com/spring-boot-actuators)
- [Guide to the AuthenticationManagerResolver in Spring Security](https://www.baeldung.com/spring-security-authenticationmanagerresolver)
- [Spring Webflux and CORS](https://www.baeldung.com/spring-webflux-cors)
diff --git a/spring-reactive-modules/spring-reactive-security/pom.xml b/spring-reactive-modules/spring-reactive-security/pom.xml
index 8ed976c572..bd74202437 100644
--- a/spring-reactive-modules/spring-reactive-security/pom.xml
+++ b/spring-reactive-modules/spring-reactive-security/pom.xml
@@ -37,10 +37,6 @@
javax.json.bind
javax.json.bind-api
-
- org.springframework.boot
- spring-boot-starter-actuator
-
org.projectlombok
lombok
diff --git a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/WebSecurityConfig.java b/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/WebSecurityConfig.java
deleted file mode 100644
index 384e26ac8c..0000000000
--- a/spring-reactive-modules/spring-reactive-security/src/main/java/com/baeldung/reactive/actuator/WebSecurityConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.baeldung.reactive.actuator;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
-import org.springframework.security.config.web.server.ServerHttpSecurity;
-import org.springframework.security.web.server.SecurityWebFilterChain;
-
-@Configuration
-@EnableWebFluxSecurity
-public class WebSecurityConfig {
-
- @Bean
- public SecurityWebFilterChain securitygWebFilterChain(
- ServerHttpSecurity http) {
-
- return http.authorizeExchange()
- .pathMatchers("/actuator/**").permitAll()
- .anyExchange().authenticated()
- .and().build();
- }
-
-}
diff --git a/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/SpringContextTest.java b/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
index e6123de118..a0a7d9264a 100644
--- a/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-reactive-modules/spring-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,13 +1,14 @@
package com.baeldung;
-import com.baeldung.reactive.actuator.Spring5ReactiveApplication;
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.webflux.EmployeeWebSocketClient;
+
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Spring5ReactiveApplication.class)
+@SpringBootTest(classes = EmployeeWebSocketClient.class)
public class SpringContextTest {
@Test
diff --git a/spring-scheduling/pom.xml b/spring-scheduling/pom.xml
index 9010338fee..e374b2b890 100644
--- a/spring-scheduling/pom.xml
+++ b/spring-scheduling/pom.xml
@@ -10,9 +10,9 @@
com.baeldung
- parent-boot-2
+ parent-boot-3
0.0.1-SNAPSHOT
- ../parent-boot-2
+ ../parent-boot-3
@@ -33,21 +33,19 @@
org.springframework.boot
spring-boot-starter-web
-
- javax.annotation
- javax.annotation-api
- ${annotation-api.version}
-
org.springframework
spring-test
test
+
+ org.apache.commons
+ commons-lang3
+
- 2.0.0
- 1.3.2
+ 2.0.3
\ No newline at end of file
diff --git a/spring-scheduling/src/main/java/com/baeldung/scheduling/dynamic/DynamicSchedulingConfig.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/dynamic/DynamicSchedulingConfig.java
index b29f9ab0ce..7b7c18f507 100644
--- a/spring-scheduling/src/main/java/com/baeldung/scheduling/dynamic/DynamicSchedulingConfig.java
+++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/dynamic/DynamicSchedulingConfig.java
@@ -37,7 +37,7 @@ public class DynamicSchedulingConfig implements SchedulingConfigurer {
Instant nextExecutionTime =
lastCompletionTime.orElseGet(Date::new).toInstant()
.plusMillis(tickService.getDelay());
- return Date.from(nextExecutionTime);
+ return Date.from(nextExecutionTime).toInstant();
}
);
}
diff --git a/spring-scheduling/src/main/java/com/baeldung/taskscheduler/ThreadPoolTaskSchedulerExamples.java b/spring-scheduling/src/main/java/com/baeldung/taskscheduler/ThreadPoolTaskSchedulerExamples.java
index c0c6f37507..163be62591 100644
--- a/spring-scheduling/src/main/java/com/baeldung/taskscheduler/ThreadPoolTaskSchedulerExamples.java
+++ b/spring-scheduling/src/main/java/com/baeldung/taskscheduler/ThreadPoolTaskSchedulerExamples.java
@@ -2,7 +2,7 @@ package com.baeldung.taskscheduler;
import java.util.Date;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
diff --git a/testing-modules/junit5-annotations/pom.xml b/testing-modules/junit5-annotations/pom.xml
index 847baa827c..3a7ab1aa87 100644
--- a/testing-modules/junit5-annotations/pom.xml
+++ b/testing-modules/junit5-annotations/pom.xml
@@ -45,6 +45,8 @@
+ 1.10.0
+ 5.10.0
2.19.0
diff --git a/web-modules/pom.xml b/web-modules/pom.xml
index 2dcec681ad..684283b546 100644
--- a/web-modules/pom.xml
+++ b/web-modules/pom.xml
@@ -31,7 +31,7 @@
ratpack
resteasy
-
+ restx
spark-java
struts-2
vraptor
diff --git a/web-modules/restx/md.restx.json b/web-modules/restx/md.restx.json
index c87244001c..54a1b4e9f8 100644
--- a/web-modules/restx/md.restx.json
+++ b/web-modules/restx/md.restx.json
@@ -3,8 +3,8 @@
"packaging": "war",
"properties": {
- "java.version": "1.8",
- "restx.version": "0.35-rc4"
+ "java.version": "17",
+ "restx.version": "1.0.0-rc3"
},
"fragments": {
"maven": [
@@ -24,7 +24,7 @@
"io.restx:restx-i18n-admin:${restx.version}",
"io.restx:restx-stats-admin:${restx.version}",
"io.restx:restx-servlet:${restx.version}",
- "io.restx:restx-server-jetty8:${restx.version}!optional",
+ "io.restx:restx-server-jetty11:${restx.version}!optional",
"io.restx:restx-apidocs:${restx.version}",
"io.restx:restx-specs-admin:${restx.version}",
"io.restx:restx-admin:${restx.version}",
diff --git a/web-modules/restx/pom.xml b/web-modules/restx/pom.xml
index 0e6cb3fa78..f75292a4a4 100644
--- a/web-modules/restx/pom.xml
+++ b/web-modules/restx/pom.xml
@@ -77,7 +77,7 @@
io.restx
- restx-server-jetty8
+ restx-server-jetty11
${restx.version}
true
@@ -137,8 +137,7 @@
- 0.35-rc4
- 1.6.0
+ 1.0.0-rc3
\ No newline at end of file
diff --git a/web-modules/restx/src/main/java/restx/demo/AppModule.java b/web-modules/restx/src/main/java/restx/demo/AppModule.java
index 26bc681481..b47f8b9aa8 100644
--- a/web-modules/restx/src/main/java/restx/demo/AppModule.java
+++ b/web-modules/restx/src/main/java/restx/demo/AppModule.java
@@ -3,13 +3,13 @@ package restx.demo;
import restx.config.ConfigLoader;
import restx.config.ConfigSupplier;
import restx.factory.Provides;
+import restx.security.*;
+import restx.factory.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableSet;
-import restx.security.*;
-import restx.factory.Module;
-import restx.factory.Provides;
+
import javax.inject.Named;
import java.nio.file.Paths;
@@ -30,7 +30,7 @@ public class AppModule {
@Provides
public ConfigSupplier appConfigSupplier(ConfigLoader configLoader) {
// Load settings.properties in restx.demo package as a set of config entries
- return configLoader.fromResource("restx/demo/settings");
+ return configLoader.fromResource("web-modules/restx/demo/settings");
}
@Provides
diff --git a/web-modules/restx/src/main/java/restx/demo/AppServer.java b/web-modules/restx/src/main/java/restx/demo/AppServer.java
index d66aadac68..089a22c9ae 100644
--- a/web-modules/restx/src/main/java/restx/demo/AppServer.java
+++ b/web-modules/restx/src/main/java/restx/demo/AppServer.java
@@ -2,7 +2,7 @@ package restx.demo;
import com.google.common.base.Optional;
import restx.server.WebServer;
-import restx.server.Jetty8WebServer;
+import restx.server.Jetty11WebServer;
/**
* This class can be used to run the app.
@@ -17,7 +17,7 @@ public class AppServer {
public static void main(String[] args) throws Exception {
int port = Integer.valueOf(Optional.fromNullable(System.getenv("PORT")).or("8080"));
- WebServer server = new Jetty8WebServer(WEB_INF_LOCATION, WEB_APP_LOCATION, port, "0.0.0.0");
+ WebServer server = new Jetty11WebServer(WEB_INF_LOCATION, WEB_APP_LOCATION, port, "0.0.0.0");
/*
* load mode from system property if defined, or default to dev