diff --git a/aws-lambda/README.md b/aws-lambda/README.md
index 2fbdaace10..759c9dd506 100644
--- a/aws-lambda/README.md
+++ b/aws-lambda/README.md
@@ -5,3 +5,4 @@ This module contains articles about AWS Lambda
### Relevant Articles:
- [Using AWS Lambda with API Gateway](https://www.baeldung.com/aws-lambda-api-gateway)
- [Introduction to AWS Serverless Application Model](https://www.baeldung.com/aws-serverless)
+- [How to Implement Hibernate in an AWS Lambda Function in Java](https://www.baeldung.com/java-aws-lambda-hibernate)
diff --git a/core-groovy-strings/pom.xml b/core-groovy-strings/pom.xml
new file mode 100644
index 0000000000..1144d748ee
--- /dev/null
+++ b/core-groovy-strings/pom.xml
@@ -0,0 +1,122 @@
+
+
+ 4.0.0
+ core-groovy-strings
+ 1.0-SNAPSHOT
+ core-groovy-strings
+ jar
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.codehaus.groovy
+ groovy
+ ${groovy.version}
+
+
+ org.codehaus.groovy
+ groovy-all
+ ${groovy-all.version}
+ pom
+
+
+ org.codehaus.groovy
+ groovy-dateutil
+ ${groovy.version}
+
+
+ org.codehaus.groovy
+ groovy-sql
+ ${groovy-sql.version}
+
+
+ org.junit.platform
+ junit-platform-runner
+ ${junit.platform.version}
+ test
+
+
+ org.hsqldb
+ hsqldb
+ ${hsqldb.version}
+ test
+
+
+ org.spockframework
+ spock-core
+ ${spock-core.version}
+ test
+
+
+
+
+
+
+ org.codehaus.gmavenplus
+ gmavenplus-plugin
+ ${gmavenplus-plugin.version}
+
+
+
+ addSources
+ addTestSources
+ compile
+ compileTests
+
+
+
+
+
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+
+ org.junit.platform
+ junit-platform-surefire-provider
+ ${junit.platform.version}
+
+
+
+
+ junit5
+
+ integration-test
+ verify
+
+
+
+ **/*Test5.java
+
+
+
+
+
+
+
+
+
+
+ central
+ https://jcenter.bintray.com
+
+
+
+
+ 1.0.0
+ 2.5.6
+ 2.5.6
+ 2.5.6
+ 2.4.0
+ 1.1-groovy-2.4
+ 1.6
+
+
+
\ No newline at end of file
diff --git a/core-groovy-strings/src/test/groovy/com/baeldung/removeprefix/RemovePrefixTest.groovy b/core-groovy-strings/src/test/groovy/com/baeldung/removeprefix/RemovePrefixTest.groovy
new file mode 100644
index 0000000000..61b81fe1b2
--- /dev/null
+++ b/core-groovy-strings/src/test/groovy/com/baeldung/removeprefix/RemovePrefixTest.groovy
@@ -0,0 +1,70 @@
+package com.baeldung.removeprefix
+
+import org.junit.Assert
+import org.junit.Test
+
+class RemovePrefixTest {
+
+
+ @Test
+ public void whenCasePrefixIsRemoved_thenReturnTrue() {
+ def trimPrefix = {
+ it.startsWith('Groovy-') ? it.minus('Groovy-') : it
+ }
+
+ def actual = trimPrefix("Groovy-Tutorials at Baeldung")
+ def expected = "Tutorials at Baeldung"
+
+ Assert.assertEquals(expected, actual)
+ }
+
+ @Test
+ public void whenPrefixIsRemoved_thenReturnTrue() {
+
+ String prefix = "groovy-"
+ String trimPrefix = "Groovy-Tutorials at Baeldung"
+ def actual;
+ if(trimPrefix.startsWithIgnoreCase(prefix)) {
+ actual = trimPrefix.substring(prefix.length())
+ }
+
+ def expected = "Tutorials at Baeldung"
+
+ Assert.assertEquals(expected, actual)
+ }
+
+ @Test
+ public void whenPrefixIsRemovedUsingRegex_thenReturnTrue() {
+
+ def regex = ~"^([Gg])roovy-"
+ String trimPrefix = "Groovy-Tutorials at Baeldung"
+ String actual = trimPrefix - regex
+
+ def expected = "Tutorials at Baeldung"
+
+ Assert.assertEquals(expected, actual)
+ }
+
+ @Test
+ public void whenPrefixIsRemovedUsingReplaceFirst_thenReturnTrue() {
+ def regex = ~"^groovy"
+ String trimPrefix = "groovyTutorials at Baeldung's groovy page"
+ String actual = trimPrefix.replaceFirst(regex, "")
+
+ def expected = "Tutorials at Baeldung's groovy page"
+
+ Assert.assertEquals(expected, actual)
+ }
+
+ @Test
+ public void whenPrefixIsRemovedUsingReplaceAll_thenReturnTrue() {
+
+ String trimPrefix = "groovyTutorials at Baeldung groovy"
+ String actual = trimPrefix.replaceAll(/^groovy/, "")
+
+ def expected = "Tutorials at Baeldung groovy"
+
+ Assert.assertEquals(expected, actual)
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-10/src/test/java/com/baeldung/AppTest.java b/core-java-modules/core-java-10/src/test/java/com/baeldung/AppUnitTest.java
similarity index 82%
rename from core-java-modules/core-java-10/src/test/java/com/baeldung/AppTest.java
rename to core-java-modules/core-java-10/src/test/java/com/baeldung/AppUnitTest.java
index c9f61455bd..73eb8e661a 100644
--- a/core-java-modules/core-java-10/src/test/java/com/baeldung/AppTest.java
+++ b/core-java-modules/core-java-10/src/test/java/com/baeldung/AppUnitTest.java
@@ -7,7 +7,7 @@ import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
-public class AppTest
+public class AppUnitTest
extends TestCase
{
/**
@@ -15,7 +15,7 @@ public class AppTest
*
* @param testName name of the test case
*/
- public AppTest( String testName )
+ public AppUnitTest(String testName )
{
super( testName );
}
@@ -25,7 +25,7 @@ public class AppTest
*/
public static Test suite()
{
- return new TestSuite( AppTest.class );
+ return new TestSuite( AppUnitTest.class );
}
/**
diff --git a/core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPITest.java b/core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPIUnitTest.java
similarity index 97%
rename from core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPITest.java
rename to core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPIUnitTest.java
index 3d80a36bf6..e5f21bb25f 100644
--- a/core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPITest.java
+++ b/core-java-modules/core-java-12/src/test/java/com/baeldung/string/StringAPIUnitTest.java
@@ -5,7 +5,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
-public class StringAPITest {
+public class StringAPIUnitTest {
@Test
public void whenPositiveArgument_thenReturnIndentedString() {
diff --git a/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonTest.java b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonTest.java
rename to core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonUnitTest.java
index 9bed3dab8f..594ced56cd 100644
--- a/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonTest.java
+++ b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/record/PersonUnitTest.java
@@ -7,7 +7,7 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
-public class PersonTest {
+public class PersonUnitTest {
@Test
public void givenSameNameAndAddress_whenEquals_thenPersonsEqual() {
diff --git a/core-java-modules/core-java-9/pom.xml b/core-java-modules/core-java-9/pom.xml
index 0669d6f597..d7894934b1 100644
--- a/core-java-modules/core-java-9/pom.xml
+++ b/core-java-modules/core-java-9/pom.xml
@@ -44,6 +44,16 @@
commons-collections4
${commons-collections4.version}
+
+ org.apache.commons
+ commons-lang3
+ 3.11
+
+
+ commons-io
+ commons-io
+ 2.7
+
@@ -77,6 +87,7 @@
1.9
25.1-jre
4.1
+ 3.2.2
diff --git a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesTest.java b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesTest.java
rename to core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesUnitTest.java
index 7646755358..7aa74a490f 100644
--- a/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesTest.java
+++ b/core-java-modules/core-java-9/src/test/java/com/baeldung/java9/methodhandles/MethodHandlesUnitTest.java
@@ -17,7 +17,7 @@ import org.junit.Test;
/**
* Test case for the {@link MethodHandles} API
*/
-public class MethodHandlesTest {
+public class MethodHandlesUnitTest {
@Test
public void givenConcatMethodHandle_whenInvoked_thenCorrectlyConcatenated() throws Throwable {
diff --git a/core-java-modules/core-java-arrays-guides/README.md b/core-java-modules/core-java-arrays-guides/README.md
index 621443e4a9..934833b31b 100644
--- a/core-java-modules/core-java-arrays-guides/README.md
+++ b/core-java-modules/core-java-arrays-guides/README.md
@@ -6,3 +6,4 @@ This module contains complete guides about arrays in Java
- [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide)
- [Guide to the java.util.Arrays Class](https://www.baeldung.com/java-util-arrays)
- [What is \[Ljava.lang.Object;?](https://www.baeldung.com/java-tostring-array)
+- [Guide to ArrayStoreException](https://www.baeldung.com/java-arraystoreexception)
diff --git a/core-java-modules/core-java-date-operations-1/src/test/java/com/baeldung/date/DateDiffUnitTest.java b/core-java-modules/core-java-date-operations-1/src/test/java/com/baeldung/date/DateDiffUnitTest.java
index 226556d4bb..9a0779ccac 100644
--- a/core-java-modules/core-java-date-operations-1/src/test/java/com/baeldung/date/DateDiffUnitTest.java
+++ b/core-java-modules/core-java-date-operations-1/src/test/java/com/baeldung/date/DateDiffUnitTest.java
@@ -1,6 +1,8 @@
package com.baeldung.date;
-import static org.junit.Assert.assertEquals;
+import org.joda.time.Days;
+import org.joda.time.Minutes;
+import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -16,7 +18,7 @@ import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
-import org.junit.Test;
+import static org.junit.Assert.*;
public class DateDiffUnitTest {
@@ -29,18 +31,39 @@ public class DateDiffUnitTest {
long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());
long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
- assertEquals(diff, 6);
+ assertEquals(6, diff);
}
@Test
- public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() {
- LocalDate now = LocalDate.now();
- LocalDate sixDaysBehind = now.minusDays(6);
+ public void givenTwoDatesInJava8_whenUsingPeriodGetDays_thenWorks() {
+ LocalDate aDate = LocalDate.of(2020, 9, 11);
+ LocalDate sixDaysBehind = aDate.minusDays(6);
- Period period = Period.between(now, sixDaysBehind);
+ Period period = Period.between(aDate, sixDaysBehind);
int diff = Math.abs(period.getDays());
- assertEquals(diff, 6);
+ assertEquals(6, diff);
+ }
+
+ @Test
+ public void givenTwoDatesInJava8_whenUsingPeriodGetDays_thenDoesNotWork() {
+ LocalDate aDate = LocalDate.of(2020, 9, 11);
+ LocalDate sixtyDaysBehind = aDate.minusDays(60);
+ Period period = Period.between(aDate, sixtyDaysBehind);
+ int diff = Math.abs(period.getDays());
+ //not equals
+ assertNotEquals(60, diff);
+ }
+
+ @Test
+ public void givenTwoDatesInJava8_whenUsingPeriod_thenWeGet0Year1Month29Days() {
+ LocalDate aDate = LocalDate.of(2020, 9, 11);
+ LocalDate sixtyDaysBehind = aDate.minusDays(60);
+ Period period = Period.between(aDate, sixtyDaysBehind);
+ int years = Math.abs(period.getYears());
+ int months = Math.abs(period.getMonths());
+ int days = Math.abs(period.getDays());
+ assertArrayEquals(new int[] { 0, 1, 29 }, new int[] { years, months, days });
}
@Test
@@ -51,7 +74,7 @@ public class DateDiffUnitTest {
Duration duration = Duration.between(now, sixMinutesBehind);
long diff = Math.abs(duration.toMinutes());
- assertEquals(diff, 6);
+ assertEquals(6, diff);
}
@Test
@@ -61,7 +84,7 @@ public class DateDiffUnitTest {
long diff = ChronoUnit.SECONDS.between(now, tenSecondsLater);
- assertEquals(diff, 10);
+ assertEquals(10, diff);
}
@Test
@@ -69,9 +92,9 @@ public class DateDiffUnitTest {
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime now = ldt.atZone(ZoneId.of("America/Montreal"));
ZonedDateTime sixDaysBehind = now.withZoneSameInstant(ZoneId.of("Asia/Singapore"))
- .minusDays(6);
+ .minusDays(6);
long diff = ChronoUnit.DAYS.between(sixDaysBehind, now);
- assertEquals(diff, 6);
+ assertEquals(6, diff);
}
@Test
@@ -81,7 +104,7 @@ public class DateDiffUnitTest {
long diff = now.until(tenSecondsLater, ChronoUnit.SECONDS);
- assertEquals(diff, 10);
+ assertEquals(10, diff);
}
@Test
@@ -89,10 +112,9 @@ public class DateDiffUnitTest {
org.joda.time.LocalDate now = org.joda.time.LocalDate.now();
org.joda.time.LocalDate sixDaysBehind = now.minusDays(6);
- org.joda.time.Period period = new org.joda.time.Period(now, sixDaysBehind);
- long diff = Math.abs(period.getDays());
+ long diff = Math.abs(Days.daysBetween(now, sixDaysBehind).getDays());
- assertEquals(diff, 6);
+ assertEquals(6, diff);
}
@Test
@@ -100,8 +122,9 @@ public class DateDiffUnitTest {
org.joda.time.LocalDateTime now = org.joda.time.LocalDateTime.now();
org.joda.time.LocalDateTime sixMinutesBehind = now.minusMinutes(6);
- org.joda.time.Period period = new org.joda.time.Period(now, sixMinutesBehind);
- long diff = Math.abs(period.getDays());
+ long diff = Math.abs(Minutes.minutesBetween(now, sixMinutesBehind).getMinutes());
+ assertEquals(6, diff);
+
}
@Test
@@ -111,6 +134,6 @@ public class DateDiffUnitTest {
long diff = Math.abs(now.numDaysFrom(sixDaysBehind));
- assertEquals(diff, 6);
+ assertEquals(6, diff);
}
-}
\ No newline at end of file
+}
diff --git a/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterUnitTest.java
similarity index 91%
rename from core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java
rename to core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterUnitTest.java
index b25ff2edb3..b928047a9a 100644
--- a/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterTest.java
+++ b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/timestamp/TimestampToStringConverterUnitTest.java
@@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import java.sql.Timestamp;
import java.time.format.DateTimeFormatter;
-public class TimestampToStringConverterTest {
+public class TimestampToStringConverterUnitTest {
@Test
public void givenDatePattern_whenFormatting_thenResultingStringIsCorrect() {
diff --git a/core-java-modules/core-java-exceptions-3/README.md b/core-java-modules/core-java-exceptions-3/README.md
index e6c7eda881..4e3dd22bb8 100644
--- a/core-java-modules/core-java-exceptions-3/README.md
+++ b/core-java-modules/core-java-exceptions-3/README.md
@@ -1,3 +1,5 @@
### Relevant Articles:
- [NoSuchMethodError in Java](https://www.baeldung.com/java-nosuchmethod-error)
+- [IllegalArgumentException or NullPointerException for a Null Parameter?](https://www.baeldung.com/java-illegalargumentexception-or-nullpointerexception)
+- [IllegalMonitorStateException in Java](https://www.baeldung.com/java-illegalmonitorstateexception)
diff --git a/core-java-modules/core-java-io-3/README.md b/core-java-modules/core-java-io-3/README.md
index c4eacdf27a..4b1a14ab3e 100644
--- a/core-java-modules/core-java-io-3/README.md
+++ b/core-java-modules/core-java-io-3/README.md
@@ -9,4 +9,6 @@ This module contains articles about core Java input and output (IO)
- [Check If a File or Directory Exists in Java](https://www.baeldung.com/java-file-directory-exists)
- [Copy a Directory in Java](https://www.baeldung.com/java-copy-directory)
- [Java Files Open Options](https://www.baeldung.com/java-file-options)
+- [Creating Temporary Directories in Java](https://www.baeldung.com/java-temp-directories)
+- [Reading a Line at a Given Line Number From a File in Java](https://www.baeldung.com/java-read-line-at-number)
- [[<-- Prev]](/core-java-modules/core-java-io-2)
diff --git a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/emptiness/DirectoryEmptinessUnitTest.java b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/emptiness/DirectoryEmptinessUnitTest.java
index a44aea1383..7f7936494f 100644
--- a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/emptiness/DirectoryEmptinessUnitTest.java
+++ b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/emptiness/DirectoryEmptinessUnitTest.java
@@ -4,6 +4,7 @@ import org.junit.Test;
import java.io.File;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -20,8 +21,8 @@ public class DirectoryEmptinessUnitTest {
}
@Test
- public void givenPath_whenNotDirectory_thenReturnsFalse() throws IOException {
- Path aFile = Paths.get(getClass().getResource("/notDir.txt").getPath());
+ public void givenPath_whenNotDirectory_thenReturnsFalse() throws IOException, URISyntaxException {
+ Path aFile = Paths.get(getClass().getResource("/notDir.txt").toURI());
assertThat(isEmpty(aFile)).isFalse();
}
diff --git a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/existence/ExistenceUnitTest.java b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/existence/ExistenceUnitTest.java
index c52e46e8c1..747ae85b65 100644
--- a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/existence/ExistenceUnitTest.java
+++ b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/existence/ExistenceUnitTest.java
@@ -4,10 +4,7 @@ import org.junit.Test;
import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.nio.file.*;
import java.util.concurrent.ThreadLocalRandom;
import static org.junit.Assert.assertFalse;
@@ -47,8 +44,18 @@ public class ExistenceUnitTest {
public void givenSymbolicLink_whenTargetDoesNotExists_thenFollowOrNotBasedOnTheOptions() throws IOException {
Path target = Files.createTempFile("baeldung", "target");
Path symbol = Paths.get("test-link-" + ThreadLocalRandom.current().nextInt());
+ Path symbolicLink = null;
+
+ try {
+ symbolicLink = Files.createSymbolicLink(symbol, target);
+ } catch (FileSystemException ex) {
+ System.out.println("Your OS security policy prevents the current user from creating symbolic links.\n" +
+ "Most probably you're running Windows with UAC.\n" +
+ "If this is the case, please see - https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/create-symbolic-links\n" +
+ "You must change your security settings to run this test under Windows.");
+ return;
+ }
- Path symbolicLink = Files.createSymbolicLink(symbol, target);
assertTrue(Files.exists(symbolicLink));
assertTrue(Files.isSymbolicLink(symbolicLink));
assertFalse(Files.isSymbolicLink(target));
diff --git a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/tempdirectory/TemporaryDirectoriesUnitTest.java b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/tempdirectory/TemporaryDirectoriesUnitTest.java
index 470e06ef96..5cf7d88cd6 100644
--- a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/tempdirectory/TemporaryDirectoriesUnitTest.java
+++ b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/tempdirectory/TemporaryDirectoriesUnitTest.java
@@ -4,6 +4,7 @@ import org.apache.commons.io.FileUtils;
import org.junit.Test;
import java.io.IOException;
+import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -66,10 +67,16 @@ public class TemporaryDirectoriesUnitTest {
@Test
public void givenTempDirWithPrefixWithFileAttrs_whenCreatePlainJava_thenAttributesAreSet() throws IOException {
- final FileAttribute> attrs = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("r--------"));
+ boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix");
- final Path tmpdir = Files.createTempDirectory(Paths.get("target"), "tmpDirPrefix", attrs);
- assertThat(tmpdir.toFile().getPath()).startsWith("target");
- assertThat(tmpdir.toFile().canWrite()).isFalse();
+ if(!isPosix){
+ System.out.println("You must be under a Posix Compliant Filesystem to run this test.");
+ } else {
+ final FileAttribute> attrs = PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("r--------"));
+
+ final Path tmpdir = Files.createTempDirectory(Paths.get("target"), "tmpDirPrefix", attrs);
+ assertThat(tmpdir.toFile().getPath()).startsWith("target");
+ assertThat(tmpdir.toFile().canWrite()).isFalse();
+ }
}
}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule/pom.xml
index fe6689dcc3..fb6d2b1065 100644
--- a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule/pom.xml
+++ b/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule/pom.xml
@@ -17,7 +17,7 @@
com.baeldung.servicemodule
- servicemodule
+ servicemodule1
${servicemodule.version}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule/pom.xml
index c2da228ce6..4c811ea866 100644
--- a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule/pom.xml
+++ b/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule/pom.xml
@@ -4,7 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- servicemodule
+ com.baeldung.servicemodule
+ servicemodule1
jar
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml
index 3e8d5c0c39..1e29df7053 100644
--- a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml
@@ -17,7 +17,7 @@
com.baeldung.servicemodule
- servicemodule
+ servicemodule2
${servicemodule.version}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml
index 51d64998df..9a687c9ae7 100644
--- a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml
@@ -4,7 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- servicemodule
+ com.baeldung.servicemodule
+ servicemodule2
1.0
diff --git a/core-java-modules/core-java-lang-3/README.md b/core-java-modules/core-java-lang-3/README.md
index 0fa08ef397..121d30f20f 100644
--- a/core-java-modules/core-java-lang-3/README.md
+++ b/core-java-modules/core-java-lang-3/README.md
@@ -5,4 +5,5 @@ This module contains articles about core features in the Java language
- [Class.isInstance vs Class.isAssignableFrom](https://www.baeldung.com/java-isinstance-isassignablefrom)
- [Converting a Java String Into a Boolean](https://www.baeldung.com/java-string-to-boolean)
- [When are Static Variables Initialized in Java?](https://www.baeldung.com/java-static-variables-initialization)
+- [Checking if a Class Exists in Java](https://www.baeldung.com/java-check-class-exists)
- [[<-- Prev]](/core-java-modules/core-java-lang-2)
diff --git a/core-java-modules/core-java-lang-math-2/README.md b/core-java-modules/core-java-lang-math-2/README.md
index 09039f6ed0..69ee00b5a5 100644
--- a/core-java-modules/core-java-lang-math-2/README.md
+++ b/core-java-modules/core-java-lang-math-2/README.md
@@ -13,4 +13,5 @@
- [Convert Latitude and Longitude to a 2D Point in Java](https://www.baeldung.com/java-convert-latitude-longitude)
- [Debugging with Eclipse](https://www.baeldung.com/eclipse-debugging)
- [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication)
+- [Largest Power of 2 That Is Less Than the Given Number](https://www.baeldung.com/java-largest-power-of-2-less-than-number)
- More articles: [[<-- Prev]](/core-java-modules/core-java-lang-math)
diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherUnitTest.java
similarity index 95%
rename from core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherTest.java
rename to core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherUnitTest.java
index dbaad211d9..c92049816f 100644
--- a/core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherTest.java
+++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/core/pwd/CurrentDirectoryFetcherUnitTest.java
@@ -4,7 +4,7 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
-public class CurrentDirectoryFetcherTest {
+public class CurrentDirectoryFetcherUnitTest {
private static final String CURRENT_DIR = "core-java-os";
diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/check/staticmethods/StaticUtility.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/check/staticmethods/StaticUtility.java
new file mode 100644
index 0000000000..5afb9b79c4
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/check/staticmethods/StaticUtility.java
@@ -0,0 +1,19 @@
+package com.baeldung.reflection.check.staticmethods;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+
+public class StaticUtility {
+
+ public static String getAuthorName() {
+ return "Umang Budhwar";
+ }
+
+ public static LocalDate getLocalDate() {
+ return LocalDate.now();
+ }
+
+ public static LocalTime getLocalTime() {
+ return LocalTime.now();
+ }
+}
diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/staticmethods/StaticUtilityUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/staticmethods/StaticUtilityUnitTest.java
new file mode 100644
index 0000000000..a4540407d5
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/staticmethods/StaticUtilityUnitTest.java
@@ -0,0 +1,30 @@
+package com.baeldung.reflection.check.staticmethods;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class StaticUtilityUnitTest {
+
+ @Test
+ void whenCheckStaticMethod_ThenSuccess() throws Exception {
+ Method method = StaticUtility.class.getMethod("getAuthorName", null);
+ Assertions.assertTrue(Modifier.isStatic(method.getModifiers()));
+ }
+
+ @Test
+ void whenCheckAllStaticMethods_thenSuccess() {
+ List methodList = Arrays.asList(StaticUtility.class.getMethods())
+ .stream()
+ .filter(method -> Modifier.isStatic(method.getModifiers()))
+ .collect(Collectors.toList());
+ Assertions.assertEquals(3, methodList.size());
+ }
+
+}
diff --git a/core-java-modules/core-java-reflection/README.MD b/core-java-modules/core-java-reflection/README.md
similarity index 100%
rename from core-java-modules/core-java-reflection/README.MD
rename to core-java-modules/core-java-reflection/README.md
diff --git a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/cipher/AvailableCiphersUnitTest.java b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/cipher/AvailableCiphersUnitTest.java
new file mode 100644
index 0000000000..48aaa5fb67
--- /dev/null
+++ b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/cipher/AvailableCiphersUnitTest.java
@@ -0,0 +1,35 @@
+package com.baeldung.cipher;
+
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.Provider;
+import java.security.Security;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class AvailableCiphersUnitTest {
+ private final Logger logger = LoggerFactory.getLogger(AvailableCiphersUnitTest.class);
+
+ @Test
+ public void whenGetServices_thenGetAllCipherAlgorithms() {
+ for (Provider provider : Security.getProviders()) {
+ for (Provider.Service service : provider.getServices()) {
+ logger.info(service.getAlgorithm());
+ }
+ }
+ }
+
+ @Test
+ public void whenGetServicesWithFilter_thenGetAllCompatibleCipherAlgorithms() {
+ List algorithms = Arrays.stream(Security.getProviders())
+ .flatMap(provider -> provider.getServices().stream())
+ .filter(service -> "Cipher".equals(service.getType()))
+ .map(Provider.Service::getAlgorithm)
+ .collect(Collectors.toList());
+
+ algorithms.forEach(logger::info);
+ }
+}
diff --git a/core-java-modules/multimodulemavenproject/daomodule/pom.xml b/core-java-modules/multimodulemavenproject/daomodule/pom.xml
index 15f1215d89..56c2d70d24 100644
--- a/core-java-modules/multimodulemavenproject/daomodule/pom.xml
+++ b/core-java-modules/multimodulemavenproject/daomodule/pom.xml
@@ -20,6 +20,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
diff --git a/core-java-modules/multimodulemavenproject/entitymodule/pom.xml b/core-java-modules/multimodulemavenproject/entitymodule/pom.xml
index 3e5a478299..00ad56b3ab 100644
--- a/core-java-modules/multimodulemavenproject/entitymodule/pom.xml
+++ b/core-java-modules/multimodulemavenproject/entitymodule/pom.xml
@@ -20,6 +20,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
diff --git a/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml b/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml
index 196e58a419..a9fe04b108 100644
--- a/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml
+++ b/core-java-modules/multimodulemavenproject/mainappmodule/pom.xml
@@ -38,6 +38,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
diff --git a/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml b/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml
index f4a7e5c8f8..150c10b68f 100644
--- a/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml
+++ b/core-java-modules/multimodulemavenproject/userdaomodule/pom.xml
@@ -33,6 +33,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 36fca8de93..a6aecef741 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -18,20 +18,9 @@
core-java
-
-
-
-
-
core-java-8
core-java-8-2
-
-
-
-
-
-
core-java-annotations
core-java-arrays-sorting
@@ -51,7 +40,6 @@
core-java-collections-maps
core-java-collections-maps-2
core-java-collections-maps-3
-
core-java-concurrency-2
core-java-concurrency-advanced
@@ -65,10 +53,7 @@
core-java-8-datetime-2
-
core-java-date-operations-2
-
-
core-java-8-datetime
core-java-exceptions
@@ -85,7 +70,6 @@
core-java-jar
core-java-jndi
-
core-java-jvm
core-java-jvm-2
@@ -113,7 +97,6 @@
core-java-nio-2
core-java-optional
-
core-java-perf
@@ -138,9 +121,6 @@
core-java-sun
core-java-regex
-
-
-
pre-jpms
diff --git a/core-java-modules/pre-jpms/README.MD b/core-java-modules/pre-jpms/README.md
similarity index 100%
rename from core-java-modules/pre-jpms/README.MD
rename to core-java-modules/pre-jpms/README.md
diff --git a/core-kotlin-modules/core-kotlin-collections-2/README.md b/core-kotlin-modules/core-kotlin-collections-2/README.md
index 2dc180b5b3..64062ee704 100644
--- a/core-kotlin-modules/core-kotlin-collections-2/README.md
+++ b/core-kotlin-modules/core-kotlin-collections-2/README.md
@@ -2,6 +2,6 @@
This module contains articles about core Kotlin collections.
-### Relevant articles:
-
+## Relevant articles:
+- [Aggregate Operations in Kotlin](https://www.baeldung.com/kotlin/aggregate-operations)
diff --git a/drools/README.MD b/drools/README.md
similarity index 100%
rename from drools/README.MD
rename to drools/README.md
diff --git a/gradle-5/cmd-line-args/README.md b/gradle-5/cmd-line-args/README.md
new file mode 100644
index 0000000000..de797c8588
--- /dev/null
+++ b/gradle-5/cmd-line-args/README.md
@@ -0,0 +1,3 @@
+## Relevant Articles:
+
+- [Passing Command Line Arguments in Gradle](https://www.baeldung.com/gradle-command-line-arguments)
diff --git a/gradle-5/source-sets/README.md b/gradle-5/source-sets/README.md
new file mode 100644
index 0000000000..19fe1e1fae
--- /dev/null
+++ b/gradle-5/source-sets/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- [Gradle Source Sets](https://www.baeldung.com/gradle-source-sets)
diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml
index 287542be33..69444308a3 100644
--- a/hazelcast/pom.xml
+++ b/hazelcast/pom.xml
@@ -1,8 +1,8 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
hazelcast
0.0.1-SNAPSHOT
@@ -15,7 +15,6 @@
-
com.hazelcast.jet
hazelcast-jet
@@ -34,8 +33,7 @@
-
- 0.6
+ 4.2
\ No newline at end of file
diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java
index 697e362289..3e58897401 100644
--- a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java
+++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java
@@ -1,24 +1,20 @@
package com.baeldung.hazelcast.cluster;
-import java.util.Map.Entry;
-
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
-import com.hazelcast.config.GroupConfig;
import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.IMap;
+
+import java.util.Map;
public class NativeClient {
- public static void main(String[] args) throws InterruptedException {
+ public static void main(String[] args) {
ClientConfig config = new ClientConfig();
- GroupConfig groupConfig = config.getGroupConfig();
- groupConfig.setName("dev");
- groupConfig.setPassword("dev-pass");
+ config.setClusterName("dev");
HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient(config);
- IMap map = hazelcastInstanceClient.getMap("data");
- for (Entry entry : map.entrySet()) {
- System.out.println(String.format("Key: %d, Value: %s", entry.getKey(), entry.getValue()));
+ Map map = hazelcastInstanceClient.getMap("data");
+ for (Map.Entry entry : map.entrySet()) {
+ System.out.printf("Key: %d, Value: %s%n", entry.getKey(), entry.getValue());
}
}
}
diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java
index 36028834a4..7c903e961a 100644
--- a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java
+++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java
@@ -1,19 +1,19 @@
package com.baeldung.hazelcast.cluster;
-import java.util.Map;
-
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.IdGenerator;
+import com.hazelcast.flakeidgen.FlakeIdGenerator;
+
+import java.util.Map;
public class ServerNode {
public static void main(String[] args) {
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
Map map = hazelcastInstance.getMap("data");
- IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid");
+ FlakeIdGenerator idGenerator = hazelcastInstance.getFlakeIdGenerator("newid");
for (int i = 0; i < 10; i++) {
- map.put(idGenerator.newId(), "message" + 1);
+ map.put(idGenerator.newId(), "message" + i);
}
}
}
diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/jet/WordCounter.java b/hazelcast/src/main/java/com/baeldung/hazelcast/jet/WordCounter.java
index 971986bcae..5d10650f89 100644
--- a/hazelcast/src/main/java/com/baeldung/hazelcast/jet/WordCounter.java
+++ b/hazelcast/src/main/java/com/baeldung/hazelcast/jet/WordCounter.java
@@ -1,33 +1,31 @@
package com.baeldung.hazelcast.jet;
-import java.util.List;
-import java.util.Map;
-
-import static com.hazelcast.jet.Traversers.traverseArray;
-import static com.hazelcast.jet.aggregate.AggregateOperations.counting;
-import static com.hazelcast.jet.function.DistributedFunctions.wholeItem;
-
import com.hazelcast.jet.Jet;
import com.hazelcast.jet.JetInstance;
import com.hazelcast.jet.pipeline.Pipeline;
import com.hazelcast.jet.pipeline.Sinks;
import com.hazelcast.jet.pipeline.Sources;
+import java.util.List;
+import java.util.Map;
+
+import static com.hazelcast.function.Functions.wholeItem;
+import static com.hazelcast.jet.Traversers.traverseArray;
+import static com.hazelcast.jet.aggregate.AggregateOperations.counting;
+
public class WordCounter {
private static final String LIST_NAME = "textList";
-
private static final String MAP_NAME = "countMap";
private Pipeline createPipeLine() {
Pipeline p = Pipeline.create();
- p.drawFrom(Sources. list(LIST_NAME))
- .flatMap(word -> traverseArray(word.toLowerCase()
- .split("\\W+")))
+ p.readFrom(Sources.list(LIST_NAME))
+ .flatMap(word -> traverseArray(word.toLowerCase().split("\\W+")))
.filter(word -> !word.isEmpty())
.groupingKey(wholeItem())
.aggregate(counting())
- .drainTo(Sinks.map(MAP_NAME));
+ .writeTo(Sinks.map(MAP_NAME));
return p;
}
@@ -38,8 +36,7 @@ public class WordCounter {
List textList = jet.getList(LIST_NAME);
textList.addAll(sentences);
Pipeline p = createPipeLine();
- jet.newJob(p)
- .join();
+ jet.newJob(p).join();
Map counts = jet.getMap(MAP_NAME);
count = counts.get(word);
} finally {
diff --git a/hazelcast/src/main/resources/hazelcast.xml b/hazelcast/src/main/resources/hazelcast.xml
index f29dc532b8..889e65801b 100644
--- a/hazelcast/src/main/resources/hazelcast.xml
+++ b/hazelcast/src/main/resources/hazelcast.xml
@@ -1,16 +1,16 @@
-
+
5701
-
-
-
- machine1
- localhost
-
+
+
+ machine1
+ localhost
+
\ No newline at end of file
diff --git a/hazelcast/src/test/java/com/baeldung/hazelcast/jet/WordCounterUnitTest.java b/hazelcast/src/test/java/com/baeldung/hazelcast/jet/WordCounterUnitTest.java
index 95596b3860..7a60cd9a01 100644
--- a/hazelcast/src/test/java/com/baeldung/hazelcast/jet/WordCounterUnitTest.java
+++ b/hazelcast/src/test/java/com/baeldung/hazelcast/jet/WordCounterUnitTest.java
@@ -1,11 +1,11 @@
package com.baeldung.hazelcast.jet;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
public class WordCounterUnitTest {
@@ -15,7 +15,7 @@ public class WordCounterUnitTest {
sentences.add("The first second was alright, but the second second was tough.");
WordCounter wordCounter = new WordCounter();
long countSecond = wordCounter.countWord(sentences, "second");
- assertTrue(countSecond == 3);
+ assertEquals(3, countSecond);
}
}
diff --git a/libraries-primitive/README.MD b/libraries-primitive/README.md
similarity index 100%
rename from libraries-primitive/README.MD
rename to libraries-primitive/README.md
diff --git a/libraries-security/README.md b/libraries-security/README.md
index 5ec85a15e9..1a0e16a776 100644
--- a/libraries-security/README.md
+++ b/libraries-security/README.md
@@ -11,3 +11,4 @@ This module contains articles about security libraries.
- [Intro to Jasypt](https://www.baeldung.com/jasypt)
- [Digital Signatures in Java](https://www.baeldung.com/java-digital-signature)
- [How to Read PEM File to Get Public and Private Keys](https://www.baeldung.com/java-read-pem-file-keys)
+- [SSH Connection With Java](https://www.baeldung.com/java-ssh-connection)
diff --git a/libraries-testing/README.md b/libraries-testing/README.md
index 43d7673e2d..447f3f32b9 100644
--- a/libraries-testing/README.md
+++ b/libraries-testing/README.md
@@ -12,3 +12,4 @@ This module contains articles about test libraries.
- [Introduction to Hoverfly in Java](https://www.baeldung.com/hoverfly)
- [Testing with Hamcrest](https://www.baeldung.com/java-junit-hamcrest-guide)
- [Introduction To DBUnit](https://www.baeldung.com/java-dbunit)
+- [Introduction to ArchUnit](https://www.baeldung.com/java-archunit-intro)
diff --git a/patterns/design-patterns-architectural/README.md b/patterns/design-patterns-architectural/README.md
index fbe4221752..5b6011c159 100644
--- a/patterns/design-patterns-architectural/README.md
+++ b/patterns/design-patterns-architectural/README.md
@@ -1,3 +1,4 @@
### Relevant Articles:
- [Service Locator Pattern](https://www.baeldung.com/java-service-locator-pattern)
- [The DAO Pattern in Java](https://www.baeldung.com/java-dao-pattern)
+- [DAO vs Repository Patterns](https://www.baeldung.com/java-dao-vs-repository)
diff --git a/persistence-modules/flyway-repair/README.MD b/persistence-modules/flyway-repair/README.md
similarity index 100%
rename from persistence-modules/flyway-repair/README.MD
rename to persistence-modules/flyway-repair/README.md
diff --git a/persistence-modules/flyway/README.MD b/persistence-modules/flyway/README.md
similarity index 69%
rename from persistence-modules/flyway/README.MD
rename to persistence-modules/flyway/README.md
index daeb9012b5..bd5f9bbe03 100644
--- a/persistence-modules/flyway/README.MD
+++ b/persistence-modules/flyway/README.md
@@ -1,3 +1,4 @@
### Relevant Articles:
- [Database Migrations with Flyway](http://www.baeldung.com/database-migrations-with-flyway)
- [A Guide to Flyway Callbacks](http://www.baeldung.com/flyway-callbacks)
+- [Rolling Back Migrations with Flyway](https://www.baeldung.com/flyway-roll-back)
diff --git a/persistence-modules/spring-boot-persistence/README.MD b/persistence-modules/spring-boot-persistence/README.md
similarity index 100%
rename from persistence-modules/spring-boot-persistence/README.MD
rename to persistence-modules/spring-boot-persistence/README.md
diff --git a/persistence-modules/spring-data-dynamodb/README.MD b/persistence-modules/spring-data-dynamodb/README.md
similarity index 100%
rename from persistence-modules/spring-data-dynamodb/README.MD
rename to persistence-modules/spring-data-dynamodb/README.md
diff --git a/pom.xml b/pom.xml
index 030e56107c..9fd8f65a61 100644
--- a/pom.xml
+++ b/pom.xml
@@ -383,6 +383,7 @@
core-groovy
core-groovy-2
core-groovy-collections
+ core-groovy-strings
core-java-modules
core-kotlin-modules
@@ -894,6 +895,7 @@
core-groovy
core-groovy-2
core-groovy-collections
+ core-groovy-strings
core-java-modules
core-kotlin-modules
@@ -1332,6 +1334,104 @@
+
+ default-jdk9-and-above
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+ 3
+ true
+
+ SpringContextTest
+ **/*UnitTest
+
+
+ **/*IntegrationTest.java
+ **/*IntTest.java
+ **/*LongRunningUnitTest.java
+ **/*ManualTest.java
+ **/JdbcTest.java
+ **/*LiveTest.java
+
+
+
+
+
+
+
+
+ core-java-modules/core-java-9
+ core-java-modules/core-java-9-improvements
+
+
+ core-java-modules/core-java-9-streams
+ core-java-modules/core-java-10
+
+
+
+
+ core-java-modules/core-java-collections-set
+
+
+
+ core-java-modules/core-java-jpms
+
+
+ core-java-modules/multimodulemavenproject
+
+
+
+
+
+ integration-jdk9-and-above
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*ManualTest.java
+ **/*LiveTest.java
+
+
+ **/*IntegrationTest.java
+ **/*IntTest.java
+
+
+
+
+
+
+
+ core-java-modules/core-java-9
+ core-java-modules/core-java-9-improvements
+
+
+ core-java-modules/core-java-9-streams
+ core-java-modules/core-java-10
+
+
+
+
+ core-java-modules/core-java-collections-set
+
+
+
+ core-java-modules/core-java-jpms
+
+
+ core-java-modules/multimodulemavenproject
+
+
+
diff --git a/quarkus/README.md b/quarkus/README.md
index 3ff08c6f9e..94b71dd954 100644
--- a/quarkus/README.md
+++ b/quarkus/README.md
@@ -1,3 +1,4 @@
## Relevant Articles:
- [Guide to QuarkusIO](https://www.baeldung.com/quarkus-io)
+- [Testing Quarkus Applications](https://www.baeldung.com/java-quarkus-testing)
diff --git a/quarkus/pom.xml b/quarkus/pom.xml
index 67356abdef..7fdf1557fb 100644
--- a/quarkus/pom.xml
+++ b/quarkus/pom.xml
@@ -99,6 +99,8 @@
maven-surefire-plugin
${surefire-plugin.version}
+ 1
+ true
org.jboss.logmanager.LogManager
diff --git a/raml/README.MD b/raml/README.md
similarity index 100%
rename from raml/README.MD
rename to raml/README.md
diff --git a/spring-5-security-oauth/README.md b/spring-5-security-oauth/README.md
index 43cab33598..35e64da639 100644
--- a/spring-5-security-oauth/README.md
+++ b/spring-5-security-oauth/README.md
@@ -7,3 +7,4 @@ This module contains articles about Spring 5 OAuth Security
- [Spring Security 5 – OAuth2 Login](https://www.baeldung.com/spring-security-5-oauth2-login)
- [Extracting Principal and Authorities using Spring Security OAuth](https://www.baeldung.com/spring-security-oauth-principal-authorities-extractor)
- [Customizing Authorization and Token Requests with Spring Security 5.1 Client](https://www.baeldung.com/spring-security-custom-oauth-requests)
+- [Social Login with Spring Security in a Jersey Application](https://www.baeldung.com/spring-security-social-login-jersey)
diff --git a/spring-5-security-oauth/pom.xml b/spring-5-security-oauth/pom.xml
index 325aacea86..19aaa576c8 100644
--- a/spring-5-security-oauth/pom.xml
+++ b/spring-5-security-oauth/pom.xml
@@ -32,6 +32,10 @@
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
+
+ org.springframework.boot
+ spring-boot-starter-jersey
+
@@ -63,7 +67,7 @@
test
-
+
com.baeldung.oauth2.SpringOAuthApplication
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyApplication.java b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyApplication.java
new file mode 100644
index 0000000000..6388c10bb3
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyApplication.java
@@ -0,0 +1,13 @@
+package com.baeldung.jersey;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.PropertySource;
+
+@SpringBootApplication
+@PropertySource("classpath:jersey-application.properties")
+public class JerseyApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(JerseyApplication.class, args);
+ }
+}
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyResource.java b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyResource.java
new file mode 100644
index 0000000000..8968fefbf4
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/JerseyResource.java
@@ -0,0 +1,30 @@
+package com.baeldung.jersey;
+
+import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
+import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.SecurityContext;
+
+@Path("/")
+public class JerseyResource {
+ @GET
+ @Path("login")
+ @Produces(MediaType.TEXT_HTML)
+ public String login() {
+ return "Log in with GitHub";
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String home(@Context SecurityContext securityContext) {
+ OAuth2AuthenticationToken authenticationToken = (OAuth2AuthenticationToken) securityContext.getUserPrincipal();
+ OAuth2AuthenticatedPrincipal authenticatedPrincipal = authenticationToken.getPrincipal();
+ String userName = authenticatedPrincipal.getAttribute("login");
+ return "Hello " + userName;
+ }
+}
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/jersey/RestConfig.java b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/RestConfig.java
new file mode 100644
index 0000000000..306677f261
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/RestConfig.java
@@ -0,0 +1,11 @@
+package com.baeldung.jersey;
+
+import org.glassfish.jersey.server.ResourceConfig;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RestConfig extends ResourceConfig {
+ public RestConfig() {
+ register(JerseyResource.class);
+ }
+}
diff --git a/spring-5-security-oauth/src/main/java/com/baeldung/jersey/SecurityConfig.java b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/SecurityConfig.java
new file mode 100644
index 0000000000..5644856695
--- /dev/null
+++ b/spring-5-security-oauth/src/main/java/com/baeldung/jersey/SecurityConfig.java
@@ -0,0 +1,21 @@
+package com.baeldung.jersey;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+
+@Configuration
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .authorizeRequests()
+ .antMatchers("/login")
+ .permitAll()
+ .anyRequest()
+ .authenticated()
+ .and()
+ .oauth2Login()
+ .loginPage("/login");
+ }
+}
diff --git a/spring-5-security-oauth/src/main/resources/jersey-application.properties b/spring-5-security-oauth/src/main/resources/jersey-application.properties
new file mode 100644
index 0000000000..516b24eb67
--- /dev/null
+++ b/spring-5-security-oauth/src/main/resources/jersey-application.properties
@@ -0,0 +1,3 @@
+server.port=8083
+spring.security.oauth2.client.registration.github.client-id=
+spring.security.oauth2.client.registration.github.client-secret=
\ No newline at end of file
diff --git a/spring-5-security-oauth/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java b/spring-5-security-oauth/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java
new file mode 100644
index 0000000000..e6cc3be213
--- /dev/null
+++ b/spring-5-security-oauth/src/test/java/com/baeldung/jersey/JerseyResourceUnitTest.java
@@ -0,0 +1,72 @@
+package com.baeldung.jersey;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.net.URI;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
+import static org.springframework.http.MediaType.TEXT_HTML;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = RANDOM_PORT)
+@TestPropertySource(properties = "spring.security.oauth2.client.registration.github.client-id:test-id")
+public class JerseyResourceUnitTest {
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @LocalServerPort
+ private int port;
+
+ private String basePath;
+
+ @Before
+ public void setup() {
+ basePath = "http://localhost:" + port + "/";
+ }
+
+ @Test
+ public void whenUserIsUnauthenticated_thenTheyAreRedirectedToLoginPage() {
+ ResponseEntity