diff --git a/apache-cxf-modules/cxf-spring/pom.xml b/apache-cxf-modules/cxf-spring/pom.xml
index 1c87ae4bfb..67a61e8200 100644
--- a/apache-cxf-modules/cxf-spring/pom.xml
+++ b/apache-cxf-modules/cxf-spring/pom.xml
@@ -43,19 +43,19 @@
com.sun.xml.ws
jaxws-ri
- 2.3.3
+ ${jaxws-ri.version}
pom
javax.servlet
javax.servlet-api
- 4.0.1
+ ${javax.servlet-api.version}
provided
javax.servlet
jstl
- 1.2
+ ${jstl.version}
@@ -117,7 +117,9 @@
5.3.25
1.6.1
- 3.3.2
+ 1.2
+ 4.0.1
+ 2.3.3
\ No newline at end of file
diff --git a/apache-httpclient4/pom.xml b/apache-httpclient4/pom.xml
index 21c675db35..f4c213687e 100644
--- a/apache-httpclient4/pom.xml
+++ b/apache-httpclient4/pom.xml
@@ -241,8 +241,6 @@
4.4.16
4.5.14
5.11.2
-
- 3.3.2
\ No newline at end of file
diff --git a/apache-libraries-2/pom.xml b/apache-libraries-2/pom.xml
index 618ff4a188..d188204208 100644
--- a/apache-libraries-2/pom.xml
+++ b/apache-libraries-2/pom.xml
@@ -21,7 +21,6 @@
-
2.0.1.Final
diff --git a/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithParametersAndOption.java b/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithParametersAndOption.java
new file mode 100644
index 0000000000..07efab080d
--- /dev/null
+++ b/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithParametersAndOption.java
@@ -0,0 +1,31 @@
+package com.baeldung.xsltProcessing;
+
+import javax.xml.transform.*;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.File;
+
+public class XSLTProcessorWithParametersAndOption {
+ public static void transformXMLWithParametersAndOption(
+ String inputXMLPath,
+ String xsltPath,
+ String outputHTMLPath,
+ String companyName,
+ boolean enableIndentation
+ ) throws TransformerException {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Source xsltSource = new StreamSource(new File(xsltPath));
+ Transformer transformer = transformerFactory.newTransformer(xsltSource);
+
+ transformer.setParameter("companyName", companyName);
+
+ if (enableIndentation) {
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ }
+
+ Source xmlSource = new StreamSource(new File(inputXMLPath));
+ Result outputResult = new StreamResult(new File(outputHTMLPath));
+
+ transformer.transform(xmlSource, outputResult);
+ }
+}
diff --git a/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithTemplate.java b/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithTemplate.java
new file mode 100644
index 0000000000..017fc0db8b
--- /dev/null
+++ b/apache-libraries-2/src/main/java/com/baeldung/xsltProcessing/XSLTProcessorWithTemplate.java
@@ -0,0 +1,21 @@
+package com.baeldung.xsltProcessing;
+
+import javax.xml.transform.*;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.File;
+
+public class XSLTProcessorWithTemplate {
+ public static void transformXMLUsingTemplate(String inputXMLPath, String xsltPath, String outputHTMLPath) throws TransformerException {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Source xsltSource = new StreamSource(new File(xsltPath));
+ Templates templates = transformerFactory.newTemplates(xsltSource);
+
+ Transformer transformer = templates.newTransformer();
+
+ Source xmlSource = new StreamSource(new File(inputXMLPath));
+ Result outputResult = new StreamResult(new File(outputHTMLPath));
+
+ transformer.transform(xmlSource, outputResult);
+ }
+}
diff --git a/apache-velocity/pom.xml b/apache-velocity/pom.xml
index a562ebeec0..f4b6de8872 100644
--- a/apache-velocity/pom.xml
+++ b/apache-velocity/pom.xml
@@ -63,7 +63,6 @@
4.5.2
1.7
2.0
- 3.3.2
\ No newline at end of file
diff --git a/asm/pom.xml b/asm/pom.xml
index f1e60d2560..4edfe86ae5 100644
--- a/asm/pom.xml
+++ b/asm/pom.xml
@@ -49,7 +49,6 @@
5.2
- 2.4
\ No newline at end of file
diff --git a/aws-modules/aws-s3-update-object/pom.xml b/aws-modules/aws-s3-update-object/pom.xml
index 574a63977b..3cf7b657b0 100644
--- a/aws-modules/aws-s3-update-object/pom.xml
+++ b/aws-modules/aws-s3-update-object/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
aws-s3-update-object
0.0.1-SNAPSHOT
diff --git a/aws-modules/aws-s3/pom.xml b/aws-modules/aws-s3/pom.xml
index 157aeb671d..e2bc04964a 100644
--- a/aws-modules/aws-s3/pom.xml
+++ b/aws-modules/aws-s3/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
aws-s3
0.1.0-SNAPSHOT
diff --git a/azure/pom.xml b/azure/pom.xml
index aae84db0c6..6a06282a71 100644
--- a/azure/pom.xml
+++ b/azure/pom.xml
@@ -122,7 +122,6 @@
${azure.containerRegistry}.azurecr.io
1.1.0
1.1.0
- 3.3.2
\ No newline at end of file
diff --git a/core-groovy-modules/pom.xml b/core-groovy-modules/pom.xml
index 6faa7f94c8..4fdaf3ee7a 100644
--- a/core-groovy-modules/pom.xml
+++ b/core-groovy-modules/pom.xml
@@ -27,6 +27,7 @@
2.7.1
2.3-groovy-3.0
2.1.0
+ 2.21.0
diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml
index 9f48c0b8b2..55c50b2a5c 100644
--- a/core-java-modules/core-java-14/pom.xml
+++ b/core-java-modules/core-java-14/pom.xml
@@ -48,7 +48,6 @@
14
- 3.8.1
3.0.0-M3
diff --git a/core-java-modules/core-java-15/pom.xml b/core-java-modules/core-java-15/pom.xml
index 059e2cc8f3..3ac45d26ba 100644
--- a/core-java-modules/core-java-15/pom.xml
+++ b/core-java-modules/core-java-15/pom.xml
@@ -53,7 +53,6 @@
15
- 3.8.1
3.0.0-M3
diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml
index 6821c9c340..9c897f1cea 100644
--- a/core-java-modules/core-java-9-new-features/pom.xml
+++ b/core-java-modules/core-java-9-new-features/pom.xml
@@ -152,7 +152,6 @@
4.0.2
1.9
1.9
- 3.2.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/arraymiddle/MiddleOfArray.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/arraymiddle/MiddleOfArray.java
new file mode 100644
index 0000000000..f389893209
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/arraymiddle/MiddleOfArray.java
@@ -0,0 +1,65 @@
+package com.baeldung.arraymiddle;
+
+import java.util.Arrays;
+
+import org.apache.commons.lang3.ObjectUtils;
+
+public class MiddleOfArray {
+ int[] middleOfArray(int[] array) {
+ if (ObjectUtils.isEmpty(array) || array.length < 3)
+ return array;
+ int n = array.length;
+ int mid = n / 2;
+ if (n % 2 == 0) {
+ int mid2 = mid - 1;
+ return new int[] { array[mid2], array[mid] };
+ } else {
+ return new int[] { array[mid] };
+ }
+ }
+
+ int[] middleOfArrayWithStartEndNaive(int[] array, int start, int end) {
+ int mid = (start + end) / 2;
+ int n = end - start;
+ if (n % 2 == 0) {
+ int mid2 = mid - 1;
+ return new int[] { array[mid2], array[mid] };
+ } else {
+ return new int[] { array[mid] };
+ }
+ }
+
+ int[] middleOfArrayWithStartEnd(int[] array, int start, int end) {
+ int mid = start + (end - start) / 2;
+ int n = end - start;
+ if (n % 2 == 0) {
+ int mid2 = mid - 1;
+ return new int[] { array[mid2], array[mid] };
+ } else {
+ return new int[] { array[mid] };
+ }
+ }
+
+ int[] middleOfArrayWithStartEndBitwise(int[] array, int start, int end) {
+ int mid = (start + end) >>> 1;
+ int n = end - start;
+ if (n % 2 == 0) {
+ int mid2 = mid - 1;
+ return new int[] { array[mid2], array[mid] };
+ } else {
+ return new int[] { array[mid] };
+ }
+ }
+
+ int medianOfArray(int[] array, int start, int end) {
+ Arrays.sort(array); // for safety. This can be ignored
+ int mid = (start + end) >>> 1;
+ int n = end - start;
+ if (n % 2 == 0) {
+ int mid2 = mid - 1;
+ return (array[mid2] + array[mid]) / 2;
+ } else {
+ return array[mid];
+ }
+ }
+}
diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/test/java/com/baeldung/arraymiddle/MiddleOfArrayUnitTest.java b/core-java-modules/core-java-arrays-operations-advanced/src/test/java/com/baeldung/arraymiddle/MiddleOfArrayUnitTest.java
new file mode 100644
index 0000000000..706412d83e
--- /dev/null
+++ b/core-java-modules/core-java-arrays-operations-advanced/src/test/java/com/baeldung/arraymiddle/MiddleOfArrayUnitTest.java
@@ -0,0 +1,89 @@
+package com.baeldung.arraymiddle;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MiddleOfArrayUnitTest {
+
+ @Test
+ public void givenArrayOfEvenLength_whenMiddleOfArray_thenReturn2Values() {
+ int[] array = new int[100];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int[] expectedMidArray = { 50, 51 };
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
+ }
+
+ @Test
+ public void givenArrayOfEdgeCaseLength_whenMiddleOfArray_thenReturn2Values() {
+ int[] array = new int[0];
+ int[] expectedMidArray = new int[0];
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
+
+ array = new int[] { 1, 2 };
+ expectedMidArray = new int[] { 1, 2 };
+
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
+ }
+
+ @Test
+ public void givenArrayOfOddLength_whenMiddleOfArray_thenReturnMid() {
+ int[] array = new int[99];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int[] expectedMidArray = { 50 };
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArray(array));
+ }
+
+ @Test
+ public void givenArrayWithStartAndEnd_whenMiddleOfArray_thenReturnMid() {
+ int[] array = new int[100];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int[] expectedMidArray = { 58 };
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndNaive(array, 55, 60));
+
+ expectedMidArray = new int[] { 58, 59 };
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndNaive(array, 56, 60));
+ }
+
+ @Test
+ public void givenArrayWithStartAndEndOptimized_whenMiddleOfArray_thenReturnMid() {
+ int[] array = new int[100];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int[] expectedMidArray = { 78 };
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEnd(array, 55, 100));
+ }
+
+ @Test
+ public void givenArrayWithStartAndEndBitwise_whenMiddleOfArray_thenReturnMid() {
+ int[] array = new int[100];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int[] expectedMidArray = { 78 };
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertArrayEquals(expectedMidArray, middleOfArray.middleOfArrayWithStartEndBitwise(array, 55, 100));
+ }
+
+ @Test
+ public void givenArrayWithStartAndEnd_whenMedianOfArray_thenReturnMid() {
+ int[] array = new int[100];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = i + 1;
+ }
+ int expectMedian = 50;
+ MiddleOfArray middleOfArray = new MiddleOfArray();
+ Assert.assertEquals(expectMedian, middleOfArray.medianOfArray(array, 0, 100));
+ }
+}
diff --git a/core-java-modules/core-java-collections-list-5/pom.xml b/core-java-modules/core-java-collections-list-5/pom.xml
index bcdb6824ed..2b4b0041b3 100644
--- a/core-java-modules/core-java-collections-list-5/pom.xml
+++ b/core-java-modules/core-java-collections-list-5/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list-5
core-java-collections-list-5
diff --git a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/DataQueue.java b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/DataQueue.java
index 8867ddeb63..8b6f02b529 100644
--- a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/DataQueue.java
+++ b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/DataQueue.java
@@ -58,4 +58,8 @@ public class DataQueue {
return queue.poll();
}
}
+
+ public Integer getSize() {
+ return queue.size();
+ }
}
diff --git a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java
index 5ca60a29e4..069476bbd1 100644
--- a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java
+++ b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java
@@ -1,12 +1,13 @@
package com.baeldung.producerconsumer;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
public class Producer implements Runnable {
private static final Logger log = Logger.getLogger(Producer.class.getCanonicalName());
private final DataQueue dataQueue;
-
private static int idSequence = 0;
+ final ReentrantLock lock = new ReentrantLock();
public Producer(DataQueue dataQueue) {
this.dataQueue = dataQueue;
@@ -19,22 +20,38 @@ public class Producer implements Runnable {
public void produce() {
while (dataQueue.runFlag) {
- while (dataQueue.isFull() && dataQueue.runFlag) {
- try {
- dataQueue.waitOnFull();
- } catch (InterruptedException e) {
- e.printStackTrace();
+
+ try {
+ lock.lock();
+
+ while (dataQueue.isFull() && dataQueue.runFlag) {
+ try {
+ dataQueue.waitOnFull();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ break;
+ }
+ }
+
+ if (!dataQueue.runFlag) {
break;
}
- }
- if (!dataQueue.runFlag) {
- break;
- }
- Message message = generateMessage();
- dataQueue.add(message);
- dataQueue.notifyAllForEmpty();
+ Message message = generateMessage();
+ dataQueue.add(message);
+ dataQueue.notifyAllForEmpty();
+
+ log.info("Size of the queue is: " + dataQueue.getSize());
+
+ }
+ finally{
+ lock.unlock();
+ }
+
+ //Sleeping on random time to make it realistic
+ ThreadUtil.sleep((long) (Math.random() * 100));
}
+
log.info("Producer Stopped");
}
@@ -43,9 +60,6 @@ public class Producer implements Runnable {
log.info(String.format("[%s] Generated Message. Id: %d, Data: %f%n",
Thread.currentThread().getName(), message.getId(), message.getData()));
- //Sleeping on random time to make it realistic
- ThreadUtil.sleep((long) (message.getData() * 100));
-
return message;
}
diff --git a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/ProducerConsumerDemonstrator.java b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/ProducerConsumerDemonstrator.java
index 96d7b9f865..eac026536d 100644
--- a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/ProducerConsumerDemonstrator.java
+++ b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/ProducerConsumerDemonstrator.java
@@ -36,8 +36,8 @@ public class ProducerConsumerDemonstrator {
public static void demoMultipleProducersAndMultipleConsumers() {
DataQueue dataQueue = new DataQueue(MAX_QUEUE_CAPACITY);
- int producerCount = 3;
- int consumerCount = 3;
+ int producerCount = 5;
+ int consumerCount = 5;
List threads = new ArrayList<>();
Producer producer = new Producer(dataQueue);
for(int i = 0; i < producerCount; i++) {
@@ -45,6 +45,7 @@ public class ProducerConsumerDemonstrator {
producerThread.start();
threads.add(producerThread);
}
+
Consumer consumer = new Consumer(dataQueue);
for(int i = 0; i < consumerCount; i++) {
Thread consumerThread = new Thread(consumer);
@@ -52,8 +53,8 @@ public class ProducerConsumerDemonstrator {
threads.add(consumerThread);
}
- // let threads run for two seconds
- sleep(2000);
+ // let threads run for ten seconds
+ sleep(10000);
// Stop threads
producer.stop();
diff --git a/core-java-modules/core-java-conditionals/pom.xml b/core-java-modules/core-java-conditionals/pom.xml
index 2a1290c98e..811f183e99 100644
--- a/core-java-modules/core-java-conditionals/pom.xml
+++ b/core-java-modules/core-java-conditionals/pom.xml
@@ -37,20 +37,19 @@
--enable-preview
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire.plugin.version}
-
- --enable-preview
-
-
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire.plugin.version}
+
+ --enable-preview
+
+
14
- 3.8.1
14
3.0.0-M3
diff --git a/core-java-modules/core-java-date-operations-3/pom.xml b/core-java-modules/core-java-date-operations-3/pom.xml
index 19760ca357..9b7be18b85 100644
--- a/core-java-modules/core-java-date-operations-3/pom.xml
+++ b/core-java-modules/core-java-date-operations-3/pom.xml
@@ -12,7 +12,7 @@
core-java-modules
0.0.1-SNAPSHOT
-
+
joda-time
@@ -25,7 +25,7 @@
${commons-lang3.version}
-
+
2.12.5
3.12.0
diff --git a/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/EpochToLocalDate.java b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/EpochToLocalDate.java
new file mode 100644
index 0000000000..574693355d
--- /dev/null
+++ b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/EpochToLocalDate.java
@@ -0,0 +1,24 @@
+package com.baeldung.epochconversion;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+public class EpochToLocalDate {
+
+ public static void main(String[] args) {
+ long millisSinceEpoch = 2131242L;
+ ZoneId zoneId = ZoneId.of("Europe/Amsterdam"); // or: ZoneId.systemDefault();
+ // to get All Zone Ids available, we can use the function below
+ // Set allZoneIds = ZoneId.getAvailableZoneIds();
+ LocalDate date =
+ Instant.ofEpochMilli(millisSinceEpoch)
+ .atZone(zoneId)
+ .toLocalDate();
+ LocalDateTime time =
+ Instant.ofEpochMilli(millisSinceEpoch)
+ .atZone(zoneId)
+ .toLocalDateTime();
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/LocalDateToEpoch.java b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/LocalDateToEpoch.java
new file mode 100644
index 0000000000..b84cd5c1a7
--- /dev/null
+++ b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/epochconversion/LocalDateToEpoch.java
@@ -0,0 +1,18 @@
+package com.baeldung.epochconversion;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+public class LocalDateToEpoch {
+
+ public static void main(String[] args) {
+ ZoneId zoneId = ZoneId.of("Europe/Amsterdam"); // or: ZoneId.systemDefault()
+ LocalDate date = LocalDate.now();
+ long epochMilliSecondsAtDate = date.atStartOfDay(zoneId).toInstant().toEpochMilli();
+
+ // epoch for time
+ LocalDateTime time = LocalDateTime.parse("2019-11-15T13:15:30");
+ long epochMilliSecondsAtTime = time.atZone(zoneId).toInstant().toEpochMilli();
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/EpochToLocalDateUnitTest.java b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/EpochToLocalDateUnitTest.java
new file mode 100644
index 0000000000..90ab056511
--- /dev/null
+++ b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/EpochToLocalDateUnitTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.epochconversion;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class EpochToLocalDateUnitTest {
+
+ @Test
+ void givenEpoch_thenComputeLocalDateCorrectly() {
+ ZoneId zoneId = ZoneId.systemDefault();
+ LocalDate expectedDate = LocalDate.of(1995, 4, 15);
+ long date = expectedDate.atStartOfDay(zoneId).toInstant().toEpochMilli();
+
+ LocalDate actualDate =
+ Instant.ofEpochMilli(date)
+ .atZone(zoneId)
+ .toLocalDate();
+ assertEquals(expectedDate, actualDate);
+ }
+
+ @Test
+ void givenEpoch_thenComputeLocalDateTimeCorrectly() {
+ ZoneId zoneId = ZoneId.systemDefault();
+ LocalDateTime expectedTime = LocalDateTime.parse("2019-11-15T13:15:30");
+ long time = expectedTime.atZone(zoneId).toInstant().toEpochMilli();
+
+ LocalDateTime actualTime =
+ Instant.ofEpochMilli(time)
+ .atZone(zoneId)
+ .toLocalDateTime();
+ assertEquals(expectedTime, actualTime);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/LocalDateTimeToEpochUnitTest.java b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/LocalDateTimeToEpochUnitTest.java
new file mode 100644
index 0000000000..8e9a4b01d0
--- /dev/null
+++ b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/epochconversion/LocalDateTimeToEpochUnitTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.epochconversion;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class LocalDateTimeToEpochUnitTest {
+
+ @Test
+ void givenDate_thenComputeEpochCorrectly() {
+ ZoneId zoneId = ZoneId.of("Europe/Tallinn");
+ long expectedEpoch = LocalDate.now().toEpochDay();
+ LocalDateTime givenDate = Instant.ofEpochMilli(expectedEpoch)
+ .atZone(zoneId)
+ .toLocalDateTime();
+
+ long actualEpoch = givenDate.atZone(zoneId).toInstant().toEpochMilli();
+ assertEquals(expectedEpoch, actualEpoch);
+ }
+
+ @Test
+ void givenTime_thenComputeEpochCorrectly() {
+ ZoneId zoneId = ZoneId.of("Europe/Amsterdam");
+ long expectedEpoch = Instant.now().toEpochMilli();
+ LocalDateTime givenTime = Instant.ofEpochMilli(expectedEpoch)
+ .atZone(zoneId)
+ .toLocalDateTime();
+
+ long actualEpoch = givenTime.atZone(zoneId).toInstant().toEpochMilli();
+ assertEquals(expectedEpoch, actualEpoch);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml
index 8364f36874..59952c2d9e 100644
--- a/core-java-modules/core-java-io/pom.xml
+++ b/core-java-modules/core-java-io/pom.xml
@@ -132,7 +132,6 @@
2.8.0
0.1.5
- 3.3.0
4.4.2
2.1.2
2.0.1
diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml
index ec88abe444..a46299c669 100644
--- a/core-java-modules/core-java-jar/pom.xml
+++ b/core-java-modules/core-java-jar/pom.xml
@@ -275,7 +275,6 @@
1.1
3.0.0-M1
- 3.0.2
1.4.4
3.1.1
3.3.0
diff --git a/core-java-modules/core-java-lang-6/pom.xml b/core-java-modules/core-java-lang-6/pom.xml
index 86121e0a7f..53ef36a898 100644
--- a/core-java-modules/core-java-lang-6/pom.xml
+++ b/core-java-modules/core-java-lang-6/pom.xml
@@ -1,7 +1,7 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.core-java-modules
diff --git a/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/InterruptThread.java b/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/InterruptThread.java
new file mode 100644
index 0000000000..7964ad9f52
--- /dev/null
+++ b/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/InterruptThread.java
@@ -0,0 +1,13 @@
+package com.baeldung.stopexecution;
+
+public class InterruptThread extends Thread {
+ @Override
+ public void run() {
+ while (!isInterrupted()) {
+ if (isInterrupted()) {
+ break;
+ }
+ // business logic
+ }
+ }
+}
diff --git a/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/StopExecutionFurtherCode.java b/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/StopExecutionFurtherCode.java
new file mode 100644
index 0000000000..81abe15b5c
--- /dev/null
+++ b/core-java-modules/core-java-lang-6/src/main/java/com/baeldung/stopexecution/StopExecutionFurtherCode.java
@@ -0,0 +1,87 @@
+package com.baeldung.stopexecution;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Locale;
+
+public class StopExecutionFurtherCode {
+
+ boolean shouldContinue = true;
+
+ int performTask(int a, int b) {
+ if (!shouldContinue) {
+ System.exit(0);
+ }
+ return a + b;
+ }
+
+ void stop() {
+ this.shouldContinue = false;
+ }
+
+ int calculateFactorial(int n) {
+ if (n <= 1) {
+ return 1; // base case
+ }
+
+ return n * calculateFactorial(n - 1);
+ }
+
+ int calculateSum(int[] x) {
+ int sum = 0;
+ for (int i = 0; i < 10; i++) {
+ if (x[i] < 0) {
+ break;
+ }
+ sum += x[i];
+ }
+ return sum;
+ }
+
+ T stopExecutionUsingException(T object) {
+ if (object instanceof Number) {
+ throw new IllegalArgumentException("Parameter can not be number.");
+ }
+ T upperCase = (T) String.valueOf(object)
+ .toUpperCase(Locale.ENGLISH);
+ return upperCase;
+ }
+
+ int processLines(String[] lines) {
+ int statusCode = 0;
+ parser:
+ for (String line : lines) {
+ System.out.println("Processing line: " + line);
+ if (line.equals("stop")) {
+ System.out.println("Stopping parsing...");
+ statusCode = -1;
+ break parser; // Stop parsing and exit the loop
+ }
+ System.out.println("Line processed.");
+ }
+ return statusCode;
+ }
+
+ void download(String fileUrl, String destinationPath) throws MalformedURLException {
+ if (fileUrl == null || fileUrl.isEmpty() || destinationPath == null || destinationPath.isEmpty()) {
+ return;
+ }
+ // execute downloading
+ URL url = new URL(fileUrl);
+ try (InputStream in = url.openStream(); FileOutputStream out = new FileOutputStream(destinationPath)) {
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ while ((bytesRead = in.read(buffer)) != -1) {
+ out.write(buffer, 0, bytesRead);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
+}
diff --git a/core-java-modules/core-java-lang-6/src/test/java/com/baeldung/stopexecution/StopExecutionFurtherCodeUnitTest.java b/core-java-modules/core-java-lang-6/src/test/java/com/baeldung/stopexecution/StopExecutionFurtherCodeUnitTest.java
new file mode 100644
index 0000000000..9cdb1e71aa
--- /dev/null
+++ b/core-java-modules/core-java-lang-6/src/test/java/com/baeldung/stopexecution/StopExecutionFurtherCodeUnitTest.java
@@ -0,0 +1,90 @@
+package com.baeldung.stopexecution;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+
+import java.net.MalformedURLException;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.jupiter.api.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class StopExecutionFurtherCodeUnitTest {
+
+
+ @Test
+ void givenExecution_whenStopIsNotCalled_thenTaskIsPerformed() {
+ StopExecutionFurtherCode stopExecution = new StopExecutionFurtherCode();
+ int performedTask = stopExecution.performTask(10, 20);
+ Assert.assertEquals(30, performedTask);
+ }
+
+ // This test case have been commented because, otherwise, the program will exit since System.exit(statusCode) is being used.
+ /*@Test
+ void givenExecution_whenStopIsCalled_thenTaskNotPerformed() {
+ StopExecutionFurtherCode stopExecution = new StopExecutionFurtherCode();
+ stopExecution.stop();
+ int performedTask = stopExecution.performTask(10, 20);
+ Assert.assertEquals(30, performedTask);
+ }*/
+
+ @Test
+ void givenWrongUrlAndPath_whenDownloadCalled_thenExecutionIsStopped() throws MalformedURLException {
+ StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
+ stopExecutionFurtherCode.download("", "");
+ }
+
+ @Test
+ void givenName_whenStopExecutionUsingExceptionCalled_thenNameIsConvertedToUpper() {
+ StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
+ String name = "John";
+ String result1 = stopExecutionFurtherCode.stopExecutionUsingException(name);
+ Assert.assertEquals("JOHN", result1);
+ try {
+ Integer number1 = 10;
+ Assert.assertThrows(IllegalArgumentException.class, () -> {
+ int result = stopExecutionFurtherCode.stopExecutionUsingException(number1);
+ });
+ } catch (Exception e) {
+ Assert.fail("Unexpected exception thrown: " + e.getMessage());
+ }
+ }
+
+ @Test
+ void givenBaseCase_whenStopExecutionWhenBaseCaseKnownCalled_thenFactorialIsCalculated() throws MalformedURLException {
+ StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
+ int factorial = stopExecutionFurtherCode.calculateFactorial(1);
+ Assert.assertEquals(1, factorial);
+ }
+
+ @Test
+ void givenArrayWithNegative_whenStopExecutionInLoopCalled_thenSumIsCalculatedIgnoringNegatives() {
+ StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
+ int[] nums = { 1, 2, 3, -1, 1, 2, 3 };
+ int sum = stopExecutionFurtherCode.calculateSum(nums);
+ Assert.assertEquals(6, sum);
+ }
+
+ @Test
+ void givenThreadRunning_whenInterrupted_thenThreadExecutionIsStopped() throws InterruptedException {
+ InterruptThread stopExecution = new InterruptThread();
+ stopExecution.start();
+ Thread.sleep(2000);
+ stopExecution.interrupt();
+ stopExecution.join();
+ Assert.assertTrue(!stopExecution.isAlive());
+ }
+
+ @Test
+ void givenLinesWithStopLabel_whenStopExecutionLabeledLoopCalled_thenLoopExecutionIsStopped() {
+ StopExecutionFurtherCode furtherCode = new StopExecutionFurtherCode();
+ final String[] lines = { "Line 1", "Line 2", "Line 3", "stop", "Line 4", "Line 5" };
+ int statusCode = furtherCode.processLines(lines);
+ Assert.assertEquals(-1, statusCode);
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java
new file mode 100644
index 0000000000..4c62c0560e
--- /dev/null
+++ b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java
@@ -0,0 +1,23 @@
+package com.baeldung.clampfunction;
+
+public class Clamp {
+
+ public int clamp(int value, int min, int max) {
+ return Math.max(min, Math.min(max, value));
+ }
+
+ public double clamp(double value, double min, double max) {
+ return Math.max(min, Math.min(max, value));
+ }
+
+ public static > T clamp(T value, T min, T max) {
+ if (value.compareTo(min) < 0) {
+ return min;
+ } else if (value.compareTo(max) > 0) {
+ return max;
+ } else {
+ return value;
+ }
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java b/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java
new file mode 100644
index 0000000000..7bcf676dd0
--- /dev/null
+++ b/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.clampfunction;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class ClampFunctionUnitTest {
+
+ Clamp clampValue = new Clamp();
+
+ @Test
+ public void givenValueOutsideRange_whenClamp_thenReturnLowerValue() {
+ assertEquals(15, clampValue.clamp(10, 15, 35));
+ }
+
+ @Test
+ public void givenValueWithinRange_whenClamp_thenReturnValue() {
+ assertEquals(20, clampValue.clamp(20, 15, 35));
+ }
+
+ @Test
+ public void givenValueOutsideRange_whenClamp_thenReturnMaximumValue() {
+ assertEquals(35, clampValue.clamp(50, 15, 35));
+ }
+
+ @Test
+ public void givenDoubleValueOutsideRange_whenClamp_thenReturnMaximumValue() {
+ assertEquals(60.5, clampValue.clamp(75.6, 25.5, 60.5));
+ }
+
+ /*
+ * This method uses the clamp() method introduced in Java 21
+ @Test
+ public void givenValueWithinRange_whenClamp_thenReturnValue() {
+ assertEquals(20, Math.clamp(20, 67,98));
+ }
+ */
+
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/Identifiable.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/Identifiable.java
new file mode 100644
index 0000000000..080f63b295
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/Identifiable.java
@@ -0,0 +1,5 @@
+package com.baeldung.interfaces.namingconventions;
+
+public interface Identifiable {
+ void identify();
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RegularUser.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RegularUser.java
new file mode 100644
index 0000000000..e75d01e365
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RegularUser.java
@@ -0,0 +1,13 @@
+package com.baeldung.interfaces.namingconventions;
+
+public class RegularUser implements User {
+ @Override
+ public void identify() {
+ // some implementation
+ }
+
+ @Override
+ public void authorize() {
+ // some implementation
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RootUser.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RootUser.java
new file mode 100644
index 0000000000..a02804d0b3
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/RootUser.java
@@ -0,0 +1,13 @@
+package com.baeldung.interfaces.namingconventions;
+
+public class RootUser implements User {
+ @Override
+ public void identify() {
+ // some implementation
+ }
+
+ @Override
+ public void authorize() {
+ // some implementation
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/User.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/User.java
new file mode 100644
index 0000000000..2891126ddd
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/interfaces/namingconventions/User.java
@@ -0,0 +1,5 @@
+package com.baeldung.interfaces.namingconventions;
+
+public interface User extends Identifiable {
+ void authorize();
+}
diff --git a/core-java-modules/core-java-numbers-conversions/src/test/java/com/baeldung/inttolong/IntToLongUnitTest.java b/core-java-modules/core-java-numbers-conversions/src/test/java/com/baeldung/inttolong/IntToLongUnitTest.java
new file mode 100644
index 0000000000..bc4109b42a
--- /dev/null
+++ b/core-java-modules/core-java-numbers-conversions/src/test/java/com/baeldung/inttolong/IntToLongUnitTest.java
@@ -0,0 +1,36 @@
+package com.baeldung.inttolong;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class IntToLongUnitTest {
+
+ @Test
+ void whenUsingTheAutoboxing_thenGetTheExpectedLong() {
+ int intTen = 10;
+ Long longTen = (long) intTen;
+ assertEquals(intTen, longTen);
+ }
+
+ @Test
+ void whenUsingTheValueOf_thenGetTheExpectedLong() {
+ int intTen = 10;
+ Long longTen = Long.valueOf(intTen);
+ assertEquals(intTen, longTen);
+ }
+
+ @Test
+ void whenUsingTheConstructor_thenGetTheExpectedLong() {
+ int intTen = 10;
+ Long longTen = new Long(intTen);
+ assertEquals(intTen, longTen);
+ }
+
+ @Test
+ void whenUsingTheParseLong_thenGetTheExpectedLong() {
+ int intTen = 10;
+ Long longTen = Long.parseLong(String.valueOf(intTen));
+ assertEquals(intTen, longTen);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-scanner/pom.xml b/core-java-modules/core-java-scanner/pom.xml
index f149f51955..bb5c7dca78 100644
--- a/core-java-modules/core-java-scanner/pom.xml
+++ b/core-java-modules/core-java-scanner/pom.xml
@@ -1,7 +1,7 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-scanner
core-java-scanner
diff --git a/core-java-modules/core-java-security-4/README.md b/core-java-modules/core-java-security-4/README.md
new file mode 100644
index 0000000000..e850841d2b
--- /dev/null
+++ b/core-java-modules/core-java-security-4/README.md
@@ -0,0 +1,7 @@
+## Core Java Security
+
+This module contains articles about core Java Security
+
+### Relevant Articles:
+
+- More articles: [[<-- prev]](/core-java-modules/core-java-security-3)
diff --git a/core-java-modules/core-java-security-4/pom.xml b/core-java-modules/core-java-security-4/pom.xml
new file mode 100644
index 0000000000..cca86d804a
--- /dev/null
+++ b/core-java-modules/core-java-security-4/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+ core-java-security-4
+ core-java-security-4
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-security-4/src/main/java/com/baeldung/certificate/RootCertificateUtil.java b/core-java-modules/core-java-security-4/src/main/java/com/baeldung/certificate/RootCertificateUtil.java
new file mode 100644
index 0000000000..3e8445971f
--- /dev/null
+++ b/core-java-modules/core-java-security-4/src/main/java/com/baeldung/certificate/RootCertificateUtil.java
@@ -0,0 +1,51 @@
+package com.baeldung.certificate;
+
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.Enumeration;
+
+public class RootCertificateUtil {
+
+ private RootCertificateUtil() {
+ }
+
+ public static X509Certificate getRootCertificate(X509Certificate endEntityCertificate, KeyStore trustStore)
+ throws Exception {
+ X509Certificate issuerCertificate = findIssuerCertificate(endEntityCertificate, trustStore);
+ if (issuerCertificate != null) {
+ if (isRoot(issuerCertificate)) {
+ return issuerCertificate;
+ } else {
+ return getRootCertificate(issuerCertificate, trustStore);
+ }
+ }
+ return null;
+ }
+
+ private static X509Certificate findIssuerCertificate(X509Certificate certificate, KeyStore trustStore)
+ throws KeyStoreException {
+ Enumeration aliases = trustStore.aliases();
+ while (aliases.hasMoreElements()) {
+ String alias = aliases.nextElement();
+ Certificate cert = trustStore.getCertificate(alias);
+ if (cert instanceof X509Certificate) {
+ X509Certificate x509Cert = (X509Certificate) cert;
+ if (x509Cert.getSubjectX500Principal().equals(certificate.getIssuerX500Principal())) {
+ return x509Cert;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static boolean isRoot(X509Certificate certificate) {
+ try {
+ certificate.verify(certificate.getPublicKey());
+ return certificate.getKeyUsage() != null && certificate.getKeyUsage()[5];
+ } catch (Exception e) {
+ return false;
+ }
+ }
+}
diff --git a/core-java-modules/core-java-security-4/src/main/resources/keystore.jks b/core-java-modules/core-java-security-4/src/main/resources/keystore.jks
new file mode 100644
index 0000000000..656c6c17d3
Binary files /dev/null and b/core-java-modules/core-java-security-4/src/main/resources/keystore.jks differ
diff --git a/core-java-modules/core-java-security-4/src/main/resources/truststore.jks b/core-java-modules/core-java-security-4/src/main/resources/truststore.jks
new file mode 100644
index 0000000000..5e1a9b4ce1
Binary files /dev/null and b/core-java-modules/core-java-security-4/src/main/resources/truststore.jks differ
diff --git a/core-java-modules/core-java-security-4/src/test/java/com/baeldung/certificate/SignedCertificateUnitTest.java b/core-java-modules/core-java-security-4/src/test/java/com/baeldung/certificate/SignedCertificateUnitTest.java
new file mode 100644
index 0000000000..f5ea3c1b87
--- /dev/null
+++ b/core-java-modules/core-java-security-4/src/test/java/com/baeldung/certificate/SignedCertificateUnitTest.java
@@ -0,0 +1,76 @@
+package com.baeldung.certificate;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.security.KeyStore;
+import java.security.SignatureException;
+import java.security.cert.X509Certificate;
+
+import static com.baeldung.certificate.RootCertificateUtil.getRootCertificate;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class SignedCertificateUnitTest {
+
+ private KeyStore keyStore;
+
+ private KeyStore trustStore;
+
+ @BeforeEach
+ public void setUp() throws Exception {
+ char[] passwd = "changeit".toCharArray();
+ keyStore = KeyStore.getInstance("JKS");
+ keyStore.load(this.getClass().getClassLoader().getResourceAsStream("keystore.jks"), passwd);
+ trustStore = KeyStore.getInstance("JKS");
+ trustStore.load(this.getClass().getClassLoader().getResourceAsStream("truststore.jks"), passwd);
+ }
+
+ @Test
+ void whenCertificateIsSelfSigned_thenSubjectIsEqualToIssuer() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("selfsigned");
+ assertEquals(certificate.getSubjectDN(), certificate.getIssuerDN());
+ }
+
+ @Test
+ void whenCertificateIsSelfSigned_thenItCanBeVerifiedWithItsOwnPublicKey() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("selfsigned");
+ assertDoesNotThrow(() -> certificate.verify(certificate.getPublicKey()));
+ }
+
+ @Test
+ void whenCertificateIsCASigned_thenItCantBeVerifiedWithItsOwnPublicKey() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("baeldung");
+ assertThrows(SignatureException.class, () -> certificate.verify(certificate.getPublicKey()));
+ }
+
+ @Test
+ void whenCertificateIsCASigned_thenRootCanBeFoundInTruststore() throws Exception {
+ X509Certificate endEntityCertificate = (X509Certificate) keyStore.getCertificate("baeldung");
+ X509Certificate rootCertificate = getRootCertificate(endEntityCertificate, trustStore);
+ assertNotNull(rootCertificate);
+ }
+
+ @Test
+ void whenCertificateIsCA_thenItCanBeUsedToSignOtherCertificates() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("cloudflare");
+ assertTrue(certificate.getKeyUsage()[5]);
+ }
+
+ @Test
+ void whenCertificateIsCA_thenBasicConstrainsReturnsZeroOrGreaterThanZero() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("cloudflare");
+ assertNotEquals(-1, certificate.getBasicConstraints());
+ }
+
+ @Test
+ void whenCertificateIsSelfSigned_thenItCantBeUsedToSignOtherCertificates() throws Exception {
+ X509Certificate certificate = (X509Certificate) keyStore.getCertificate("selfsigned");
+ assertNull(certificate.getKeyUsage());
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-4/pom.xml b/core-java-modules/core-java-streams-4/pom.xml
index 0b9b3569f1..e832cc1616 100644
--- a/core-java-modules/core-java-streams-4/pom.xml
+++ b/core-java-modules/core-java-streams-4/pom.xml
@@ -115,7 +115,6 @@
3.23.1
- 3.1
12
12
1.2.5
diff --git a/core-java-modules/core-java-streams-5/pom.xml b/core-java-modules/core-java-streams-5/pom.xml
index d1f8af6461..dc97d81b3d 100644
--- a/core-java-modules/core-java-streams-5/pom.xml
+++ b/core-java-modules/core-java-streams-5/pom.xml
@@ -38,6 +38,11 @@
3.12.0
test
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
@@ -64,9 +69,9 @@
- 3.1
12
12
+ 0.10.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java
new file mode 100644
index 0000000000..dea3d3f44c
--- /dev/null
+++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java
@@ -0,0 +1,38 @@
+package com.baeldung.aggregateexception;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collector;
+
+public class CustomCollector {
+ private final List results = new ArrayList<>();
+ private final List exceptions = new ArrayList<>();
+
+ public static Collector> of(Function mapper) {
+ return Collector.of(
+ CustomCollector::new,
+ (collector, item) -> {
+ try {
+ R result = mapper.apply(item);
+ collector.results.add(result);
+ } catch (Exception e) {
+ collector.exceptions.add(e);
+ }
+ },
+ (left, right) -> {
+ left.results.addAll(right.results);
+ left.exceptions.addAll(right.exceptions);
+ return left;
+ }
+ );
+ }
+
+ public List getResults() {
+ return results;
+ }
+
+ public List getExceptions() {
+ return exceptions;
+ }
+}
diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java
new file mode 100644
index 0000000000..920c963337
--- /dev/null
+++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java
@@ -0,0 +1,17 @@
+package com.baeldung.aggregateexception;
+
+import com.baeldung.aggregateexception.entity.Result;
+
+import java.util.function.Function;
+
+public class CustomMapper {
+ public static Function> mapper(Function func) {
+ return arg -> {
+ try {
+ return new Result(func.apply(arg));
+ } catch (Exception e) {
+ return new Result(e);
+ }
+ };
+ }
+}
diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java
new file mode 100644
index 0000000000..b723c3e510
--- /dev/null
+++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java
@@ -0,0 +1,26 @@
+package com.baeldung.aggregateexception.entity;
+
+import java.util.Optional;
+
+public class Result {
+ private Optional result;
+ private Optional exception;
+
+ public Result(R result) {
+ this.result = Optional.of(result);
+ this.exception = Optional.empty();
+ }
+
+ public Result(E exception) {
+ this.exception = Optional.of(exception);
+ this.result = Optional.empty();
+ }
+
+ public Optional getResult() {
+ return result;
+ }
+
+ public Optional getException() {
+ return exception;
+ }
+}
diff --git a/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java
new file mode 100644
index 0000000000..6410645d2a
--- /dev/null
+++ b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java
@@ -0,0 +1,150 @@
+package com.baeldung.aggregateexception;
+
+import com.baeldung.aggregateexception.entity.Result;
+import io.vavr.control.Either;
+import io.vavr.control.Try;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class AggregateExceptionHandlerUnitTest {
+ private static final Logger logger = LoggerFactory.getLogger(AggregateExceptionHandlerUnitTest.class);
+
+ @Test
+ public void givenExtractedMethod_whenFoundEx_thenSuppressExIntoRuntimeEx() {
+ String[] strings = {"1", "2", "3", "a", "b", "c"};
+ RuntimeException runEx = Arrays.stream(strings)
+ .map(str -> callProcessThrowsExAndNoOutput(str))
+ .filter(Objects::nonNull)
+ .reduce(new RuntimeException("Errors Occurred"), (o1, o2) -> {
+ o1.addSuppressed(o2);
+ return o1;
+ });
+ processExceptions(runEx);
+ assertEquals("Errors Occurred", runEx.getMessage());
+ assertEquals(3, runEx.getSuppressed().length);
+ }
+ @Test
+ public void givenTryCatchInPipeline_whenFoundEx_thenSuppressExIntoRuntimeEx() {
+ String[] strings = {"1", "2", "3", "a", "b", "c"};
+ RuntimeException runEx = Arrays.stream(strings).map(str -> {
+ try {
+ processThrowsExAndNoOutput(str);
+ return null;
+ } catch (RuntimeException e) {
+ return e;
+ }
+ }).filter(Objects::nonNull)
+ .collect(Collectors.collectingAndThen(Collectors.toList(), list -> {
+ RuntimeException runtimeException = new RuntimeException("Errors Occurred");
+ list.forEach(runtimeException::addSuppressed);
+ return runtimeException;
+ }));
+ processExceptions(runEx);
+ assertEquals("Errors Occurred", runEx.getMessage());
+ assertEquals(3, runEx.getSuppressed().length);
+ }
+
+ @Test
+ public void givenProcessMethod_whenStreamResultHasExAndOutput_thenHandleExceptionListAndOutputList() {
+ List strings = List.of("1", "2", "3", "a", "b", "c");
+ Map map = strings.stream()
+ .map(s -> processReturnsExAndOutput(s))
+ .collect(Collectors.partitioningBy(o -> o instanceof RuntimeException, Collectors.toList()));
+
+ List exceptions = (List)map.getOrDefault(Boolean.TRUE, List.of());
+ List results = (List)map.getOrDefault(Boolean.FALSE, List.of());
+ handleExceptionsAndOutputs(exceptions, results);
+ }
+
+ @Test
+ public void givenCustomMapper_whenStreamResultHasExAndSuccess_thenHandleExceptionListAndOutputList() {
+ List strings = List.of("1", "2", "3", "a", "b", "c");
+ strings.stream()
+ .map(CustomMapper.mapper(Integer::parseInt))
+ .collect(Collectors.collectingAndThen(Collectors.toList(), list -> handleErrorsAndOutputForResult(list)));
+ }
+
+ @Test
+ public void givenCustomCollector_whenStreamResultHasExAndSuccess_thenHandleAggrExceptionAndResults() {
+ String[] strings = {"1", "2", "3", "a", "b", "c"};
+ Arrays.stream(strings)
+ .collect(Collectors.collectingAndThen(CustomCollector.of(Integer::parseInt),
+ col -> handleExAndResults(col.getExceptions(), col.getResults())));
+ }
+
+ @Test
+ public void givenVavrEitherAndTry_whenStreamResultHasExAndSuccess_thenHandleExceptionListAndOutputList() {
+ List strings = List.of("1", "2", "3", "a", "b", "c");
+ strings.stream()
+ .map(str -> Try.of(() -> Integer.parseInt(str)).toEither())
+ .collect(Collectors.collectingAndThen(Collectors.partitioningBy(Either::isLeft, Collectors.toList()),
+ map -> handleErrorsAndOutputForEither(map)));
+ }
+
+ private static void processThrowsExAndNoOutput(String input) {
+ //throw exception when input is "a", "b", "c"
+ if (input.matches("[a-c]")) {
+ throw new RuntimeException("Downstream method throws exception for " + input);
+ }
+ }
+ private static RuntimeException callProcessThrowsExAndNoOutput(String input) {
+ try {
+ processThrowsExAndNoOutput(input);
+ return null;
+ } catch (RuntimeException e) {
+ return e;
+ }
+ }
+
+ private static Object processReturnsExAndOutput(String input) {
+ logger.info("call a downstream method that returns an Integer");
+ try {
+ return Integer.parseInt(input);
+ } catch (Exception e) {
+ return new RuntimeException("Exception in processWithReturnOutput for " + input, e);
+ }
+ }
+
+ private static void processExceptions(Throwable throwable) {
+ logger.error("Process Exception" + throwable.getMessage());
+ }
+
+ private static void handleExceptionsAndOutputs(List exs, List output) {
+ logger.info("number of exceptions " + exs.size() + " number of outputs " + output.size());
+ }
+
+ private static String handleExAndResults(List ex, List results ) {
+ logger.info("handle aggregated exceptions and results" + ex.size() + " " + results.size());
+ return "Exceptions and Results Handled";
+ }
+
+ private static String handleErrorsAndOutputForEither(Map>> map) {
+ logger.info("handle errors and output");
+ map.getOrDefault(Boolean.TRUE, List.of()).forEach(either -> logger.error("Process Exception " + either.getLeft()));
+
+ map.getOrDefault(Boolean.FALSE, List.of()).forEach(either -> logger.info("Process Result " + either.get()));
+ return "Errors and Output Handled";
+ }
+
+ private static String handleErrorsAndOutputForResult(List> successAndErrors) {
+ logger.info("handle errors and output");
+ successAndErrors.forEach(result -> {
+ if (result.getException().isPresent()) {
+ logger.error("Process Exception " + result.getException().get());
+ } else {
+ logger.info("Process Result" + result.getResult().get());
+ }
+ });
+ return "Errors and Output Handled";
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-maps/pom.xml b/core-java-modules/core-java-streams-maps/pom.xml
index 66e1fedd87..6b04897a29 100644
--- a/core-java-modules/core-java-streams-maps/pom.xml
+++ b/core-java-modules/core-java-streams-maps/pom.xml
@@ -58,7 +58,6 @@
- 3.1
1.8
1.8
diff --git a/core-java-modules/core-java-string-operations-5/src/test/java/com/baeldung/replace/ReplaceStringUnitTest.java b/core-java-modules/core-java-string-operations-5/src/test/java/com/baeldung/replace/ReplaceStringUnitTest.java
new file mode 100644
index 0000000000..081ffabab1
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-5/src/test/java/com/baeldung/replace/ReplaceStringUnitTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.replace;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class ReplaceStringUnitTest {
+ private final String ORIGINAL_STRING = "This is 'Baeldung' tutorial.";
+ private final String EXPECTED_STRING = "This is \\'Baeldung\\' tutorial.";
+
+ @Test
+ public void givenString_thenReplaceUsinReplaceAllMethod() {
+ String modifiedString = ORIGINAL_STRING.replaceAll("'", "\\\\'");
+ assertEquals(EXPECTED_STRING, modifiedString);
+ }
+
+ @Test
+ public void givenString_thenReplaceUsinReplaceMethod() {
+ String modifiedString = ORIGINAL_STRING.replace("'", "\\'");
+ assertEquals(EXPECTED_STRING, modifiedString);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-6/pom.xml b/core-java-modules/core-java-string-operations-6/pom.xml
index 0ec32d91b1..ca9a7a9297 100644
--- a/core-java-modules/core-java-string-operations-6/pom.xml
+++ b/core-java-modules/core-java-string-operations-6/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations-6
core-java-string-operations-6
diff --git a/core-java-modules/core-java-string-operations/pom.xml b/core-java-modules/core-java-string-operations/pom.xml
index 577736a324..601d0341a3 100644
--- a/core-java-modules/core-java-string-operations/pom.xml
+++ b/core-java-modules/core-java-string-operations/pom.xml
@@ -15,30 +15,20 @@
- javax.xml.bind
- jaxb-api
- 2.4.0-b180725.0427
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ ${jakarta.xml.bind-api.version}
org.apache.commons
commons-lang3
${commons-lang3.version}
-
- org.openjdk.jmh
- jmh-core
- ${jmh-core.version}
-
log4j
log4j
${log4j.version}
-
- org.openjdk.jmh
- jmh-generator-annprocess
- ${jmh-generator.version}
-
commons-codec
commons-codec
@@ -57,7 +47,8 @@
- 1.15
+ 1.16.0
+ 4.0.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java
index 6f8a17e316..491574f0f1 100644
--- a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java
+++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/base64encodinganddecoding/StringToByteArrayUnitTest.java
@@ -2,7 +2,7 @@ package com.baeldung.base64encodinganddecoding;
import org.junit.Test;
-import javax.xml.bind.DatatypeConverter;
+import jakarta.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index e9bb86e500..4f21da40f5 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -127,6 +127,7 @@
core-java-scanner
core-java-security-2
core-java-security-3
+ core-java-security-4
core-java-security-algorithms
core-java-streams
core-java-streams-3
diff --git a/di-modules/avaje/pom.xml b/di-modules/avaje/pom.xml
index 7ffe14bd72..49162c518e 100644
--- a/di-modules/avaje/pom.xml
+++ b/di-modules/avaje/pom.xml
@@ -1,37 +1,37 @@
- 4.0.0
- com.baeldung
- inject-intro
- 0.0.1-SNAPSHOT
- avaje-inject-intro
-
- 11
- 11
- 9.5
-
-
-
- io.avaje
- avaje-inject
- ${avaje.inject.version}
-
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ 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
+ inject-intro
+ 0.0.1-SNAPSHOT
+ avaje-inject-intro
+
+ 11
+ 11
+ 9.5
+
+
+
+ io.avaje
+ avaje-inject
+ ${avaje.inject.version}
+
-
- io.avaje
- avaje-inject-test
- ${avaje.inject.version}
- test
-
+
+ io.avaje
+ avaje-inject-test
+ ${avaje.inject.version}
+ test
+
-
-
- io.avaje
- avaje-inject-generator
- ${avaje.inject.version}
- provided
- true
-
-
+
+
+ io.avaje
+ avaje-inject-generator
+ ${avaje.inject.version}
+ provided
+ true
+
+
\ No newline at end of file
diff --git a/disruptor/pom.xml b/disruptor/pom.xml
index 75e783e935..b3b065d67e 100644
--- a/disruptor/pom.xml
+++ b/disruptor/pom.xml
@@ -119,7 +119,6 @@
3.3.6
2.4.3
- 3.0.2
1.4.4
diff --git a/jackson-modules/jackson-polymorphic-deserialization/pom.xml b/jackson-modules/jackson-polymorphic-deserialization/pom.xml
index afa9cab82f..0d88c19500 100644
--- a/jackson-modules/jackson-polymorphic-deserialization/pom.xml
+++ b/jackson-modules/jackson-polymorphic-deserialization/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-polymorphic-deserialization
jackson-polymorphic-deserialization
diff --git a/java-websocket/pom.xml b/java-websocket/pom.xml
index 7c5c006aa9..d529b32022 100644
--- a/java-websocket/pom.xml
+++ b/java-websocket/pom.xml
@@ -30,7 +30,6 @@
1.1
2.8.0
- 3.3.2
\ No newline at end of file
diff --git a/jersey/pom.xml b/jersey/pom.xml
index 005fa85077..c2b37f7118 100644
--- a/jersey/pom.xml
+++ b/jersey/pom.xml
@@ -100,7 +100,6 @@
3.1.1
- 3.3.2
\ No newline at end of file
diff --git a/jhipster-modules/jhipster-microservice/car-app/pom.xml b/jhipster-modules/jhipster-microservice/car-app/pom.xml
index f345688939..9ecf471bc2 100644
--- a/jhipster-modules/jhipster-microservice/car-app/pom.xml
+++ b/jhipster-modules/jhipster-microservice/car-app/pom.xml
@@ -1,5 +1,7 @@
-
+
4.0.0
@@ -45,8 +47,8 @@
3.1.3
v6.10.0
-
-
+
+
${project.build.directory}/test-results
0.0.20
@@ -440,7 +442,7 @@
-
+
@@ -634,9 +636,9 @@
src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml
org.h2.Driver
jdbc:h2:file:./target/h2db/db/carapp
-
+
carapp
-
+
hibernate:spring:com.car.app.domain?dialect=org.hibernate.dialect.H2Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
true
debug
@@ -683,7 +685,7 @@
org.apache.maven.plugins
maven-war-plugin
-
+
@@ -722,7 +724,7 @@
org.apache.maven.plugins
maven-war-plugin
-
+
org.springframework.boot
diff --git a/jhipster-modules/jhipster-microservice/dealer-app/pom.xml b/jhipster-modules/jhipster-microservice/dealer-app/pom.xml
index 056bd60f33..33a238c96c 100644
--- a/jhipster-modules/jhipster-microservice/dealer-app/pom.xml
+++ b/jhipster-modules/jhipster-microservice/dealer-app/pom.xml
@@ -1,5 +1,7 @@
-
+
4.0.0
@@ -44,8 +46,8 @@
3.1.3
v6.10.0
-
-
+
+
${project.build.directory}/test-results
0.0.20
@@ -439,7 +441,7 @@
-
+
@@ -633,9 +635,9 @@
src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml
org.h2.Driver
jdbc:h2:file:./target/h2db/db/dealerapp
-
+
dealerapp
-
+
hibernate:spring:com.dealer.app.domain?dialect=org.hibernate.dialect.H2Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
true
debug
@@ -682,7 +684,7 @@
org.apache.maven.plugins
maven-war-plugin
-
+
@@ -721,7 +723,7 @@
org.apache.maven.plugins
maven-war-plugin
-
+
org.springframework.boot
diff --git a/jhipster-modules/jhipster-microservice/gateway-app/pom.xml b/jhipster-modules/jhipster-microservice/gateway-app/pom.xml
index b90f22f009..3956475380 100644
--- a/jhipster-modules/jhipster-microservice/gateway-app/pom.xml
+++ b/jhipster-modules/jhipster-microservice/gateway-app/pom.xml
@@ -1,5 +1,7 @@
-
+
4.0.0
@@ -48,8 +50,8 @@
3.1.3
v6.10.0
-
-
+
+
${project.build.directory}/test-results
0.0.20
@@ -481,7 +483,7 @@
-
+
@@ -497,7 +499,7 @@
-
+
@@ -691,9 +693,9 @@
src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml
org.h2.Driver
jdbc:h2:file:./target/h2db/db/gateway
-
+
gateway
-
+
hibernate:spring:com.gateway.domain?dialect=org.hibernate.dialect.H2Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
true
debug
diff --git a/jmh/pom.xml b/jmh/pom.xml
index e5e0f46044..e8a88bf301 100644
--- a/jmh/pom.xml
+++ b/jmh/pom.xml
@@ -83,10 +83,8 @@
- 3.3.0
0.17
3.5.0
- 3.11.0
\ No newline at end of file
diff --git a/jsf/pom.xml b/jsf/pom.xml
index 81030537fb..09dea98f65 100644
--- a/jsf/pom.xml
+++ b/jsf/pom.xml
@@ -76,8 +76,6 @@
2.2.14
3.0.0
-
- 3.3.1
1.3.1
diff --git a/json-modules/json-conversion/pom.xml b/json-modules/json-conversion/pom.xml
index 1af13cbbcb..680f27fa38 100644
--- a/json-modules/json-conversion/pom.xml
+++ b/json-modules/json-conversion/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.baeldung
json-conversion
@@ -29,11 +29,17 @@
jackson-databind
${jackson.version}
+
+ com.google.guava
+ guava
+ ${guava.version}
+
20211205
2.10.1
+ 32.1.2-jre
diff --git a/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java b/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java
new file mode 100644
index 0000000000..2fd49d99ad
--- /dev/null
+++ b/json-modules/json-conversion/src/main/java/com/baeldung/jsontomap/FlattenUtils.java
@@ -0,0 +1,36 @@
+package com.baeldung.jsontomap;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class FlattenUtils {
+ public static Map flatten(Map map) {
+ return flatten(map, null);
+ }
+
+ private static Map flatten(Map map, String prefix) {
+ Map flatMap = new HashMap<>();
+ map.forEach((key, value) -> {
+ String newKey = prefix != null ? prefix + "." + key : key;
+ if (value instanceof Map) {
+ flatMap.putAll(flatten((Map) value, newKey));
+ } else if (value instanceof List) {
+ // check for list of primitives
+ Object element = ((List>) value).get(0);
+ if (element instanceof String || element instanceof Number || element instanceof Boolean) {
+ flatMap.put(newKey, value);
+ } else {
+ // check for list of objects
+ List
diff --git a/kubernetes-modules/jkube-demo/pom.xml b/kubernetes-modules/jkube-demo/pom.xml
index 7bb662c4a3..6fedc0f24a 100644
--- a/kubernetes-modules/jkube-demo/pom.xml
+++ b/kubernetes-modules/jkube-demo/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
com.baeldung
diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml
index e19067daa3..0620dd69ea 100644
--- a/libraries-data-2/pom.xml
+++ b/libraries-data-2/pom.xml
@@ -92,7 +92,7 @@
suanshu
${suanshu.version}
- -->
+ -->
org.derive4j
derive4j
@@ -162,7 +162,7 @@
-
+
+ libraries-data-2
libraries-data-io
libraries-files
libraries-http
@@ -1059,6 +1058,7 @@
guava-modules
kubernetes-modules
libraries-concurrency
+ jhipster-6
libraries-testing
maven-modules
optaplanner
@@ -1140,7 +1140,7 @@
libraries-apache-commons-2
libraries-apache-commons-collections
libraries-apache-commons-io
-
+ libraries-data-2
libraries-data-io
libraries-files
libraries-http
@@ -1270,19 +1270,19 @@
2.22.2
- 3.8.1
- 3.0.0
+ 3.11.0
+ 3.1.0
1.8
1.2.17
1.36
1.36
- 2.21.0
+ 3.1.2
4.4
2.13.0
2.6
3.13.0
1.5.0
- 3.3.2
+ 3.4.0
4.0.1
1.2
2.3.3
@@ -1292,16 +1292,16 @@
1.9.2
5.9.2
1.3.2
- 0.3.1
- 2.5.2
+ 1.0
+ 3.1.1
0.0.1
3.12.2
- 3.0.0
- 3.19.0
+ 3.3.0
+ 3.21.0
1.18.28
2.1.214
32.1.2-jre
- 3.2.2
+ 3.3.0
diff --git a/quarkus-modules/quarkus-vs-springboot/spring-project/pom.xml b/quarkus-modules/quarkus-vs-springboot/spring-project/pom.xml
index df3eca8a4f..74deab3558 100644
--- a/quarkus-modules/quarkus-vs-springboot/spring-project/pom.xml
+++ b/quarkus-modules/quarkus-vs-springboot/spring-project/pom.xml
@@ -255,7 +255,6 @@
1.17.2
11
0.12.1
- 3.10.1
11
11
3.1.0
diff --git a/saas-modules/sentry-servlet/pom.xml b/saas-modules/sentry-servlet/pom.xml
index 4f9e37ebd5..70f6876dee 100644
--- a/saas-modules/sentry-servlet/pom.xml
+++ b/saas-modules/sentry-servlet/pom.xml
@@ -46,6 +46,5 @@
6.11.0
1.10.4
- 3.3.2
\ No newline at end of file
diff --git a/saas-modules/slack/pom.xml b/saas-modules/slack/pom.xml
index 326167c055..d9e7abb4a2 100644
--- a/saas-modules/slack/pom.xml
+++ b/saas-modules/slack/pom.xml
@@ -55,7 +55,6 @@
1.4
- 2.4
\ No newline at end of file
diff --git a/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java b/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java
index a9c3b4185d..29fb832bd9 100644
--- a/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java
+++ b/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java
@@ -7,6 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Date;
+import org.junit.Ignore;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -97,13 +98,14 @@ public class Auth0JsonWebTokenUnitTest {
assertEquals(DATA, claim.asString());
}
- @Test
+ //Need to fix with JAVA-24552
+ @Ignore
public void givenJWT_whenCreatedWithNotBefore_thenThrowException() {
jwtToken = JWT.create()
.withIssuer(ISSUER)
.withClaim(DATA_CLAIM, DATA)
- .withNotBefore(new Date(System.currentTimeMillis() + 1000L))
+ .withNotBefore(new Date(System.currentTimeMillis() + 10000L))
.sign(algorithm);
assertThrows(IncorrectClaimException.class, () -> {
diff --git a/security-modules/pom.xml b/security-modules/pom.xml
index b779c0d46d..864b1a7fcc 100644
--- a/security-modules/pom.xml
+++ b/security-modules/pom.xml
@@ -25,8 +25,4 @@
sql-injection-samples
-
- 3.3.2
-
-
diff --git a/server-modules/undertow/pom.xml b/server-modules/undertow/pom.xml
index 42a46d9508..a73771485c 100644
--- a/server-modules/undertow/pom.xml
+++ b/server-modules/undertow/pom.xml
@@ -46,7 +46,6 @@
1.4.18.Final
- 3.0.2
\ No newline at end of file
diff --git a/spring-aop-2/pom.xml b/spring-aop-2/pom.xml
index 056e248a3c..206e1d7d7c 100644
--- a/spring-aop-2/pom.xml
+++ b/spring-aop-2/pom.xml
@@ -51,4 +51,119 @@
+
+
+ no-weaving
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ com.baeldung.selfinvocation.CompileTimeWeavingIntegrationTest
+ com.baeldung.selfinvocation.LoadTimeWeavingIntegrationTest
+
+
+
+
+
+
+
+
+ compile-time-weaving
+
+
+
+ org.springframework
+ spring-aspects
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ com.baeldung.selfinvocation.CompileTimeWeavingIntegrationTest
+
+
+
+
+ org.codehaus.mojo
+ aspectj-maven-plugin
+ ${aspectj-plugin.version}
+
+ ${java.version}
+ ${java.version}
+ ${java.version}
+ ignore
+ UTF-8
+
+
+ org.springframework
+ spring-aspects
+
+
+
+
+
+
+ compile
+
+
+
+
+
+
+
+
+
+ load-time-weaving
+
+
+
+ org.springframework
+ spring-aspects
+
+
+ org.springframework
+ spring-tx
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ --add-opens java.base/java.lang=ALL-UNNAMED
+ --add-opens java.base/java.util=ALL-UNNAMED
+ -javaagent:"${settings.localRepository}"/org/aspectj/aspectjweaver/${aspectjweaver.version}/aspectjweaver-${aspectjweaver.version}.jar
+ -javaagent:"${settings.localRepository}"/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
+
+ true
+ always
+
+ com.baeldung.selfinvocation.LoadTimeWeavingIntegrationTest
+
+
+
+
+
+
+
+
+
+ 1.14.0
+ 5.3.27
+
+
\ No newline at end of file
diff --git a/spring-aop-2/src/main/java/com/baeldung/Application.java b/spring-aop-2/src/main/java/com/baeldung/Application.java
index c0490d50c6..cc64447264 100644
--- a/spring-aop-2/src/main/java/com/baeldung/Application.java
+++ b/spring-aop-2/src/main/java/com/baeldung/Application.java
@@ -2,8 +2,16 @@ package com.baeldung;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
@SpringBootApplication
+@ComponentScan(basePackages = { "com.baeldung" }, excludeFilters = {
+ @ComponentScan.Filter(type = FilterType.ANNOTATION,
+ value = { SpringBootApplication.class})
+})
+@EnableCaching
public class Application {
public static void main(String[] args) {
diff --git a/spring-aop-2/src/main/java/com/baeldung/selfinvocation/CompileTimeWeavingApplication.java b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/CompileTimeWeavingApplication.java
new file mode 100644
index 0000000000..03995dd53b
--- /dev/null
+++ b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/CompileTimeWeavingApplication.java
@@ -0,0 +1,20 @@
+package com.baeldung.selfinvocation;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.AdviceMode;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
+
+@SpringBootApplication
+@EnableCaching(mode = AdviceMode.ASPECTJ)
+@ComponentScan(basePackages = { "com.baeldung" }, excludeFilters = {
+ @ComponentScan.Filter(type = FilterType.ANNOTATION,
+ value = { SpringBootApplication.class})
+})
+public class CompileTimeWeavingApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(CompileTimeWeavingApplication.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-aop-2/src/main/java/com/baeldung/selfinvocation/LoadTimeWeavingApplication.java b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/LoadTimeWeavingApplication.java
new file mode 100644
index 0000000000..a3dcc161b3
--- /dev/null
+++ b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/LoadTimeWeavingApplication.java
@@ -0,0 +1,16 @@
+package com.baeldung.selfinvocation;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.AdviceMode;
+import org.springframework.context.annotation.EnableLoadTimeWeaving;
+
+@SpringBootApplication
+@EnableCaching(mode = AdviceMode.ASPECTJ)
+@EnableLoadTimeWeaving
+public class LoadTimeWeavingApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(LoadTimeWeavingApplication.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-aop-2/src/main/java/com/baeldung/selfinvocation/MathService.java b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/MathService.java
new file mode 100644
index 0000000000..993b73295f
--- /dev/null
+++ b/spring-aop-2/src/main/java/com/baeldung/selfinvocation/MathService.java
@@ -0,0 +1,43 @@
+package com.baeldung.selfinvocation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.context.annotation.Scope;
+import org.springframework.context.annotation.ScopedProxyMode;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Service
+@CacheConfig(cacheNames = "square")
+@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
+public class MathService {
+
+ @Autowired
+ private MathService self;
+ private final AtomicInteger counter = new AtomicInteger();
+
+ @CacheEvict(allEntries = true)
+ public AtomicInteger resetCounter() {
+ counter.set(0);
+ return counter;
+ }
+
+ @Cacheable(key = "#n")
+ public double square(double n) {
+ counter.incrementAndGet();
+ return n * n;
+ }
+
+ public double sumOfSquareOf2() {
+ return this.square(2) + this.square(2);
+ }
+
+ public double sumOfSquareOf3() {
+ return self.square(3) + self.square(3);
+ }
+
+}
+
diff --git a/spring-aop-2/src/main/resources/logback.xml b/spring-aop-2/src/main/resources/logback.xml
index 4eaa556705..d63707a9da 100644
--- a/spring-aop-2/src/main/resources/logback.xml
+++ b/spring-aop-2/src/main/resources/logback.xml
@@ -17,6 +17,8 @@
+
+
diff --git a/spring-aop-2/src/test/java/com/baeldung/selfinvocation/CompileTimeWeavingIntegrationTest.java b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/CompileTimeWeavingIntegrationTest.java
new file mode 100644
index 0000000000..d0522f67e5
--- /dev/null
+++ b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/CompileTimeWeavingIntegrationTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.selfinvocation;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest(classes = CompileTimeWeavingApplication.class)
+class CompileTimeWeavingIntegrationTest {
+
+ @Resource
+ private MathService mathService;
+
+ @Test
+ void givenCacheableMethod_whenInvokingByInternalCall_thenCacheIsTriggered() {
+ AtomicInteger counter = mathService.resetCounter();
+
+ assertThat(mathService.sumOfSquareOf2()).isEqualTo(8);
+ assertThat(counter.get()).isEqualTo(1);
+ }
+}
\ No newline at end of file
diff --git a/spring-aop-2/src/test/java/com/baeldung/selfinvocation/LoadTimeWeavingIntegrationTest.java b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/LoadTimeWeavingIntegrationTest.java
new file mode 100644
index 0000000000..93c57699d6
--- /dev/null
+++ b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/LoadTimeWeavingIntegrationTest.java
@@ -0,0 +1,25 @@
+package com.baeldung.selfinvocation;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest(classes = LoadTimeWeavingApplication.class)
+class LoadTimeWeavingIntegrationTest {
+
+ @Resource
+ private MathService mathService;
+
+ @Test
+ void givenCacheableMethod_whenInvokingByInternalCall_thenCacheIsTriggered() {
+ AtomicInteger counter = mathService.resetCounter();
+
+ assertThat(mathService.sumOfSquareOf2()).isEqualTo(8);
+ assertThat(counter.get()).isEqualTo(1);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-aop-2/src/test/java/com/baeldung/selfinvocation/MathServiceIntegrationTest.java b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/MathServiceIntegrationTest.java
new file mode 100644
index 0000000000..24b829fa07
--- /dev/null
+++ b/spring-aop-2/src/test/java/com/baeldung/selfinvocation/MathServiceIntegrationTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.selfinvocation;
+
+import com.baeldung.Application;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest(classes = Application.class)
+class MathServiceIntegrationTest {
+
+ @Resource
+ private MathService mathService;
+
+ @Test
+ void givenCacheableMethod_whenInvokedForSecondTime_thenCounterShouldNotIncrease() {
+ AtomicInteger counter = mathService.resetCounter();
+ assertThat(mathService.square(2)).isEqualTo(4);
+ assertThat(counter.get()).isEqualTo(1);
+
+ mathService.square(2);
+ assertThat(counter.get()).isEqualTo(1);
+
+ mathService.square(3);
+ assertThat(counter.get()).isEqualTo(2);
+ }
+
+ @Test
+ void givenCacheableMethod_whenInvokingByInternalCall_thenCacheIsNotTriggered() {
+ AtomicInteger counter = mathService.resetCounter();
+
+ assertThat(mathService.sumOfSquareOf2()).isEqualTo(8);
+ assertThat(counter.get()).isEqualTo(2);
+ }
+
+ @Test
+ void givenCacheableMethod_whenInvokingByExternalCall_thenCacheIsTriggered() {
+ AtomicInteger counter = mathService.resetCounter();
+
+ assertThat(mathService.sumOfSquareOf3()).isEqualTo(18);
+ assertThat(counter.get()).isEqualTo(1);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml
index 251dba0316..f87446b413 100644
--- a/spring-boot-modules/pom.xml
+++ b/spring-boot-modules/pom.xml
@@ -120,8 +120,4 @@
-
- 3.3.2
-
-
diff --git a/spring-boot-modules/spring-boot-3-testcontainers/src/main/java/com/baeldung/testcontainers/Application.java b/spring-boot-modules/spring-boot-3-testcontainers/src/main/java/com/baeldung/testcontainers/Application.java
index 9a00bfebf2..afe987a313 100644
--- a/spring-boot-modules/spring-boot-3-testcontainers/src/main/java/com/baeldung/testcontainers/Application.java
+++ b/spring-boot-modules/spring-boot-3-testcontainers/src/main/java/com/baeldung/testcontainers/Application.java
@@ -2,7 +2,6 @@ package com.baeldung.testcontainers;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@SpringBootApplication
public class Application {
diff --git a/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesIntegrationTest.java b/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesLiveTest.java
similarity index 95%
rename from spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesIntegrationTest.java
rename to spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesLiveTest.java
index 8689b10110..e8818c1019 100644
--- a/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/DynamicPropertiesLiveTest.java
@@ -25,7 +25,7 @@ import com.baeldung.testcontainers.support.MiddleEarthCharactersRepository;
@Testcontainers
@SpringBootTest(webEnvironment = DEFINED_PORT)
@DirtiesContext(classMode = AFTER_CLASS)
-class DynamicPropertiesIntegrationTest {
+class DynamicPropertiesLiveTest {
@Container
static MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"));
@@ -48,7 +48,7 @@ class DynamicPropertiesIntegrationTest {
new MiddleEarthCharacter("Frodo", "hobbit"),
new MiddleEarthCharacter("Samwise", "hobbit"),
new MiddleEarthCharacter("Aragon", "human"),
- new MiddleEarthCharacter("Gandalf", "wizzard")
+ new MiddleEarthCharacter("Gandalf", "wizard")
));
when().get("/characters?race=hobbit")
diff --git a/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionIntegrationTest.java b/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionLiveTest.java
similarity index 94%
rename from spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionIntegrationTest.java
rename to spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionLiveTest.java
index 500d6d2e61..838ee127f6 100644
--- a/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-3-testcontainers/src/test/java/com/baeldung/testcontainers/ServiceConnectionLiveTest.java
@@ -24,7 +24,7 @@ import com.baeldung.testcontainers.support.MiddleEarthCharactersRepository;
@Testcontainers
@SpringBootTest(webEnvironment = DEFINED_PORT)
@DirtiesContext(classMode = AFTER_CLASS)
-class ServiceConnectionIntegrationTest {
+class ServiceConnectionLiveTest {
@Container
@ServiceConnection
@@ -44,7 +44,7 @@ class ServiceConnectionIntegrationTest {
new MiddleEarthCharacter("Frodo", "hobbit"),
new MiddleEarthCharacter("Samwise", "hobbit"),
new MiddleEarthCharacter("Aragon", "human"),
- new MiddleEarthCharacter("Gandalf", "wizzard")
+ new MiddleEarthCharacter("Gandalf", "wizard")
));
when().get("/characters?race=hobbit")
diff --git a/spring-boot-modules/spring-boot-3/pom.xml b/spring-boot-modules/spring-boot-3/pom.xml
index 32c69801ca..3b3f9dbdb0 100644
--- a/spring-boot-modules/spring-boot-3/pom.xml
+++ b/spring-boot-modules/spring-boot-3/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
spring-boot-3
0.0.1-SNAPSHOT
diff --git a/spring-boot-modules/spring-boot-artifacts/pom.xml b/spring-boot-modules/spring-boot-artifacts/pom.xml
index dedeb0ab2a..e39ddb5af1 100644
--- a/spring-boot-modules/spring-boot-artifacts/pom.xml
+++ b/spring-boot-modules/spring-boot-artifacts/pom.xml
@@ -193,7 +193,6 @@
2.2.4
3.1.7
4.5.8
- 2.18
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-basic-customization/pom.xml b/spring-boot-modules/spring-boot-basic-customization/pom.xml
index 4b1009d38a..581a7fec06 100644
--- a/spring-boot-modules/spring-boot-basic-customization/pom.xml
+++ b/spring-boot-modules/spring-boot-basic-customization/pom.xml
@@ -86,5 +86,4 @@
com.baeldung.changeport.CustomApplication
-
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-documentation/pom.xml b/spring-boot-modules/spring-boot-documentation/pom.xml
index 587ad8473b..513c5678d5 100644
--- a/spring-boot-modules/spring-boot-documentation/pom.xml
+++ b/spring-boot-modules/spring-boot-documentation/pom.xml
@@ -92,7 +92,6 @@
- 3.3.2
2.2.11
0.12.1
0.8.0
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java
index b4378a9248..a1173f40ae 100644
--- a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java
@@ -31,9 +31,13 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.annotation.DirtiesContext;
+/**
+ * This was failing as a unit test in integrated environment
+ * probably due to parallel execution of tests.
+ */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
-class ResilientAppControllerIntegrationTest {
+class ResilientAppControllerManualTest {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
diff --git a/spring-boot-modules/spring-boot-testing-spock/pom.xml b/spring-boot-modules/spring-boot-testing-spock/pom.xml
index c82d88ccfb..db78143cb8 100644
--- a/spring-boot-modules/spring-boot-testing-spock/pom.xml
+++ b/spring-boot-modules/spring-boot-testing-spock/pom.xml
@@ -96,7 +96,6 @@
com.baeldung.boot.Application
2.4-M1-groovy-4.0
3.0.0
- 3.10.1
2.17.1
diff --git a/spring-boot-modules/spring-boot-testing/pom.xml b/spring-boot-modules/spring-boot-testing/pom.xml
index 2098ac767d..41783ebd7d 100644
--- a/spring-boot-modules/spring-boot-testing/pom.xml
+++ b/spring-boot-modules/spring-boot-testing/pom.xml
@@ -121,7 +121,6 @@
2.2.4
2.4-M1-groovy-4.0
3.0.0
- 3.10.1
0.7.2
2.5.0
2.17.1
diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml
index 74d46f0651..d4d7cd9c1a 100644
--- a/spring-boot-rest/pom.xml
+++ b/spring-boot-rest/pom.xml
@@ -163,7 +163,6 @@
com.baeldung.SpringBootRestApplication
1.4.11.1
3.1.0
- 3.3.2
2.3.7
diff --git a/spring-cloud-modules/spring-cloud-zuul-fallback/pom.xml b/spring-cloud-modules/spring-cloud-zuul-fallback/pom.xml
index ff62a99a00..fcf216cd6e 100644
--- a/spring-cloud-modules/spring-cloud-zuul-fallback/pom.xml
+++ b/spring-cloud-modules/spring-cloud-zuul-fallback/pom.xml
@@ -22,7 +22,6 @@
2020.0.3
2.2.7.RELEASE
- 3.1.1
\ No newline at end of file
diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml
index 492a2ec5a2..2d11cc701b 100644
--- a/spring-core-4/pom.xml
+++ b/spring-core-4/pom.xml
@@ -84,7 +84,6 @@
4.0.2
4.0.0
1.3.2
- 3.3.2
1.10.0
diff --git a/spring-core/pom.xml b/spring-core/pom.xml
index d1c155b92a..e369bc24d0 100644
--- a/spring-core/pom.xml
+++ b/spring-core/pom.xml
@@ -88,7 +88,6 @@
1.5.2.RELEASE
1.10.19
1.3.2
- 3.3.2
\ No newline at end of file
diff --git a/spring-di/pom.xml b/spring-di/pom.xml
index cf3703096c..af0601deb6 100644
--- a/spring-di/pom.xml
+++ b/spring-di/pom.xml
@@ -149,7 +149,6 @@
1.5.2.RELEASE
1.10.19
1.9.5
- 3.3.2
\ No newline at end of file
diff --git a/spring-ejb-modules/pom.xml b/spring-ejb-modules/pom.xml
index c5d04dab25..1b6c0ffc30 100755
--- a/spring-ejb-modules/pom.xml
+++ b/spring-ejb-modules/pom.xml
@@ -20,7 +20,7 @@
spring-ejb-remote
spring-ejb-client
- wildfly
+ wildfly-mdb
@@ -76,6 +76,7 @@
12.0.0.Final
2.4
3.2
+ 7.0
\ No newline at end of file
diff --git a/spring-ejb-modules/wildfly/wildfly-mdb/README.md b/spring-ejb-modules/wildfly-mdb/README.md
similarity index 100%
rename from spring-ejb-modules/wildfly/wildfly-mdb/README.md
rename to spring-ejb-modules/wildfly-mdb/README.md
diff --git a/spring-ejb-modules/wildfly/wildfly-mdb/pom.xml b/spring-ejb-modules/wildfly-mdb/pom.xml
similarity index 81%
rename from spring-ejb-modules/wildfly/wildfly-mdb/pom.xml
rename to spring-ejb-modules/wildfly-mdb/pom.xml
index 0784725cde..7498379ef9 100644
--- a/spring-ejb-modules/wildfly/wildfly-mdb/pom.xml
+++ b/spring-ejb-modules/wildfly-mdb/pom.xml
@@ -7,9 +7,9 @@
wildfly-mdb
- com.baeldung.wildfly
- wildfly
- 0.0.1-SNAPSHOT
+ com.baeldung.spring.ejb
+ spring-ejb-modules
+ 1.0.0-SNAPSHOT
diff --git a/spring-ejb-modules/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java b/spring-ejb-modules/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java
similarity index 100%
rename from spring-ejb-modules/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java
rename to spring-ejb-modules/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java
diff --git a/spring-ejb-modules/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java b/spring-ejb-modules/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java
similarity index 100%
rename from spring-ejb-modules/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java
rename to spring-ejb-modules/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java
diff --git a/spring-ejb-modules/wildfly/pom.xml b/spring-ejb-modules/wildfly/pom.xml
deleted file mode 100644
index 412fa1b244..0000000000
--- a/spring-ejb-modules/wildfly/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
- 4.0.0
- com.baeldung.wildfly
- wildfly
- 0.0.1-SNAPSHOT
- wildfly
- pom
-
-
- com.baeldung.spring.ejb
- spring-ejb-modules
- 1.0.0-SNAPSHOT
-
-
-
- wildfly-mdb
-
-
-
-
-
-
-
- javax
- javaee-api
- ${javaee-api.version}
- provided
-
-
-
- org.wildfly.bom
- wildfly-javaee7
- ${wildfly-javaee7.version}
- import
- pom
-
-
-
- org.hibernate
- hibernate-core
- ${hibernate-core.version}
- provided
-
-
-
- com.baeldung.wildfly
- wildlfy-ear
- ${wildlfy.version}
- ear
-
-
-
- com.baeldung.wildfly
- wildlfy-web
- ${wildlfy.version}
- war
-
-
-
- com.baeldung.wildfly
- wildlfy-jpa
- ${wildlfy.version}
-
-
-
- com.baeldung.wildfly
- wildfly-ejb
- ${wildlfy.version}
-
-
-
- com.baeldung.wildfly
- wildfly-ejb-interfaces
- ${wildlfy.version}
-
-
-
-
-
- 7.0
- 10.1.0.Final
- 5.2.3.Final
- 0.0.1-SNAPSHOT
-
-
-
\ No newline at end of file
diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml
index 8912cad674..49c44f88f2 100644
--- a/spring-exceptions/pom.xml
+++ b/spring-exceptions/pom.xml
@@ -181,7 +181,6 @@
2.7
1.6.1
- 3.3.2
\ No newline at end of file
diff --git a/spring-jersey/pom.xml b/spring-jersey/pom.xml
index 17d527ca6a..32f75aa676 100644
--- a/spring-jersey/pom.xml
+++ b/spring-jersey/pom.xml
@@ -221,7 +221,6 @@
4.5.5
2.27.2
1.5.10.RELEASE
- 3.3.2
\ No newline at end of file
diff --git a/spring-katharsis/pom.xml b/spring-katharsis/pom.xml
index 82be0555c3..b836a42bca 100644
--- a/spring-katharsis/pom.xml
+++ b/spring-katharsis/pom.xml
@@ -135,7 +135,6 @@
3.0.2
0.9.10
1.6.1
- 3.3.2
\ No newline at end of file
diff --git a/spring-mobile/pom.xml b/spring-mobile/pom.xml
index 0c279c0d62..a7effc31be 100644
--- a/spring-mobile/pom.xml
+++ b/spring-mobile/pom.xml
@@ -58,7 +58,6 @@
1.1.5.RELEASE
11
11
- 3.3.2
\ No newline at end of file
diff --git a/spring-pulsar/pom.xml b/spring-pulsar/pom.xml
index 4c2fc0d9b4..df1959c84e 100644
--- a/spring-pulsar/pom.xml
+++ b/spring-pulsar/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
spring-pulsar
0.0.1-SNAPSHOT
diff --git a/spring-reactive-modules/spring-5-data-reactive-2/pom.xml b/spring-reactive-modules/spring-5-data-reactive-2/pom.xml
index e5447ac038..3d88e672eb 100644
--- a/spring-reactive-modules/spring-5-data-reactive-2/pom.xml
+++ b/spring-reactive-modules/spring-5-data-reactive-2/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
spring-5-data-reactive-2
spring-5-data-reactive-2
@@ -13,7 +13,6 @@
1.0.0-SNAPSHOT
-
8
8
diff --git a/spring-security-modules/spring-security-web-mvc-custom/pom.xml b/spring-security-modules/spring-security-web-mvc-custom/pom.xml
index f21c6dbe40..41f24050b2 100644
--- a/spring-security-modules/spring-security-web-mvc-custom/pom.xml
+++ b/spring-security-modules/spring-security-web-mvc-custom/pom.xml
@@ -172,7 +172,6 @@
- 3.2.2
1.6.1
1.3.2
diff --git a/spring-shell/pom.xml b/spring-shell/pom.xml
index 506884b413..952920fd1e 100644
--- a/spring-shell/pom.xml
+++ b/spring-shell/pom.xml
@@ -39,7 +39,6 @@
1.2.0.RELEASE
- 3.3.2
\ No newline at end of file
diff --git a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml
index 38d019c683..d4fff21605 100644
--- a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml
+++ b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml
@@ -1,84 +1,84 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
- 4.0.0
+ 4.0.0
- com.baeldung.spring-thymeleaf-attributes.module
- accessing-session-attributes
- 0.0.1-SNAPSHOT
- war
-
-
- com.baeldung.spring-thymeleaf-attributes
- spring-thymeleaf-attributes
+ com.baeldung.spring-thymeleaf-attributes.module
+ accessing-session-attributes
0.0.1-SNAPSHOT
- ../pom.xml
-
+ war
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
- ${spring.boot.starter.thymeleaf}
-
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit.jupiter.engine.version}
- test
-
-
- org.mockito
- mockito-core
- ${mockito.version}
- test
-
-
- org.mockito
- mockito-junit-jupiter
- ${mockito.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit.jupiter.engine.version}
- test
-
-
+
+ com.baeldung.spring-thymeleaf-attributes
+ spring-thymeleaf-attributes
+ 0.0.1-SNAPSHOT
+ ../pom.xml
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
- -Dfile.encoding="UTF-8" -Xdebug
- -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
-
-
-
-
-
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+ ${spring.boot.starter.thymeleaf}
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.jupiter.engine.version}
+ test
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ ${mockito.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.jupiter.engine.version}
+ test
+
+
-
- com.baeldung.accesing_session_attributes.SpringWebApplicationInitializer
- UTF-8
- UTF-8
- UTF-8
- true
- true
- 5.9.3
- 5.3.1
- 3.1.1.RELEASE
- 3.1.1
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ -Dfile.encoding="UTF-8" -Xdebug
+ -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
+
+
+
+
+
+
+
+ com.baeldung.accesing_session_attributes.SpringWebApplicationInitializer
+ UTF-8
+ UTF-8
+ UTF-8
+ true
+ true
+ 5.9.3
+ 5.3.1
+ 3.1.1.RELEASE
+ 3.1.1
+
\ No newline at end of file
diff --git a/spring-websockets/pom.xml b/spring-websockets/pom.xml
index c13d1cff33..a28ef8749a 100644
--- a/spring-websockets/pom.xml
+++ b/spring-websockets/pom.xml
@@ -44,8 +44,4 @@
-
- 3.3.2
-
-
\ No newline at end of file
diff --git a/testing-modules/cucumber/pom.xml b/testing-modules/cucumber/pom.xml
index ffa5c0d250..6d178b86a3 100644
--- a/testing-modules/cucumber/pom.xml
+++ b/testing-modules/cucumber/pom.xml
@@ -124,7 +124,6 @@
14
6.10.3
5.4.0
- 2.22.2
3.141.59
4.3.1
0.40
diff --git a/testing-modules/testing-libraries-2/pom.xml b/testing-modules/testing-libraries-2/pom.xml
index d74ede07db..4cc3ea8428 100644
--- a/testing-modules/testing-libraries-2/pom.xml
+++ b/testing-modules/testing-libraries-2/pom.xml
@@ -1,6 +1,6 @@
+ 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
testing-libraries-2
testing-libraries-2
diff --git a/testing-modules/testng/pom.xml b/testing-modules/testng/pom.xml
index 62e2b2e578..b0a10b131c 100644
--- a/testing-modules/testng/pom.xml
+++ b/testing-modules/testng/pom.xml
@@ -25,15 +25,9 @@
testng
-
-
- src/main/resources
- true
-
-
- src/main/resources
+ src/test/resources
true
diff --git a/testing-modules/zerocode/pom.xml b/testing-modules/zerocode/pom.xml
index 15ef45be63..c0aa370096 100644
--- a/testing-modules/zerocode/pom.xml
+++ b/testing-modules/zerocode/pom.xml
@@ -91,7 +91,6 @@
- 3.0.0-M5
3.0.0-M5
8
8
diff --git a/vaadin/pom.xml b/vaadin/pom.xml
index 777ab2551c..aa37a2392a 100644
--- a/vaadin/pom.xml
+++ b/vaadin/pom.xml
@@ -187,7 +187,6 @@
local
mytheme
3.0.0
- 3.3.2
\ No newline at end of file
diff --git a/web-modules/blade/pom.xml b/web-modules/blade/pom.xml
index 0733556c20..2748c05663 100644
--- a/web-modules/blade/pom.xml
+++ b/web-modules/blade/pom.xml
@@ -112,7 +112,6 @@
4.5.6
4.5.6
4.4.10
- 3.0.0-M3
0.7
3.1.0
diff --git a/web-modules/wicket/pom.xml b/web-modules/wicket/pom.xml
index 9348e15cdb..244d176e25 100644
--- a/web-modules/wicket/pom.xml
+++ b/web-modules/wicket/pom.xml
@@ -84,7 +84,6 @@
7.5.0
9.2.13.v20150730
- 3.3.1
\ No newline at end of file