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