diff --git a/algorithms-genetic/pom.xml b/algorithms-genetic/pom.xml
index 00c9b88dfe..c53ae0f776 100644
--- a/algorithms-genetic/pom.xml
+++ b/algorithms-genetic/pom.xml
@@ -35,18 +35,11 @@
jenetics
${io.jenetics.version}
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
3.6.1
3.7.0
- 3.9.0
1.11
diff --git a/algorithms-miscellaneous-1/pom.xml b/algorithms-miscellaneous-1/pom.xml
index dd3742d4b0..3b55d979fe 100644
--- a/algorithms-miscellaneous-1/pom.xml
+++ b/algorithms-miscellaneous-1/pom.xml
@@ -35,12 +35,6 @@
${lombok.version}
provided
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
com.github.dpaukov
combinatoricslib3
@@ -70,7 +64,6 @@
3.6.1
- 3.9.0
1.11
27.0.1-jre
3.3.0
diff --git a/algorithms-miscellaneous-2/pom.xml b/algorithms-miscellaneous-2/pom.xml
index fcefc3ccba..a411cfdb71 100644
--- a/algorithms-miscellaneous-2/pom.xml
+++ b/algorithms-miscellaneous-2/pom.xml
@@ -45,12 +45,6 @@
tradukisto
${tradukisto.version}
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
@@ -78,7 +72,6 @@
1.0.1
1.0.1
1.0.1
- 3.9.0
1.11
2.7
diff --git a/algorithms-miscellaneous-3/pom.xml b/algorithms-miscellaneous-3/pom.xml
index 19eca8eca7..525a2556de 100644
--- a/algorithms-miscellaneous-3/pom.xml
+++ b/algorithms-miscellaneous-3/pom.xml
@@ -14,12 +14,6 @@
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
org.apache.commons
commons-collections4
@@ -69,7 +63,6 @@
- 3.9.0
4.3
28.0-jre
2.6.0
diff --git a/algorithms-miscellaneous-4/pom.xml b/algorithms-miscellaneous-4/pom.xml
index 1eae038bc0..8417c121bf 100644
--- a/algorithms-miscellaneous-4/pom.xml
+++ b/algorithms-miscellaneous-4/pom.xml
@@ -25,16 +25,9 @@
${lombok.version}
provided
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
- 3.9.0
27.0.1-jre
diff --git a/algorithms-miscellaneous-5/pom.xml b/algorithms-miscellaneous-5/pom.xml
index c68ac96c38..4a0abc5cba 100644
--- a/algorithms-miscellaneous-5/pom.xml
+++ b/algorithms-miscellaneous-5/pom.xml
@@ -34,17 +34,10 @@
guava
${guava.version}
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
1.0.1
- 3.9.0
1.11
3.6.1
28.1-jre
diff --git a/algorithms-miscellaneous-6/pom.xml b/algorithms-miscellaneous-6/pom.xml
index a9eb75cf1e..1984139069 100644
--- a/algorithms-miscellaneous-6/pom.xml
+++ b/algorithms-miscellaneous-6/pom.xml
@@ -19,12 +19,6 @@
guava
${guava.version}
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
org.projectlombok
lombok
@@ -40,7 +34,6 @@
28.1-jre
- 3.9.0
3.6.1
diff --git a/algorithms-searching/pom.xml b/algorithms-searching/pom.xml
index a67c062403..edb8a0c423 100644
--- a/algorithms-searching/pom.xml
+++ b/algorithms-searching/pom.xml
@@ -13,15 +13,6 @@
1.0.0-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
-
-
algorithms-searching
@@ -32,8 +23,4 @@
-
- 3.9.0
-
-
\ No newline at end of file
diff --git a/algorithms-sorting-2/pom.xml b/algorithms-sorting-2/pom.xml
index c9bec354f3..a8477bf624 100644
--- a/algorithms-sorting-2/pom.xml
+++ b/algorithms-sorting-2/pom.xml
@@ -29,17 +29,10 @@
${lombok.version}
provided
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
3.6.1
- 3.9.0
1.11
diff --git a/algorithms-sorting/pom.xml b/algorithms-sorting/pom.xml
index e916d0aae5..383014d528 100644
--- a/algorithms-sorting/pom.xml
+++ b/algorithms-sorting/pom.xml
@@ -30,17 +30,10 @@
${lombok.version}
provided
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
3.6.1
- 3.9.0
1.11
diff --git a/apache-kafka/pom.xml b/apache-kafka/pom.xml
index 8003743f95..9ff894bc55 100644
--- a/apache-kafka/pom.xml
+++ b/apache-kafka/pom.xml
@@ -98,12 +98,6 @@
jackson-databind
${jackson.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.testcontainers
kafka
@@ -170,7 +164,6 @@
- 3.6.2
2.8.0
1.15.3
1.15.3
diff --git a/apache-libraries/pom.xml b/apache-libraries/pom.xml
index b4cf11b07d..3d78869865 100644
--- a/apache-libraries/pom.xml
+++ b/apache-libraries/pom.xml
@@ -156,13 +156,6 @@
solr-solrj
${solr.solr-solrj.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -202,7 +195,6 @@
1.8
1.8.2
2.19.0
- 3.9.0
1.1.2
1.1.0.Final
1.2.0
diff --git a/apache-olingo/olingo2/src/test/resources/logback-test.xml b/apache-olingo/olingo2/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..8d4771e308
--- /dev/null
+++ b/apache-olingo/olingo2/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apache-poi/README.md b/apache-poi/README.md
index d19af8d6ef..d3d60358c5 100644
--- a/apache-poi/README.md
+++ b/apache-poi/README.md
@@ -13,3 +13,5 @@ This module contains articles about Apache POI
- [Setting Formulas in Excel with Apache POI](https://www.baeldung.com/java-apache-poi-set-formulas)
- [Insert a Row in Excel Using Apache POI](https://www.baeldung.com/apache-poi-insert-excel-row)
- [Multiline Text in Excel Cell Using Apache POI](https://www.baeldung.com/apache-poi-write-multiline-text)
+- [Set Background Color of a Cell with Apache POI](https://www.baeldung.com/apache-poi-background-color)
+- [Add Borders to Excel Cells With Apache POI](https://www.baeldung.com/apache-poi-add-borders)
diff --git a/apache-poi/src/main/java/com/baeldung/poi/excel/cellstyle/CellBordersHandler.java b/apache-poi/src/main/java/com/baeldung/poi/excel/cellstyle/CellBordersHandler.java
new file mode 100644
index 0000000000..1c96db0b60
--- /dev/null
+++ b/apache-poi/src/main/java/com/baeldung/poi/excel/cellstyle/CellBordersHandler.java
@@ -0,0 +1,37 @@
+package com.baeldung.poi.excel.cellstyle;
+
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.RegionUtil;
+
+public class CellBordersHandler {
+
+ public void setRegionBorder(CellRangeAddress region, Sheet sheet, BorderStyle borderStyle) {
+ RegionUtil.setBorderTop(borderStyle, region, sheet);
+ RegionUtil.setBorderBottom(borderStyle, region, sheet);
+ RegionUtil.setBorderLeft(borderStyle, region, sheet);
+ RegionUtil.setBorderRight(borderStyle, region, sheet);
+ }
+
+ public void setRegionBorderWithColor(CellRangeAddress region, Sheet sheet, BorderStyle borderStyle, short color) {
+ RegionUtil.setTopBorderColor(color, region, sheet);
+ RegionUtil.setBottomBorderColor(color, region, sheet);
+ RegionUtil.setLeftBorderColor(color, region, sheet);
+ RegionUtil.setRightBorderColor(color, region, sheet);
+ RegionUtil.setBorderTop(borderStyle, region, sheet);
+ RegionUtil.setBorderBottom(borderStyle, region, sheet);
+ RegionUtil.setBorderLeft(borderStyle, region, sheet);
+ RegionUtil.setBorderRight(borderStyle, region, sheet);
+ }
+
+ public void setCrazyBorder(CellRangeAddress region, Sheet sheet) {
+ RegionUtil.setTopBorderColor(IndexedColors.RED.index, region, sheet);
+ RegionUtil.setBottomBorderColor(IndexedColors.GREEN.index, region, sheet);
+ RegionUtil.setLeftBorderColor(IndexedColors.BLUE.index, region, sheet);
+ RegionUtil.setRightBorderColor(IndexedColors.VIOLET.index, region, sheet);
+ RegionUtil.setBorderTop(BorderStyle.DASH_DOT, region, sheet);
+ RegionUtil.setBorderBottom(BorderStyle.DOUBLE, region, sheet);
+ RegionUtil.setBorderLeft(BorderStyle.DOTTED, region, sheet);
+ RegionUtil.setBorderRight(BorderStyle.SLANTED_DASH_DOT, region, sheet);
+ }
+}
diff --git a/apache-poi/src/test/java/com/baeldung/poi/excel/cellstyle/CellBorderHandlerUnitTest.java b/apache-poi/src/test/java/com/baeldung/poi/excel/cellstyle/CellBorderHandlerUnitTest.java
new file mode 100644
index 0000000000..3cabff2dff
--- /dev/null
+++ b/apache-poi/src/test/java/com/baeldung/poi/excel/cellstyle/CellBorderHandlerUnitTest.java
@@ -0,0 +1,130 @@
+package com.baeldung.poi.excel.cellstyle;
+
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.*;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
+
+import static org.junit.Assert.assertEquals;
+
+public class CellBorderHandlerUnitTest {
+ private static final String FILE_NAME = "cellstyle/CellStyleHandlerTest.xlsx";
+ private static final int SHEET_INDEX = 0;
+
+ private static CellBordersHandler cellBordersHandler;
+ private static Workbook workbook;
+
+ @BeforeClass
+ public static void setup() throws URISyntaxException, IOException {
+ String fileLocation = Paths.get(ClassLoader.getSystemResource(FILE_NAME).toURI()).toString();
+ cellBordersHandler = new CellBordersHandler();
+ workbook = new XSSFWorkbook(fileLocation);
+ createRowsAndCells(workbook);
+ }
+
+ private static void createRowsAndCells(Workbook workbook) {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+ for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
+ Row row = sheet.getRow(rowIndex);
+ if (row == null) {
+ row = sheet.createRow(rowIndex);
+ }
+ for (int colIndex = 0; colIndex < 10; colIndex++) {
+ Cell cell = row.getCell(colIndex);
+ if (cell == null) {
+ row.createCell(colIndex);
+ }
+ }
+ }
+ }
+
+ @Test
+ public void givenWorkbookCell_whenSetRegionBorder() {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+
+ CellRangeAddress region = new CellRangeAddress(1, 1, 1, 1);
+ cellBordersHandler.setRegionBorder(region, sheet, BorderStyle.THICK);
+
+ Row row = sheet.getRow(1);
+ Cell cell = row.getCell(1);
+ assertEquals(cell.getCellStyle().getBorderTop(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderBottom(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderLeft(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderRight(), BorderStyle.THICK);
+ }
+
+ @Test
+ public void givenWorkbookCell_whenSetRegionBorderWithColor() {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+
+ CellRangeAddress region = new CellRangeAddress(1, 1, 3, 3);
+ cellBordersHandler.setRegionBorderWithColor(region, sheet, BorderStyle.THICK, IndexedColors.MAROON.index);
+
+ Row row = sheet.getRow(1);
+ Cell cell = row.getCell(1 + 2);
+ assertEquals(cell.getCellStyle().getBorderTop(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderBottom(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderLeft(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getBorderRight(), BorderStyle.THICK);
+ assertEquals(cell.getCellStyle().getTopBorderColor(), IndexedColors.MAROON.index);
+ assertEquals(cell.getCellStyle().getBottomBorderColor(), IndexedColors.MAROON.index);
+ assertEquals(cell.getCellStyle().getLeftBorderColor(), IndexedColors.MAROON.index);
+ assertEquals(cell.getCellStyle().getRightBorderColor(), IndexedColors.MAROON.index);
+ }
+
+ @Test
+ public void givenWorkbookCell_whenSetCrazyBorder() {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+
+ CellRangeAddress region = new CellRangeAddress(1, 1, 5, 5);
+ cellBordersHandler.setCrazyBorder(region, sheet);
+
+ Row row = sheet.getRow(1);
+ Cell cell = row.getCell(5);
+ assertEquals(cell.getCellStyle().getBorderTop(), BorderStyle.DASH_DOT);
+ assertEquals(cell.getCellStyle().getBorderBottom(), BorderStyle.DOUBLE);
+ assertEquals(cell.getCellStyle().getBorderLeft(), BorderStyle.DOTTED);
+ assertEquals(cell.getCellStyle().getBorderRight(), BorderStyle.SLANTED_DASH_DOT);
+ assertEquals(cell.getCellStyle().getTopBorderColor(), IndexedColors.RED.index);
+ assertEquals(cell.getCellStyle().getBottomBorderColor(), IndexedColors.GREEN.index);
+ assertEquals(cell.getCellStyle().getLeftBorderColor(), IndexedColors.BLUE.index);
+ assertEquals(cell.getCellStyle().getRightBorderColor(), IndexedColors.VIOLET.index);
+ }
+
+ @Test
+ public void givenWorkbookRegion_whenSetRegionBorder() {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+
+ CellRangeAddress region = new CellRangeAddress(3, 5, 1, 5);
+ cellBordersHandler.setRegionBorder(region, sheet, BorderStyle.MEDIUM);
+
+ Row row = sheet.getRow(3);
+ Cell cell = row.getCell(1);
+ assertEquals(cell.getCellStyle().getBorderTop(), BorderStyle.MEDIUM);
+ assertEquals(cell.getCellStyle().getBorderLeft(), BorderStyle.MEDIUM);
+ }
+
+ @Test
+ public void givenWorkbookRegion_whenSetRegionBorderWithColor() {
+ Sheet sheet = workbook.getSheetAt(SHEET_INDEX);
+
+ CellRangeAddress region = new CellRangeAddress(7, 8, 1, 5);
+ cellBordersHandler.setRegionBorderWithColor(region, sheet, BorderStyle.MEDIUM, IndexedColors.ORANGE.index);
+
+ Row row = sheet.getRow(7);
+ Cell cell = row.getCell(1);
+ assertEquals(cell.getCellStyle().getBorderTop(), BorderStyle.MEDIUM);
+ assertEquals(cell.getCellStyle().getBorderLeft(), BorderStyle.MEDIUM);
+ assertEquals(cell.getCellStyle().getTopBorderColor(), IndexedColors.ORANGE.index);
+ assertEquals(cell.getCellStyle().getLeftBorderColor(), IndexedColors.ORANGE.index);
+ }
+
+ @AfterClass
+ public static void close() throws IOException {
+ workbook.close();
+ }
+}
diff --git a/apache-shiro/src/test/resources/logback-test.xml b/apache-shiro/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..8d4771e308
--- /dev/null
+++ b/apache-shiro/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aws/pom.xml b/aws/pom.xml
index 1663266612..7c363eb400 100644
--- a/aws/pom.xml
+++ b/aws/pom.xml
@@ -26,12 +26,6 @@
${mockito-core.version}
test
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
com.amazonaws
aws-lambda-java-core
@@ -118,7 +112,6 @@
2.8.0
1.11.290
2.21.0
- 3.8.0
1.11.86
https://s3-us-west-2.amazonaws.com/dynamodb-local/release
1.10.L001
diff --git a/blade/pom.xml b/blade/pom.xml
index 8fc517e966..9c8638f0bc 100644
--- a/blade/pom.xml
+++ b/blade/pom.xml
@@ -36,12 +36,6 @@
provided
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.apache.httpcomponents
httpclient
@@ -119,7 +113,6 @@
4.5.6
4.5.6
4.4.10
- 3.11.1
3.0.0-M3
0.7
3.1.0
diff --git a/cdi/pom.xml b/cdi/pom.xml
index 5eb566dcfb..ee23e082c7 100644
--- a/cdi/pom.xml
+++ b/cdi/pom.xml
@@ -25,12 +25,6 @@
weld-se-core
${weld-se-core.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.aspectj
aspectjweaver
@@ -53,7 +47,6 @@
2.0.SP1
3.0.5.Final
1.9.2
- 3.10.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-11-2/pom.xml b/core-java-modules/core-java-11-2/pom.xml
index 863c9b0717..332b24ff2e 100644
--- a/core-java-modules/core-java-11-2/pom.xml
+++ b/core-java-modules/core-java-11-2/pom.xml
@@ -20,12 +20,6 @@
guava
${guava.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.mock-server
mockserver-junit-jupiter
@@ -87,9 +81,7 @@
11
11
29.0-jre
- 3.17.2
5.11.1
- 3.12.0
3.0.0
3.0.0
2.3.1
diff --git a/core-java-modules/core-java-11/pom.xml b/core-java-modules/core-java-11/pom.xml
index d3ffb0a8f0..fc61e373ec 100644
--- a/core-java-modules/core-java-11/pom.xml
+++ b/core-java-modules/core-java-11/pom.xml
@@ -21,12 +21,6 @@
guava
${guava.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.openjdk.jmh
jmh-core
@@ -103,7 +97,6 @@
11
11
27.1-jre
- 3.11.1
benchmarks
10.0.0
3.2.4
diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml
index 26b7d0c14d..9f95b1bc3f 100644
--- a/core-java-modules/core-java-12/pom.xml
+++ b/core-java-modules/core-java-12/pom.xml
@@ -16,16 +16,10 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
commons-io
commons-io
- 2.11.0
+ ${commons-io.version}
@@ -53,7 +47,6 @@
12
12
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-13/pom.xml b/core-java-modules/core-java-13/pom.xml
index d28618a21a..9e42838971 100644
--- a/core-java-modules/core-java-13/pom.xml
+++ b/core-java-modules/core-java-13/pom.xml
@@ -16,15 +16,6 @@
1.0.0-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
@@ -52,7 +43,6 @@
13
13
- 3.6.1
3.0.0-M3
diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml
index 3967ce3455..35ea0bd2d0 100644
--- a/core-java-modules/core-java-14/pom.xml
+++ b/core-java-modules/core-java-14/pom.xml
@@ -14,15 +14,6 @@
1.0.0-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
@@ -49,7 +40,6 @@
14
- 3.6.1
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 a71987c23a..8cb6c2410d 100644
--- a/core-java-modules/core-java-15/pom.xml
+++ b/core-java-modules/core-java-15/pom.xml
@@ -21,12 +21,6 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -55,7 +49,6 @@
15
- 3.17.2
3.8.1
3.0.0-M3
diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml
index 14f15cdd92..4adc3ee6d1 100644
--- a/core-java-modules/core-java-16/pom.xml
+++ b/core-java-modules/core-java-16/pom.xml
@@ -17,16 +17,10 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.apache.commons
commons-lang3
- 3.12.0
+ ${commons-lang3.version}
@@ -66,9 +60,7 @@
16
16
16
- 3.8.1
3.0.0-M5
- 3.17.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-17/pom.xml b/core-java-modules/core-java-17/pom.xml
index 3cee27b276..2fe16cad57 100644
--- a/core-java-modules/core-java-17/pom.xml
+++ b/core-java-modules/core-java-17/pom.xml
@@ -16,15 +16,6 @@
../../
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
@@ -62,9 +53,7 @@
17
17
17
- 3.8.1
3.0.0-M5
- 3.17.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-2/pom.xml b/core-java-modules/core-java-8-2/pom.xml
index af26289db8..7db1e1ed4e 100644
--- a/core-java-modules/core-java-8-2/pom.xml
+++ b/core-java-modules/core-java-8-2/pom.xml
@@ -20,17 +20,10 @@
icu4j
${icu.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
64.2
- 3.12.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime-2/pom.xml b/core-java-modules/core-java-8-datetime-2/pom.xml
index e662ba400c..9e54b0ee12 100644
--- a/core-java-modules/core-java-8-datetime-2/pom.xml
+++ b/core-java-modules/core-java-8-datetime-2/pom.xml
@@ -25,12 +25,6 @@
joda-time
${joda-time.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
log4j
log4j
@@ -63,8 +57,6 @@
1.8
1.8
2.10
-
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml
index f58557df7f..01ec6c0b76 100644
--- a/core-java-modules/core-java-8-datetime/pom.xml
+++ b/core-java-modules/core-java-8-datetime/pom.xml
@@ -25,12 +25,6 @@
joda-time
${joda-time.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
log4j
log4j
@@ -64,8 +58,6 @@
1.8
1.8
2.10
-
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-8/pom.xml b/core-java-modules/core-java-8/pom.xml
index 987ba2e568..85e289280b 100644
--- a/core-java-modules/core-java-8/pom.xml
+++ b/core-java-modules/core-java-8/pom.xml
@@ -31,13 +31,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -53,8 +46,6 @@
4.1
-
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-9-improvements/pom.xml b/core-java-modules/core-java-9-improvements/pom.xml
index 6abdd7dab8..e6c596937b 100644
--- a/core-java-modules/core-java-9-improvements/pom.xml
+++ b/core-java-modules/core-java-9-improvements/pom.xml
@@ -21,12 +21,6 @@
${awaitility.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.google.guava
guava
@@ -68,8 +62,6 @@
-
- 3.10.0
1.7.0
1.9
1.9
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 7dca8d5f88..ce90a0f04a 100644
--- a/core-java-modules/core-java-9-new-features/pom.xml
+++ b/core-java-modules/core-java-9-new-features/pom.xml
@@ -20,12 +20,6 @@
rxjava
${rxjava.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.junit.platform
junit-platform-runner
@@ -156,8 +150,6 @@
3.0.0
-
- 3.10.0
4.0.2
1.9
1.9
diff --git a/core-java-modules/core-java-9/pom.xml b/core-java-modules/core-java-9/pom.xml
index 1bd650f7d2..03a097e7a9 100644
--- a/core-java-modules/core-java-9/pom.xml
+++ b/core-java-modules/core-java-9/pom.xml
@@ -21,12 +21,6 @@
${awaitility.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.google.guava
guava
@@ -78,14 +72,11 @@
-
- 3.10.0
1.7.0
1.9
1.9
25.1-jre
4.1
- 3.2.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-annotations/pom.xml b/core-java-modules/core-java-annotations/pom.xml
index 19d02aa2ac..a1f84ab563 100644
--- a/core-java-modules/core-java-annotations/pom.xml
+++ b/core-java-modules/core-java-annotations/pom.xml
@@ -14,19 +14,6 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
- 3.10.0
-
-
core-java-annotations
diff --git a/core-java-modules/core-java-arrays-guides/pom.xml b/core-java-modules/core-java-arrays-guides/pom.xml
index 3dba2dc05f..d22f6b4d7d 100644
--- a/core-java-modules/core-java-arrays-guides/pom.xml
+++ b/core-java-modules/core-java-arrays-guides/pom.xml
@@ -24,12 +24,6 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.assertj
- assertj-core
- 3.19.0
- test
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-operations-advanced/pom.xml b/core-java-modules/core-java-arrays-operations-advanced/pom.xml
index d122e3330c..cbcd6ae440 100644
--- a/core-java-modules/core-java-arrays-operations-advanced/pom.xml
+++ b/core-java-modules/core-java-arrays-operations-advanced/pom.xml
@@ -19,29 +19,18 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.openjdk.jmh
jmh-core
- ${jmh.version}
+ ${jmh-core.version}
org.openjdk.jmh
jmh-generator-annprocess
- ${jmh.version}
+ ${jmh-generator.version}
-
- 3.10.0
- 1.33
-
-
diff --git a/core-java-modules/core-java-arrays-operations-basic/pom.xml b/core-java-modules/core-java-arrays-operations-basic/pom.xml
index 382cee102d..6517b2efb9 100644
--- a/core-java-modules/core-java-arrays-operations-basic/pom.xml
+++ b/core-java-modules/core-java-arrays-operations-basic/pom.xml
@@ -30,12 +30,6 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -67,7 +61,6 @@
3.2.0
- 3.10.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-sorting/pom.xml b/core-java-modules/core-java-arrays-sorting/pom.xml
index e9946d46ed..97ff95e92b 100644
--- a/core-java-modules/core-java-arrays-sorting/pom.xml
+++ b/core-java-modules/core-java-arrays-sorting/pom.xml
@@ -36,13 +36,6 @@
jmh-generator-annprocess
${jmh-generator.version}
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -75,7 +68,6 @@
3.2.0
28.2-jre
- 3.10.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-char/pom.xml b/core-java-modules/core-java-char/pom.xml
index 009197a1d0..7dc0923fb5 100644
--- a/core-java-modules/core-java-char/pom.xml
+++ b/core-java-modules/core-java-char/pom.xml
@@ -15,12 +15,6 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.openjdk.jmh
jmh-core
@@ -33,8 +27,4 @@
-
- 3.11.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-2/pom.xml b/core-java-modules/core-java-collections-2/pom.xml
index 0f1f1ee2fe..23100b1d87 100644
--- a/core-java-modules/core-java-collections-2/pom.xml
+++ b/core-java-modules/core-java-collections-2/pom.xml
@@ -34,12 +34,6 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.junit.platform
junit-platform-runner
@@ -51,7 +45,6 @@
7.1.0
4.1
- 3.11.1
1.3
diff --git a/core-java-modules/core-java-collections-3/pom.xml b/core-java-modules/core-java-collections-3/pom.xml
index 4ca4bda1ee..6ef8e3c81a 100644
--- a/core-java-modules/core-java-collections-3/pom.xml
+++ b/core-java-modules/core-java-collections-3/pom.xml
@@ -25,12 +25,6 @@
jmh-core
${jmh-core.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.apache.commons
commons-lang3
@@ -39,7 +33,6 @@
- 3.11.1
0.10
diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml
index d86b04644c..2193b5118a 100644
--- a/core-java-modules/core-java-collections-4/pom.xml
+++ b/core-java-modules/core-java-collections-4/pom.xml
@@ -14,17 +14,4 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
-
- 3.19.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-array-list/pom.xml b/core-java-modules/core-java-collections-array-list/pom.xml
index c14e59bac0..ca9c173947 100644
--- a/core-java-modules/core-java-collections-array-list/pom.xml
+++ b/core-java-modules/core-java-collections-array-list/pom.xml
@@ -20,17 +20,10 @@
commons-collections4
${commons-collections4.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
4.1
- 3.11.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-list-2/pom.xml b/core-java-modules/core-java-collections-list-2/pom.xml
index 51e66fc0c2..7876b19cf9 100644
--- a/core-java-modules/core-java-collections-list-2/pom.xml
+++ b/core-java-modules/core-java-collections-list-2/pom.xml
@@ -20,12 +20,6 @@
commons-collections4
${commons-collections4.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.projectlombok
lombok
@@ -36,7 +30,6 @@
4.1
- 3.11.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-list-3/pom.xml b/core-java-modules/core-java-collections-list-3/pom.xml
index efe79509c1..9238939df7 100644
--- a/core-java-modules/core-java-collections-list-3/pom.xml
+++ b/core-java-modules/core-java-collections-list-3/pom.xml
@@ -26,12 +26,6 @@
${guava.version}
compile
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
net.sf.trove4j
trove4j
@@ -61,7 +55,6 @@
4.1
- 3.11.1
3.0.2
8.1.0
1.2.0
diff --git a/core-java-modules/core-java-collections-list/pom.xml b/core-java-modules/core-java-collections-list/pom.xml
index ae1e1561c6..b60906d1ba 100644
--- a/core-java-modules/core-java-collections-list/pom.xml
+++ b/core-java-modules/core-java-collections-list/pom.xml
@@ -25,17 +25,10 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
4.1
- 3.11.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps-2/pom.xml b/core-java-modules/core-java-collections-maps-2/pom.xml
index 772cf30416..060796fafa 100644
--- a/core-java-modules/core-java-collections-maps-2/pom.xml
+++ b/core-java-modules/core-java-collections-maps-2/pom.xml
@@ -51,12 +51,6 @@
${avaitility.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -66,7 +60,6 @@
8.2.0
0.7.2
8.1.0
- 3.11.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-maps/pom.xml b/core-java-modules/core-java-collections-maps/pom.xml
index 245c4b04bb..66aca9c1b2 100644
--- a/core-java-modules/core-java-collections-maps/pom.xml
+++ b/core-java-modules/core-java-collections-maps/pom.xml
@@ -20,17 +20,10 @@
commons-collections4
${commons-collections4.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
4.1
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections/pom.xml b/core-java-modules/core-java-collections/pom.xml
index 8fbc6e8de7..8df0d7cdd3 100644
--- a/core-java-modules/core-java-collections/pom.xml
+++ b/core-java-modules/core-java-collections/pom.xml
@@ -15,12 +15,6 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.openjdk.jmh
jmh-core
@@ -33,8 +27,4 @@
-
- 3.11.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-advanced-2/pom.xml b/core-java-modules/core-java-concurrency-advanced-2/pom.xml
index 93c23ccae7..1f19dc8cca 100644
--- a/core-java-modules/core-java-concurrency-advanced-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced-2/pom.xml
@@ -30,12 +30,6 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -48,8 +42,4 @@
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-advanced-3/pom.xml b/core-java-modules/core-java-concurrency-advanced-3/pom.xml
index 915aa8d912..591e46f505 100644
--- a/core-java-modules/core-java-concurrency-advanced-3/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced-3/pom.xml
@@ -15,12 +15,6 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.jcabi
jcabi-aspects
@@ -94,7 +88,6 @@
- 3.14.0
1.8
1.8
0.22.6
diff --git a/core-java-modules/core-java-concurrency-advanced-3/src/main/java/com/baeldung/abaproblem/Account.java b/core-java-modules/core-java-concurrency-advanced-3/src/main/java/com/baeldung/abaproblem/Account.java
index ee1bdcd55b..2af3113549 100644
--- a/core-java-modules/core-java-concurrency-advanced-3/src/main/java/com/baeldung/abaproblem/Account.java
+++ b/core-java-modules/core-java-concurrency-advanced-3/src/main/java/com/baeldung/abaproblem/Account.java
@@ -3,17 +3,18 @@ package com.baeldung.abaproblem;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
+import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
+
public class Account {
- private AtomicInteger balance;
- private AtomicInteger transactionCount;
- private ThreadLocal currentThreadCASFailureCount;
+ private final AtomicInteger balance;
+ private final AtomicInteger transactionCount;
+ private final ThreadLocal currentThreadCASFailureCount;
public Account() {
this.balance = new AtomicInteger(0);
this.transactionCount = new AtomicInteger(0);
- this.currentThreadCASFailureCount = new ThreadLocal<>();
- this.currentThreadCASFailureCount.set(0);
+ this.currentThreadCASFailureCount = ThreadLocal.withInitial(() -> 0);
}
public int getBalance() {
@@ -43,11 +44,7 @@ public class Account {
private void maybeWait() {
if ("thread1".equals(Thread.currentThread().getName())) {
- try {
- TimeUnit.SECONDS.sleep(2);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
+ sleepUninterruptibly(2, TimeUnit.SECONDS);
}
}
diff --git a/core-java-modules/core-java-concurrency-advanced-3/src/test/java/com/baeldung/abaproblem/AccountUnitTest.java b/core-java-modules/core-java-concurrency-advanced-3/src/test/java/com/baeldung/abaproblem/AccountUnitTest.java
index aa5f0f7997..3e188d682e 100644
--- a/core-java-modules/core-java-concurrency-advanced-3/src/test/java/com/baeldung/abaproblem/AccountUnitTest.java
+++ b/core-java-modules/core-java-concurrency-advanced-3/src/test/java/com/baeldung/abaproblem/AccountUnitTest.java
@@ -1,8 +1,13 @@
package com.baeldung.abaproblem;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -30,45 +35,39 @@ public class AccountUnitTest {
assertTrue(account.deposit(moneyToDeposit));
assertEquals(moneyToDeposit, account.getBalance());
+ assertEquals(1, account.getTransactionCount());
}
@Test
- public void withdrawTest() throws InterruptedException {
+ public void withdrawTest() {
final int defaultBalance = 50;
final int moneyToWithdraw = 20;
account.deposit(defaultBalance);
assertTrue(account.withdraw(moneyToWithdraw));
-
assertEquals(defaultBalance - moneyToWithdraw, account.getBalance());
}
@Test
- public void abaProblemTest() throws InterruptedException {
+ public void abaProblemTest() throws Exception {
final int defaultBalance = 50;
final int amountToWithdrawByThread1 = 20;
final int amountToWithdrawByThread2 = 10;
final int amountToDepositByThread2 = 10;
- assertEquals(0, account.getTransactionCount());
- assertEquals(0, account.getCurrentThreadCASFailureCount());
account.deposit(defaultBalance);
- assertEquals(1, account.getTransactionCount());
-
- Thread thread1 = new Thread(() -> {
+ Runnable thread1 = () -> {
// this will take longer due to the name of the thread
assertTrue(account.withdraw(amountToWithdrawByThread1));
// thread 1 fails to capture ABA problem
assertNotEquals(1, account.getCurrentThreadCASFailureCount());
+ };
- }, "thread1");
-
- Thread thread2 = new Thread(() -> {
-
+ Runnable thread2 = () -> {
assertTrue(account.deposit(amountToDepositByThread2));
assertEquals(defaultBalance + amountToDepositByThread2, account.getBalance());
@@ -79,12 +78,13 @@ public class AccountUnitTest {
assertEquals(defaultBalance, account.getBalance());
assertEquals(0, account.getCurrentThreadCASFailureCount());
- }, "thread2");
+ };
- thread1.start();
- thread2.start();
- thread1.join();
- thread2.join();
+ Future> future1 = getSingleThreadExecutorService("thread1").submit(thread1);
+ Future> future2 = getSingleThreadExecutorService("thread2").submit(thread2);
+
+ future1.get();
+ future2.get();
// compareAndSet operation succeeds for thread 1
assertEquals(defaultBalance - amountToWithdrawByThread1, account.getBalance());
@@ -95,4 +95,10 @@ public class AccountUnitTest {
// thread 2 did two modifications as well
assertEquals(4, account.getTransactionCount());
}
+
+ private static ExecutorService getSingleThreadExecutorService(String threadName) {
+ return Executors.newSingleThreadExecutor(
+ new ThreadFactoryBuilder().setNameFormat(threadName).build()
+ );
+ }
}
diff --git a/core-java-modules/core-java-concurrency-advanced/pom.xml b/core-java-modules/core-java-concurrency-advanced/pom.xml
index 3c21b49ae5..a026bdb2cd 100644
--- a/core-java-modules/core-java-concurrency-advanced/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced/pom.xml
@@ -35,12 +35,6 @@
commons-math3
${commons-math3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.jayway.awaitility
awaitility
@@ -60,13 +54,10 @@
-
21.0
3.6.1
4.1
4.01
-
- 3.6.1
1.7.0
diff --git a/core-java-modules/core-java-concurrency-basic/pom.xml b/core-java-modules/core-java-concurrency-basic/pom.xml
index 7212a2dcb1..1e3157291a 100644
--- a/core-java-modules/core-java-concurrency-basic/pom.xml
+++ b/core-java-modules/core-java-concurrency-basic/pom.xml
@@ -20,12 +20,6 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.jayway.awaitility
awaitility
@@ -45,8 +39,6 @@
-
- 3.6.1
1.7.0
diff --git a/core-java-modules/core-java-concurrency-collections-2/pom.xml b/core-java-modules/core-java-concurrency-collections-2/pom.xml
index 8de0e1bef7..02c046b2ea 100644
--- a/core-java-modules/core-java-concurrency-collections-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-collections-2/pom.xml
@@ -29,18 +29,10 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
28.2-jre
-
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-collections/pom.xml b/core-java-modules/core-java-concurrency-collections/pom.xml
index f22da1c848..8b8d2fe03b 100644
--- a/core-java-modules/core-java-concurrency-collections/pom.xml
+++ b/core-java-modules/core-java-concurrency-collections/pom.xml
@@ -14,15 +14,6 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
core-java-concurrency-collections
@@ -33,9 +24,4 @@
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-date-operations-1/pom.xml b/core-java-modules/core-java-date-operations-1/pom.xml
index 854d6ed916..ea9f94fa56 100644
--- a/core-java-modules/core-java-date-operations-1/pom.xml
+++ b/core-java-modules/core-java-date-operations-1/pom.xml
@@ -25,16 +25,11 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
+
com.darwinsys
hirondelle-date4j
- RELEASE
+ ${hirondelle-date4j.version}
test
@@ -62,8 +57,7 @@
2.10
-
- 3.6.1
+ RELEASE
1.9
1.9
diff --git a/core-java-modules/core-java-date-operations-2/pom.xml b/core-java-modules/core-java-date-operations-2/pom.xml
index 1d283851ca..f60c7b7fc0 100644
--- a/core-java-modules/core-java-date-operations-2/pom.xml
+++ b/core-java-modules/core-java-date-operations-2/pom.xml
@@ -30,18 +30,11 @@
hirondelle-date4j
${hirondelle-date4j.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
2.10
1.5.1
- 3.14.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-datetime-conversion/pom.xml b/core-java-modules/core-java-datetime-conversion/pom.xml
index 8f082e2793..6e9aeaf5af 100644
--- a/core-java-modules/core-java-datetime-conversion/pom.xml
+++ b/core-java-modules/core-java-datetime-conversion/pom.xml
@@ -31,13 +31,6 @@
log4j
${log4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -63,8 +56,6 @@
2.10
-
- 3.6.1
1.9
1.9
diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml
index 8bc7b60126..2b3c2edb02 100644
--- a/core-java-modules/core-java-datetime-string/pom.xml
+++ b/core-java-modules/core-java-datetime-string/pom.xml
@@ -31,13 +31,6 @@
log4j
${log4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
joda-time
joda-time
@@ -46,7 +39,7 @@
com.darwinsys
hirondelle-date4j
- RELEASE
+ ${hirondelle-date4j.version}
test
@@ -75,8 +68,7 @@
1.6
2.10.10
-
- 3.6.1
+ RELEASE
1.9
1.9
diff --git a/core-java-modules/core-java-exceptions-2/pom.xml b/core-java-modules/core-java-exceptions-2/pom.xml
index af7a778b23..9103672cd4 100644
--- a/core-java-modules/core-java-exceptions-2/pom.xml
+++ b/core-java-modules/core-java-exceptions-2/pom.xml
@@ -15,24 +15,11 @@
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.apache.commons
commons-lang3
- ${commons.lang3.version}
+ ${commons-lang3.version}
-
- 3.10
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-exceptions-3/pom.xml b/core-java-modules/core-java-exceptions-3/pom.xml
index bdee998e8d..18dc52932e 100644
--- a/core-java-modules/core-java-exceptions-3/pom.xml
+++ b/core-java-modules/core-java-exceptions-3/pom.xml
@@ -19,21 +19,13 @@
com.h2database
h2
- 1.4.191
- test
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
+ ${h2.version}
test
-
- 3.10.0
+ 1.4.191
\ No newline at end of file
diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedReceiver.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedReceiver.java
index ff6b926cdc..8b0aa95153 100644
--- a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedReceiver.java
+++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedReceiver.java
@@ -4,7 +4,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SynchronizedReceiver implements Runnable {
- private static Logger log = LoggerFactory.getLogger(SynchronizedReceiver.class);
+
+ private static final Logger LOG = LoggerFactory.getLogger(SynchronizedReceiver.class);
+
private final Data data;
private String message;
private boolean illegalMonitorStateExceptionOccurred;
@@ -20,10 +22,10 @@ public class SynchronizedReceiver implements Runnable {
data.wait();
this.message = data.receive();
} catch (InterruptedException e) {
- log.error("thread was interrupted", e);
+ LOG.error("thread was interrupted", e);
Thread.currentThread().interrupt();
} catch (IllegalMonitorStateException e) {
- log.error("illegal monitor state exception occurred", e);
+ LOG.error("illegal monitor state exception occurred", e);
illegalMonitorStateExceptionOccurred = true;
}
}
diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedSender.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedSender.java
index 1618bc8efa..8317b5ade7 100644
--- a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedSender.java
+++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/SynchronizedSender.java
@@ -4,7 +4,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SynchronizedSender implements Runnable {
- private static Logger log = LoggerFactory.getLogger(SynchronizedSender.class);
+
+ private static final Logger LOG = LoggerFactory.getLogger(SynchronizedSender.class);
+
private final Data data;
private boolean illegalMonitorStateExceptionOccurred;
@@ -22,10 +24,10 @@ public class SynchronizedSender implements Runnable {
data.notifyAll();
} catch (InterruptedException e) {
- log.error("thread was interrupted", e);
+ LOG.error("thread was interrupted", e);
Thread.currentThread().interrupt();
} catch (IllegalMonitorStateException e) {
- log.error("illegal monitor state exception occurred", e);
+ LOG.error("illegal monitor state exception occurred", e);
illegalMonitorStateExceptionOccurred = true;
}
}
diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedReceiver.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedReceiver.java
index 3a0b72e6cd..69fb363731 100644
--- a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedReceiver.java
+++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedReceiver.java
@@ -4,7 +4,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UnsynchronizedReceiver implements Runnable {
- private static Logger log = LoggerFactory.getLogger(UnsynchronizedReceiver.class);
+ private static final Logger LOG = LoggerFactory.getLogger(UnsynchronizedReceiver.class);
+
private final Data data;
private String message;
private boolean illegalMonitorStateExceptionOccurred;
@@ -19,10 +20,10 @@ public class UnsynchronizedReceiver implements Runnable {
data.wait();
this.message = data.receive();
} catch (InterruptedException e) {
- log.error("thread was interrupted", e);
+ LOG.error("thread was interrupted", e);
Thread.currentThread().interrupt();
} catch (IllegalMonitorStateException e) {
- log.error("illegal monitor state exception occurred", e);
+ LOG.error("illegal monitor state exception occurred", e);
illegalMonitorStateExceptionOccurred = true;
}
}
diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedSender.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedSender.java
index 7f15418bfa..b97453f655 100644
--- a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedSender.java
+++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalmonitorstate/UnsynchronizedSender.java
@@ -4,7 +4,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UnsynchronizedSender implements Runnable {
- private static Logger log = LoggerFactory.getLogger(UnsynchronizedSender.class);
+ private static final Logger LOG = LoggerFactory.getLogger(UnsynchronizedSender.class);
+
private final Data data;
private boolean illegalMonitorStateExceptionOccurred;
@@ -21,10 +22,10 @@ public class UnsynchronizedSender implements Runnable {
data.notifyAll();
} catch (InterruptedException e) {
- log.error("thread was interrupted", e);
+ LOG.error("thread was interrupted", e);
Thread.currentThread().interrupt();
} catch (IllegalMonitorStateException e) {
- log.error("illegal monitor state exception occurred", e);
+ LOG.error("illegal monitor state exception occurred", e);
illegalMonitorStateExceptionOccurred = true;
}
}
diff --git a/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalmonitorstate/IllegalMonitorStateExceptionUnitTest.java b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalmonitorstate/IllegalMonitorStateExceptionUnitTest.java
index 82c00bc72f..bef90e671f 100644
--- a/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalmonitorstate/IllegalMonitorStateExceptionUnitTest.java
+++ b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalmonitorstate/IllegalMonitorStateExceptionUnitTest.java
@@ -2,6 +2,8 @@ package com.baeldung.exceptions.illegalmonitorstate;
import org.junit.jupiter.api.Test;
+import java.time.Duration;
+
import static org.junit.jupiter.api.Assertions.*;
public class IllegalMonitorStateExceptionUnitTest {
@@ -20,10 +22,9 @@ public class IllegalMonitorStateExceptionUnitTest {
senderThread.join(1000);
receiverThread.join(1000);
-
- Thread.sleep(2000);
- assertEquals("test", receiver.getMessage());
+ // we need to wait for enough time so that sender has had a chance to send the data
+ assertTimeout(Duration.ofSeconds(10), () -> assertEquals("test", receiver.getMessage()));
assertFalse(sender.hasIllegalMonitorStateExceptionOccurred());
assertFalse(receiver.hasIllegalMonitorStateExceptionOccurred());
}
diff --git a/core-java-modules/core-java-exceptions/pom.xml b/core-java-modules/core-java-exceptions/pom.xml
index 1f15dabe36..f1f60120a5 100644
--- a/core-java-modules/core-java-exceptions/pom.xml
+++ b/core-java-modules/core-java-exceptions/pom.xml
@@ -30,22 +30,12 @@
org.apache.commons
commons-lang3
- ${commons.lang3.version}
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
+ ${commons-lang3.version}
1.5.0-b01
- 3.10
-
- 3.10.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-function/pom.xml b/core-java-modules/core-java-function/pom.xml
index cc44ba5a7c..a3add5a686 100644
--- a/core-java-modules/core-java-function/pom.xml
+++ b/core-java-modules/core-java-function/pom.xml
@@ -14,16 +14,6 @@
0.0.1-SNAPSHOT
-
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
core-java-function
@@ -34,9 +24,4 @@
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-io-2/pom.xml b/core-java-modules/core-java-io-2/pom.xml
index 924248f4f9..800756767c 100644
--- a/core-java-modules/core-java-io-2/pom.xml
+++ b/core-java-modules/core-java-io-2/pom.xml
@@ -38,13 +38,6 @@
log4j-over-slf4j
${org.slf4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.github.tomakehurst
@@ -76,7 +69,6 @@
- 3.6.1
3.0.0-M1
2.26.3
diff --git a/core-java-modules/core-java-io-3/pom.xml b/core-java-modules/core-java-io-3/pom.xml
index 017b56f03f..7af90dbab9 100644
--- a/core-java-modules/core-java-io-3/pom.xml
+++ b/core-java-modules/core-java-io-3/pom.xml
@@ -38,17 +38,6 @@
log4j-over-slf4j
${org.slf4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-io-4/pom.xml b/core-java-modules/core-java-io-4/pom.xml
index 0501bb4a66..9fc00ff586 100644
--- a/core-java-modules/core-java-io-4/pom.xml
+++ b/core-java-modules/core-java-io-4/pom.xml
@@ -32,17 +32,6 @@
log4j-over-slf4j
${org.slf4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-io-apis/pom.xml b/core-java-modules/core-java-io-apis/pom.xml
index f2a574ed89..fab2bff959 100644
--- a/core-java-modules/core-java-io-apis/pom.xml
+++ b/core-java-modules/core-java-io-apis/pom.xml
@@ -32,13 +32,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -51,8 +44,4 @@
-
- 3.6.1
-
-
\ 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 a036818226..7de29ac23c 100644
--- a/core-java-modules/core-java-io/pom.xml
+++ b/core-java-modules/core-java-io/pom.xml
@@ -15,13 +15,6 @@
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.hsqldb
hsqldb
@@ -132,8 +125,6 @@
-
- 3.6.1
3.0.0-M1
2.4.0
diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml
index 3c5a1b35bf..da107c745f 100644
--- a/core-java-modules/core-java-jar/pom.xml
+++ b/core-java-modules/core-java-jar/pom.xml
@@ -49,13 +49,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.javamoney
moneta
@@ -376,8 +369,6 @@
0.4
1.8.7
-
- 3.10.0
1.1
3.0.0-M1
diff --git a/core-java-modules/core-java-jndi/pom.xml b/core-java-modules/core-java-jndi/pom.xml
index 6b7c4e1359..68b7f9361f 100644
--- a/core-java-modules/core-java-jndi/pom.xml
+++ b/core-java-modules/core-java-jndi/pom.xml
@@ -47,12 +47,6 @@
${apacheds.version}
test
-
- org.assertj
- assertj-core
- 3.21.0
- test
-
diff --git a/core-java-modules/core-java-jpms/pom.xml b/core-java-modules/core-java-jpms/pom.xml
index 65f5afad47..62aa49f299 100644
--- a/core-java-modules/core-java-jpms/pom.xml
+++ b/core-java-modules/core-java-jpms/pom.xml
@@ -25,7 +25,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- ${compiler.plugin.version}
+ ${maven-compiler-plugin.version}
${source.version}
${target.version}
@@ -36,7 +36,6 @@
- 3.8.0
11
11
diff --git a/core-java-modules/core-java-jvm-2/pom.xml b/core-java-modules/core-java-jvm-2/pom.xml
index b34aac5a78..60a2795116 100644
--- a/core-java-modules/core-java-jvm-2/pom.xml
+++ b/core-java-modules/core-java-jvm-2/pom.xml
@@ -15,12 +15,6 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.openjdk.jol
jol-core
@@ -39,7 +33,6 @@
- 3.6.1
0.10
0.10.2
31.0.1-jre
diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml
index 38cb1a7825..c47765e43d 100644
--- a/core-java-modules/core-java-jvm/pom.xml
+++ b/core-java-modules/core-java-jvm/pom.xml
@@ -20,12 +20,6 @@
commons-lang3
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.javassist
javassist
@@ -66,8 +60,6 @@
- 3.6.1
-
3.27.0-GA
1.8.0
0.10
diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java
index 64532c8b6f..db710589e7 100644
--- a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java
+++ b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java
@@ -1,15 +1,20 @@
package com.baeldung.java8.lambda.exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.function.Consumer;
public class LambdaExceptionWrappers {
+ private static final Logger LOGGER = LoggerFactory.getLogger(LambdaExceptionWrappers.class);
+
public static Consumer lambdaWrapper(Consumer consumer) {
return i -> {
try {
consumer.accept(i);
} catch (ArithmeticException e) {
- System.err.println("Arithmetic Exception occured : " + e.getMessage());
+ LOGGER.error("Arithmetic Exception occurred.", e);
}
};
}
@@ -21,7 +26,7 @@ public class LambdaExceptionWrappers {
} catch (Exception ex) {
try {
E exCast = clazz.cast(ex);
- System.err.println("Exception occured : " + exCast.getMessage());
+ LOGGER.error("Exception occurred.", exCast);
} catch (ClassCastException ccEx) {
throw ex;
}
@@ -46,7 +51,7 @@ public class LambdaExceptionWrappers {
} catch (Exception ex) {
try {
E exCast = exceptionClass.cast(ex);
- System.err.println("Exception occured : " + exCast.getMessage());
+ LOGGER.error("Exception occurred.", exCast);
} catch (ClassCastException ccEx) {
throw new RuntimeException(ex);
}
diff --git a/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java
index 957294153b..87c01c3ded 100644
--- a/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java
+++ b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java
@@ -7,14 +7,16 @@ import java.util.function.BiFunction;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class MethodReferenceUnitTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(MethodReferenceUnitTest.class);
+
private static void doNothingAtAll(Object... o) {
}
- ;
-
@Test
public void referenceToStaticMethod() {
List messages = Arrays.asList("Hello", "Baeldung", "readers!");
@@ -61,7 +63,7 @@ public class MethodReferenceUnitTest {
@Test
public void limitationsAndAdditionalExamples() {
- createBicyclesList().forEach(b -> System.out.printf("Bike brand is '%s' and frame size is '%d'%n", b.getBrand(), b.getFrameSize()));
+ createBicyclesList().forEach(b -> LOGGER.debug("Bike brand is '{}' and frame size is '{}'", b.getBrand(), b.getFrameSize()));
createBicyclesList().forEach((o) -> MethodReferenceUnitTest.doNothingAtAll(o));
}
diff --git a/core-java-modules/core-java-lang-2/pom.xml b/core-java-modules/core-java-lang-2/pom.xml
index d1a8d68075..f155f2abaf 100644
--- a/core-java-modules/core-java-lang-2/pom.xml
+++ b/core-java-modules/core-java-lang-2/pom.xml
@@ -45,12 +45,6 @@
jmh-core
${jmh-core.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -64,7 +58,6 @@
- 3.12.2
1.9.4
29.0-jre
diff --git a/core-java-modules/core-java-lang-3/pom.xml b/core-java-modules/core-java-lang-3/pom.xml
index 0eda5dd16b..92c724826c 100644
--- a/core-java-modules/core-java-lang-3/pom.xml
+++ b/core-java-modules/core-java-lang-3/pom.xml
@@ -15,12 +15,6 @@
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.google.guava
guava
@@ -45,8 +39,4 @@
-
- 3.12.2
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-math-2/pom.xml b/core-java-modules/core-java-lang-math-2/pom.xml
index 4411d313db..4057429896 100644
--- a/core-java-modules/core-java-lang-math-2/pom.xml
+++ b/core-java-modules/core-java-lang-math-2/pom.xml
@@ -44,12 +44,6 @@
guava
${guava.version}
-
- org.assertj
- assertj-core
- ${org.assertj.core.version}
- test
-
com.github.dpaukov
combinatoricslib3
@@ -65,7 +59,6 @@
3.6.1
- 3.9.0
27.0.1-jre
3.3.0
0.38
diff --git a/core-java-modules/core-java-lang-math/pom.xml b/core-java-modules/core-java-lang-math/pom.xml
index 2cc9b90fa4..37550b67d8 100644
--- a/core-java-modules/core-java-lang-math/pom.xml
+++ b/core-java-modules/core-java-lang-math/pom.xml
@@ -14,16 +14,6 @@
0.0.1-SNAPSHOT
-
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
core-java-lang-math
@@ -34,9 +24,4 @@
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-constructors/README.md b/core-java-modules/core-java-lang-oop-constructors/README.md
index 69ade3e25a..d3d05d31bf 100644
--- a/core-java-modules/core-java-lang-oop-constructors/README.md
+++ b/core-java-modules/core-java-lang-oop-constructors/README.md
@@ -8,3 +8,4 @@ This module contains article about constructors in Java
- [Cannot Reference “X” Before Supertype Constructor Has Been Called](https://www.baeldung.com/java-cannot-reference-x-before-supertype-constructor-error)
- [Private Constructors in Java](https://www.baeldung.com/java-private-constructors)
- [Throwing Exceptions in Constructors](https://www.baeldung.com/java-constructors-exceptions)
+- [Constructors in Java Abstract Classes](https://www.baeldung.com/java-abstract-classes-constructors)
diff --git a/core-java-modules/core-java-lang-oop-constructors/pom.xml b/core-java-modules/core-java-lang-oop-constructors/pom.xml
index 5635059fa9..061b3c08de 100644
--- a/core-java-modules/core-java-lang-oop-constructors/pom.xml
+++ b/core-java-modules/core-java-lang-oop-constructors/pom.xml
@@ -13,17 +13,4 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java
new file mode 100644
index 0000000000..7599529014
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/AbstractClass.java
@@ -0,0 +1,5 @@
+package com.baeldung.abstractconstructors.defaultconstructor;
+
+public abstract class AbstractClass {
+ // compiler creates a default constructor
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java
new file mode 100644
index 0000000000..71c418735d
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/defaultconstructor/ConcreteClass.java
@@ -0,0 +1,8 @@
+package com.baeldung.abstractconstructors.defaultconstructor;
+
+public class ConcreteClass extends AbstractClass {
+
+ public ConcreteClass() {
+ super();
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java
new file mode 100644
index 0000000000..bdd554b2d9
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/AbstractClass.java
@@ -0,0 +1,8 @@
+package com.baeldung.abstractconstructors.noargs;
+
+public abstract class AbstractClass {
+
+ public AbstractClass() {
+ System.out.println("Initializing AbstractClass");
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java
new file mode 100644
index 0000000000..8339098127
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassA.java
@@ -0,0 +1,4 @@
+package com.baeldung.abstractconstructors.noargs;
+
+public class ConcreteClassA extends AbstractClass {
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java
new file mode 100644
index 0000000000..cad20d2ec0
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/ConcreteClassB.java
@@ -0,0 +1,8 @@
+package com.baeldung.abstractconstructors.noargs;
+
+public class ConcreteClassB extends AbstractClass {
+
+ public ConcreteClassB() {
+ System.out.println("Initializing ConcreteClassB");
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java
new file mode 100644
index 0000000000..a0471ad777
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/Counter.java
@@ -0,0 +1,18 @@
+package com.baeldung.abstractconstructors.noargs;
+
+public abstract class Counter {
+
+ int value;
+
+ private Counter() {
+ this.value = 0;
+ System.out.println("Counter No-Arguments constructor");
+ }
+
+ public Counter(int value) {
+ this.value = value;
+ System.out.println("Parametrized Counter constructor");
+ }
+
+ abstract int increment();
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java
new file mode 100644
index 0000000000..93add905df
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/noargs/SimpleCounter.java
@@ -0,0 +1,13 @@
+package com.baeldung.abstractconstructors.noargs;
+
+public class SimpleCounter extends Counter {
+
+ public SimpleCounter(int value) {
+ super(value);
+ }
+
+ @Override
+ int increment() {
+ return ++value;
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java
new file mode 100644
index 0000000000..8919636b7e
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/Car.java
@@ -0,0 +1,28 @@
+package com.baeldung.abstractconstructors.parametrized;
+
+public abstract class Car {
+
+ private int distance;
+
+ private Car(int distance) {
+ this.distance = distance;
+ }
+
+ public Car() {
+ this(0);
+ System.out.println("Car default constructor");
+ }
+
+ abstract String getInformation();
+
+ protected void display() {
+ String info = new StringBuilder(getInformation())
+ .append("\nDistance: " + getDistance())
+ .toString();
+ System.out.println(info);
+ }
+
+ public int getDistance() {
+ return distance;
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java
new file mode 100644
index 0000000000..e17ea6d9c5
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/ElectricCar.java
@@ -0,0 +1,17 @@
+package com.baeldung.abstractconstructors.parametrized;
+
+public class ElectricCar extends Car {
+
+ int chargingTime;
+
+ public ElectricCar(int chargingTime) {
+ this.chargingTime = chargingTime;
+ }
+
+ @Override
+ String getInformation() {
+ return new StringBuilder("Electric Car")
+ .append("\nCharging Time: " + chargingTime)
+ .toString();
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java
new file mode 100644
index 0000000000..c18c3a26ef
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/abstractconstructors/parametrized/FuelCar.java
@@ -0,0 +1,17 @@
+package com.baeldung.abstractconstructors.parametrized;
+
+public class FuelCar extends Car {
+
+ String fuel;
+
+ public FuelCar(String fuel) {
+ this.fuel = fuel;
+ }
+
+ @Override
+ String getInformation() {
+ return new StringBuilder("Fuel Car")
+ .append("\nFuel type: " + fuel)
+ .toString();
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java
new file mode 100644
index 0000000000..c72d3b0f3f
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/AbstractClassUnitTest.java
@@ -0,0 +1,18 @@
+package com.baeldung.abstractconstructors.noargs;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+class AbstractClassUnitTest {
+
+ @Test
+ void givenNoArgsAbstractConstructor_whenNewSubclassA_thenCalled() {
+ assertNotNull(new ConcreteClassA());
+ }
+
+ @Test
+ void givenNoArgsAbstractConstructor_whenNewSubclassB_thenCalled() {
+ assertNotNull(new ConcreteClassB());
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java
new file mode 100644
index 0000000000..774136c5b6
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/noargs/CounterUnitTest.java
@@ -0,0 +1,16 @@
+package com.baeldung.abstractconstructors.noargs;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+class CounterUnitTest {
+
+ @Test
+ void givenNoArgAbstractConstructor_whenSubclassCreation_thenCalled() {
+ Counter counter = new SimpleCounter(1);
+ assertNotNull(counter);
+ assertEquals(1, counter.value);
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java
new file mode 100644
index 0000000000..6d17861355
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/abstractconstructors/parametrized/CarUnitTest.java
@@ -0,0 +1,20 @@
+package com.baeldung.abstractconstructors.parametrized;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+class CarUnitTest {
+ @Test
+ void givenParametrizedConstructor_whenConcreteCreation_thenCall() {
+ ElectricCar electricCar = new ElectricCar(8);
+ assertNotNull(electricCar);
+ electricCar.display();
+
+ System.out.println();
+
+ FuelCar fuelCar = new FuelCar("Gasoline");
+ assertNotNull(fuelCar);
+ fuelCar.display();
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-inheritance/pom.xml b/core-java-modules/core-java-lang-oop-inheritance/pom.xml
index e0272fb94e..4fc7e14d84 100644
--- a/core-java-modules/core-java-lang-oop-inheritance/pom.xml
+++ b/core-java-modules/core-java-lang-oop-inheritance/pom.xml
@@ -13,17 +13,4 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-methods/pom.xml b/core-java-modules/core-java-lang-oop-methods/pom.xml
index e493f716ec..e57b51b7bd 100644
--- a/core-java-modules/core-java-lang-oop-methods/pom.xml
+++ b/core-java-modules/core-java-lang-oop-methods/pom.xml
@@ -24,12 +24,6 @@
commons-lang
${commons-lang.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
nl.jqno.equalsverifier
equalsverifier
@@ -40,8 +34,6 @@
1.18.12
- 2.6
- 3.10.0
3.0.3
diff --git a/core-java-modules/core-java-lang-oop-modifiers/pom.xml b/core-java-modules/core-java-lang-oop-modifiers/pom.xml
index 3cdcc3a481..14ba397b4a 100644
--- a/core-java-modules/core-java-lang-oop-modifiers/pom.xml
+++ b/core-java-modules/core-java-lang-oop-modifiers/pom.xml
@@ -14,12 +14,6 @@
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
com.h2database
h2
@@ -29,8 +23,6 @@
- 3.10.0
1.4.197
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-patterns/pom.xml b/core-java-modules/core-java-lang-oop-patterns/pom.xml
index 8b8b4a7b46..4b89584def 100644
--- a/core-java-modules/core-java-lang-oop-patterns/pom.xml
+++ b/core-java-modules/core-java-lang-oop-patterns/pom.xml
@@ -29,17 +29,10 @@
gson
${gson.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
2.8.2
- 3.10.0
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-operators-2/pom.xml b/core-java-modules/core-java-lang-operators-2/pom.xml
index 1779b7384c..724dad95ee 100644
--- a/core-java-modules/core-java-lang-operators-2/pom.xml
+++ b/core-java-modules/core-java-lang-operators-2/pom.xml
@@ -21,13 +21,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -40,9 +33,4 @@
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-operators/pom.xml b/core-java-modules/core-java-lang-operators/pom.xml
index 63f42917b8..c61fb81354 100644
--- a/core-java-modules/core-java-lang-operators/pom.xml
+++ b/core-java-modules/core-java-lang-operators/pom.xml
@@ -21,13 +21,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -40,9 +33,4 @@
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-syntax/pom.xml b/core-java-modules/core-java-lang-syntax/pom.xml
index da7d56de7b..7cdbc40fbc 100644
--- a/core-java-modules/core-java-lang-syntax/pom.xml
+++ b/core-java-modules/core-java-lang-syntax/pom.xml
@@ -26,13 +26,6 @@
log4j-over-slf4j
${org.slf4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -45,9 +38,4 @@
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java
index a34dcd3c7e..875b1d0f6d 100644
--- a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java
+++ b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java
@@ -7,6 +7,6 @@ public class Building {
private static final Logger LOGGER = LoggerFactory.getLogger(Building.class);
public void paint() {
- LOGGER.info("Painting Building");
+ LOGGER.debug("Painting Building");
}
}
diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java
index 88e7d2710a..c1bc6483c4 100644
--- a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java
+++ b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java
@@ -7,6 +7,6 @@ public class House extends Building {
private static final Logger LOGGER = LoggerFactory.getLogger(House.class);
public void paint() {
- LOGGER.info("Painting House");
+ LOGGER.debug("Painting House");
}
}
diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java
index 1d9a872d69..1604f27368 100644
--- a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java
+++ b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java
@@ -1,8 +1,13 @@
package com.baeldung.initializationguide;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.Serializable;
public class User implements Serializable, Cloneable {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(User.class);
private static final long serialVersionUID = 1L;
static String forum;
private String name;
@@ -10,12 +15,12 @@ public class User implements Serializable, Cloneable {
{
id = 0;
- System.out.println("Instance Initializer");
+ LOGGER.debug("Instance Initializer");
}
static {
- forum = "Java";
- System.out.println("Static Initializer");
+ forum = "Java";
+ LOGGER.debug("Static Initializer");
}
public User(String name, int id) {
@@ -25,7 +30,7 @@ public class User implements Serializable, Cloneable {
}
public User() {
- System.out.println("Constructor");
+ LOGGER.debug("Constructor");
}
public String getName() {
diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java
index 1b2e621b52..cdbcd9e341 100644
--- a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java
+++ b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java
@@ -1,12 +1,17 @@
package com.baeldung.loops;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class LoopsInJava {
+ private static final Logger LOGGER = LoggerFactory.getLogger(LoopsInJava.class);
+
public int[] simple_for_loop() {
int[] arr = new int[5];
for (int i = 0; i < 5; i++) {
arr[i] = i;
- System.out.println("Simple for loop: i - " + i);
+ LOGGER.debug("Simple for loop: i - " + i);
}
return arr;
}
@@ -16,7 +21,7 @@ public class LoopsInJava {
int[] arr = new int[5];
for (int num : intArr) {
arr[num] = num;
- System.out.println("Enhanced for-each loop: i - " + num);
+ LOGGER.debug("Enhanced for-each loop: i - " + num);
}
return arr;
}
@@ -26,7 +31,7 @@ public class LoopsInJava {
int[] arr = new int[5];
while (i < 5) {
arr[i] = i;
- System.out.println("While loop: i - " + i++);
+ LOGGER.debug("While loop: i - " + i++);
}
return arr;
}
@@ -36,7 +41,7 @@ public class LoopsInJava {
int[] arr = new int[5];
do {
arr[i] = i;
- System.out.println("Do-While loop: i - " + i++);
+ LOGGER.debug("Do-While loop: i - " + i++);
} while (i < 5);
return arr;
}
diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
index 69e151bfcb..55b3cbfaaf 100644
--- a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
+++ b/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
@@ -1,7 +1,13 @@
package com.baeldung.switchstatement;
+import com.baeldung.loops.LoopsInJava;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class SwitchStatement {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SwitchStatement.class);
+
public String exampleOfIF(String animal) {
String result;
@@ -42,11 +48,11 @@ public class SwitchStatement {
switch (animal) {
case "DOG":
- System.out.println("domestic animal");
+ LOGGER.debug("domestic animal");
result = "domestic animal";
default:
- System.out.println("unknown animal");
+ LOGGER.debug("unknown animal");
result = "unknown animal";
}
diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/loops/LoopsUnitTest.java b/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/loops/LoopsUnitTest.java
index 5a8b116a2c..354a408af6 100644
--- a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/loops/LoopsUnitTest.java
+++ b/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/loops/LoopsUnitTest.java
@@ -8,12 +8,16 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import com.baeldung.initializationguide.User;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class LoopsUnitTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(LoopsUnitTest.class);
private LoopsInJava loops = new LoopsInJava();
private static List list = new ArrayList<>();
private static Set set = new HashSet<>();
@@ -65,41 +69,44 @@ public class LoopsUnitTest {
@Test
public void whenUsingSimpleFor_shouldIterateList() {
for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
+ LOGGER.debug(list.get(i));
}
}
@Test
public void whenUsingEnhancedFor_shouldIterateList() {
for (String item : list) {
- System.out.println(item);
+ LOGGER.debug(item);
}
}
@Test
public void whenUsingEnhancedFor_shouldIterateSet() {
for (String item : set) {
- System.out.println(item);
+ LOGGER.debug(item);
}
}
@Test
public void whenUsingEnhancedFor_shouldIterateMap() {
for (Entry entry : map.entrySet()) {
- System.out.println("Key: " + entry.getKey() + " - " + "Value: " + entry.getValue());
+ LOGGER.debug("Key: " + entry.getKey() + " - " + "Value: " + entry.getValue());
}
}
@Test
public void whenUsingSimpleFor_shouldRunLabelledLoop() {
- aa: for (int i = 1; i <= 3; i++) {
- if (i == 1)
+ aa:
+ for (int i = 1; i <= 3; i++) {
+ if (i == 1) {
continue;
- bb: for (int j = 1; j <= 3; j++) {
+ }
+ bb:
+ for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break aa;
}
- System.out.println(i + " " + j);
+ LOGGER.debug(i + " " + j);
}
}
}
diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
index bd2024fdfa..3d1e25e7a4 100644
--- a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
+++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
@@ -1,40 +1,55 @@
package com.baeldung.mail;
-import javax.mail.*;
+import javax.mail.Authenticator;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.PasswordAuthentication;
+import javax.mail.Session;
+import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
+import java.net.URI;
import java.util.Properties;
public class EmailService {
- private String host = "";
- private int port = 0;
- private String username = "";
- private String password = "";
+ private String username;
+ private String password;
+ private final Properties prop;
public EmailService(String host, int port, String username, String password) {
-
- this.host = host;
- this.port = port;
- this.username = username;
- this.password = password;
-
- sendMail();
- }
-
- private void sendMail() {
-
- Properties prop = new Properties();
+ prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", host);
prop.put("mail.smtp.port", port);
prop.put("mail.smtp.ssl.trust", host);
+ this.username = username;
+ this.password = password;
+ }
+
+ public EmailService(String host, int port) {
+ prop = new Properties();
+ prop.put("mail.smtp.host", host);
+ prop.put("mail.smtp.port", port);
+ }
+
+ public static void main(String... args) {
+ try {
+ new EmailService("smtp.mailtrap.io", 25, "87ba3d9555fae8", "91cb4379af43ed")
+ .sendMail();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void sendMail() throws Exception {
+
Session session = Session.getInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
@@ -42,36 +57,35 @@ public class EmailService {
}
});
- try {
+ Message message = new MimeMessage(session);
+ message.setFrom(new InternetAddress("from@gmail.com"));
+ message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@gmail.com"));
+ message.setSubject("Mail Subject");
- Message message = new MimeMessage(session);
- message.setFrom(new InternetAddress("from@gmail.com"));
- message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@gmail.com"));
- message.setSubject("Mail Subject");
+ String msg = "This is my first email using JavaMailer";
- String msg = "This is my first email using JavaMailer";
+ MimeBodyPart mimeBodyPart = new MimeBodyPart();
+ mimeBodyPart.setContent(msg, "text/html; charset=utf-8");
- MimeBodyPart mimeBodyPart = new MimeBodyPart();
- mimeBodyPart.setContent(msg, "text/html");
+ MimeBodyPart attachmentBodyPart = new MimeBodyPart();
- MimeBodyPart attachmentBodyPart = new MimeBodyPart();
- attachmentBodyPart.attachFile(new File("pom.xml"));
+ attachmentBodyPart.attachFile(getFile());
- Multipart multipart = new MimeMultipart();
- multipart.addBodyPart(mimeBodyPart);
- multipart.addBodyPart(attachmentBodyPart);
+ Multipart multipart = new MimeMultipart();
+ multipart.addBodyPart(mimeBodyPart);
+ multipart.addBodyPart(attachmentBodyPart);
- message.setContent(multipart);
+ message.setContent(multipart);
- Transport.send(message);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
+ Transport.send(message);
}
- public static void main(String ... args) {
- new EmailService("smtp.mailtrap.io", 25, "87ba3d9555fae8", "91cb4379af43ed");
+ private File getFile() throws Exception {
+ URI uri = this.getClass()
+ .getClassLoader()
+ .getResource("attachment.txt")
+ .toURI();
+ return new File(uri);
}
}
diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java
index 7d4dc57f10..fbe8a54bbe 100644
--- a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java
+++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentService.java
@@ -1,8 +1,5 @@
package com.baeldung.mail.mailwithattachment;
-import java.io.File;
-import java.io.IOException;
-import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
@@ -10,23 +7,23 @@ import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
-import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Properties;
public class MailWithAttachmentService {
- private String username = "";
- private String password = "";
- private String host = "";
- private String port = "";
+ private final String username;
+ private final String password;
+ private final String host;
+ private final int port;
- MailWithAttachmentService() {
- }
-
- MailWithAttachmentService(String username, String password, String host, String port) {
+ MailWithAttachmentService(String username, String password, String host, int port) {
this.username = username;
this.password = password;
this.host = host;
@@ -40,15 +37,14 @@ public class MailWithAttachmentService {
props.put("mail.smtp.host", this.host);
props.put("mail.smtp.port", this.port);
- Session session = Session.getInstance(props, new javax.mail.Authenticator() {
+ return Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
- return session;
}
- public Message createMail(Session session) throws AddressException, MessagingException, IOException {
+ public void sendMail(Session session) throws MessagingException, IOException {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("mail@gmail.com"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("mail@gmail.com"));
@@ -61,23 +57,27 @@ public class MailWithAttachmentService {
multipart.addBodyPart(messageBodyPart);
MimeBodyPart attachmentPart = new MimeBodyPart();
- MimeBodyPart attachmentPart2 = new MimeBodyPart();
-
- attachmentPart.attachFile(new File("C:\\Document1.txt"));
- attachmentPart2.attachFile(new File("C:\\Document2.txt"));
-
+ attachmentPart.attachFile(getFile("attachment.txt"));
multipart.addBodyPart(attachmentPart);
+
+ MimeBodyPart attachmentPart2 = new MimeBodyPart();
+ attachmentPart2.attachFile(getFile("attachment2.txt"));
multipart.addBodyPart(attachmentPart2);
message.setContent(multipart);
-
- return message;
- }
-
- public void sendMail(Session session) throws MessagingException, IOException {
-
- Message message = createMail(session);
Transport.send(message);
}
-}
\ No newline at end of file
+ private File getFile(String filename) {
+ try {
+ URI uri = this.getClass()
+ .getClassLoader()
+ .getResource(filename)
+ .toURI();
+ return new File(uri);
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Unable to find file from resources: " + filename);
+ }
+ }
+
+}
diff --git a/core-java-modules/core-java-networking-2/src/main/resources/attachment.txt b/core-java-modules/core-java-networking-2/src/main/resources/attachment.txt
new file mode 100644
index 0000000000..a726ded018
--- /dev/null
+++ b/core-java-modules/core-java-networking-2/src/main/resources/attachment.txt
@@ -0,0 +1 @@
+sample attachment content
\ No newline at end of file
diff --git a/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt b/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt
new file mode 100644
index 0000000000..14c8ea9ff9
--- /dev/null
+++ b/core-java-modules/core-java-networking-2/src/main/resources/attachment2.txt
@@ -0,0 +1 @@
+sample attachment content 2
\ No newline at end of file
diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/EmailServiceLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/EmailServiceLiveTest.java
new file mode 100644
index 0000000000..7f543bc612
--- /dev/null
+++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/EmailServiceLiveTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.mail;
+
+import com.icegreen.greenmail.junit.GreenMailRule;
+import com.icegreen.greenmail.util.ServerSetupTest;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+public class EmailServiceLiveTest {
+
+ @Rule
+ public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP);
+
+ private EmailService emailService;
+
+ @Before
+ public void setup() {
+ emailService = new EmailService("localhost", greenMail.getSmtp().getPort());
+ }
+
+ @Test
+ public void givenEmailMessageWithAttachment_whenEmailIsSent_MessageIsReceived() throws Exception {
+
+ emailService.sendMail();
+
+ MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
+ assertEquals(1, receivedMessages.length);
+
+ MimeMessage receivedMessage = receivedMessages[0];
+ assertEquals("Mail Subject", subjectFromMessage(receivedMessage));
+ assertEquals("This is my first email using JavaMailer", emailTextFrom(receivedMessage));
+ assertEquals("sample attachment content", attachmentContentsFrom(receivedMessage));
+ }
+
+ private static String subjectFromMessage(MimeMessage receivedMessage) throws MessagingException {
+ return receivedMessage.getSubject();
+ }
+
+ private static String emailTextFrom(MimeMessage receivedMessage) throws IOException, MessagingException {
+ return ((MimeMultipart) receivedMessage.getContent())
+ .getBodyPart(0)
+ .getContent()
+ .toString();
+ }
+
+ private static String attachmentContentsFrom(MimeMessage receivedMessage) throws Exception {
+ return ((MimeMultipart) receivedMessage.getContent())
+ .getBodyPart(1)
+ .getContent()
+ .toString();
+ }
+
+}
diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java
index ef82657ab5..04ad47875f 100644
--- a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java
+++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/mail/mailwithattachment/MailWithAttachmentServiceLiveTest.java
@@ -1,48 +1,77 @@
package com.baeldung.mail.mailwithattachment;
-import static org.junit.Assert.*;
-import javax.annotation.Resource;
-import javax.mail.Session;
-
-import org.junit.After;
+import com.icegreen.greenmail.configuration.GreenMailConfiguration;
+import com.icegreen.greenmail.junit.GreenMailRule;
+import com.icegreen.greenmail.util.GreenMailUtil;
+import com.icegreen.greenmail.util.ServerSetupTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
-import com.baeldung.mail.mailwithattachment.MailWithAttachmentService;
-import com.icegreen.greenmail.util.GreenMail;
-import com.icegreen.greenmail.util.ServerSetupTest;
+import javax.annotation.Resource;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import static org.junit.Assert.assertEquals;
public class MailWithAttachmentServiceLiveTest {
+ private static final String USERNAME = "testUser";
+ private static final String PASSWORD = "password";
+ private static final String HOSTNAME = "localhost";
+
+ @Rule
+ public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP)
+ .withConfiguration(
+ GreenMailConfiguration.aConfig()
+ .withUser(USERNAME, PASSWORD)
+ );
+
@Resource
private MailWithAttachmentService emailService;
- private GreenMail greenMail;
@Before
- public void startMailServer() {
- emailService = new MailWithAttachmentService();
- greenMail = new GreenMail(ServerSetupTest.SMTP);
- greenMail.start();
- }
-
- @After
- public void stopMailServer() {
- greenMail.stop();
- emailService = null;
+ public void setup() {
+ emailService = new MailWithAttachmentService(
+ USERNAME, PASSWORD, HOSTNAME, greenMail.getSmtp().getPort()
+ );
}
@Test
- public void canSendMail() {
- try {
- Session testSession = greenMail.getSmtp()
- .createSession();
- emailService.sendMail(testSession);
- assertEquals(1, greenMail.getReceivedMessages().length);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
+ public void givenEmailService_whenMessageSentWithAttachments_thenMessageIsReceived() throws Exception {
+ Session tlsSession = emailService.getSession();
+ emailService.sendMail(tlsSession);
+
+ MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
+ assertEquals(1, receivedMessages.length);
+
+ MimeMessage receivedMessage = receivedMessages[0];
+ assertEquals("Testing Subject", subjectFrom(receivedMessage));
+ assertEquals("This is message body", emailTextFrom(receivedMessage));
+ assertEquals("sample attachment content", attachment1ContentsFrom(receivedMessage));
+ assertEquals("sample attachment content 2", attachment2ContentsFrom(receivedMessage));
+ }
+
+ private static String subjectFrom(MimeMessage receivedMessage) throws MessagingException {
+ return receivedMessage.getSubject();
+ }
+
+ private static String emailTextFrom(MimeMessage receivedMessage) throws Exception {
+ return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent())
+ .getBodyPart(0));
+ }
+
+ private static String attachment1ContentsFrom(MimeMessage receivedMessage) throws Exception {
+ return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent())
+ .getBodyPart(1));
+ }
+
+ private static String attachment2ContentsFrom(MimeMessage receivedMessage) throws Exception {
+ return GreenMailUtil.getBody(((MimeMultipart) receivedMessage.getContent())
+ .getBodyPart(2));
}
}
diff --git a/core-java-modules/core-java-networking-3/pom.xml b/core-java-modules/core-java-networking-3/pom.xml
index 1579418b54..ee822e57cb 100644
--- a/core-java-modules/core-java-networking-3/pom.xml
+++ b/core-java-modules/core-java-networking-3/pom.xml
@@ -29,16 +29,10 @@
tomcat-embed-core
${tomcat.embeded.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.sun.mail
javax.mail
- 1.6.2
+ ${javax.mail.version}
@@ -76,10 +70,10 @@
5.2.8.RELEASE
9.4.31.v20200723
10.0.0-M7
- 3.11.1
5.3.3
1.32
0.17
+ 1.6.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-nio-2/pom.xml b/core-java-modules/core-java-nio-2/pom.xml
index f9cf1f3060..eb56c2bf68 100644
--- a/core-java-modules/core-java-nio-2/pom.xml
+++ b/core-java-modules/core-java-nio-2/pom.xml
@@ -14,13 +14,4 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- 3.6.1
- test
-
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-optional/pom.xml b/core-java-modules/core-java-optional/pom.xml
index dd5217df74..d04763598d 100644
--- a/core-java-modules/core-java-optional/pom.xml
+++ b/core-java-modules/core-java-optional/pom.xml
@@ -56,18 +56,11 @@
${rest-assured.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
5.4.0.Final
27.1-jre
- 3.10.0
3.1.1
diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml
index c0eac46db8..970c8a562a 100644
--- a/core-java-modules/core-java-os/pom.xml
+++ b/core-java-modules/core-java-os/pom.xml
@@ -35,13 +35,6 @@
log4j
${log4j.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.unix4j
unix4j-command
@@ -76,11 +69,8 @@
-
4.1
4.01
-
- 3.6.1
1.8.9
1.9
1.9
diff --git a/core-java-modules/core-java-reflection-2/README.md b/core-java-modules/core-java-reflection-2/README.md
index 4c888bdf58..c1966dd63d 100644
--- a/core-java-modules/core-java-reflection-2/README.md
+++ b/core-java-modules/core-java-reflection-2/README.md
@@ -6,3 +6,4 @@
- [Checking if a Java Class is ‘abstract’ Using Reflection](https://www.baeldung.com/java-reflection-is-class-abstract)
- [Invoking a Private Method in Java](https://www.baeldung.com/java-call-private-method)
- [Finding All Classes in a Java Package](https://www.baeldung.com/java-find-all-classes-in-package)
+- [Invoke a Static Method Using Java Reflection API](https://www.baeldung.com/java-invoke-static-method-reflection)
diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml
index 75168936a7..06ac745f17 100644
--- a/core-java-modules/core-java-reflection-2/pom.xml
+++ b/core-java-modules/core-java-reflection-2/pom.xml
@@ -24,12 +24,12 @@
org.reflections
reflections
- 0.9.12
+ ${reflections.version}
com.google.guava
guava
- 30.1.1-jre
+ ${guava.version}
@@ -56,7 +56,8 @@
- 3.8.0
+ 0.9.12
+ 30.1.1-jre
1.8
1.8
5.3.4
diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/staticmethods/GreetingAndBye.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/staticmethods/GreetingAndBye.java
new file mode 100644
index 0000000000..471ed1ee5b
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/staticmethods/GreetingAndBye.java
@@ -0,0 +1,12 @@
+package com.baeldung.reflection.access.staticmethods;
+
+public class GreetingAndBye {
+
+ public static String greeting(String name) {
+ return String.format("Hey %s, nice to meet you!", name);
+ }
+
+ private static String goodBye(String name) {
+ return String.format("Bye %s, see you next time.", name);
+ }
+}
diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/abstractclass/GreetingAndByeClassUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/abstractclass/GreetingAndByeClassUnitTest.java
new file mode 100644
index 0000000000..da82d2370c
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/check/abstractclass/GreetingAndByeClassUnitTest.java
@@ -0,0 +1,28 @@
+package com.baeldung.reflection.check.abstractclass;
+
+import com.baeldung.reflection.access.staticmethods.GreetingAndBye;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+class GreetingAndByeUnitTest {
+
+ @Test
+ void givenPublicStaticMethod_whenCallWithReflection_thenReturnExpectedResult() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ Class clazz = GreetingAndBye.class;
+ Method method = clazz.getMethod("greeting", String.class);
+ Object result = method.invoke(null, "Eric");
+ Assertions.assertEquals("Hey Eric, nice to meet you!", result);
+ }
+
+ @Test
+ void givenPrivateStaticMethod_whenCallWithReflection_thenReturnExpectedResult() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ Class clazz = GreetingAndBye.class;
+ Method method = clazz.getDeclaredMethod("goodBye", String.class);
+ method.setAccessible(true);
+ Object result = method.invoke(null, "Eric");
+ Assertions.assertEquals("Bye Eric, see you next time.", result);
+ }
+}
diff --git a/core-java-modules/core-java-reflection/pom.xml b/core-java-modules/core-java-reflection/pom.xml
index b28ecccb80..1706bf3c45 100644
--- a/core-java-modules/core-java-reflection/pom.xml
+++ b/core-java-modules/core-java-reflection/pom.xml
@@ -14,14 +14,6 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
-
-
-
core-java-reflection
@@ -45,8 +37,6 @@
- 3.8.0
- 3.10.0
1.8
1.8
diff --git a/core-java-modules/core-java-regex-2/pom.xml b/core-java-modules/core-java-regex-2/pom.xml
index a47c0ff357..ae9385e63c 100644
--- a/core-java-modules/core-java-regex-2/pom.xml
+++ b/core-java-modules/core-java-regex-2/pom.xml
@@ -14,17 +14,4 @@
0.0.1-SNAPSHOT
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
- 3.15.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-regex/pom.xml b/core-java-modules/core-java-regex/pom.xml
index 3fb63fb42a..93f3ae3cdb 100644
--- a/core-java-modules/core-java-regex/pom.xml
+++ b/core-java-modules/core-java-regex/pom.xml
@@ -25,12 +25,6 @@
jmh-generator-annprocess
${jmh-core.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -43,8 +37,4 @@
-
- 3.15.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-security-2/pom.xml b/core-java-modules/core-java-security-2/pom.xml
index 8de12c0c46..7a354ee9e2 100644
--- a/core-java-modules/core-java-security-2/pom.xml
+++ b/core-java-modules/core-java-security-2/pom.xml
@@ -25,13 +25,6 @@
bcprov-jdk15on
${bouncycastle.version}
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
javax.xml.bind
@@ -41,11 +34,8 @@
-
1.60
1.11
-
- 3.18.0
2.3.1
diff --git a/core-java-modules/core-java-security-3/README.md b/core-java-modules/core-java-security-3/README.md
index 10e9773f9b..30cfd8a947 100644
--- a/core-java-modules/core-java-security-3/README.md
+++ b/core-java-modules/core-java-security-3/README.md
@@ -7,4 +7,5 @@ This module contains articles about core Java Security
- [Secret Key and String Conversion in Java](https://www.baeldung.com/java-secret-key-to-string)
- [Enabling Unlimited Strength Cryptography in Java](https://www.baeldung.com/jce-enable-unlimited-strength)
- [Initialization Vector for Encryption](https://www.baeldung.com/java-encryption-iv)
+- [HMAC in Java](https://www.baeldung.com/java-hmac)
- More articles: [[<-- prev]](/core-java-modules/core-java-security-2)
diff --git a/core-java-modules/core-java-security-3/pom.xml b/core-java-modules/core-java-security-3/pom.xml
index a0e73a1e29..3cd546e697 100644
--- a/core-java-modules/core-java-security-3/pom.xml
+++ b/core-java-modules/core-java-security-3/pom.xml
@@ -25,13 +25,6 @@
bcprov-jdk15on
${bouncycastle.version}
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
javax.xml.bind
@@ -41,11 +34,8 @@
-
1.60
1.11
-
- 3.18.0
2.3.1
diff --git a/core-java-modules/core-java-security-3/src/main/java/com/baeldung/hmac/HMACUtil.java b/core-java-modules/core-java-security-3/src/main/java/com/baeldung/hmac/HMACUtil.java
new file mode 100644
index 0000000000..3b504d9338
--- /dev/null
+++ b/core-java-modules/core-java-security-3/src/main/java/com/baeldung/hmac/HMACUtil.java
@@ -0,0 +1,68 @@
+package com.baeldung.hmac;
+
+import org.apache.commons.codec.digest.HmacUtils;
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.crypto.digests.MD5Digest;
+import org.bouncycastle.crypto.digests.SHA256Digest;
+import org.bouncycastle.crypto.digests.SHA384Digest;
+import org.bouncycastle.crypto.digests.SHA512Digest;
+import org.bouncycastle.crypto.macs.HMac;
+import org.bouncycastle.crypto.params.KeyParameter;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+
+public class HMACUtil {
+
+ public static String hmacWithJava(String algorithm, String data, String key)
+ throws NoSuchAlgorithmException, InvalidKeyException {
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);
+ Mac mac = Mac.getInstance(algorithm);
+ mac.init(secretKeySpec);
+ return bytesToHex(mac.doFinal(data.getBytes()));
+ }
+
+ public static String hmacWithApacheCommons(String algorithm, String data, String key) {
+ String hmac = new HmacUtils(algorithm, key).hmacHex(data);
+ return hmac;
+ }
+
+ public static String hmacWithBouncyCastle(String algorithm, String data, String key) {
+ Digest digest = getHashDigest(algorithm);
+ HMac hMac = new HMac(digest);
+ hMac.init(new KeyParameter(key.getBytes()));
+ byte[] hmacIn = data.getBytes();
+ hMac.update(hmacIn, 0, hmacIn.length);
+ byte[] hmacOut = new byte[hMac.getMacSize()];
+ hMac.doFinal(hmacOut, 0);
+ return bytesToHex(hmacOut);
+ }
+
+ private static Digest getHashDigest(String algorithm) {
+ switch (algorithm) {
+ case "HmacMD5":
+ return new MD5Digest();
+ case "HmacSHA256":
+ return new SHA256Digest();
+ case "HmacSHA384":
+ return new SHA384Digest();
+ case "HmacSHA512":
+ return new SHA512Digest();
+ }
+ return new SHA256Digest();
+ }
+
+ public static String bytesToHex(byte[] hash) {
+ StringBuilder hexString = new StringBuilder(2 * hash.length);
+ for (byte h : hash) {
+ String hex = Integer.toHexString(0xff & h);
+ if (hex.length() == 1)
+ hexString.append('0');
+ hexString.append(hex);
+ }
+ return hexString.toString();
+ }
+}
diff --git a/core-java-modules/core-java-security-3/src/test/java/com/baeldung/hmac/HMACUtilUnitTest.java b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/hmac/HMACUtilUnitTest.java
new file mode 100644
index 0000000000..0d7f97a094
--- /dev/null
+++ b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/hmac/HMACUtilUnitTest.java
@@ -0,0 +1,61 @@
+package com.baeldung.hmac;
+
+import org.junit.Test;
+
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import static org.junit.Assert.assertEquals;
+
+public class HMACUtilUnitTest {
+
+ @Test
+ public void givenDataAndKeyAndAlgorithm_whenHmacWithJava_thenSuccess()
+ throws NoSuchAlgorithmException, InvalidKeyException {
+
+ //given
+ String hmacSHA256Value = "5b50d80c7dc7ae8bb1b1433cc0b99ecd2ac8397a555c6f75cb8a619ae35a0c35";
+ String hmacSHA256Algorithm = "HmacSHA256";
+ String data = "baeldung";
+ String key = "123456";
+
+ //when
+ String result = HMACUtil.hmacWithJava(hmacSHA256Algorithm, data, key);
+
+ //then
+ assertEquals(hmacSHA256Value, result);
+ }
+
+ @Test
+ public void givenDataAndKeyAndAlgorithm_whenHmacWithApacheCommons_thenSuccess() {
+
+ //given
+ String hmacMD5Value = "621dc816b3bf670212e0c261dc9bcdb6";
+ String hmacMD5Algorithm = "HmacMD5";
+ String data = "baeldung";
+ String key = "123456";
+
+ //when
+ String result = HMACUtil.hmacWithApacheCommons(hmacMD5Algorithm, data, key);
+
+ //then
+ assertEquals(hmacMD5Value, result);
+ }
+
+ @Test
+ public void givenDataAndKeyAndAlgorithm_whenHmacWithBouncyCastle_thenSuccess() {
+
+ //given
+ String hmacSHA512Value = "b313a21908df55c9e322e3c65a4b0b7561ab1594ca806b3affbc0d769a1" +
+ "290c1922aa6622587bea3c0c4d871470a6d06f54dbd20dbda84250e2741eb01f08e33";
+ String hmacSHA512Algorithm = "HmacSHA512";
+ String data = "baeldung";
+ String key = "123456";
+
+ //when
+ String result = HMACUtil.hmacWithBouncyCastle(hmacSHA512Algorithm, data, key);
+
+ //then
+ assertEquals(hmacSHA512Value, result);
+ }
+}
diff --git a/core-java-modules/core-java-security-algorithms/pom.xml b/core-java-modules/core-java-security-algorithms/pom.xml
index db1bf09ead..967ddc103e 100644
--- a/core-java-modules/core-java-security-algorithms/pom.xml
+++ b/core-java-modules/core-java-security-algorithms/pom.xml
@@ -25,13 +25,6 @@
bcprov-jdk15on
${bouncycastle.version}
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
javax.xml.bind
@@ -41,11 +34,8 @@
-
1.60
1.11
-
- 3.18.0
2.3.1
diff --git a/core-java-modules/core-java-security/pom.xml b/core-java-modules/core-java-security/pom.xml
index daba990776..b36de5ac4c 100644
--- a/core-java-modules/core-java-security/pom.xml
+++ b/core-java-modules/core-java-security/pom.xml
@@ -14,19 +14,4 @@
0.0.1-SNAPSHOT
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
-
- 3.10.0
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/README.md b/core-java-modules/core-java-serialization/README.md
new file mode 100644
index 0000000000..fc6cfcf134
--- /dev/null
+++ b/core-java-modules/core-java-serialization/README.md
@@ -0,0 +1,9 @@
+## Core Java Serialization
+
+### Relevant Articles:
+
+- [Guide to the Externalizable Interface in Java](http://www.baeldung.com/java-externalizable)
+- [Introduction to Java Serialization](http://www.baeldung.com/java-serialization)
+- [Deserialization Vulnerabilities in Java](https://www.baeldung.com/java-deserialization-vulnerabilities)
+- [Serialization Validation in Java](https://www.baeldung.com/java-validate-serializable)
+- [What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid)
diff --git a/core-java-modules/core-java-serialization/pom.xml b/core-java-modules/core-java-serialization/pom.xml
new file mode 100644
index 0000000000..0ce5785fd9
--- /dev/null
+++ b/core-java-modules/core-java-serialization/pom.xml
@@ -0,0 +1,180 @@
+
+
+ 4.0.0
+ core-java-serialization
+ 0.1.0-SNAPSHOT
+ core-java-serialization
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ org.unix4j
+ unix4j-command
+ ${unix4j.version}
+
+
+ com.googlecode.grep4j
+ grep4j
+ ${grep4j.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+ org.springframework
+ spring-core
+ ${spring.core.version}
+
+
+ org.springframework
+ spring-core
+ ${spring.core.version}
+ test
+
+
+
+
+ core-java
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ prepare-package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/libs
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ java
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+ -Xmx300m
+ -XX:+UseParallelGC
+ -classpath
+
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ ${source.version}
+ ${target.version}
+
+
+
+
+
+
+
+ integration
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration-test
+
+ test
+
+
+
+ **/*ManualTest.java
+
+
+ **/*IntegrationTest.java
+ **/*IntTest.java
+
+
+
+
+
+
+ json
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ run-benchmarks
+
+ none
+
+ exec
+
+
+ test
+ java
+
+ -classpath
+
+ org.openjdk.jmh.Main
+ .*
+
+
+
+
+
+
+
+
+
+
+
+ 0.4
+ 1.8.7
+ 1.1
+ 3.0.0-M1
+ 4.3.20.RELEASE
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/AppleProduct.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/AppleProduct.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/AppleProduct.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/AppleProduct.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/DefaultSerial.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/DefaultSerial.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/DefaultSerial.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/DefaultSerial.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/DeserializationUtility.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/DeserializationUtility.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/DeserializationUtility.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/DeserializationUtility.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/SerializationUtility.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/SerializationUtility.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/SerializationUtility.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/deserialization/SerializationUtility.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Community.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Community.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Community.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Community.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Country.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Country.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Country.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Country.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Region.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Region.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/externalizable/Region.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/externalizable/Region.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/serialization/Address.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Address.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/serialization/Address.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Address.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/serialization/Employee.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Employee.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/serialization/Employee.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Employee.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/serialization/Person.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Person.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/serialization/Person.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/serialization/Person.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/util/MySerializationUtils.java b/core-java-modules/core-java-serialization/src/main/java/com/baeldung/util/MySerializationUtils.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/util/MySerializationUtils.java
rename to core-java-modules/core-java-serialization/src/main/java/com/baeldung/util/MySerializationUtils.java
diff --git a/core-java-modules/core-java-serialization/src/main/resources/log4j.properties b/core-java-modules/core-java-serialization/src/main/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/main/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/main/resources/log4j2.xml b/core-java-modules/core-java-serialization/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..a824bef9b0
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/main/resources/log4jstructuraldp.properties b/core-java-modules/core-java-serialization/src/main/resources/log4jstructuraldp.properties
new file mode 100644
index 0000000000..5bc2bfe4b9
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/main/resources/log4jstructuraldp.properties
@@ -0,0 +1,9 @@
+
+# Root logger
+log4j.rootLogger=INFO, file, stdout
+
+# Write to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/main/resources/logback.xml b/core-java-modules/core-java-serialization/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java b/core-java-modules/core-java-serialization/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java
similarity index 99%
rename from core-java-modules/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java
rename to core-java-modules/core-java-serialization/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java
index d7c1ee17d4..89a603a298 100644
--- a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java
+++ b/core-java-modules/core-java-serialization/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java
@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InvalidClassException;
+import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java b/core-java-modules/core-java-serialization/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java
rename to core-java-modules/core-java-serialization/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java b/core-java-modules/core-java-serialization/src/test/java/com/baeldung/serialization/PersonUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java
rename to core-java-modules/core-java-serialization/src/test/java/com/baeldung/serialization/PersonUnitTest.java
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/serialization/SerializationUnitTest.java b/core-java-modules/core-java-serialization/src/test/java/com/baeldung/serialization/SerializationUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/serialization/SerializationUnitTest.java
rename to core-java-modules/core-java-serialization/src/test/java/com/baeldung/serialization/SerializationUnitTest.java
diff --git a/core-java-modules/core-java-serialization/src/test/resources/log4j.properties b/core-java-modules/core-java-serialization/src/test/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/test/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/test/resources/log4j2.xml b/core-java-modules/core-java-serialization/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000..a824bef9b0
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/test/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/test/resources/log4jstructuraldp.properties b/core-java-modules/core-java-serialization/src/test/resources/log4jstructuraldp.properties
new file mode 100644
index 0000000000..5bc2bfe4b9
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/test/resources/log4jstructuraldp.properties
@@ -0,0 +1,9 @@
+
+# Root logger
+log4j.rootLogger=INFO, file, stdout
+
+# Write to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-serialization/src/test/resources/logback.xml b/core-java-modules/core-java-serialization/src/test/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-serialization/src/test/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-2/pom.xml b/core-java-modules/core-java-streams-2/pom.xml
index 08b82bcc11..c8fa83c55a 100644
--- a/core-java-modules/core-java-streams-2/pom.xml
+++ b/core-java-modules/core-java-streams-2/pom.xml
@@ -30,18 +30,11 @@
log4j
${log4j.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
1.9
1.9
- 3.11.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml
index b384ef7e0e..c2dfdc392b 100644
--- a/core-java-modules/core-java-streams-3/pom.xml
+++ b/core-java-modules/core-java-streams-3/pom.xml
@@ -29,19 +29,12 @@
org.openjdk.jmh
jmh-core
- ${jmh.version}
+ ${jmh-core.version}
org.openjdk.jmh
jmh-generator-annprocess
- ${jmh.version}
- test
-
-
-
- org.assertj
- assertj-core
- ${assertj.version}
+ ${jmh-generator.version}
test
@@ -65,7 +58,7 @@
org.openjdk.jmh
jmh-generator-annprocess
- ${jmh.version}
+ ${jmh-generator.version}
@@ -75,9 +68,6 @@
1.18.20
-
- 3.6.1
- 1.29
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams/pom.xml b/core-java-modules/core-java-streams/pom.xml
index 4862672c8a..a6bb827e77 100644
--- a/core-java-modules/core-java-streams/pom.xml
+++ b/core-java-modules/core-java-streams/pom.xml
@@ -43,13 +43,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.codepoetics
protonpack
@@ -105,14 +98,11 @@
-
0.9.0
1.15
0.6.5
2.10
1.3
-
- 3.11.1
1.8.9
3.1
1.8
diff --git a/core-java-modules/core-java-string-algorithms-2/pom.xml b/core-java-modules/core-java-string-algorithms-2/pom.xml
index 4b0d55508f..9fbe10865d 100644
--- a/core-java-modules/core-java-string-algorithms-2/pom.xml
+++ b/core-java-modules/core-java-string-algorithms-2/pom.xml
@@ -35,12 +35,6 @@
jmh-generator-annprocess
${jmh-generator.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.bitbucket.cowwoc
diff-match-patch
@@ -60,7 +54,6 @@
- 3.6.1
1.2
diff --git a/core-java-modules/core-java-string-algorithms-3/pom.xml b/core-java-modules/core-java-string-algorithms-3/pom.xml
index 88a3029cf1..6700e9ba95 100644
--- a/core-java-modules/core-java-string-algorithms-3/pom.xml
+++ b/core-java-modules/core-java-string-algorithms-3/pom.xml
@@ -14,13 +14,6 @@
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.google.guava
guava
@@ -56,7 +49,6 @@
- 3.6.1
28.1-jre
1.7
diff --git a/core-java-modules/core-java-string-algorithms/pom.xml b/core-java-modules/core-java-string-algorithms/pom.xml
index 9fea569b29..07018c7694 100644
--- a/core-java-modules/core-java-string-algorithms/pom.xml
+++ b/core-java-modules/core-java-string-algorithms/pom.xml
@@ -45,12 +45,6 @@
emoji-java
${emoji-java.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -66,7 +60,6 @@
27.0.1-jre
0.4.0
- 3.6.1
4.0.0
diff --git a/core-java-modules/core-java-string-conversions-2/pom.xml b/core-java-modules/core-java-string-conversions-2/pom.xml
index 68be7d2c08..f97443d9ca 100644
--- a/core-java-modules/core-java-string-conversions-2/pom.xml
+++ b/core-java-modules/core-java-string-conversions-2/pom.xml
@@ -41,21 +41,8 @@
commons-text
${commons-text.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
- 64.2
- 3.12.2
- 1.9
- 30.1.1-jre
-
-
core-java-string-conversions-2
@@ -65,5 +52,11 @@
+
+
+ 64.2
+ 1.9
+ 30.1.1-jre
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-conversions/pom.xml b/core-java-modules/core-java-string-conversions/pom.xml
index 1047e3e7c3..148f04101f 100644
--- a/core-java-modules/core-java-string-conversions/pom.xml
+++ b/core-java-modules/core-java-string-conversions/pom.xml
@@ -35,13 +35,6 @@
guava
${guava.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.hamcrest
hamcrest
@@ -62,7 +55,6 @@
61.1
- 3.6.1
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml
index db8f78da70..0d31486759 100644
--- a/core-java-modules/core-java-string-operations-2/pom.xml
+++ b/core-java-modules/core-java-string-operations-2/pom.xml
@@ -66,12 +66,6 @@
commons-codec
${commons-codec.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -108,7 +102,6 @@
- 3.6.1
2.0.0.Final
28.2-jre
6.0.2.Final
diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml
index 2567f776b1..1b1237a8c3 100644
--- a/core-java-modules/core-java-string-operations-3/pom.xml
+++ b/core-java-modules/core-java-string-operations-3/pom.xml
@@ -26,12 +26,6 @@
commons-lang3
${apache-commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.apache.maven
maven-artifact
@@ -82,7 +76,6 @@
11
11
- 3.6.1
5.3.9
3.12.0
31.0.1-jre
diff --git a/core-java-modules/core-java-string-operations-4/README.md b/core-java-modules/core-java-string-operations-4/README.md
new file mode 100644
index 0000000000..be4c9ae05f
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-4/README.md
@@ -0,0 +1,5 @@
+### Relevant Articles:
+
+- [Ignoring Commas in Quotes When Splitting a Comma-separated String](https://www.baeldung.com/java-split-string-commas)
+- [Compare Strings While Ignoring Whitespace in Java](https://www.baeldung.com/java-compare-string-whitespace)
+
diff --git a/core-java-modules/core-java-string-operations-4/pom.xml b/core-java-modules/core-java-string-operations-4/pom.xml
new file mode 100644
index 0000000000..da1180b176
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-4/pom.xml
@@ -0,0 +1,63 @@
+
+
+ 4.0.0
+ core-java-string-operations-4
+ 0.1.0-SNAPSHOT
+ core-java-string-operations-4
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+ ../
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ com.opencsv
+ opencsv
+ ${opencsv.version}
+
+
+ org.springframework
+ spring-core
+ ${spring-core.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${apache-commons-lang3.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
+ 11
+ 11
+ 31.0.1-jre
+ 4.1
+ 5.3.13
+ 3.12.0
+
+
+
diff --git a/core-java-modules/core-java-string-operations-4/src/main/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedString.java b/core-java-modules/core-java-string-operations-4/src/main/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedString.java
new file mode 100644
index 0000000000..c3bbdb4dfb
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-4/src/main/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedString.java
@@ -0,0 +1,66 @@
+package com.baeldung.commaseparatedstring;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import com.google.common.base.Splitter;
+import com.opencsv.CSVParser;
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+
+public class SplitCommaSeparatedString {
+
+ public static List splitWithParser(String input) {
+
+ List tokens = new ArrayList();
+ int startPosition = 0;
+ boolean isInQuotes = false;
+ for (int currentPosition = 0; currentPosition < input.length(); currentPosition++) {
+ if (input.charAt(currentPosition) == '\"') {
+ isInQuotes = !isInQuotes;
+ } else if (input.charAt(currentPosition) == ',' && !isInQuotes) {
+ tokens.add(input.substring(startPosition, currentPosition));
+ startPosition = currentPosition + 1;
+ }
+ }
+
+ String lastToken = input.substring(startPosition);
+ if (lastToken.equals(",")) {
+ tokens.add("");
+ } else {
+ tokens.add(lastToken);
+ }
+
+ return tokens;
+ }
+
+ public static List splitWithRegex(String input) {
+ String[] tokens = input.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1);
+ return Arrays.asList(tokens);
+ }
+
+ public static List splitWithGuava(String input) {
+ Pattern pattern = Pattern.compile(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
+ Splitter splitter = Splitter.on(pattern);
+ return splitter.splitToList(input);
+ }
+
+ public static List splitMultiLineWithOpenCSV(String input) throws IOException {
+ CSVParser parser = new CSVParserBuilder().withSeparator(',')
+ .build();
+
+ CSVReader reader = new CSVReaderBuilder(new StringReader(input)).withCSVParser(parser)
+ .build();
+
+ List list = new ArrayList<>();
+ list = reader.readAll();
+ reader.close();
+
+ return list;
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedStringUnitTest.java b/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedStringUnitTest.java
new file mode 100644
index 0000000000..ca34430099
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/commaseparatedstring/SplitCommaSeparatedStringUnitTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.commaseparatedstring;
+
+import static com.baeldung.commaseparatedstring.SplitCommaSeparatedString.splitMultiLineWithOpenCSV;
+import static com.baeldung.commaseparatedstring.SplitCommaSeparatedString.splitWithGuava;
+import static com.baeldung.commaseparatedstring.SplitCommaSeparatedString.splitWithParser;
+import static com.baeldung.commaseparatedstring.SplitCommaSeparatedString.splitWithRegex;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasSize;
+import static org.junit.Assert.assertArrayEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.junit.Test;
+
+public class SplitCommaSeparatedStringUnitTest {
+
+ @Test
+ public void givenSingleLineInput_whenParsing_shouldIgnoreCommasInsideDoubleQuotes() {
+ String input = "baeldung,tutorial,splitting,text,\"ignoring this comma,\"";
+
+ var matcher = contains("baeldung", "tutorial", "splitting", "text", "\"ignoring this comma,\"");
+ assertThat(splitWithParser(input), matcher);
+ assertThat(splitWithRegex(input), matcher);
+ assertThat(splitWithGuava(input), matcher);
+ }
+
+ @Test
+ public void givenMultiLineInput_whenParsing_shouldIgnoreCommasInsideDoubleQuotes() throws IOException {
+ String input = "baeldung,tutorial,splitting,text,\"ignoring this comma,\"" + System.lineSeparator()
+ + "splitting,a,regular,line,no double quotes";
+
+ String[] firstLine = new String[]{"baeldung", "tutorial", "splitting", "text", "ignoring this comma,"};
+ String[] secondLine = new String[]{"splitting", "a", "regular", "line", "no double quotes"};
+
+ List result = splitMultiLineWithOpenCSV(input);
+
+ assertThat(result, hasSize(2));
+ assertArrayEquals(firstLine, result.get(0));
+ assertArrayEquals(secondLine, result.get(1));
+ }
+
+}
diff --git a/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/comparestrings/CompareIgnoreSpacesUnitTest.java b/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/comparestrings/CompareIgnoreSpacesUnitTest.java
new file mode 100644
index 0000000000..570ceb1598
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-4/src/test/java/com/baeldung/comparestrings/CompareIgnoreSpacesUnitTest.java
@@ -0,0 +1,28 @@
+package com.baeldung.comparestrings;
+
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CompareIgnoreSpacesUnitTest {
+
+ private static String normalString = "ABCDEF";
+ private static String stringWithSpaces = " AB CD EF ";
+
+ @Test
+ public void givenTwoStrings_thenCompareWithReplaceAllMethod() {
+ assertEquals(normalString.replaceAll("\\s+",""), stringWithSpaces.replaceAll("\\s+",""));
+ }
+
+ @Test
+ public void givenTwoStrings_thenCompareWithApacheStringUtils() {
+ assertEquals(StringUtils.deleteWhitespace(normalString), StringUtils.deleteWhitespace(stringWithSpaces));
+ }
+
+ @Test
+ public void givenTwoStrings_thenCompareWithSpringStringUtils() {
+ assertEquals(org.springframework.util.StringUtils.trimAllWhitespace(normalString), org.springframework.util.StringUtils.trimAllWhitespace(stringWithSpaces));
+ }
+
+}
diff --git a/core-java-modules/core-java-string-operations/pom.xml b/core-java-modules/core-java-string-operations/pom.xml
index 67ce43277e..20e4df3ba3 100644
--- a/core-java-modules/core-java-string-operations/pom.xml
+++ b/core-java-modules/core-java-string-operations/pom.xml
@@ -40,12 +40,6 @@
commons-codec
${commons-codec.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -59,7 +53,6 @@
- 3.6.1
1.15
diff --git a/core-java-modules/core-java-strings/pom.xml b/core-java-modules/core-java-strings/pom.xml
index aca0bb3346..d78cb7b92d 100644
--- a/core-java-modules/core-java-strings/pom.xml
+++ b/core-java-modules/core-java-strings/pom.xml
@@ -36,12 +36,6 @@
icu4j
${icu4j.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -55,7 +49,6 @@
- 3.6.1
61.1
15
diff --git a/core-java-modules/core-java-sun/pom.xml b/core-java-modules/core-java-sun/pom.xml
index 4c26b59168..e959932235 100644
--- a/core-java-modules/core-java-sun/pom.xml
+++ b/core-java-modules/core-java-sun/pom.xml
@@ -15,13 +15,6 @@
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
com.sun
tools
@@ -93,10 +86,7 @@
-
- 3.6.1
1.7.0
-
1.8.0
diff --git a/core-java-modules/core-java-time-measurements/pom.xml b/core-java-modules/core-java-time-measurements/pom.xml
index d3c351b385..e2924b5278 100644
--- a/core-java-modules/core-java-time-measurements/pom.xml
+++ b/core-java-modules/core-java-time-measurements/pom.xml
@@ -27,13 +27,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
joda-time
joda-time
@@ -87,12 +80,9 @@
-
3.6.1
2.10
1.18.12
-
- 3.6.1
1.8.9
2.0.7
1.44
diff --git a/core-java-modules/core-java-uuid/README.md b/core-java-modules/core-java-uuid/README.md
new file mode 100644
index 0000000000..836552d798
--- /dev/null
+++ b/core-java-modules/core-java-uuid/README.md
@@ -0,0 +1,5 @@
+## Core Java UUID
+
+### Relevant Articles:
+- [Generating Alphanumeric UUID String in Java](https://www.baeldung.com/java-generate-alphanumeric-uuid)
+- [Guide to UUID in Java](http://www.baeldung.com/java-uuid)
diff --git a/core-java-modules/core-java-uuid/pom.xml b/core-java-modules/core-java-uuid/pom.xml
new file mode 100644
index 0000000000..983d0f2ba3
--- /dev/null
+++ b/core-java-modules/core-java-uuid/pom.xml
@@ -0,0 +1,147 @@
+
+
+ 4.0.0
+ core-java-uuid
+ 0.1.0-SNAPSHOT
+ core-java-uuid
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+
+
+ core-java-uuid
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ prepare-package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/libs
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ java
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+ -Xmx300m
+ -XX:+UseParallelGC
+ -classpath
+
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ ${source.version}
+ ${target.version}
+
+
+
+
+
+
+
+ integration
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration-test
+
+ test
+
+
+
+ **/*ManualTest.java
+
+
+ **/*IntegrationTest.java
+ **/*IntTest.java
+
+
+
+
+
+
+ json
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ run-benchmarks
+
+ none
+
+ exec
+
+
+ test
+ java
+
+ -classpath
+
+ org.openjdk.jmh.Main
+ .*
+
+
+
+
+
+
+
+
+
+
+
+ 3.0.0-M1
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/uuid/UUIDGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDGenerator.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/uuid/UUIDGenerator.java
rename to core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDGenerator.java
diff --git a/core-java-modules/core-java-uuid/src/main/resources/log4j.properties b/core-java-modules/core-java-uuid/src/main/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/main/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/main/resources/log4j2.xml b/core-java-modules/core-java-uuid/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..a824bef9b0
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/main/resources/log4jstructuraldp.properties b/core-java-modules/core-java-uuid/src/main/resources/log4jstructuraldp.properties
new file mode 100644
index 0000000000..5bc2bfe4b9
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/main/resources/log4jstructuraldp.properties
@@ -0,0 +1,9 @@
+
+# Root logger
+log4j.rootLogger=INFO, file, stdout
+
+# Write to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/main/resources/logback.xml b/core-java-modules/core-java-uuid/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/uuid/UUIDGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDGeneratorUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/uuid/UUIDGeneratorUnitTest.java
rename to core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDGeneratorUnitTest.java
diff --git a/core-java-modules/core-java-uuid/src/test/resources/log4j.properties b/core-java-modules/core-java-uuid/src/test/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/test/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/test/resources/log4j2.xml b/core-java-modules/core-java-uuid/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000..a824bef9b0
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/test/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/test/resources/log4jstructuraldp.properties b/core-java-modules/core-java-uuid/src/test/resources/log4jstructuraldp.properties
new file mode 100644
index 0000000000..5bc2bfe4b9
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/test/resources/log4jstructuraldp.properties
@@ -0,0 +1,9 @@
+
+# Root logger
+log4j.rootLogger=INFO, file, stdout
+
+# Write to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/core-java-modules/core-java-uuid/src/test/resources/logback.xml b/core-java-modules/core-java-uuid/src/test/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/test/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md
index 3285a7e663..a75805e0c2 100644
--- a/core-java-modules/core-java/README.md
+++ b/core-java-modules/core-java/README.md
@@ -3,14 +3,7 @@
### Relevant Articles:
- [Getting Started with Java Properties](http://www.baeldung.com/java-properties)
- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency)
-- [Introduction to Java Serialization](http://www.baeldung.com/java-serialization)
-- [Guide to UUID in Java](http://www.baeldung.com/java-uuid)
- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac)
- [Introduction to Javadoc](http://www.baeldung.com/javadoc)
-- [Guide to the Externalizable Interface in Java](http://www.baeldung.com/java-externalizable)
-- [What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid)
- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle)
- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties)
-- [Deserialization Vulnerabilities in Java](https://www.baeldung.com/java-deserialization-vulnerabilities)
-- [Generating Alphanumeric UUID String in Java](https://www.baeldung.com/java-generate-alphanumeric-uuid)
-- [Serialization Validation in Java](https://www.baeldung.com/java-validate-serializable)
diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml
index 42262be29a..8d6921b493 100644
--- a/core-java-modules/core-java/pom.xml
+++ b/core-java-modules/core-java/pom.xml
@@ -49,13 +49,6 @@
${lombok.version}
provided
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
org.javamoney
moneta
@@ -185,8 +178,6 @@
0.4
1.8.7
-
- 3.10.0
1.1
3.0.0-M1
diff --git a/core-java-modules/multimodulemavenproject/pom.xml b/core-java-modules/multimodulemavenproject/pom.xml
index 79d884cd86..fbafa7ebff 100644
--- a/core-java-modules/multimodulemavenproject/pom.xml
+++ b/core-java-modules/multimodulemavenproject/pom.xml
@@ -23,17 +23,6 @@
mainappmodule
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
@@ -54,7 +43,6 @@
3.8.0
1.9
1.9
- 3.12.2
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 5df65bd93f..a57cd54191 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -100,6 +100,7 @@
core-java-security
core-java-security-2
core-java-security-3
+ core-java-serialization
core-java-security-algorithms
core-java-streams
core-java-streams-2
@@ -116,6 +117,7 @@
core-java-sun
core-java-regex
core-java-regex-2
+ core-java-uuid
pre-jpms
diff --git a/ddd-modules/pom.xml b/ddd-modules/pom.xml
index fe3aaf1160..134a9d0566 100644
--- a/ddd-modules/pom.xml
+++ b/ddd-modules/pom.xml
@@ -39,12 +39,6 @@
${junit-jupiter.version}
test
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
@@ -80,8 +74,6 @@
3.8.1
1.0
-
- 3.12.2
diff --git a/guava-modules/guava-collections-list/pom.xml b/guava-modules/guava-collections-list/pom.xml
index 30d684d673..1b989e79b0 100644
--- a/guava-modules/guava-collections-list/pom.xml
+++ b/guava-modules/guava-collections-list/pom.xml
@@ -26,13 +26,6 @@
${commons-lang3.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
org.hamcrest
java-hamcrest
@@ -55,7 +48,6 @@
4.1
- 3.6.1
2.0.0.0
diff --git a/guava-modules/guava-collections-set/pom.xml b/guava-modules/guava-collections-set/pom.xml
index bd58645adc..49bfc46ee2 100644
--- a/guava-modules/guava-collections-set/pom.xml
+++ b/guava-modules/guava-collections-set/pom.xml
@@ -13,23 +13,8 @@
0.0.1-SNAPSHOT
-
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
guava-collections-set
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/guava-modules/guava-collections/pom.xml b/guava-modules/guava-collections/pom.xml
index 91e3efcd8c..7929283616 100644
--- a/guava-modules/guava-collections/pom.xml
+++ b/guava-modules/guava-collections/pom.xml
@@ -31,13 +31,6 @@
${jool.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
org.hamcrest
java-hamcrest
@@ -61,7 +54,6 @@
4.1
0.9.12
- 3.6.1
2.0.0.0
diff --git a/guava-modules/guava-core/pom.xml b/guava-modules/guava-core/pom.xml
index 2540ac97a7..dd68fef43a 100644
--- a/guava-modules/guava-core/pom.xml
+++ b/guava-modules/guava-core/pom.xml
@@ -19,13 +19,6 @@
commons-lang3
${commons-lang3.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -38,9 +31,4 @@
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/guava-modules/guava-utilities/pom.xml b/guava-modules/guava-utilities/pom.xml
index debf014ac7..ab849072a5 100644
--- a/guava-modules/guava-utilities/pom.xml
+++ b/guava-modules/guava-utilities/pom.xml
@@ -19,13 +19,6 @@
commons-lang3
${commons-lang3.version}
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -38,9 +31,4 @@
-
-
- 3.6.1
-
-
\ No newline at end of file
diff --git a/guest/core-java/pom.xml b/guest/core-java/pom.xml
index aaf67fd27e..2ab067ad40 100644
--- a/guest/core-java/pom.xml
+++ b/guest/core-java/pom.xml
@@ -20,17 +20,10 @@
log4j-core
${log4j2.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
2.8.2
- 3.6.1
\ No newline at end of file
diff --git a/immutables/pom.xml b/immutables/pom.xml
index 648166fd74..7704cddbb6 100644
--- a/immutables/pom.xml
+++ b/immutables/pom.xml
@@ -18,12 +18,6 @@
value
${immutables.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
org.mutabilitydetector
MutabilityDetector
@@ -34,7 +28,6 @@
2.5.6
- 3.6.1
0.9.6
diff --git a/jackson-modules/jackson-annotations/pom.xml b/jackson-modules/jackson-annotations/pom.xml
index bdc131c867..56fd6cf2fa 100644
--- a/jackson-modules/jackson-annotations/pom.xml
+++ b/jackson-modules/jackson-annotations/pom.xml
@@ -25,12 +25,6 @@
${rest-assured.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -44,7 +38,6 @@
- 3.11.0
3.1.1
diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml
index a498c8b4f8..7e994fb52b 100644
--- a/jackson-modules/jackson-conversions-2/pom.xml
+++ b/jackson-modules/jackson-conversions-2/pom.xml
@@ -32,12 +32,6 @@
jackson-dataformat-csv
${jackson.version}
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -50,8 +44,4 @@
-
- 3.11.0
-
-
\ No newline at end of file
diff --git a/jackson-modules/jackson/README.md b/jackson-modules/jackson/README.md
index 50e13a5b75..0aa3dc5aef 100644
--- a/jackson-modules/jackson/README.md
+++ b/jackson-modules/jackson/README.md
@@ -6,9 +6,11 @@ This module contains articles about Jackson.
The "REST With Spring" Classes: http://bit.ly/restwithspring
-### Relevant Articles:
+### Relevant Articles:
+
- [Using Optional with Jackson](https://www.baeldung.com/jackson-optional)
- [Compare Two JSON Objects with Jackson](https://www.baeldung.com/jackson-compare-two-json-objects)
- [Jackson vs Gson](https://www.baeldung.com/jackson-vs-gson)
- [Inheritance with Jackson](https://www.baeldung.com/jackson-inheritance)
- [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model)
+- [Get all the Keys in a JSON String Using JsonNode](https://www.baeldung.com/java-jsonnode-get-keys)
diff --git a/jackson-modules/jackson/pom.xml b/jackson-modules/jackson/pom.xml
index a4aecfa3de..9df0f40874 100644
--- a/jackson-modules/jackson/pom.xml
+++ b/jackson-modules/jackson/pom.xml
@@ -48,12 +48,6 @@
${rest-assured.version}
test
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
@@ -69,7 +63,6 @@
3.1.1
- 3.11.0
\ No newline at end of file
diff --git a/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java b/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java
new file mode 100644
index 0000000000..bb8e9a8646
--- /dev/null
+++ b/jackson-modules/jackson/src/main/java/com/baeldung/jackson/jsonnode/GetAllKeysFromJSON.java
@@ -0,0 +1,135 @@
+package com.baeldung.jackson.jsonnode;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+
+public class GetAllKeysFromJSON {
+
+ public List getKeysInJsonUsingMaps(String json, ObjectMapper mapper) throws JsonMappingException, JsonProcessingException {
+ List keys = new ArrayList<>();
+ Map jsonElements = mapper.readValue(json, new TypeReference