From fe69a3cb56666fb5cccf7eaddd45e720eb49bfdf Mon Sep 17 00:00:00 2001 From: 13400152 Date: Tue, 16 Feb 2021 23:59:11 +0530 Subject: [PATCH 001/160] JAVA-2395 Fixed compilation issue --- .../core-java-jpms/decoupling-pattern2/consumermodule/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml index e6b351b1b9..816f5cf9e8 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml +++ b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml @@ -17,7 +17,7 @@ com.baeldung.servicemodule - servicemodule + servicemodule2 ${servicemodule.version} @@ -41,4 +41,4 @@ 1.0 - \ No newline at end of file + From f7d38de477eb2f9aae7f23dfebb88537dd3f9930 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Sun, 14 Mar 2021 12:50:35 +0530 Subject: [PATCH 002/160] Committing code for Hexagonal architecture example. --- hexagonal-example/HexagonalStructure/pom.xml | 47 +++++++++++++++++++ .../src/com/baeldung/HexagonalLibrary.java | 13 +++++ .../adapter/LibraryRepoImpl.java | 39 +++++++++++++++ .../adapter/LibraryRestController.java | 37 +++++++++++++++ .../hexagonalPattern/core/domain/Book.java | 33 +++++++++++++ .../core/impl/LibraryServiceImpl.java | 38 +++++++++++++++ .../hexagonalPattern/ports/LibraryRepo.java | 14 ++++++ .../ports/LibraryService.java | 15 ++++++ .../hexagonalPattern/web/LibraryRestUI.java | 24 ++++++++++ 9 files changed, 260 insertions(+) create mode 100644 hexagonal-example/HexagonalStructure/pom.xml create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java create mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java diff --git a/hexagonal-example/HexagonalStructure/pom.xml b/hexagonal-example/HexagonalStructure/pom.xml new file mode 100644 index 0000000000..47bd8e7489 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + + + com.baeldung + HexagonalLibrary + 0.0.1-SNAPSHOT + HexagonalLibrary + HexagonalLibrary + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.baeldung.HexagonalLibrary + + + + + + \ No newline at end of file diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java new file mode 100644 index 0000000000..b730fa1244 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java @@ -0,0 +1,13 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class HexagonalLibrary { + + public static void main(String[] args) { + SpringApplication.run(HexagonalLibrary.class, args); + } + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java new file mode 100644 index 0000000000..1b678a4e80 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java @@ -0,0 +1,39 @@ +package com.baeldung.hexagonalPattern.adapter; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Repository; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryRepo; + +@Repository +public class LibraryRepoImpl implements LibraryRepo { + // This class is the actual implementation of the out bound port/adapter. + + private HashMap books = new HashMap(); + + @Override + public void insertBook(Book book) { + // Mock Database call here. + books.put("mock", new Book("mock", "mock", "mock")); + } + + @Override + public Book searchBook(String name) { + // TODO Auto-generated method stub + Book b = new Book(); + // Some code for retrieval of book from db + return b; + } + + @Override + public List getAllBooks() { + // Fetch all books from db + return books.values().stream().collect(Collectors.toList()); + } + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java new file mode 100644 index 0000000000..176b8471b5 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java @@ -0,0 +1,37 @@ +package com.baeldung.hexagonalPattern.adapter; + +import java.util.List; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.web.LibraryRestUI; + +@RestController +public class LibraryRestController implements LibraryRestUI { + + @Override + @RequestMapping("/library") + public void insertBook(Book book) { + // TODO Auto-generated method stub + + } + + @Override + @GetMapping("/searchBook") + public Book searchBook(@PathVariable String name) { + // TODO Auto-generated method stub + return null; + } + + @Override + @GetMapping("/listBooks") + public List listAllBooks() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java new file mode 100644 index 0000000000..38e761ba50 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java @@ -0,0 +1,33 @@ +package com.baeldung.hexagonalPattern.core.domain; + +public class Book { + + private String name; + private String author_list; + private String isbn13; + + /* constructors and getter and setters */ + public Book(String string, String string2, String string3) { + // TODO Auto-generated constructor stub + } + + public Book() { + // TODO Auto-generated constructor stub + } + + /* + * public String getName() { return name; } + * + * public void setName(String name) { this.name = name; } + * + * public String getAuthor_list() { return author_list; } + * + * public void setAuthor_list(String author_list) { this.author_list = + * author_list; } + * + * public String getIsbn13() { return isbn13; } + * + * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } + */ + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java new file mode 100644 index 0000000000..1bde7c8d0e --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java @@ -0,0 +1,38 @@ +package com.baeldung.hexagonalPattern.core.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryRepo; +import com.baeldung.hexagonalPattern.ports.LibraryService; + +@Service +public class LibraryServiceImpl implements LibraryService { + + // This is the class which actually implements the methods from the ports. + // The ports are just for exposing the methods to the outside. + + @Autowired + private LibraryRepo bookRepo; + + @Override + public void insertBook(Book book) { + // TODO some implementation to insert record in the db or similar + bookRepo.insertBook(book); + } + + @Override + public Book lendBook(String name) { + // TODO Auto-generated method stub + return bookRepo.searchBook(name); + } + + @Override + public List getAllBooks() { + // TODO Auto-generated method + return null; + } + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java new file mode 100644 index 0000000000..83858403ef --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java @@ -0,0 +1,14 @@ +package com.baeldung.hexagonalPattern.ports; + +import java.util.List; +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryRepo { + // Outbound Port. + + public void insertBook(Book book); + + public Book searchBook(String name); + + public List getAllBooks(); +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java new file mode 100644 index 0000000000..7391b4795d --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java @@ -0,0 +1,15 @@ +package com.baeldung.hexagonalPattern.ports; + +import java.util.List; +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryService { +//This is the in bound port.exposes the application to the world. + + public void insertBook(Book book); + + public Book lendBook(String name); + + List getAllBooks(); + +} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java new file mode 100644 index 0000000000..16d7beac87 --- /dev/null +++ b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java @@ -0,0 +1,24 @@ +package com.baeldung.hexagonalPattern.web; + +import java.util.List; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryRestUI { + // This is the in bound Adapter + + @PostMapping + void insertBook(@RequestBody Book book); + + @GetMapping("/{name}") + public Book searchBook(@PathVariable String name); + + @GetMapping + public List listAllBooks(); + +} From f58867dedfe6a3b22f7c574a58317d84744343f4 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Sun, 14 Mar 2021 13:50:48 +0530 Subject: [PATCH 003/160] committing the correct way. --- hexagonal-example/HexagonalStructure/pom.xml | 47 ------------------- .../src/com/baeldung/HexagonalLibrary.java | 13 ----- .../adapter/LibraryRepoImpl.java | 39 --------------- .../adapter/LibraryRestController.java | 37 --------------- .../hexagonalPattern/core/domain/Book.java | 33 ------------- .../core/impl/LibraryServiceImpl.java | 38 --------------- .../hexagonalPattern/ports/LibraryRepo.java | 14 ------ .../ports/LibraryService.java | 15 ------ .../hexagonalPattern/web/LibraryRestUI.java | 24 ---------- 9 files changed, 260 deletions(-) delete mode 100644 hexagonal-example/HexagonalStructure/pom.xml delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java delete mode 100644 hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java diff --git a/hexagonal-example/HexagonalStructure/pom.xml b/hexagonal-example/HexagonalStructure/pom.xml deleted file mode 100644 index 47bd8e7489..0000000000 --- a/hexagonal-example/HexagonalStructure/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - - com.baeldung - HexagonalLibrary - 0.0.1-SNAPSHOT - HexagonalLibrary - HexagonalLibrary - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - com.baeldung.HexagonalLibrary - - - - - - \ No newline at end of file diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java deleted file mode 100644 index b730fa1244..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/HexagonalLibrary.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class HexagonalLibrary { - - public static void main(String[] args) { - SpringApplication.run(HexagonalLibrary.class, args); - } - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java deleted file mode 100644 index 1b678a4e80..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.hexagonalPattern.adapter; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Repository; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryRepo; - -@Repository -public class LibraryRepoImpl implements LibraryRepo { - // This class is the actual implementation of the out bound port/adapter. - - private HashMap books = new HashMap(); - - @Override - public void insertBook(Book book) { - // Mock Database call here. - books.put("mock", new Book("mock", "mock", "mock")); - } - - @Override - public Book searchBook(String name) { - // TODO Auto-generated method stub - Book b = new Book(); - // Some code for retrieval of book from db - return b; - } - - @Override - public List getAllBooks() { - // Fetch all books from db - return books.values().stream().collect(Collectors.toList()); - } - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java deleted file mode 100644 index 176b8471b5..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.hexagonalPattern.adapter; - -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.web.LibraryRestUI; - -@RestController -public class LibraryRestController implements LibraryRestUI { - - @Override - @RequestMapping("/library") - public void insertBook(Book book) { - // TODO Auto-generated method stub - - } - - @Override - @GetMapping("/searchBook") - public Book searchBook(@PathVariable String name) { - // TODO Auto-generated method stub - return null; - } - - @Override - @GetMapping("/listBooks") - public List listAllBooks() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java deleted file mode 100644 index 38e761ba50..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/domain/Book.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.hexagonalPattern.core.domain; - -public class Book { - - private String name; - private String author_list; - private String isbn13; - - /* constructors and getter and setters */ - public Book(String string, String string2, String string3) { - // TODO Auto-generated constructor stub - } - - public Book() { - // TODO Auto-generated constructor stub - } - - /* - * public String getName() { return name; } - * - * public void setName(String name) { this.name = name; } - * - * public String getAuthor_list() { return author_list; } - * - * public void setAuthor_list(String author_list) { this.author_list = - * author_list; } - * - * public String getIsbn13() { return isbn13; } - * - * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } - */ - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java deleted file mode 100644 index 1bde7c8d0e..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.hexagonalPattern.core.impl; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryRepo; -import com.baeldung.hexagonalPattern.ports.LibraryService; - -@Service -public class LibraryServiceImpl implements LibraryService { - - // This is the class which actually implements the methods from the ports. - // The ports are just for exposing the methods to the outside. - - @Autowired - private LibraryRepo bookRepo; - - @Override - public void insertBook(Book book) { - // TODO some implementation to insert record in the db or similar - bookRepo.insertBook(book); - } - - @Override - public Book lendBook(String name) { - // TODO Auto-generated method stub - return bookRepo.searchBook(name); - } - - @Override - public List getAllBooks() { - // TODO Auto-generated method - return null; - } - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java deleted file mode 100644 index 83858403ef..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.hexagonalPattern.ports; - -import java.util.List; -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryRepo { - // Outbound Port. - - public void insertBook(Book book); - - public Book searchBook(String name); - - public List getAllBooks(); -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java deleted file mode 100644 index 7391b4795d..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/ports/LibraryService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.hexagonalPattern.ports; - -import java.util.List; -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryService { -//This is the in bound port.exposes the application to the world. - - public void insertBook(Book book); - - public Book lendBook(String name); - - List getAllBooks(); - -} diff --git a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java b/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java deleted file mode 100644 index 16d7beac87..0000000000 --- a/hexagonal-example/HexagonalStructure/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.hexagonalPattern.web; - -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; - -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryRestUI { - // This is the in bound Adapter - - @PostMapping - void insertBook(@RequestBody Book book); - - @GetMapping("/{name}") - public Book searchBook(@PathVariable String name); - - @GetMapping - public List listAllBooks(); - -} From da32163216e5dbb3ca65da3f9a83ae3561ffaa50 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Sun, 14 Mar 2021 13:58:13 +0530 Subject: [PATCH 004/160] commiting code for hexagonal archi(eval article) --- hexagonal-example/pom.xml | 47 +++++++++++++++++++ .../src/com/baeldung/HexagonalLibrary.java | 13 +++++ .../adapter/LibraryRepoImpl.java | 39 +++++++++++++++ .../adapter/LibraryRestController.java | 37 +++++++++++++++ .../hexagonalPattern/core/domain/Book.java | 33 +++++++++++++ .../core/impl/LibraryServiceImpl.java | 38 +++++++++++++++ .../hexagonalPattern/ports/LibraryRepo.java | 14 ++++++ .../ports/LibraryService.java | 15 ++++++ .../hexagonalPattern/web/LibraryRestUI.java | 24 ++++++++++ 9 files changed, 260 insertions(+) create mode 100644 hexagonal-example/pom.xml create mode 100644 hexagonal-example/src/com/baeldung/HexagonalLibrary.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java create mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java diff --git a/hexagonal-example/pom.xml b/hexagonal-example/pom.xml new file mode 100644 index 0000000000..47bd8e7489 --- /dev/null +++ b/hexagonal-example/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + + + com.baeldung + HexagonalLibrary + 0.0.1-SNAPSHOT + HexagonalLibrary + HexagonalLibrary + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.baeldung.HexagonalLibrary + + + + + + \ No newline at end of file diff --git a/hexagonal-example/src/com/baeldung/HexagonalLibrary.java b/hexagonal-example/src/com/baeldung/HexagonalLibrary.java new file mode 100644 index 0000000000..b730fa1244 --- /dev/null +++ b/hexagonal-example/src/com/baeldung/HexagonalLibrary.java @@ -0,0 +1,13 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class HexagonalLibrary { + + public static void main(String[] args) { + SpringApplication.run(HexagonalLibrary.class, args); + } + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java new file mode 100644 index 0000000000..1b678a4e80 --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java @@ -0,0 +1,39 @@ +package com.baeldung.hexagonalPattern.adapter; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Repository; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryRepo; + +@Repository +public class LibraryRepoImpl implements LibraryRepo { + // This class is the actual implementation of the out bound port/adapter. + + private HashMap books = new HashMap(); + + @Override + public void insertBook(Book book) { + // Mock Database call here. + books.put("mock", new Book("mock", "mock", "mock")); + } + + @Override + public Book searchBook(String name) { + // TODO Auto-generated method stub + Book b = new Book(); + // Some code for retrieval of book from db + return b; + } + + @Override + public List getAllBooks() { + // Fetch all books from db + return books.values().stream().collect(Collectors.toList()); + } + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java new file mode 100644 index 0000000000..176b8471b5 --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java @@ -0,0 +1,37 @@ +package com.baeldung.hexagonalPattern.adapter; + +import java.util.List; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.web.LibraryRestUI; + +@RestController +public class LibraryRestController implements LibraryRestUI { + + @Override + @RequestMapping("/library") + public void insertBook(Book book) { + // TODO Auto-generated method stub + + } + + @Override + @GetMapping("/searchBook") + public Book searchBook(@PathVariable String name) { + // TODO Auto-generated method stub + return null; + } + + @Override + @GetMapping("/listBooks") + public List listAllBooks() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java new file mode 100644 index 0000000000..38e761ba50 --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java @@ -0,0 +1,33 @@ +package com.baeldung.hexagonalPattern.core.domain; + +public class Book { + + private String name; + private String author_list; + private String isbn13; + + /* constructors and getter and setters */ + public Book(String string, String string2, String string3) { + // TODO Auto-generated constructor stub + } + + public Book() { + // TODO Auto-generated constructor stub + } + + /* + * public String getName() { return name; } + * + * public void setName(String name) { this.name = name; } + * + * public String getAuthor_list() { return author_list; } + * + * public void setAuthor_list(String author_list) { this.author_list = + * author_list; } + * + * public String getIsbn13() { return isbn13; } + * + * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } + */ + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java new file mode 100644 index 0000000000..1bde7c8d0e --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java @@ -0,0 +1,38 @@ +package com.baeldung.hexagonalPattern.core.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryRepo; +import com.baeldung.hexagonalPattern.ports.LibraryService; + +@Service +public class LibraryServiceImpl implements LibraryService { + + // This is the class which actually implements the methods from the ports. + // The ports are just for exposing the methods to the outside. + + @Autowired + private LibraryRepo bookRepo; + + @Override + public void insertBook(Book book) { + // TODO some implementation to insert record in the db or similar + bookRepo.insertBook(book); + } + + @Override + public Book lendBook(String name) { + // TODO Auto-generated method stub + return bookRepo.searchBook(name); + } + + @Override + public List getAllBooks() { + // TODO Auto-generated method + return null; + } + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java new file mode 100644 index 0000000000..83858403ef --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java @@ -0,0 +1,14 @@ +package com.baeldung.hexagonalPattern.ports; + +import java.util.List; +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryRepo { + // Outbound Port. + + public void insertBook(Book book); + + public Book searchBook(String name); + + public List getAllBooks(); +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java new file mode 100644 index 0000000000..7391b4795d --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java @@ -0,0 +1,15 @@ +package com.baeldung.hexagonalPattern.ports; + +import java.util.List; +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryService { +//This is the in bound port.exposes the application to the world. + + public void insertBook(Book book); + + public Book lendBook(String name); + + List getAllBooks(); + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java new file mode 100644 index 0000000000..16d7beac87 --- /dev/null +++ b/hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java @@ -0,0 +1,24 @@ +package com.baeldung.hexagonalPattern.web; + +import java.util.List; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryRestUI { + // This is the in bound Adapter + + @PostMapping + void insertBook(@RequestBody Book book); + + @GetMapping("/{name}") + public Book searchBook(@PathVariable String name); + + @GetMapping + public List listAllBooks(); + +} From f92573f298076182050d2be779ccb5c29fe02768 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Mon, 22 Mar 2021 13:17:17 +0530 Subject: [PATCH 005/160] committing code changes with a simple Junit test. corrected the project structure as well. --- hexagonal-example/pom.xml | 101 +++++++++++++----- .../src/com/baeldung/HexagonalLibrary.java | 13 --- .../adapter/LibraryRepoImpl.java | 39 ------- .../adapter/LibraryRestController.java | 37 ------- .../hexagonalPattern/core/domain/Book.java | 33 ------ .../core/impl/LibraryServiceImpl.java | 38 ------- .../ports/LibraryService.java | 15 --- .../HexagonalLibraryApplication.java | 11 ++ .../adapters/LibraryRepoImpl.java | 40 +++++++ .../adapters/LibraryRestController.java | 38 +++++++ .../hexagonalPattern/core/domain/Book.java | 33 ++++++ .../core/impl/LibraryServiceImpl.java | 33 ++++++ .../hexagonalPattern/ports/LibraryRepo.java | 7 +- .../ports/LibraryService.java | 15 +++ .../hexagonalPattern/web/LibraryRestUI.java | 14 +-- .../HexagonalLibraryApplicationTest.java | 46 ++++++++ 16 files changed, 303 insertions(+), 210 deletions(-) delete mode 100644 hexagonal-example/src/com/baeldung/HexagonalLibrary.java delete mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java delete mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java delete mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java delete mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java delete mode 100644 hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java rename hexagonal-example/src/{ => main/java}/com/baeldung/hexagonalPattern/ports/LibraryRepo.java (55%) create mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java rename hexagonal-example/src/{ => main/java}/com/baeldung/hexagonalPattern/web/LibraryRestUI.java (63%) create mode 100644 hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java diff --git a/hexagonal-example/pom.xml b/hexagonal-example/pom.xml index 47bd8e7489..eaa05332a8 100644 --- a/hexagonal-example/pom.xml +++ b/hexagonal-example/pom.xml @@ -1,47 +1,100 @@ + 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - + com.baeldung - HexagonalLibrary + hexagonalPattern 0.0.1-SNAPSHOT - HexagonalLibrary - HexagonalLibrary + + hexagonalPattern + + 1.8 + UTF-8 + 1.8 + 1.8 - org.springframework.boot - spring-boot-starter-web + org.junit.jupiter + junit-jupiter-engine + 5.1.0 + test - org.springframework.boot - spring-boot-starter-test + spring-boot-starter-parent + 2.2.1.RELEASE + pom + + + org.springframework.boot + spring-boot-starter-web + 2.2.1.RELEASE + + + org.mockito + mockito-core + 2.26.0 + + + org.mockito + mockito-core + 2.22.0 test - - - org.springframework.boot - spring-boot-maven-plugin - - com.baeldung.HexagonalLibrary - - - + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + - - \ No newline at end of file + diff --git a/hexagonal-example/src/com/baeldung/HexagonalLibrary.java b/hexagonal-example/src/com/baeldung/HexagonalLibrary.java deleted file mode 100644 index b730fa1244..0000000000 --- a/hexagonal-example/src/com/baeldung/HexagonalLibrary.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class HexagonalLibrary { - - public static void main(String[] args) { - SpringApplication.run(HexagonalLibrary.class, args); - } - -} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java deleted file mode 100644 index 1b678a4e80..0000000000 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRepoImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.hexagonalPattern.adapter; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Repository; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryRepo; - -@Repository -public class LibraryRepoImpl implements LibraryRepo { - // This class is the actual implementation of the out bound port/adapter. - - private HashMap books = new HashMap(); - - @Override - public void insertBook(Book book) { - // Mock Database call here. - books.put("mock", new Book("mock", "mock", "mock")); - } - - @Override - public Book searchBook(String name) { - // TODO Auto-generated method stub - Book b = new Book(); - // Some code for retrieval of book from db - return b; - } - - @Override - public List getAllBooks() { - // Fetch all books from db - return books.values().stream().collect(Collectors.toList()); - } - -} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java deleted file mode 100644 index 176b8471b5..0000000000 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/adapter/LibraryRestController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.hexagonalPattern.adapter; - -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.web.LibraryRestUI; - -@RestController -public class LibraryRestController implements LibraryRestUI { - - @Override - @RequestMapping("/library") - public void insertBook(Book book) { - // TODO Auto-generated method stub - - } - - @Override - @GetMapping("/searchBook") - public Book searchBook(@PathVariable String name) { - // TODO Auto-generated method stub - return null; - } - - @Override - @GetMapping("/listBooks") - public List listAllBooks() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java deleted file mode 100644 index 38e761ba50..0000000000 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/domain/Book.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.hexagonalPattern.core.domain; - -public class Book { - - private String name; - private String author_list; - private String isbn13; - - /* constructors and getter and setters */ - public Book(String string, String string2, String string3) { - // TODO Auto-generated constructor stub - } - - public Book() { - // TODO Auto-generated constructor stub - } - - /* - * public String getName() { return name; } - * - * public void setName(String name) { this.name = name; } - * - * public String getAuthor_list() { return author_list; } - * - * public void setAuthor_list(String author_list) { this.author_list = - * author_list; } - * - * public String getIsbn13() { return isbn13; } - * - * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } - */ - -} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java deleted file mode 100644 index 1bde7c8d0e..0000000000 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.hexagonalPattern.core.impl; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryRepo; -import com.baeldung.hexagonalPattern.ports.LibraryService; - -@Service -public class LibraryServiceImpl implements LibraryService { - - // This is the class which actually implements the methods from the ports. - // The ports are just for exposing the methods to the outside. - - @Autowired - private LibraryRepo bookRepo; - - @Override - public void insertBook(Book book) { - // TODO some implementation to insert record in the db or similar - bookRepo.insertBook(book); - } - - @Override - public Book lendBook(String name) { - // TODO Auto-generated method stub - return bookRepo.searchBook(name); - } - - @Override - public List getAllBooks() { - // TODO Auto-generated method - return null; - } - -} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java deleted file mode 100644 index 7391b4795d..0000000000 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.hexagonalPattern.ports; - -import java.util.List; -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryService { -//This is the in bound port.exposes the application to the world. - - public void insertBook(Book book); - - public Book lendBook(String name); - - List getAllBooks(); - -} diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java new file mode 100644 index 0000000000..62f35111db --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.hexagonalPattern; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class HexagonalLibraryApplication { + public static void main(String[] args) { + SpringApplication.run(HexagonalLibraryApplication.class, args); + } +} diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java new file mode 100644 index 0000000000..c8fe584419 --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java @@ -0,0 +1,40 @@ +package com.baeldung.hexagonalPattern.adapters; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Repository; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryRepo; + +@Repository +public class LibraryRepoImpl implements LibraryRepo { + // This class is the actual implementation of the out bound port/adapter. + + private HashMap books = new HashMap(); + + @Override + public int insertBook(Book book) { + // Mock Database call here. + books.put("mock", new Book("mock", "mock", "mock")); + return 1; + } + + @Override + public Book searchBook(String name) { + // TODO Auto-generated method stub + Book b = new Book(); + // Some code for retrieval of book from db + return b; + } + + @Override + public List getAllBooks() { + // Fetch all books from db + return books.values().stream().collect(Collectors.toList()); + } + +} diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java new file mode 100644 index 0000000000..92c4b0a8a7 --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java @@ -0,0 +1,38 @@ +package com.baeldung.hexagonalPattern.adapters; + +import java.util.List; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.web.LibraryRestUI; + +@RestController +@RequestMapping("/library") +public class LibraryRestController implements LibraryRestUI { + + @Override + @PostMapping("/insertBook") + public int insertBook(Book book) { + return 0; + } + + @Override + @GetMapping("/searchBook") + public Book searchBook(@PathVariable String name) { + // TODO Auto-generated method stub + return null; + } + + @Override + @GetMapping("/listBooks") + public List listAllBooks() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java new file mode 100644 index 0000000000..9551d0f09d --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java @@ -0,0 +1,33 @@ +package com.baeldung.hexagonalPattern.core.domain; + +public class Book { + + private String name; + private String author_list; + private String isbn13; + + /* constructors and getter and setters */ + public Book(String string, String string2, String string3) { + // TODO Auto-generated constructor stub + } + + public Book() { + // TODO Auto-generated constructor stub + } + + /* + * public String getName() { return name; } + * + * public void setName(String name) { this.name = name; } + * + * public String getAuthor_list() { return author_list; } + * + * public void setAuthor_list(String author_list) { this.author_list = + * author_list; } + * + * public String getIsbn13() { return isbn13; } + * + * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } + */ + +} diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java new file mode 100644 index 0000000000..de64e46f36 --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java @@ -0,0 +1,33 @@ +package com.baeldung.hexagonalPattern.core.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.hexagonalPattern.adapters.LibraryRepoImpl; +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.ports.LibraryService; + +@Service +public class LibraryServiceImpl implements LibraryService { + + @Autowired + private LibraryRepoImpl bookRepo = new LibraryRepoImpl(); + + @Override + public int insertBook(Book book) { + bookRepo.insertBook(book); + return 1; + } + + @Override + public Book searchBook(String name) { + return bookRepo.searchBook(name); + } + + @Override + public List getAllBooks() { + return bookRepo.getAllBooks(); + } +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java similarity index 55% rename from hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java rename to hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java index 83858403ef..99de3c2e93 100644 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/ports/LibraryRepo.java +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java @@ -4,11 +4,10 @@ import java.util.List; import com.baeldung.hexagonalPattern.core.domain.Book; public interface LibraryRepo { - // Outbound Port. - public void insertBook(Book book); + public int insertBook(Book book); - public Book searchBook(String name); + public Book searchBook(String name); - public List getAllBooks(); + public List getAllBooks(); } diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java new file mode 100644 index 0000000000..947ea402dc --- /dev/null +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java @@ -0,0 +1,15 @@ +package com.baeldung.hexagonalPattern.ports; + +import java.util.List; + +import com.baeldung.hexagonalPattern.core.domain.Book; + +public interface LibraryService { + + public int insertBook(Book book); + + public Book searchBook(String name); + + public List getAllBooks(); + +} diff --git a/hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java similarity index 63% rename from hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java rename to hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java index 16d7beac87..e212fca33d 100644 --- a/hexagonal-example/src/com/baeldung/hexagonalPattern/web/LibraryRestUI.java +++ b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java @@ -10,15 +10,15 @@ import org.springframework.web.bind.annotation.RequestBody; import com.baeldung.hexagonalPattern.core.domain.Book; public interface LibraryRestUI { - // This is the in bound Adapter + // This is the in bound Adapter - @PostMapping - void insertBook(@RequestBody Book book); + @PostMapping + public int insertBook(@RequestBody Book book); - @GetMapping("/{name}") - public Book searchBook(@PathVariable String name); + @GetMapping + public Book searchBook(@PathVariable String name); - @GetMapping - public List listAllBooks(); + @GetMapping + public List listAllBooks(); } diff --git a/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java b/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java new file mode 100644 index 0000000000..bee384eb7d --- /dev/null +++ b/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java @@ -0,0 +1,46 @@ +package com.baeldung.hexagonalPattern; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +import com.baeldung.hexagonalPattern.core.domain.Book; +import com.baeldung.hexagonalPattern.core.impl.LibraryServiceImpl; + +@RunWith(MockitoJUnitRunner.class) +public class HexagonalLibraryApplicationTest { + + @Mock + private LibraryServiceImpl libService = org.mockito.Mockito.mock(LibraryServiceImpl.class);; + Book bk = new Book(); + Book book; + + @Test + public void testInsertBook() { + Mockito.when(libService.insertBook(bk)).thenReturn(1); + int returnVal = libService.insertBook(bk); + assertEquals(1, returnVal); + } + + @Test + public void testSearchBook() { + Book returnBook = new Book(); + Mockito.lenient().when(libService.searchBook("Pride and Prejudice")).thenReturn(returnBook); + assertNotNull(returnBook); + } + + @Test + public void testGetAllBooks() { + List returnBookList = new ArrayList(); + returnBookList = libService.getAllBooks(); + assertNotNull(returnBookList); + } +} From 37c6fe33d76962fed32a2f9c206a0a8f3adec392 Mon Sep 17 00:00:00 2001 From: Stefan de Konink Date: Thu, 1 Apr 2021 21:28:29 +0200 Subject: [PATCH 006/160] Implement a functional logout for spring-boot-keycloak --- .../main/java/com/baeldung/keycloak/WebController.java | 8 ++++++++ .../src/main/resources/templates/customers.html | 1 + 2 files changed, 9 insertions(+) diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java index 3bafe1f195..bbd96c8135 100644 --- a/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java +++ b/spring-boot-modules/spring-boot-keycloak/src/main/java/com/baeldung/keycloak/WebController.java @@ -8,6 +8,8 @@ import java.security.Principal; import org.springframework.beans.factory.annotation.Autowired; +import javax.servlet.http.HttpServletRequest; + @Controller public class WebController { @@ -19,6 +21,12 @@ public class WebController { return "external"; } + @GetMapping("/logout") + public String logout(HttpServletRequest request) throws Exception { + request.logout(); + return "redirect:/"; + } + @GetMapping(path = "/customers") public String customers(Principal principal, Model model) { addCustomers(); diff --git a/spring-boot-modules/spring-boot-keycloak/src/main/resources/templates/customers.html b/spring-boot-modules/spring-boot-keycloak/src/main/resources/templates/customers.html index 5a060d31da..de2df93ef1 100644 --- a/spring-boot-modules/spring-boot-keycloak/src/main/resources/templates/customers.html +++ b/spring-boot-modules/spring-boot-keycloak/src/main/resources/templates/customers.html @@ -27,6 +27,7 @@ + Logout From e783f0c74836e733f967cbeb5ec5fceba8472120 Mon Sep 17 00:00:00 2001 From: Hendro Steven Date: Thu, 22 Apr 2021 09:43:02 +0700 Subject: [PATCH 007/160] Adding soft delete --- .../spring-data-jpa-crud/pom.xml | 5 ++ .../java/com/baeldung/softdelete/Product.java | 69 +++++++++++++++++++ .../softdelete/ProductController.java | 34 +++++++++ .../softdelete/ProductRepository.java | 7 ++ .../baeldung/softdelete/ProductService.java | 36 ++++++++++ .../src/main/resources/application.properties | 8 ++- 6 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java create mode 100644 persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductController.java create mode 100644 persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductRepository.java create mode 100644 persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java diff --git a/persistence-modules/spring-data-jpa-crud/pom.xml b/persistence-modules/spring-data-jpa-crud/pom.xml index 16ee74aa62..4afb75d737 100644 --- a/persistence-modules/spring-data-jpa-crud/pom.xml +++ b/persistence-modules/spring-data-jpa-crud/pom.xml @@ -33,6 +33,11 @@ com.h2database h2 + + mysql + mysql-connector-java + runtime + net.ttddyy datasource-proxy diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java new file mode 100644 index 0000000000..543252e474 --- /dev/null +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java @@ -0,0 +1,69 @@ +package com.baeldung.softdelete; + + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; +import org.hibernate.annotations.ParamDef; +import org.hibernate.annotations.SQLDelete; + +@Entity +@Table(name = "tbl_products") +@SQLDelete(sql = "UPDATE tbl_products SET deleted = true WHERE id=?") +// @Where(clause = "deleted=false") +@FilterDef(name = "deletedProductFilter", parameters = @ParamDef(name = "isDeleted", type = "boolean")) +@Filter(name = "deletedProductFilter", condition = "deleted = :isDeleted") +public class Product implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; + + private double price; + + private boolean deleted = Boolean.FALSE; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + +} diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductController.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductController.java new file mode 100644 index 0000000000..ebfdfbb2e7 --- /dev/null +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductController.java @@ -0,0 +1,34 @@ +package com.baeldung.softdelete; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/products") +public class ProductController { + + @Autowired + private ProductService productService; + + @PostMapping + public Product createOne(@RequestBody Product product) { + return productService.create(product); + } + + @DeleteMapping("/{id}") + public void removeOne(@PathVariable("id") Long id) { + productService.remove(id); + } + + @GetMapping + public Iterable findAll(@RequestParam(value = "isDeleted", required = false, defaultValue = "false") boolean isDeleted) { + return productService.findAll(isDeleted); + } +} diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductRepository.java new file mode 100644 index 0000000000..a305a142aa --- /dev/null +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.softdelete; + +import org.springframework.data.repository.CrudRepository; + +public interface ProductRepository extends CrudRepository{ + +} diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java new file mode 100644 index 0000000000..2bced0c4d8 --- /dev/null +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java @@ -0,0 +1,36 @@ +package com.baeldung.softdelete; + +import javax.persistence.EntityManager; + +import org.hibernate.Filter; +import org.hibernate.Session; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ProductService { + + @Autowired + private ProductRepository productRepository; + + @Autowired + private EntityManager entityManager; + + public Product create(Product product) { + return productRepository.save(product); + } + + public void remove(Long id){ + productRepository.deleteById(id); + } + + public Iterable findAll(boolean isDeleted){ + //return productRepository.findAll(); + Session session = entityManager.unwrap(Session.class); + Filter filter = session.enableFilter("deletedProductFilter"); + filter.setParameter("isDeleted", isDeleted); + Iterable products = productRepository.findAll(); + session.disableFilter("deletedProductFilter"); + return products; + } +} \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties index af0df308cd..a11e224a1b 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties +++ b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties @@ -11,4 +11,10 @@ spring.jpa.properties.hibernate.generate_statistics=true #spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create #spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql #spring.jpa.properties.javax.persistence.schema-generation.scripts.create-source=metadata -#spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file +#spring.jpa.properties.hibernate.format_sql=true + +spring.datasource.url=jdbc:mysql://localhost:3306/db_products?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=root + +spring.jpa.hibernate.ddl-auto= update \ No newline at end of file From 3c65d2e8e7b99f8ff8b97ab0f1f837a3d4546ddb Mon Sep 17 00:00:00 2001 From: "Amitabh.Tiwari" Date: Sat, 24 Apr 2021 16:16:26 +0530 Subject: [PATCH 008/160] Added changes to demonstrate max array size --- .../java/com/baeldung/array/MaxSizeArray.java | 15 ++++++++++ .../baeldung/arrays/MaxArrySizeUnitTest.java | 30 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java create mode 100644 core-java-modules/core-java-arrays-guides/src/test/java/com/baeldung/arrays/MaxArrySizeUnitTest.java diff --git a/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java b/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java new file mode 100644 index 0000000000..a83271c3df --- /dev/null +++ b/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java @@ -0,0 +1,15 @@ +package com.baeldung.array; + +public class MaxSizeArray { + + public static void main(String... strings) { + for (int i = 2; i >= 0; i--) { + try { + int[] arr = new int[Integer.MAX_VALUE - i]; + System.out.format("Max-Size", Integer.MAX_VALUE - i); + } catch (Throwable t) { + t.printStackTrace(); + } + } + } +} diff --git a/core-java-modules/core-java-arrays-guides/src/test/java/com/baeldung/arrays/MaxArrySizeUnitTest.java b/core-java-modules/core-java-arrays-guides/src/test/java/com/baeldung/arrays/MaxArrySizeUnitTest.java new file mode 100644 index 0000000000..ab79e83247 --- /dev/null +++ b/core-java-modules/core-java-arrays-guides/src/test/java/com/baeldung/arrays/MaxArrySizeUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.arrays; + +import org.junit.Assert; +import org.junit.Test; + +public class MaxArrySizeUnitTest { + + @Test + public void whenInitialArrayMoreThanMaxSize_thenThrowArray() { + boolean initalized = false; + try { + int[] arr = new int[Integer.MAX_VALUE - 1]; + initalized = true; + } catch (Throwable e) { + Assert.assertTrue(e.getMessage().contains("Requested array size exceeds VM limit")); + } + Assert.assertFalse(initalized); + } + + @Test + public void whenInitialArrayLessThanMaxSize_thenThrowArray() { + int[] arr = null; + try { + arr = new int[Integer.MAX_VALUE - 2]; + } catch (Throwable e) { + Assert.assertTrue(e.getMessage().contains("Java heap space")); + } + } + +} From 1f3cf7ccc38cbf44fc693a01a5bb67bd7d8032e7 Mon Sep 17 00:00:00 2001 From: "Amitabh.Tiwari" Date: Sun, 25 Apr 2021 08:41:07 +0530 Subject: [PATCH 009/160] Correct the print statment --- .../src/main/java/com/baeldung/array/MaxSizeArray.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java b/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java index a83271c3df..76a6a9290a 100644 --- a/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java +++ b/core-java-modules/core-java-arrays-guides/src/main/java/com/baeldung/array/MaxSizeArray.java @@ -6,7 +6,7 @@ public class MaxSizeArray { for (int i = 2; i >= 0; i--) { try { int[] arr = new int[Integer.MAX_VALUE - i]; - System.out.format("Max-Size", Integer.MAX_VALUE - i); + System.out.println("Max-Size : "+ arr.length); } catch (Throwable t) { t.printStackTrace(); } From 54277a0bfba08cc40274218ba4b9027bdd73a275 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Mon, 26 Apr 2021 09:59:09 +0530 Subject: [PATCH 010/160] changed the test namesas per Bdd convention --- .../hexagonalPattern/HexagonalLibraryApplicationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java b/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java index bee384eb7d..c73ae11d1d 100644 --- a/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java +++ b/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java @@ -24,21 +24,21 @@ public class HexagonalLibraryApplicationTest { Book book; @Test - public void testInsertBook() { + public void when_InsertBook_then_returnInteger() { Mockito.when(libService.insertBook(bk)).thenReturn(1); int returnVal = libService.insertBook(bk); assertEquals(1, returnVal); } @Test - public void testSearchBook() { + public void when_SearchBook_then_returnBookObject() { Book returnBook = new Book(); Mockito.lenient().when(libService.searchBook("Pride and Prejudice")).thenReturn(returnBook); assertNotNull(returnBook); } @Test - public void testGetAllBooks() { + public void when_getAllBooks_then_returnListofBookObjects() { List returnBookList = new ArrayList(); returnBookList = libService.getAllBooks(); assertNotNull(returnBookList); From 754a18a728202c44e4282467d8f1852e40ae63d5 Mon Sep 17 00:00:00 2001 From: Mladen Savic Date: Tue, 27 Apr 2021 12:33:32 +0200 Subject: [PATCH 011/160] return auto generated ids --- persistence-modules/java-jpa-3/pom.xml | 6 +++ .../com/baeldung/jpa/IdGeneration/User.java | 41 ++++++++++++++++ .../jpa/IdGeneration/UserService.java | 19 ++++++++ .../main/resources/META-INF/persistence.xml | 16 +++++++ .../IdGenerationIntegrationTest.java | 47 +++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java create mode 100644 persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java diff --git a/persistence-modules/java-jpa-3/pom.xml b/persistence-modules/java-jpa-3/pom.xml index f931cd90b8..1c3754c02a 100644 --- a/persistence-modules/java-jpa-3/pom.xml +++ b/persistence-modules/java-jpa-3/pom.xml @@ -68,6 +68,12 @@ ${assertj.version} test + + junit + junit + ${junit.version} + test + diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java new file mode 100644 index 0000000000..88e742adce --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java @@ -0,0 +1,41 @@ +package com.baeldung.jpa.IdGeneration; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + + @Id +// @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private String username; + private String password; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java new file mode 100644 index 0000000000..9c34ef9bb4 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java @@ -0,0 +1,19 @@ +package com.baeldung.jpa.IdGeneration; + +import javax.persistence.EntityManager; +import javax.transaction.Transactional; + +public class UserService { + + EntityManager entityManager; + + public UserService(EntityManager entityManager) { + this.entityManager = entityManager; + } + + @Transactional + public long saveUser(User user){ + entityManager.persist(user); + return user.getId(); + } +} diff --git a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml index 19ecae8491..bc41f35c01 100644 --- a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml @@ -97,4 +97,20 @@ + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.IdGeneration.User + true + + + + + + + + + + + diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java new file mode 100644 index 0000000000..941ad52344 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java @@ -0,0 +1,47 @@ +package com.baeldung.jpa.IdGeneration; + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import java.util.UUID; + +public class IdGenerationIntegrationTest { + + private static EntityManager entityManager; + private static UserService service; + + @BeforeClass + public static void setup() { + EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa-h2-id-generation"); + entityManager = factory.createEntityManager(); + service = new UserService(entityManager); + } + + @Test + public void whenNewUserIsPersisted_thenEntityHasNoId() { + User user = new User(); + user.setUsername("test"); + user.setPassword(UUID.randomUUID().toString()); + + long index = service.saveUser(user); + Assert.assertEquals(0L, index); + } + + @Test + public void whenTransactionIsControlled_thenEntityHasId() { + User user = new User(); + user.setUsername("test"); + user.setPassword(UUID.randomUUID().toString()); + + entityManager.getTransaction().begin(); + long index = service.saveUser(user); + entityManager.getTransaction().commit(); + + Assert.assertEquals(2L, index); + } + +} From 0fbcc6fe5e0b7f72e3d6afe8705ea63b859edefa Mon Sep 17 00:00:00 2001 From: Dasun Nirmitha Date: Wed, 28 Apr 2021 21:44:19 +0530 Subject: [PATCH 012/160] Create IgnoringPatternMetacharactersUnitTest.java BAEL-4881 Understanding the Pattern.quote method --- ...IgnoringPatternMetacharactersUnitTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java diff --git a/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java b/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java new file mode 100644 index 0000000000..47c5089248 --- /dev/null +++ b/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java @@ -0,0 +1,54 @@ +package com.baeldung.ignore.pattern.metacharacters; + +import static org.junit.Assert.assertEquals; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +public class IgnoringPatternMetacharactersUnitTest { + private static final String dollarValues = "$100.25, $100.50, $150.50, $100.50, $100.75"; + private static final String patternStr = "$100.50"; + + @Test + public void givenPatternStringHasMetacharacters_whenPatternMatchedWithoutEscapingMetacharacters_thenNoMatchesFound() { + Pattern pattern = Pattern.compile(patternStr); + Matcher matcher = pattern.matcher(dollarValues); + + int matches = 0; + while (matcher.find()) { + matches++; + } + + assertEquals(0, matches); + } + + @Test + public void givenPatternStringHasMetacharacters_whenPatternCompiledUsingManuallyMetaEscapedPattern_thenMatchingSuccessful() { + String metaEscapedPatternStr = "\\Q" + patternStr + "\\E"; + Pattern pattern = Pattern.compile(metaEscapedPatternStr); + Matcher matcher = pattern.matcher(dollarValues); + + int matches = 0; + while (matcher.find()) { + matches++; + } + + assertEquals(2, matches); + } + + @Test + public void givenPatternStringHasMetacharacters_whenPatternCompiledUsingLiteralPatternFromQuote_thenMatchingSuccessful() { + String literalPatternStr = Pattern.quote(patternStr); + Pattern pattern = Pattern.compile(literalPatternStr); + Matcher matcher = pattern.matcher(dollarValues); + + int matches = 0; + while (matcher.find()) { + matches++; + } + + assertEquals(2, matches); + } +} From d34fdfd40af7843eea911e1a6c8acf8f196c16a8 Mon Sep 17 00:00:00 2001 From: Jacek Polom Date: Thu, 29 Apr 2021 21:20:09 +0200 Subject: [PATCH 013/160] BAEL-4900 AttributeOverwrite explained --- .../attribute/overwrite/entity/Address.java | 26 +++++++++ .../attribute/overwrite/entity/Brand.java | 29 ++++++++++ .../attribute/overwrite/entity/Car.java | 51 +++++++++++++++++ .../attribute/overwrite/entity/Owner.java | 25 +++++++++ .../attribute/overwrite/entity/Vehicle.java | 38 +++++++++++++ .../overwrite/repository/CarRepository.java | 7 +++ .../AttributeOverwriteIntegrationTest.java | 56 +++++++++++++++++++ 7 files changed, 232 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java create mode 100644 persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java new file mode 100644 index 0000000000..b1d7c60acd --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java @@ -0,0 +1,26 @@ +package com.baeldung.attribute.overwrite.entity; + +import javax.persistence.Embeddable; + +@Embeddable +public class Address { + private String name; + private String city; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java new file mode 100644 index 0000000000..7541b52a4d --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java @@ -0,0 +1,29 @@ +package com.baeldung.attribute.overwrite.entity; + +import javax.persistence.Embeddable; +import javax.persistence.Embedded; +import java.time.LocalDate; + +@Embeddable +public class Brand { + private String name; + private LocalDate foundationDate; + @Embedded + private Address address; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LocalDate getFoundationDate() { + return foundationDate; + } + + public void setFoundationDate(LocalDate foundationDate) { + this.foundationDate = foundationDate; + } +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java new file mode 100644 index 0000000000..6213927e50 --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java @@ -0,0 +1,51 @@ +package com.baeldung.attribute.overwrite.entity; + + +import javax.persistence.*; +import java.util.Map; + +@Entity +@AttributeOverride(name = "identifier", column = @Column(name = "VIN")) +public class Car extends Vehicle { + + private String model; + private String name; + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "name", column = @Column(name = "BRAND_NAME", length = 5)), + @AttributeOverride(name = "address.name", column = @Column(name = "ADDRESS_NAME")) + }) + private Brand brand; + @ElementCollection + @AttributeOverrides({ + @AttributeOverride(name = "key.name", column = @Column(name = "OWNER_NAME")), + @AttributeOverride(name = "key.surname", column = @Column(name = "OWNER_SURNAME")), + @AttributeOverride(name = "value.name", column = @Column(name = "ADDRESS_NAME")), + }) + Map owners; + + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Brand getBrand() { + return brand; + } + + public void setBrand(Brand brand) { + this.brand = brand; + } +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java new file mode 100644 index 0000000000..134bac75ee --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java @@ -0,0 +1,25 @@ +package com.baeldung.attribute.overwrite.entity; + +import javax.persistence.Embeddable; + +@Embeddable +public class Owner { + private String name; + private String surname; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java new file mode 100644 index 0000000000..99cb4c58e4 --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java @@ -0,0 +1,38 @@ +package com.baeldung.attribute.overwrite.entity; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +@MappedSuperclass +public class Vehicle { + @Id + @GeneratedValue + private Integer id; + private String identifier; + private Integer numberOfWheels; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public Integer getNumberOfWheels() { + return numberOfWheels; + } + + public void setNumberOfWheels(Integer numberOfWheels) { + this.numberOfWheels = numberOfWheels; + } +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java new file mode 100644 index 0000000000..1152de2d7f --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.attribute.overwrite.repository; + +import com.baeldung.attribute.overwrite.entity.Car; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CarRepository extends JpaRepository { +} diff --git a/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java new file mode 100644 index 0000000000..57a880ba16 --- /dev/null +++ b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java @@ -0,0 +1,56 @@ +package com.baeldung.attribute.overwrite; + +import com.baeldung.Application; +import com.baeldung.attribute.overwrite.entity.Address; +import com.baeldung.attribute.overwrite.entity.Brand; +import com.baeldung.attribute.overwrite.entity.Car; +import com.baeldung.attribute.overwrite.repository.CarRepository; +import org.assertj.core.api.Assertions; +import org.jetbrains.annotations.NotNull; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {Application.class}) +public class AttributeOverwriteIntegrationTest { + + private static final LocalDate FORD_FOUNDATION_DATE = LocalDate.parse("1903-06-16"); + @Autowired + CarRepository carRepository; + + @Test + @Transactional + public void whenInsertingCar_thenEmbeddedAndMappedFieldsArePopulated() { + + Car fordMustang = createMustang(); + + carRepository.save(fordMustang); + Car actualCar = carRepository.getOne(fordMustang.getId()); + + Assertions.assertThat(actualCar).isEqualTo(fordMustang); + } + + @NotNull + private Car createMustang() { + Address address = new Address(); + address.setName("Ford United States"); + address.setCity("Dearborn"); + + Brand ford = new Brand(); + ford.setName("Ford"); + ford.setFoundationDate(FORD_FOUNDATION_DATE); + + Car fordMustang = new Car(); + fordMustang.setIdentifier("WP1AB29P88LA47599"); + fordMustang.setModel("Ford"); + fordMustang.setName("My car"); + fordMustang.setBrand(ford); + return fordMustang; + } +} From d160a09b014bd2204c26bcaac8752784e9c87423 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 11:18:02 +0200 Subject: [PATCH 014/160] BAEL-4876: Parallel stream examples added --- core-java-modules/core-java-streams-3/pom.xml | 1 + .../streams/parallel/ParallelStream.java | 14 ++++++ .../streams/parallel/SequentialStream.java | 14 ++++++ .../streams/parallel/ForkJoinUnitTest.java | 45 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java create mode 100644 core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index 6597c999d8..2ec2fa7c48 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -47,6 +47,7 @@ + 1.18.20 3.6.1 diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java new file mode 100644 index 0000000000..deeaf9ed59 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java @@ -0,0 +1,14 @@ +package com.baeldung.streams.parallel; + +import java.util.List; + +public class ParallelStream { + + public static void main(String[] args) { + List listOfNumbers = List.of(1, 2, 3, 4); + listOfNumbers.parallelStream().forEach(number -> + System.out.println(number + " " + Thread.currentThread().getName()) + ); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java new file mode 100644 index 0000000000..0e9c42640b --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java @@ -0,0 +1,14 @@ +package com.baeldung.streams.parallel; + +import java.util.List; + +public class SequentialStream { + + public static void main(String[] args) { + List listOfNumbers = List.of(1, 2, 3, 4); + listOfNumbers.stream().forEach(number -> + System.out.println(number + " " + Thread.currentThread().getName()) + ); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java new file mode 100644 index 0000000000..12cf5ceb16 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.streams.parallel; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; + +import static org.assertj.core.api.Assertions.assertThat; + +class ForkJoinUnitTest { + + @Test + void givenSequentialStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.stream().reduce(5, Integer::sum); + assertThat(sum).isEqualTo(15); + } + + @Test + void givenParallelStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsNotCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.parallelStream().reduce(5, Integer::sum); + assertThat(sum).isNotEqualTo(15); + } + + @Test + void givenParallelStreamOfNumbers_whenReducingSumWithIdentityZero_thenResultIsCorrect() { + List listOfNumbers = List.of(1, 2, 3, 4); + int sum = listOfNumbers.parallelStream().reduce(0, Integer::sum) + 5; + assertThat(sum).isEqualTo(15); + } + + @Test + public void givenParallelStreamOfNumbers_whenUsingCustomThreadPool_thenResultIsCorrect() + throws InterruptedException, ExecutionException { + List listOfNumbers = List.of(1, 2, 3, 4); + ForkJoinPool customThreadPool = new ForkJoinPool(4); + int sum = customThreadPool.submit( + () -> listOfNumbers.parallelStream().reduce(0, Integer::sum)).get(); + customThreadPool.shutdown(); + assertThat(sum).isEqualTo(10); + } + +} From b0ade9d58b6741362a0ce4676df7c1a2c1033922 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 11:52:32 +0200 Subject: [PATCH 015/160] BAEL-4876: Use Java 8 API --- .../com/baeldung/streams/parallel/ParallelStream.java | 3 ++- .../com/baeldung/streams/parallel/SequentialStream.java | 3 ++- .../com/baeldung/streams/parallel/ForkJoinUnitTest.java | 9 +++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java index deeaf9ed59..f236f418e8 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/ParallelStream.java @@ -1,11 +1,12 @@ package com.baeldung.streams.parallel; +import java.util.Arrays; import java.util.List; public class ParallelStream { public static void main(String[] args) { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); listOfNumbers.parallelStream().forEach(number -> System.out.println(number + " " + Thread.currentThread().getName()) ); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java index 0e9c42640b..01379130fa 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SequentialStream.java @@ -1,11 +1,12 @@ package com.baeldung.streams.parallel; +import java.util.Arrays; import java.util.List; public class SequentialStream { public static void main(String[] args) { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); listOfNumbers.stream().forEach(number -> System.out.println(number + " " + Thread.currentThread().getName()) ); diff --git a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java index 12cf5ceb16..f9aab8ed6c 100644 --- a/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java +++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/parallel/ForkJoinUnitTest.java @@ -2,6 +2,7 @@ package com.baeldung.streams.parallel; import org.junit.jupiter.api.Test; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; @@ -12,21 +13,21 @@ class ForkJoinUnitTest { @Test void givenSequentialStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.stream().reduce(5, Integer::sum); assertThat(sum).isEqualTo(15); } @Test void givenParallelStreamOfNumbers_whenReducingSumWithIdentityFive_thenResultIsNotCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.parallelStream().reduce(5, Integer::sum); assertThat(sum).isNotEqualTo(15); } @Test void givenParallelStreamOfNumbers_whenReducingSumWithIdentityZero_thenResultIsCorrect() { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); int sum = listOfNumbers.parallelStream().reduce(0, Integer::sum) + 5; assertThat(sum).isEqualTo(15); } @@ -34,7 +35,7 @@ class ForkJoinUnitTest { @Test public void givenParallelStreamOfNumbers_whenUsingCustomThreadPool_thenResultIsCorrect() throws InterruptedException, ExecutionException { - List listOfNumbers = List.of(1, 2, 3, 4); + List listOfNumbers = Arrays.asList(1, 2, 3, 4); ForkJoinPool customThreadPool = new ForkJoinPool(4); int sum = customThreadPool.submit( () -> listOfNumbers.parallelStream().reduce(0, Integer::sum)).get(); From 48aa7c542513627e7c878e10e16e7062a97e4ca4 Mon Sep 17 00:00:00 2001 From: Jacek Polom Date: Mon, 3 May 2021 12:08:57 +0200 Subject: [PATCH 016/160] BAEL-4900 Code formatting fixed --- .../baeldung/attribute/overwrite/entity/Car.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java index 6213927e50..25d96ecc33 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java @@ -1,8 +1,8 @@ package com.baeldung.attribute.overwrite.entity; +import java.util.Map; import javax.persistence.*; -import java.util.Map; @Entity @AttributeOverride(name = "identifier", column = @Column(name = "VIN")) @@ -12,19 +12,18 @@ public class Car extends Vehicle { private String name; @Embedded @AttributeOverrides({ - @AttributeOverride(name = "name", column = @Column(name = "BRAND_NAME", length = 5)), - @AttributeOverride(name = "address.name", column = @Column(name = "ADDRESS_NAME")) + @AttributeOverride(name = "name", column = @Column(name = "BRAND_NAME", length = 5)), + @AttributeOverride(name = "address.name", column = @Column(name = "ADDRESS_NAME")) }) private Brand brand; @ElementCollection @AttributeOverrides({ - @AttributeOverride(name = "key.name", column = @Column(name = "OWNER_NAME")), - @AttributeOverride(name = "key.surname", column = @Column(name = "OWNER_SURNAME")), - @AttributeOverride(name = "value.name", column = @Column(name = "ADDRESS_NAME")), + @AttributeOverride(name = "key.name", column = @Column(name = "OWNER_NAME")), + @AttributeOverride(name = "key.surname", column = @Column(name = "OWNER_SURNAME")), + @AttributeOverride(name = "value.name", column = @Column(name = "ADDRESS_NAME")), }) Map owners; - public String getModel() { return model; } From bce6207f03bebbc3b5d19c95a59d258969aaa461 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Mon, 3 May 2021 19:43:16 +0200 Subject: [PATCH 017/160] BAEL-4876: Add benchmark --- core-java-modules/core-java-streams-3/pom.xml | 11 ++++ .../parallel/DifferentSourceSplitting.java | 52 +++++++++++++++++++ .../streams/parallel/SplittingCosts.java | 26 ++++++++++ 3 files changed, 89 insertions(+) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index 2ec2fa7c48..fb525decc3 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -27,6 +27,17 @@ ${lombok.version} provided + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + test + org.assertj diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java new file mode 100644 index 0000000000..37d7d25bf6 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.IntStream; + +public class DifferentSourceSplitting { + + private static final List arrayListOfNumbers = new ArrayList<>(); + private static final List linkedListOfNumbers = new LinkedList<>(); + + static { + IntStream.rangeClosed(1, 100_000_000).forEach(i -> { + arrayListOfNumbers.add(i); + linkedListOfNumbers.add(i); + }); + } + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListSequential() { + arrayListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListParallel() { + arrayListOfNumbers.parallelStream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void linkedListSequential() { + linkedListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void linkedListParallel() { + linkedListOfNumbers.parallelStream().reduce(0, Integer::sum); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java new file mode 100644 index 0000000000..1f9f7f062b --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java @@ -0,0 +1,26 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import java.util.stream.IntStream; + +public class SplittingCosts { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListSequential() { + IntStream.rangeClosed(1, 1_000).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public static void arrayListParallel() { + IntStream.rangeClosed(1, 1_000).parallel().reduce(0, Integer::sum); + } + +} From f9ae7b18a7894ea457121c3f337f854ca5c7b37d Mon Sep 17 00:00:00 2001 From: Jacek Polom Date: Tue, 4 May 2021 20:20:34 +0200 Subject: [PATCH 018/160] BAEL-4900 Code formatting fixed with intellij formatter --- .../com/baeldung/attribute/overwrite/entity/Address.java | 1 - .../java/com/baeldung/attribute/overwrite/entity/Car.java | 8 ++++++-- .../overwrite/AttributeOverwriteIntegrationTest.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java index b1d7c60acd..300d547c88 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java @@ -15,7 +15,6 @@ public class Address { this.name = name; } - public String getCity() { return city; } diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java index 25d96ecc33..383a46a893 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java @@ -1,9 +1,13 @@ package com.baeldung.attribute.overwrite.entity; +import javax.persistence.AttributeOverride; +import javax.persistence.AttributeOverrides; +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.Embedded; +import javax.persistence.Entity; import java.util.Map; -import javax.persistence.*; - @Entity @AttributeOverride(name = "identifier", column = @Column(name = "VIN")) public class Car extends Vehicle { diff --git a/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java index 57a880ba16..24578edb5c 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java @@ -17,7 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; @RunWith(SpringRunner.class) -@SpringBootTest(classes = {Application.class}) +@SpringBootTest(classes = { Application.class }) public class AttributeOverwriteIntegrationTest { private static final LocalDate FORD_FOUNDATION_DATE = LocalDate.parse("1903-06-16"); From 09eaca991499892267d99062bd0e6a5a9f9b5c00 Mon Sep 17 00:00:00 2001 From: Hendro Steven Date: Thu, 6 May 2021 21:01:54 +0700 Subject: [PATCH 019/160] remove mysql and using h2 db --- persistence-modules/spring-data-jpa-crud/pom.xml | 5 ----- .../src/main/resources/application.properties | 10 ++++++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/persistence-modules/spring-data-jpa-crud/pom.xml b/persistence-modules/spring-data-jpa-crud/pom.xml index 4afb75d737..16ee74aa62 100644 --- a/persistence-modules/spring-data-jpa-crud/pom.xml +++ b/persistence-modules/spring-data-jpa-crud/pom.xml @@ -33,11 +33,6 @@ com.h2database h2 - - mysql - mysql-connector-java - runtime - net.ttddyy datasource-proxy diff --git a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties index a11e224a1b..a3a7bd42f7 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties +++ b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties @@ -13,8 +13,10 @@ spring.jpa.properties.hibernate.generate_statistics=true #spring.jpa.properties.javax.persistence.schema-generation.scripts.create-source=metadata #spring.jpa.properties.hibernate.format_sql=true -spring.datasource.url=jdbc:mysql://localhost:3306/db_products?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC -spring.datasource.username=root -spring.datasource.password=root +# spring.datasource.url=jdbc:mysql://localhost:3306/db_products?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC +# spring.datasource.username=root +# spring.datasource.password=root -spring.jpa.hibernate.ddl-auto= update \ No newline at end of file +# spring.jpa.hibernate.ddl-auto= update + +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file From 908930799168785d4346a33fde7d0ce73f6c7dde Mon Sep 17 00:00:00 2001 From: wlesniak Date: Thu, 6 May 2021 16:06:09 +0100 Subject: [PATCH 020/160] BAEL-4564 Sample code for article filters vs spring handler interceptor --- .../spring-boot-mvc-3/README.md | 1 + .../FilterInterceptorApp.java | 12 +++++++ .../filtersinterceptors/HelloConroller.java | 19 ++++++++++ .../filtersinterceptors/LogFilter.java | 27 ++++++++++++++ .../filtersinterceptors/LogInterceptor.java | 36 +++++++++++++++++++ .../filtersinterceptors/WebMvcConfig.java | 21 +++++++++++ .../src/main/resources/templates/hello.html | 10 ++++++ 7 files changed, 126 insertions(+) create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html diff --git a/spring-boot-modules/spring-boot-mvc-3/README.md b/spring-boot-modules/spring-boot-mvc-3/README.md index bc3eb9e496..2c18acd70e 100644 --- a/spring-boot-modules/spring-boot-mvc-3/README.md +++ b/spring-boot-modules/spring-boot-mvc-3/README.md @@ -9,4 +9,5 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux) - [Differences in @Valid and @Validated Annotations in Spring](https://www.baeldung.com/spring-valid-vs-validated) - [CharacterEncodingFilter In SpringBoot](https://www.baeldung.com/spring-boot-characterencodingfilter) + [Difference Between Interceptors and Filters in Spring MVC](https://www.baeldung.com/difference-between-interceptors-and-filters-in-spring-mvc/) - More articles: [[prev -->]](/spring-boot-modules/spring-boot-mvc-2) diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java new file mode 100644 index 0000000000..e9ff9e8785 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java @@ -0,0 +1,12 @@ +package com.baeldung.filtersinterceptors; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication(scanBasePackages = "com.baeldung.filtersinterceptors") +public class FilterInterceptorApp { + public static void main(String[] args) { + SpringApplication.run(FilterInterceptorApp.class, args); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java new file mode 100644 index 0000000000..bb3fdfe179 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java @@ -0,0 +1,19 @@ +package com.baeldung.filtersinterceptors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class HelloConroller { + + private Logger logger = LoggerFactory.getLogger(HelloConroller.class); + + @GetMapping("/hello") + public String hello() { + logger.info("Hello from the controller"); + return "hello"; + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java new file mode 100644 index 0000000000..59774d4771 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java @@ -0,0 +1,27 @@ +package com.baeldung.filtersinterceptors; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class LogFilter implements Filter { + + private Logger logger = LoggerFactory.getLogger(LogFilter.class); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + logger.info("Hello from: "+request.getLocalAddr()); + chain.doFilter(request, response); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java new file mode 100644 index 0000000000..89e82dd004 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java @@ -0,0 +1,36 @@ +package com.baeldung.filtersinterceptors; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +@Component +public class LogInterceptor implements HandlerInterceptor{ + + private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + logger.info("preHandle"); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + logger.info("postHandle"); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + logger.info("afterCompletion"); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java new file mode 100644 index 0000000000..460651ebfb --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java @@ -0,0 +1,21 @@ +package com.baeldung.filtersinterceptors; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + private final LogInterceptor logInterceptor; + + public WebMvcConfig(LogInterceptor logInterceptor) { + this.logInterceptor = new LogInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(logInterceptor).addPathPatterns("/**"); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html b/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html new file mode 100644 index 0000000000..9a9b0e707b --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html @@ -0,0 +1,10 @@ + + + +Spring Filters vs Interceptors + + + +

Hello

+ + \ No newline at end of file From 8e5ebe813c48653cb4af2cb6d68e17aa6675738f Mon Sep 17 00:00:00 2001 From: wlesniak Date: Thu, 6 May 2021 16:18:12 +0100 Subject: [PATCH 021/160] BAEL-4564 fixed code formatting --- .../FilterInterceptorApp.java | 1 - .../filtersinterceptors/HelloConroller.java | 18 ++++---- .../filtersinterceptors/LogFilter.java | 15 ++++--- .../filtersinterceptors/LogInterceptor.java | 42 +++++++++---------- .../filtersinterceptors/WebMvcConfig.java | 18 +++----- 5 files changed, 41 insertions(+), 53 deletions(-) diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java index e9ff9e8785..b1e6badd43 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java @@ -2,7 +2,6 @@ package com.baeldung.filtersinterceptors; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication(scanBasePackages = "com.baeldung.filtersinterceptors") public class FilterInterceptorApp { diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java index bb3fdfe179..db2da63d43 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java @@ -7,13 +7,13 @@ import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloConroller { - - private Logger logger = LoggerFactory.getLogger(HelloConroller.class); - - @GetMapping("/hello") - public String hello() { - logger.info("Hello from the controller"); - return "hello"; - } - + + private Logger logger = LoggerFactory.getLogger(HelloConroller.class); + + @GetMapping("/hello") + public String hello() { + logger.info("Hello from the controller"); + return "hello"; + } + } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java index 59774d4771..dc78cfbbb9 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java @@ -15,13 +15,12 @@ import org.springframework.stereotype.Component; @Component public class LogFilter implements Filter { - private Logger logger = LoggerFactory.getLogger(LogFilter.class); - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - logger.info("Hello from: "+request.getLocalAddr()); - chain.doFilter(request, response); - } + private Logger logger = LoggerFactory.getLogger(LogFilter.class); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + logger.info("Hello from: " + request.getLocalAddr()); + chain.doFilter(request, response); + } } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java index 89e82dd004..b43b69415a 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java @@ -9,28 +9,24 @@ import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -@Component -public class LogInterceptor implements HandlerInterceptor{ +public class LogInterceptor implements HandlerInterceptor { + + private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + logger.info("preHandle"); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + logger.info("postHandle"); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + logger.info("afterCompletion"); + } - private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { - logger.info("preHandle"); - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - logger.info("postHandle"); - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) - throws Exception { - logger.info("afterCompletion"); - } - } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java index 460651ebfb..9f4c1c2166 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java @@ -5,17 +5,11 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration -public class WebMvcConfig implements WebMvcConfigurer { +public class WebMvcConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LogInterceptor()); + } - private final LogInterceptor logInterceptor; - - public WebMvcConfig(LogInterceptor logInterceptor) { - this.logInterceptor = new LogInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(logInterceptor).addPathPatterns("/**"); - } - } From 656d3a9ad79cd8436d98a17ed9f597e3e2d77c7c Mon Sep 17 00:00:00 2001 From: root Date: Thu, 6 May 2021 18:38:50 +0000 Subject: [PATCH 022/160] BAEL-4878 | How to split a string, but also keep the delimiters? --- .../SplitAndKeepDelimitersUnitTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java diff --git a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java new file mode 100644 index 0000000000..7a9e0cd710 --- /dev/null +++ b/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.splitkeepdelimiters; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.regex.Pattern; + +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.Test; + +import com.google.common.base.Splitter; + +public class SplitAndKeepDelimitersUnitTest { + + private final String positivelookAheadRegex = "((?=@))"; + private final String positivelookBehindRegex = "((?<=@))"; + private final String positivelookAroundRegex = "((?=@)|(?<=@))"; + private final String positiveLookAroundMultiDelimiterRegex = "((?<=;|:|,|#|@|~)|(?=;|:|,|#|@|~))"; + + private String text = "Hello@World@This@Is@A@Java@Program"; + private String textMixed = "@Hello;World@This:Is,A#Java~Program"; + private String textMixed2 = "pg-no.10@hello;world@this:is,a#10words|Java~Program"; + + @Test + public void givenString_splitAndKeepDelimiters_using_javaLangString() { + + assertThat(text.split(positivelookAheadRegex)).containsExactly("Hello", "@World", "@This", "@Is", "@A", "@Java", "@Program"); + + assertThat(text.split(positivelookBehindRegex)).containsExactly("Hello@", "World@", "This@", "Is@", "A@", "Java@", "Program"); + + assertThat(text.split(positivelookAroundRegex)).containsExactly("Hello", "@", "World", "@", "This", "@", "Is", "@", "A", "@", "Java", "@", "Program"); + + assertThat(textMixed.split(positiveLookAroundMultiDelimiterRegex)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + + } + + @Test + public void givenString_splitAndKeepDelimiters_using_ApacheCommonsLang3StringUtils() { + + assertThat(StringUtils.splitByCharacterType(textMixed2)).containsExactly("pg", "-", "no", ".", "10", "@", "hello", ";", "world", "@", "this", ":", "is", ",", "a", "#", "10", "words", "|", "J", "ava", "~", "P", "rogram"); + + } + + @Test + public void givenString_splitAndKeepDelimiters_using_GuavaSplitter() { + + assertThat(Splitter.onPattern(positiveLookAroundMultiDelimiterRegex) + .splitToList(textMixed)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + + assertThat(Splitter.on(Pattern.compile(positiveLookAroundMultiDelimiterRegex)) + .splitToList(textMixed)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + + } +} From 4bc42f14a94ea7a851d6a8be688e86f18bf1af40 Mon Sep 17 00:00:00 2001 From: Sarath Date: Sat, 8 May 2021 02:29:00 +0530 Subject: [PATCH 023/160] [BAEL-4279] Finding All Classes in a Java Package --- .../core-java-reflection-2/pom.xml | 10 ++++ .../AccessingAllClassesInPackage.java | 54 +++++++++++++++++++ .../access/packages/search/ClassExample.java | 6 +++ .../packages/search/InterfaceExample.java | 4 ++ .../access/packages/search/Searchable.java | 5 ++ .../access/packages/search/package-info.java | 2 + .../AccessingAllClassesInPackageUnitTest.java | 39 ++++++++++++++ 7 files changed, 120 insertions(+) create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/ClassExample.java create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/InterfaceExample.java create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/Searchable.java create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/package-info.java create mode 100644 core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackageUnitTest.java diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml index 02a806f87c..e6bfe259db 100644 --- a/core-java-modules/core-java-reflection-2/pom.xml +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -21,6 +21,16 @@ ${spring.version} test
+ + org.reflections + reflections + 0.9.12 + + + com.google.guava + guava + 30.1.1-jre + diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java new file mode 100644 index 0000000000..7da8e224ee --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java @@ -0,0 +1,54 @@ +package com.baeldung.reflection.access.packages; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Set; +import java.util.stream.Collectors; + +import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; + +import com.google.common.reflect.ClassPath; + +@SuppressWarnings("rawtypes") +public class AccessingAllClassesInPackage { + + public Set findAllClassesUsingClassLoader(String packageName) { + InputStream stream = ClassLoader.getSystemClassLoader() + .getResourceAsStream(packageName.replaceAll("[.]", "/")); + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + return reader.lines() + .filter(line -> line.endsWith(".class")) + .map(line -> getClass(line, packageName)) + .collect(Collectors.toSet()); + } + + private Class getClass(String className, String packageName) { + try { + return Class.forName(packageName + "." + className.substring(0, className.lastIndexOf('.'))); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + public Set findAllClassesUsingReflectionsLibrary(String packageName) { + Reflections reflections = new Reflections(packageName, new SubTypesScanner(false)); + return reflections.getSubTypesOf(Object.class) + .stream() + .collect(Collectors.toSet()); + } + + public Set findAllClassesUsingGoogleGuice(String packageName) throws IOException { + return ClassPath.from(ClassLoader.getSystemClassLoader()) + .getAllClasses() + .stream() + .filter(clazz -> clazz.getPackageName() + .equalsIgnoreCase(packageName)) + .map(clazz -> clazz.load()) + .collect(Collectors.toSet()); + } + +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/ClassExample.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/ClassExample.java new file mode 100644 index 0000000000..d1ff027770 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/ClassExample.java @@ -0,0 +1,6 @@ +package com.baeldung.reflection.access.packages.search; + +public class ClassExample { + class NestedClassExample { + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/InterfaceExample.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/InterfaceExample.java new file mode 100644 index 0000000000..340c552da8 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/InterfaceExample.java @@ -0,0 +1,4 @@ +package com.baeldung.reflection.access.packages.search; + +public interface InterfaceExample { +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/Searchable.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/Searchable.java new file mode 100644 index 0000000000..6f4180a136 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/Searchable.java @@ -0,0 +1,5 @@ +package com.baeldung.reflection.access.packages.search; + +public @interface Searchable { + +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/package-info.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/package-info.java new file mode 100644 index 0000000000..f920000b92 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/search/package-info.java @@ -0,0 +1,2 @@ +@Searchable +package com.baeldung.reflection.access.packages.search; \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackageUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackageUnitTest.java new file mode 100644 index 0000000000..5bee2c0f3e --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackageUnitTest.java @@ -0,0 +1,39 @@ +package com.baeldung.reflection.access.packages; + +import java.io.IOException; +import java.util.Set; + +import org.junit.Rule; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.rules.ExpectedException; + +@SuppressWarnings("rawtypes") +public class AccessingAllClassesInPackageUnitTest { + @Rule + public final ExpectedException exception = ExpectedException.none(); + + private static final String PACKAGE_NAME = "com.baeldung.reflection.access.packages.search"; + + @Test + public void when_findAllClassesUsingClassLoader_thenSuccess() { + AccessingAllClassesInPackage instance = new AccessingAllClassesInPackage(); + Set classes = instance.findAllClassesUsingClassLoader(PACKAGE_NAME); + Assertions.assertEquals(5, classes.size()); + } + + @Test + public void when_findAllClassesUsingReflectionsLibrary_thenSuccess() { + AccessingAllClassesInPackage instance = new AccessingAllClassesInPackage(); + Set classes = instance.findAllClassesUsingReflectionsLibrary(PACKAGE_NAME); + Assertions.assertEquals(5, classes.size()); + } + + @Test + public void when_findAllClassesUsingGoogleGuice_thenSuccess() throws IOException { + AccessingAllClassesInPackage instance = new AccessingAllClassesInPackage(); + Set classes = instance.findAllClassesUsingGoogleGuice(PACKAGE_NAME); + Assertions.assertEquals(5, classes.size()); + } + +} From 26992a22c2dc3e0db94350eaf9e0bcdaf09afa78 Mon Sep 17 00:00:00 2001 From: wlesniak Date: Sat, 8 May 2021 21:55:18 +0100 Subject: [PATCH 024/160] BAEL-4564 revertt readme file as it will be auto updated --- spring-boot-modules/spring-boot-mvc-3/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-mvc-3/README.md b/spring-boot-modules/spring-boot-mvc-3/README.md index 2c18acd70e..bc3eb9e496 100644 --- a/spring-boot-modules/spring-boot-mvc-3/README.md +++ b/spring-boot-modules/spring-boot-mvc-3/README.md @@ -9,5 +9,4 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux) - [Differences in @Valid and @Validated Annotations in Spring](https://www.baeldung.com/spring-valid-vs-validated) - [CharacterEncodingFilter In SpringBoot](https://www.baeldung.com/spring-boot-characterencodingfilter) - [Difference Between Interceptors and Filters in Spring MVC](https://www.baeldung.com/difference-between-interceptors-and-filters-in-spring-mvc/) - More articles: [[prev -->]](/spring-boot-modules/spring-boot-mvc-2) From 86c36061c98ec35d012f35c8a1612b61d96c1fd7 Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Sun, 9 May 2021 11:41:35 +0200 Subject: [PATCH 025/160] BAEL-4876: Add more benchmarks --- core-java-modules/core-java-streams-3/pom.xml | 22 +++++++- .../streams/parallel/BenchmarkRunner.java | 9 ++++ .../parallel/DifferentSourceSplitting.java | 20 +++---- .../streams/parallel/MemoryLocalityCosts.java | 52 +++++++++++++++++++ .../streams/parallel/MergingCosts.java | 52 +++++++++++++++++++ .../streams/parallel/SplittingCosts.java | 21 ++++---- 6 files changed, 155 insertions(+), 21 deletions(-) create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java create mode 100644 core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index fb525decc3..068d6df74f 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -30,12 +30,12 @@ org.openjdk.jmh jmh-core - ${jmh-core.version} + ${jmh.version} org.openjdk.jmh jmh-generator-annprocess - ${jmh-generator.version} + ${jmh.version} test @@ -55,12 +55,30 @@ true + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + 1.18.20 3.6.1 + 1.29 diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java new file mode 100644 index 0000000000..461d728ad0 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/BenchmarkRunner.java @@ -0,0 +1,9 @@ +package com.baeldung.streams.parallel; + +public class BenchmarkRunner { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java index 37d7d25bf6..3e133c21b1 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -3,10 +3,12 @@ package com.baeldung.streams.parallel; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class DifferentSourceSplitting { @@ -15,37 +17,37 @@ public class DifferentSourceSplitting { private static final List linkedListOfNumbers = new LinkedList<>(); static { - IntStream.rangeClosed(1, 100_000_000).forEach(i -> { + IntStream.rangeClosed(1, 100_000).forEach(i -> { arrayListOfNumbers.add(i); linkedListOfNumbers.add(i); }); } - public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); - } - @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListSequential() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceArrayListSequential() { arrayListOfNumbers.stream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListParallel() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceArrayListParallel() { arrayListOfNumbers.parallelStream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void linkedListSequential() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceLinkedListSequential() { linkedListOfNumbers.stream().reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void linkedListParallel() { + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void differentSourceLinkedListParallel() { linkedListOfNumbers.parallelStream().reduce(0, Integer::sum); } diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java new file mode 100644 index 0000000000..9bb6fcaa81 --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +public class MemoryLocalityCosts { + + private static final int[] intArray = new int[100_000]; + private static final Integer[] integerArray = new Integer[100_000]; + + static { + IntStream.rangeClosed(1, 100_000).forEach(i -> { + intArray[i-1] = i; + integerArray[i-1] = i; + }); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntArraySequential() { + Arrays.stream(intArray).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntArrayParallel() { + Arrays.stream(intArray).parallel().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntegerArraySequential() { + Arrays.stream(integerArray).reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void localityIntegerArrayParallel() { + Arrays.stream(integerArray).parallel().reduce(0, Integer::sum); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java new file mode 100644 index 0000000000..7266f6954f --- /dev/null +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java @@ -0,0 +1,52 @@ +package com.baeldung.streams.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class MergingCosts { + + private static final List arrayListOfNumbers = new ArrayList<>(); + + static { + IntStream.rangeClosed(1, 100_000).forEach(i -> { + arrayListOfNumbers.add(i); + }); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsSumSequential() { + arrayListOfNumbers.stream().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsSumParallel() { + arrayListOfNumbers.stream().parallel().reduce(0, Integer::sum); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsGroupingSequential() { + arrayListOfNumbers.stream().collect(Collectors.groupingBy(i -> i % 2 == 0)); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void mergingCostsGroupingParallel() { + arrayListOfNumbers.stream().parallel().collect(Collectors.groupingBy(i -> i % 2 == 0)); + } + +} diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java index 1f9f7f062b..d1e878df1f 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/SplittingCosts.java @@ -3,24 +3,25 @@ package com.baeldung.streams.parallel; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class SplittingCosts { - public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void sourceSplittingIntStreamSequential() { + IntStream.rangeClosed(1, 100).reduce(0, Integer::sum); } @Benchmark @BenchmarkMode(Mode.AverageTime) - public static void arrayListSequential() { - IntStream.rangeClosed(1, 1_000).reduce(0, Integer::sum); - } - - @Benchmark - @BenchmarkMode(Mode.AverageTime) - public static void arrayListParallel() { - IntStream.rangeClosed(1, 1_000).parallel().reduce(0, Integer::sum); + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public static void sourceSplittingIntStreamParallel() { + IntStream.rangeClosed(1, 100).parallel().reduce(0, Integer::sum); } } From a6a9db70658c278c13da86229fd39eb1bcc7937d Mon Sep 17 00:00:00 2001 From: rvsathe Date: Sun, 9 May 2021 21:21:26 +0530 Subject: [PATCH 026/160] Committing changes for BAEL-3962 --- java-download-email/pom.xml | 82 +++++++++++++ .../DownloadEmailAttachments.java | 116 ++++++++++++++++++ .../DownloadEmailAttachmentsTest.java | 25 ++++ 3 files changed, 223 insertions(+) create mode 100644 java-download-email/pom.xml create mode 100644 java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java create mode 100644 java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java diff --git a/java-download-email/pom.xml b/java-download-email/pom.xml new file mode 100644 index 0000000000..7885fd9a48 --- /dev/null +++ b/java-download-email/pom.xml @@ -0,0 +1,82 @@ + + + + 4.0.0 + + DemoEmailAttachment + EmailAttachments + 0.0.1-SNAPSHOT + + EmailAttachments + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + com.sun.mail + javax.mail + 1.6.2 + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java new file mode 100644 index 0000000000..c320b69b75 --- /dev/null +++ b/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java @@ -0,0 +1,116 @@ +package com.baeldung.downloadAttachments; + +import java.io.File; +import java.io.IOException; +import java.util.Properties; +import javax.mail.Address; +import javax.mail.Folder; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Multipart; +import javax.mail.NoSuchProviderException; +import javax.mail.Part; +import javax.mail.Session; +import javax.mail.Store; +import javax.mail.internet.MimeBodyPart; + +public class DownloadEmailAttachments { + private String downloadDirectory; + + public void setSaveDirectory(String dir) { + this.downloadDirectory = dir; + } + + public void downloadEmailAttachments(String host, String port, String userName, String password) throws NoSuchProviderException, MessagingException, IOException { + Properties properties = setMailServerProperties(host, port); + Store store = setSessionStoreProperties(userName, password, properties); + Folder inbox = store.getFolder("INBOX"); + inbox.open(Folder.READ_ONLY); + Message[] arrayMessages = inbox.getMessages(); + for (int i = 0; i < arrayMessages.length; i++) { + Message message = arrayMessages[i]; + Address[] fromAddress = message.getFrom(); + String from = fromAddress[0].toString(); + String subject = message.getSubject(); + String sentDate = message.getSentDate() + .toString(); + String contentType = message.getContentType(); + String messageContent = ""; + String attachments = ""; + if (contentType.contains("multipart")) { + Multipart multiPart = (Multipart) message.getContent(); + int numberOfParts = multiPart.getCount(); + for (int partCount = 0; partCount < numberOfParts; partCount++) { + MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount); + if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) { + String file = part.getFileName(); + attachments += file + ", "; + part.saveFile(downloadDirectory + File.separator + file); + } else { + messageContent = part.getContent() + .toString(); + } + } + if (attachments.length() > 1) { + attachments = attachments.substring(0, attachments.length() - 2); + } + } else if (contentType.contains("text/plain") || contentType.contains("text/html")) { + Object content = message.getContent(); + if (content != null) { + messageContent = content.toString(); + } + } + System.out.println("Message #" + (i + 1) + ":"); + System.out.println(" From: " + from); + System.out.println(" Subject: " + subject); + System.out.println(" Sent Date: " + sentDate); + System.out.println(" Message: " + messageContent); + System.out.println(" Attachments: " + attachments); + } + inbox.close(false); + store.close(); + } + + public Store setSessionStoreProperties(String userName, String password, Properties properties) throws NoSuchProviderException, MessagingException { + Session session = Session.getDefaultInstance(properties); + + Store store = session.getStore("pop3"); + store.connect(userName, password); + return store; + } + + public Properties setMailServerProperties(String host, String port) { + Properties properties = new Properties(); + + properties.put("mail.pop3.host", host); + properties.put("mail.pop3.port", port); + + properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + properties.setProperty("mail.pop3.socketFactory.fallback", "false"); + properties.setProperty("mail.pop3.socketFactory.port", String.valueOf(port)); + return properties; + } + + public static void main(String[] args) { + String host = "pop.gmail.com"; + String port = "995"; + String userName = "your_email"; + String password = "your_password"; + + String saveDirectory = "valid_folder_path"; + + DownloadEmailAttachments receiver = new DownloadEmailAttachments(); + receiver.setSaveDirectory(saveDirectory); + try { + receiver.downloadEmailAttachments(host, port, userName, password); + } catch (NoSuchProviderException ex) { + System.out.println("No provider for pop3."); + ex.printStackTrace(); + } catch (MessagingException ex) { + System.out.println("Could not connect to the message store"); + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java b/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java new file mode 100644 index 0000000000..b23ec87f05 --- /dev/null +++ b/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java @@ -0,0 +1,25 @@ +package com.baeldung.downloadAttachments; + +import static org.junit.Assert.fail; +import org.junit.Test; + +public class DownloadEmailAttachmentsTest { + @Test + public void when_Run_then_downloadAttachments() { + + String host = "pop.gmail.com"; + String port = "995"; + String userName = "your_email"; + String password = "your_password"; + + String saveDirectory = "valid_folder_path"; + + DownloadEmailAttachments receiver = new DownloadEmailAttachments(); + receiver.setSaveDirectory(saveDirectory); + try { + receiver.downloadEmailAttachments(host, port, userName, password); + } catch (Exception ex) { + fail("Exception: " + ex); + } + } +} From 2c5bd5e207e4a3411edac3a792db17ab1e6154cd Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Sun, 9 May 2021 20:29:29 +0200 Subject: [PATCH 027/160] BAEL-4876: Add more data --- .../baeldung/streams/parallel/DifferentSourceSplitting.java | 2 +- .../com/baeldung/streams/parallel/MemoryLocalityCosts.java | 6 +++--- .../java/com/baeldung/streams/parallel/MergingCosts.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java index 3e133c21b1..9ad569df30 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/DifferentSourceSplitting.java @@ -17,7 +17,7 @@ public class DifferentSourceSplitting { private static final List linkedListOfNumbers = new LinkedList<>(); static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { arrayListOfNumbers.add(i); linkedListOfNumbers.add(i); }); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java index 9bb6fcaa81..bc5cbf491b 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MemoryLocalityCosts.java @@ -11,11 +11,11 @@ import java.util.stream.IntStream; public class MemoryLocalityCosts { - private static final int[] intArray = new int[100_000]; - private static final Integer[] integerArray = new Integer[100_000]; + private static final int[] intArray = new int[1_000_000]; + private static final Integer[] integerArray = new Integer[1_000_000]; static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { intArray[i-1] = i; integerArray[i-1] = i; }); diff --git a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java index 7266f6954f..a9919dbe72 100644 --- a/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java +++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/parallel/MergingCosts.java @@ -16,7 +16,7 @@ public class MergingCosts { private static final List arrayListOfNumbers = new ArrayList<>(); static { - IntStream.rangeClosed(1, 100_000).forEach(i -> { + IntStream.rangeClosed(1, 1_000_000).forEach(i -> { arrayListOfNumbers.add(i); }); } @@ -39,14 +39,14 @@ public class MergingCosts { @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public static void mergingCostsGroupingSequential() { - arrayListOfNumbers.stream().collect(Collectors.groupingBy(i -> i % 2 == 0)); + arrayListOfNumbers.stream().collect(Collectors.toSet()); } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public static void mergingCostsGroupingParallel() { - arrayListOfNumbers.stream().parallel().collect(Collectors.groupingBy(i -> i % 2 == 0)); + arrayListOfNumbers.stream().parallel().collect(Collectors.toSet()); } } From 10b8125b094d536c5d4c7bcbd38ffbd51735bd03 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 9 May 2021 20:25:34 +0000 Subject: [PATCH 028/160] BAEL-4878 | How to split a string, but also keep the delimiters? | moved src --- .../SplitAndKeepDelimitersUnitTest.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) rename core-java-modules/{core-java-string-operations => core-java-string-operations-3}/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java (63%) diff --git a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java similarity index 63% rename from core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java rename to core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java index 7a9e0cd710..ede8be4c05 100644 --- a/core-java-modules/core-java-string-operations/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java +++ b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/splitkeepdelimiters/SplitAndKeepDelimitersUnitTest.java @@ -14,11 +14,11 @@ public class SplitAndKeepDelimitersUnitTest { private final String positivelookAheadRegex = "((?=@))"; private final String positivelookBehindRegex = "((?<=@))"; private final String positivelookAroundRegex = "((?=@)|(?<=@))"; - private final String positiveLookAroundMultiDelimiterRegex = "((?<=;|:|,|#|@|~)|(?=;|:|,|#|@|~))"; + private final String positiveLookAroundMultiDelimiterRegex = "((?=:|#|@)|(?<=:|#|@))"; private String text = "Hello@World@This@Is@A@Java@Program"; - private String textMixed = "@Hello;World@This:Is,A#Java~Program"; - private String textMixed2 = "pg-no.10@hello;world@this:is,a#10words|Java~Program"; + private String textMixed = "@HelloWorld@This:Is@A#Java#Program"; + private String textMixed2 = "pg@no;10@hello;world@this;is@a#10words;Java#Program"; @Test public void givenString_splitAndKeepDelimiters_using_javaLangString() { @@ -29,25 +29,31 @@ public class SplitAndKeepDelimitersUnitTest { assertThat(text.split(positivelookAroundRegex)).containsExactly("Hello", "@", "World", "@", "This", "@", "Is", "@", "A", "@", "Java", "@", "Program"); - assertThat(textMixed.split(positiveLookAroundMultiDelimiterRegex)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + assertThat(textMixed.split(positiveLookAroundMultiDelimiterRegex)).containsExactly("@", "HelloWorld", "@", "This", ":", "Is", "@", "A", "#", "Java", "#", "Program"); } @Test public void givenString_splitAndKeepDelimiters_using_ApacheCommonsLang3StringUtils() { - assertThat(StringUtils.splitByCharacterType(textMixed2)).containsExactly("pg", "-", "no", ".", "10", "@", "hello", ";", "world", "@", "this", ":", "is", ",", "a", "#", "10", "words", "|", "J", "ava", "~", "P", "rogram"); + assertThat(StringUtils.splitByCharacterType(textMixed2)).containsExactly("pg", "@", "no", ";", "10", "@", "hello", ";", "world", "@", "this", ";", "is", "@", "a", "#", "10", "words", ";", "J", "ava", "#", "P", "rogram"); } @Test public void givenString_splitAndKeepDelimiters_using_GuavaSplitter() { + assertThat(Splitter.onPattern(positivelookAroundRegex) + .splitToList(text)).containsExactly("Hello", "@", "World", "@", "This", "@", "Is", "@", "A", "@", "Java", "@", "Program"); + + assertThat(Splitter.on(Pattern.compile(positivelookAroundRegex)) + .splitToList(text)).containsExactly("Hello", "@", "World", "@", "This", "@", "Is", "@", "A", "@", "Java", "@", "Program"); + assertThat(Splitter.onPattern(positiveLookAroundMultiDelimiterRegex) - .splitToList(textMixed)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + .splitToList(textMixed)).containsExactly("@", "HelloWorld", "@", "This", ":", "Is", "@", "A", "#", "Java", "#", "Program"); assertThat(Splitter.on(Pattern.compile(positiveLookAroundMultiDelimiterRegex)) - .splitToList(textMixed)).containsExactly("@", "Hello", ";", "World", "@", "This", ":", "Is", ",", "A", "#", "Java", "~", "Program"); + .splitToList(textMixed)).containsExactly("@", "HelloWorld", "@", "This", ":", "Is", "@", "A", "#", "Java", "#", "Program"); } } From 76e45f3b084b787798d502b32f982fe26a4a8495 Mon Sep 17 00:00:00 2001 From: Dasun Nirmitha Date: Mon, 10 May 2021 14:54:53 +0530 Subject: [PATCH 029/160] Update IgnoringPatternMetacharactersUnitTest.java Implemented improvements suggested by Editor. --- .../IgnoringPatternMetacharactersUnitTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java b/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java index 47c5089248..921876c0d5 100644 --- a/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java +++ b/core-java-modules/core-java-regex/src/test/java/com/baeldung/ignore/pattern/metacharacters/IgnoringPatternMetacharactersUnitTest.java @@ -8,13 +8,13 @@ import java.util.regex.Pattern; import org.junit.Test; public class IgnoringPatternMetacharactersUnitTest { - private static final String dollarValues = "$100.25, $100.50, $150.50, $100.50, $100.75"; + private static final String dollarAmounts = "$100.25, $100.50, $150.50, $100.50, $100.75"; private static final String patternStr = "$100.50"; @Test public void givenPatternStringHasMetacharacters_whenPatternMatchedWithoutEscapingMetacharacters_thenNoMatchesFound() { Pattern pattern = Pattern.compile(patternStr); - Matcher matcher = pattern.matcher(dollarValues); + Matcher matcher = pattern.matcher(dollarAmounts); int matches = 0; while (matcher.find()) { @@ -28,7 +28,7 @@ public class IgnoringPatternMetacharactersUnitTest { public void givenPatternStringHasMetacharacters_whenPatternCompiledUsingManuallyMetaEscapedPattern_thenMatchingSuccessful() { String metaEscapedPatternStr = "\\Q" + patternStr + "\\E"; Pattern pattern = Pattern.compile(metaEscapedPatternStr); - Matcher matcher = pattern.matcher(dollarValues); + Matcher matcher = pattern.matcher(dollarAmounts); int matches = 0; while (matcher.find()) { @@ -42,7 +42,7 @@ public class IgnoringPatternMetacharactersUnitTest { public void givenPatternStringHasMetacharacters_whenPatternCompiledUsingLiteralPatternFromQuote_thenMatchingSuccessful() { String literalPatternStr = Pattern.quote(patternStr); Pattern pattern = Pattern.compile(literalPatternStr); - Matcher matcher = pattern.matcher(dollarValues); + Matcher matcher = pattern.matcher(dollarAmounts); int matches = 0; while (matcher.find()) { From 9f67625dc95d7e90749f042f91b35e843d7f8114 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:39:40 +0530 Subject: [PATCH 030/160] do not need --- hexagonal-example/pom.xml | 100 -------------------------------------- 1 file changed, 100 deletions(-) delete mode 100644 hexagonal-example/pom.xml diff --git a/hexagonal-example/pom.xml b/hexagonal-example/pom.xml deleted file mode 100644 index eaa05332a8..0000000000 --- a/hexagonal-example/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - 4.0.0 - - com.baeldung - hexagonalPattern - 0.0.1-SNAPSHOT - - hexagonalPattern - - - - - 1.8 - UTF-8 - 1.8 - 1.8 - - - - - org.junit.jupiter - junit-jupiter-engine - 5.1.0 - test - - - org.springframework.boot - spring-boot-starter-parent - 2.2.1.RELEASE - pom - - - org.springframework.boot - spring-boot-starter-web - 2.2.1.RELEASE - - - org.mockito - mockito-core - 2.26.0 - - - org.mockito - mockito-core - 2.22.0 - test - - - - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - - - From 9bd03a2523f3d6430fa284b3346eb762ceccbefa Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:41:12 +0530 Subject: [PATCH 031/160] do not need --- .../hexagonalPattern/HexagonalLibraryApplication.java | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java deleted file mode 100644 index 62f35111db..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplication.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.hexagonalPattern; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class HexagonalLibraryApplication { - public static void main(String[] args) { - SpringApplication.run(HexagonalLibraryApplication.class, args); - } -} From 30b91e85ebda27af3a91ef21a86de2990c64fde4 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:41:26 +0530 Subject: [PATCH 032/160] do not need --- .../adapters/LibraryRepoImpl.java | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java deleted file mode 100644 index c8fe584419..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRepoImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.hexagonalPattern.adapters; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Repository; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryRepo; - -@Repository -public class LibraryRepoImpl implements LibraryRepo { - // This class is the actual implementation of the out bound port/adapter. - - private HashMap books = new HashMap(); - - @Override - public int insertBook(Book book) { - // Mock Database call here. - books.put("mock", new Book("mock", "mock", "mock")); - return 1; - } - - @Override - public Book searchBook(String name) { - // TODO Auto-generated method stub - Book b = new Book(); - // Some code for retrieval of book from db - return b; - } - - @Override - public List getAllBooks() { - // Fetch all books from db - return books.values().stream().collect(Collectors.toList()); - } - -} From e5b7f6fccdef0762ae68c87bea8608ee825bdebf Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:41:53 +0530 Subject: [PATCH 033/160] do not need --- .../adapters/LibraryRestController.java | 38 ------------------- 1 file changed, 38 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java deleted file mode 100644 index 92c4b0a8a7..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/adapters/LibraryRestController.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.hexagonalPattern.adapters; - -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.web.LibraryRestUI; - -@RestController -@RequestMapping("/library") -public class LibraryRestController implements LibraryRestUI { - - @Override - @PostMapping("/insertBook") - public int insertBook(Book book) { - return 0; - } - - @Override - @GetMapping("/searchBook") - public Book searchBook(@PathVariable String name) { - // TODO Auto-generated method stub - return null; - } - - @Override - @GetMapping("/listBooks") - public List listAllBooks() { - // TODO Auto-generated method stub - return null; - } - -} From 4e3516f9f885504576ab6eb04de8343171094ad7 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:42:15 +0530 Subject: [PATCH 034/160] do not need --- .../hexagonalPattern/core/domain/Book.java | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java deleted file mode 100644 index 9551d0f09d..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/domain/Book.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.hexagonalPattern.core.domain; - -public class Book { - - private String name; - private String author_list; - private String isbn13; - - /* constructors and getter and setters */ - public Book(String string, String string2, String string3) { - // TODO Auto-generated constructor stub - } - - public Book() { - // TODO Auto-generated constructor stub - } - - /* - * public String getName() { return name; } - * - * public void setName(String name) { this.name = name; } - * - * public String getAuthor_list() { return author_list; } - * - * public void setAuthor_list(String author_list) { this.author_list = - * author_list; } - * - * public String getIsbn13() { return isbn13; } - * - * public void setIsbn13(String isbn13) { this.isbn13 = isbn13; } - */ - -} From 42abea54d89a65c343c00258e45c9a54ba731300 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:42:36 +0530 Subject: [PATCH 035/160] do not need --- .../core/impl/LibraryServiceImpl.java | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java deleted file mode 100644 index de64e46f36..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/core/impl/LibraryServiceImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.hexagonalPattern.core.impl; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.baeldung.hexagonalPattern.adapters.LibraryRepoImpl; -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.ports.LibraryService; - -@Service -public class LibraryServiceImpl implements LibraryService { - - @Autowired - private LibraryRepoImpl bookRepo = new LibraryRepoImpl(); - - @Override - public int insertBook(Book book) { - bookRepo.insertBook(book); - return 1; - } - - @Override - public Book searchBook(String name) { - return bookRepo.searchBook(name); - } - - @Override - public List getAllBooks() { - return bookRepo.getAllBooks(); - } -} From 1c57f9d3e9fd3bab751ef6c7e4fa139d9d31e2dc Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:42:54 +0530 Subject: [PATCH 036/160] do not need --- .../hexagonalPattern/ports/LibraryRepo.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java deleted file mode 100644 index 99de3c2e93..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryRepo.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.hexagonalPattern.ports; - -import java.util.List; -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryRepo { - - public int insertBook(Book book); - - public Book searchBook(String name); - - public List getAllBooks(); -} From 5578045af2542be4aed6b87d68f1c536d74eaef3 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:43:12 +0530 Subject: [PATCH 037/160] do not need --- .../hexagonalPattern/ports/LibraryService.java | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java deleted file mode 100644 index 947ea402dc..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/ports/LibraryService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.hexagonalPattern.ports; - -import java.util.List; - -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryService { - - public int insertBook(Book book); - - public Book searchBook(String name); - - public List getAllBooks(); - -} From b29c74844a9e62d17122992cbe31ffdcc41b1e23 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:43:35 +0530 Subject: [PATCH 038/160] do not need --- .../hexagonalPattern/web/LibraryRestUI.java | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java diff --git a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java b/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java deleted file mode 100644 index e212fca33d..0000000000 --- a/hexagonal-example/src/main/java/com/baeldung/hexagonalPattern/web/LibraryRestUI.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.hexagonalPattern.web; - -import java.util.List; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; - -import com.baeldung.hexagonalPattern.core.domain.Book; - -public interface LibraryRestUI { - // This is the in bound Adapter - - @PostMapping - public int insertBook(@RequestBody Book book); - - @GetMapping - public Book searchBook(@PathVariable String name); - - @GetMapping - public List listAllBooks(); - -} From dfe5f660f1e86ce91a1601a96818bed468aa8987 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Tue, 11 May 2021 07:44:05 +0530 Subject: [PATCH 039/160] do not need --- .../HexagonalLibraryApplicationTest.java | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java diff --git a/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java b/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java deleted file mode 100644 index c73ae11d1d..0000000000 --- a/hexagonal-example/src/test/java/com/baeldung/hexagonalPattern/HexagonalLibraryApplicationTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.hexagonalPattern; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; - -import com.baeldung.hexagonalPattern.core.domain.Book; -import com.baeldung.hexagonalPattern.core.impl.LibraryServiceImpl; - -@RunWith(MockitoJUnitRunner.class) -public class HexagonalLibraryApplicationTest { - - @Mock - private LibraryServiceImpl libService = org.mockito.Mockito.mock(LibraryServiceImpl.class);; - Book bk = new Book(); - Book book; - - @Test - public void when_InsertBook_then_returnInteger() { - Mockito.when(libService.insertBook(bk)).thenReturn(1); - int returnVal = libService.insertBook(bk); - assertEquals(1, returnVal); - } - - @Test - public void when_SearchBook_then_returnBookObject() { - Book returnBook = new Book(); - Mockito.lenient().when(libService.searchBook("Pride and Prejudice")).thenReturn(returnBook); - assertNotNull(returnBook); - } - - @Test - public void when_getAllBooks_then_returnListofBookObjects() { - List returnBookList = new ArrayList(); - returnBookList = libService.getAllBooks(); - assertNotNull(returnBookList); - } -} From a2bf1605fcfecca0f31ab8512d0f0839d9b8f0e4 Mon Sep 17 00:00:00 2001 From: Jacek Polom Date: Wed, 12 May 2021 20:34:36 +0200 Subject: [PATCH 040/160] BAEL-4900 Rename package name from overwrite to override, to be consist with annotation name. --- .../{overwrite => override}/entity/Address.java | 2 +- .../{overwrite => override}/entity/Brand.java | 2 +- .../{overwrite => override}/entity/Car.java | 2 +- .../{overwrite => override}/entity/Owner.java | 2 +- .../{overwrite => override}/entity/Vehicle.java | 2 +- .../repository/CarRepository.java | 4 ++-- .../AttributeOverrideIntegrationTest.java} | 12 ++++++------ 7 files changed, 13 insertions(+), 13 deletions(-) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/entity/Address.java (88%) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/entity/Brand.java (92%) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/entity/Car.java (96%) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/entity/Owner.java (89%) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/entity/Vehicle.java (93%) rename persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/{overwrite => override}/repository/CarRepository.java (56%) rename persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/{overwrite/AttributeOverwriteIntegrationTest.java => override/AttributeOverrideIntegrationTest.java} (82%) diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Address.java similarity index 88% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Address.java index 300d547c88..95a3708173 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Address.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Address.java @@ -1,4 +1,4 @@ -package com.baeldung.attribute.overwrite.entity; +package com.baeldung.attribute.override.entity; import javax.persistence.Embeddable; diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Brand.java similarity index 92% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Brand.java index 7541b52a4d..9918cbaa70 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Brand.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Brand.java @@ -1,4 +1,4 @@ -package com.baeldung.attribute.overwrite.entity; +package com.baeldung.attribute.override.entity; import javax.persistence.Embeddable; import javax.persistence.Embedded; diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Car.java similarity index 96% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Car.java index 383a46a893..5421090e58 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Car.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Car.java @@ -1,4 +1,4 @@ -package com.baeldung.attribute.overwrite.entity; +package com.baeldung.attribute.override.entity; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Owner.java similarity index 89% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Owner.java index 134bac75ee..28ef6c7974 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Owner.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Owner.java @@ -1,4 +1,4 @@ -package com.baeldung.attribute.overwrite.entity; +package com.baeldung.attribute.override.entity; import javax.persistence.Embeddable; diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Vehicle.java similarity index 93% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Vehicle.java index 99cb4c58e4..2d4c0c04b3 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/entity/Vehicle.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/entity/Vehicle.java @@ -1,4 +1,4 @@ -package com.baeldung.attribute.overwrite.entity; +package com.baeldung.attribute.override.entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; diff --git a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/repository/CarRepository.java similarity index 56% rename from persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/repository/CarRepository.java index 1152de2d7f..17cea77d89 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/overwrite/repository/CarRepository.java +++ b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/attribute/override/repository/CarRepository.java @@ -1,6 +1,6 @@ -package com.baeldung.attribute.overwrite.repository; +package com.baeldung.attribute.override.repository; -import com.baeldung.attribute.overwrite.entity.Car; +import com.baeldung.attribute.override.entity.Car; import org.springframework.data.jpa.repository.JpaRepository; public interface CarRepository extends JpaRepository { diff --git a/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/override/AttributeOverrideIntegrationTest.java similarity index 82% rename from persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/override/AttributeOverrideIntegrationTest.java index 24578edb5c..4cc599c7de 100644 --- a/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/overwrite/AttributeOverwriteIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/attribute/override/AttributeOverrideIntegrationTest.java @@ -1,10 +1,10 @@ -package com.baeldung.attribute.overwrite; +package com.baeldung.attribute.override; import com.baeldung.Application; -import com.baeldung.attribute.overwrite.entity.Address; -import com.baeldung.attribute.overwrite.entity.Brand; -import com.baeldung.attribute.overwrite.entity.Car; -import com.baeldung.attribute.overwrite.repository.CarRepository; +import com.baeldung.attribute.override.entity.Address; +import com.baeldung.attribute.override.entity.Brand; +import com.baeldung.attribute.override.entity.Car; +import com.baeldung.attribute.override.repository.CarRepository; import org.assertj.core.api.Assertions; import org.jetbrains.annotations.NotNull; import org.junit.Test; @@ -18,7 +18,7 @@ import java.time.LocalDate; @RunWith(SpringRunner.class) @SpringBootTest(classes = { Application.class }) -public class AttributeOverwriteIntegrationTest { +public class AttributeOverrideIntegrationTest { private static final LocalDate FORD_FOUNDATION_DATE = LocalDate.parse("1903-06-16"); @Autowired From 29552100ca217378b7c7ce93ecd4ae91286898ad Mon Sep 17 00:00:00 2001 From: Sarath Date: Thu, 13 May 2021 13:11:38 +0530 Subject: [PATCH 041/160] [BAEL-4279] Formatting --- core-java-modules/core-java-reflection-2/pom.xml | 12 ++++++------ .../packages/AccessingAllClassesInPackage.java | 6 +++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml index e6bfe259db..b887f95823 100644 --- a/core-java-modules/core-java-reflection-2/pom.xml +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -22,14 +22,14 @@ test - org.reflections - reflections - 0.9.12 + org.reflections + reflections + 0.9.12 - com.google.guava - guava - 30.1.1-jre + com.google.guava + guava + 30.1.1-jre diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java index 7da8e224ee..dfbfaca270 100644 --- a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/packages/AccessingAllClassesInPackage.java @@ -9,12 +9,16 @@ import java.util.stream.Collectors; import org.reflections.Reflections; import org.reflections.scanners.SubTypesScanner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.reflect.ClassPath; @SuppressWarnings("rawtypes") public class AccessingAllClassesInPackage { + private static final Logger LOG = LoggerFactory.getLogger(AccessingAllClassesInPackage.class); + public Set findAllClassesUsingClassLoader(String packageName) { InputStream stream = ClassLoader.getSystemClassLoader() .getResourceAsStream(packageName.replaceAll("[.]", "/")); @@ -29,7 +33,7 @@ public class AccessingAllClassesInPackage { try { return Class.forName(packageName + "." + className.substring(0, className.lastIndexOf('.'))); } catch (ClassNotFoundException e) { - e.printStackTrace(); + LOG.error("<>"); } return null; } From 567a71fdbcebdf00a3d700060c6571598cc9da5b Mon Sep 17 00:00:00 2001 From: Hendro Steven Date: Thu, 13 May 2021 19:13:06 +0700 Subject: [PATCH 042/160] remove comments --- .../java/com/baeldung/softdelete/Product.java | 1 - .../com/baeldung/softdelete/ProductService.java | 1 - .../src/main/resources/application.properties | 15 +-------------- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java index 543252e474..ef06f77c45 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java @@ -17,7 +17,6 @@ import org.hibernate.annotations.SQLDelete; @Entity @Table(name = "tbl_products") @SQLDelete(sql = "UPDATE tbl_products SET deleted = true WHERE id=?") -// @Where(clause = "deleted=false") @FilterDef(name = "deletedProductFilter", parameters = @ParamDef(name = "isDeleted", type = "boolean")) @Filter(name = "deletedProductFilter", condition = "deleted = :isDeleted") public class Product implements Serializable { diff --git a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java index 2bced0c4d8..82d02fa87c 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java +++ b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/ProductService.java @@ -25,7 +25,6 @@ public class ProductService { } public Iterable findAll(boolean isDeleted){ - //return productRepository.findAll(); Session session = entityManager.unwrap(Session.class); Filter filter = session.enableFilter("deletedProductFilter"); filter.setParameter("isDeleted", isDeleted); diff --git a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties index a3a7bd42f7..18ef8d4e60 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties +++ b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties @@ -5,18 +5,5 @@ spring.jpa.properties.hibernate.order_inserts=true spring.jpa.properties.hibernate.order_updates=true spring.jpa.properties.hibernate.generate_statistics=true -# JPA-Schema-Generation -# Use below configuration to generate database schema create commands based on the entity models -# and export them into the create.sql file -#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create -#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql -#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-source=metadata -#spring.jpa.properties.hibernate.format_sql=true +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -# spring.datasource.url=jdbc:mysql://localhost:3306/db_products?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC -# spring.datasource.username=root -# spring.datasource.password=root - -# spring.jpa.hibernate.ddl-auto= update - -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file From 8b115f4c8a75956caf964ae1d14dbe8a3f78cfaa Mon Sep 17 00:00:00 2001 From: Liam Garvie Date: Thu, 13 May 2021 20:48:03 +0100 Subject: [PATCH 043/160] BAEL-4946 added in code for java deserialization vulnerabilities article --- .../vulnerabilities/BadThing.java | 28 ++++++++++++++ .../vulnerabilities/MyCustomAttackObject.java | 14 +++++++ .../vulnerabilities/BadThingTest.java | 38 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java create mode 100644 core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java b/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java new file mode 100644 index 0000000000..ce13a9c372 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java @@ -0,0 +1,28 @@ +package com.baeldung.deserialization.vulnerabilities; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Method; + +public class BadThing implements Serializable { + private static final long serialVersionUID = 0L; + + Object looselyDefinedThing; + String methodName; + + private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { + ois.defaultReadObject(); + try { + Method method = looselyDefinedThing.getClass().getMethod(methodName); + method.invoke(looselyDefinedThing); + } catch (Exception e) { + // handle error... + } + } + + private void writeObject(ObjectOutputStream oos) throws IOException { + oos.defaultWriteObject(); + } +} diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java b/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java new file mode 100644 index 0000000000..9b4e2d4b76 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java @@ -0,0 +1,14 @@ +package com.baeldung.deserialization.vulnerabilities; + +import java.io.IOException; +import java.io.Serializable; + +public class MyCustomAttackObject implements Serializable { + public static void methodThatTriggersAttack() { + try { + Runtime.getRuntime().exec("echo \"Oh, no! I've been hacked\""); + } catch (IOException e) { + // handle error... + } + } +} diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java new file mode 100644 index 0000000000..1d12403bec --- /dev/null +++ b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java @@ -0,0 +1,38 @@ +package com.baeldung.deserialization.vulnerabilities; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +public class BadThingTest { + + @Test + public void testCodeExecution() throws Exception { + BadThing bt = new BadThing(); + + bt.looselyDefinedThing = new MyCustomAttackObject(); + bt.methodName = "methodThatTriggersAttack"; + + byte[] serializedObject = serialize(bt); + + try (InputStream bis = new ByteArrayInputStream(serializedObject); + ObjectInputStream ois = new ObjectInputStream(bis)) { + + ois.readObject(); // malicious code is run + } + } + + private static byte[] serialize(Object object) throws Exception { + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos)) { + + oos.writeObject(object); + oos.flush(); + return bos.toByteArray(); + } + } +} \ No newline at end of file From ab5b85c81c7587485b59b7d89c9fa3ac05a6eddf Mon Sep 17 00:00:00 2001 From: Liam Garvie Date: Thu, 13 May 2021 21:17:37 +0100 Subject: [PATCH 044/160] BAEL-4946 added in code for java deserialization vulnerabilities article --- .../baeldung/deserialization/vulnerabilities/BadThingTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java index 1d12403bec..e533a07c3d 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java @@ -1,6 +1,7 @@ package com.baeldung.deserialization.vulnerabilities; import org.junit.Test; +import org.junit.jupiter.api.DisplayName; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -11,6 +12,7 @@ import java.io.ObjectOutputStream; public class BadThingTest { @Test + @DisplayName("When a BadThing object is deserialized, then code execution in MyCustomAttackObject is run.") public void testCodeExecution() throws Exception { BadThing bt = new BadThing(); From 06aa7787bf8b8f89aaca1e94a24d37553ec8df44 Mon Sep 17 00:00:00 2001 From: Liam Garvie Date: Thu, 13 May 2021 21:19:33 +0100 Subject: [PATCH 045/160] BAEL-4946 added in code for java deserialization vulnerabilities article --- .../{BadThingTest.java => BadThingUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/{BadThingTest.java => BadThingUnitTest.java} (97%) diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java similarity index 97% rename from core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java rename to core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java index e533a07c3d..5db51ba132 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java @@ -9,7 +9,7 @@ import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -public class BadThingTest { +public class BadThingUnitTest { @Test @DisplayName("When a BadThing object is deserialized, then code execution in MyCustomAttackObject is run.") From b59a0ba668efe5ae992285ea1d9bde1d9413d335 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Fri, 14 May 2021 17:42:38 +0530 Subject: [PATCH 046/160] JAVA-5409: Fix formatting of POMs (Part 1) --- spring-boot-modules/spring-boot-xml/pom.xml | 2 +- spring-boot-rest-2/pom.xml | 4 +- spring-boot-rest/pom.xml | 14 ++--- spring-caching/pom.xml | 8 +-- spring-core-2/pom.xml | 9 ++-- spring-core-3/pom.xml | 4 +- spring-core-4/pom.xml | 7 ++- spring-core-5/pom.xml | 6 +-- spring-core/pom.xml | 5 +- spring-cucumber/pom.xml | 7 +-- spring-data-rest-querydsl/pom.xml | 7 +-- spring-data-rest/pom.xml | 5 +- spring-di-2/pom.xml | 5 +- spring-di/pom.xml | 29 +++++----- spring-drools/pom.xml | 7 +-- spring-ejb/ejb-beans/pom.xml | 9 ++-- spring-ejb/pom.xml | 53 ++++++++++--------- spring-ejb/spring-ejb-client/pom.xml | 12 ++--- spring-ejb/spring-ejb-remote/pom.xml | 9 +--- spring-ejb/wildfly/pom.xml | 5 +- spring-ejb/wildfly/widlfly-web/pom.xml | 7 +-- spring-ejb/wildfly/wildfly-ear/pom.xml | 5 +- .../wildfly/wildfly-ejb-interfaces/pom.xml | 5 +- spring-ejb/wildfly/wildfly-ejb/pom.xml | 5 +- spring-ejb/wildfly/wildfly-jpa/pom.xml | 5 +- spring-ejb/wildfly/wildfly-mdb/pom.xml | 5 +- spring-exceptions/pom.xml | 32 ++--------- spring-freemarker/pom.xml | 7 +-- spring-integration/pom.xml | 10 ++-- spring-webflux-threads/pom.xml | 38 ++++--------- 30 files changed, 139 insertions(+), 187 deletions(-) diff --git a/spring-boot-modules/spring-boot-xml/pom.xml b/spring-boot-modules/spring-boot-xml/pom.xml index b3fd343e4f..bee9c7ddd3 100644 --- a/spring-boot-modules/spring-boot-xml/pom.xml +++ b/spring-boot-modules/spring-boot-xml/pom.xml @@ -18,7 +18,7 @@ spring-boot-starter - org.springframework.boot + Forg.springframework.boot spring-boot-starter-test diff --git a/spring-boot-rest-2/pom.xml b/spring-boot-rest-2/pom.xml index d74c393f27..32eff262dd 100644 --- a/spring-boot-rest-2/pom.xml +++ b/spring-boot-rest-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.web spring-boot-rest-2 diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml index 10dacf99e8..72d4ecfaa6 100644 --- a/spring-boot-rest/pom.xml +++ b/spring-boot-rest/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.web spring-boot-rest @@ -35,7 +35,6 @@ xstream ${xstream.version} - com.h2database h2 @@ -44,26 +43,21 @@ org.springframework.boot spring-boot-starter-data-jpa - org.springframework.boot spring-boot-starter-data-rest - org.springframework.boot spring-boot-starter-hateoas - - com.google.guava guava ${guava.version} - org.springframework.boot spring-boot-starter-test @@ -96,5 +90,5 @@ 1.4.11.1 2.3.5 - - + + \ No newline at end of file diff --git a/spring-caching/pom.xml b/spring-caching/pom.xml index c620072604..34c035a8ec 100644 --- a/spring-caching/pom.xml +++ b/spring-caching/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-caching 0.1-SNAPSHOT @@ -76,7 +76,9 @@ spring-data-commons + 3.5.2 - + + \ No newline at end of file diff --git a/spring-core-2/pom.xml b/spring-core-2/pom.xml index 3f8e84e13d..de5c7c0d4d 100644 --- a/spring-core-2/pom.xml +++ b/spring-core-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-core-2 0.1-SNAPSHOT @@ -143,7 +144,6 @@ mockito-core test - net.javacrumbs.shedlock @@ -202,7 +202,6 @@ 1.3.2 5.2.5.Final - 25.1-jre 3.6 @@ -212,4 +211,4 @@ 3.2.2 - + \ No newline at end of file diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index 618800529c..50d2e7ac5e 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-core-3 spring-core-3 diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml index d2e948c475..5706b2ee75 100644 --- a/spring-core-4/pom.xml +++ b/spring-core-4/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-core-4 spring-core-4 @@ -84,7 +84,6 @@ javax.servlet-api 4.0.0 - @@ -95,4 +94,4 @@ 2.9.1 - + \ No newline at end of file diff --git a/spring-core-5/pom.xml b/spring-core-5/pom.xml index 05ee1c5f5d..68229b80b8 100644 --- a/spring-core-5/pom.xml +++ b/spring-core-5/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-core-5 spring-core-5 @@ -37,4 +37,4 @@ 2.4.2 - + \ No newline at end of file diff --git a/spring-core/pom.xml b/spring-core/pom.xml index 7d83fc198c..ab41670224 100644 --- a/spring-core/pom.xml +++ b/spring-core/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-core 0.0.1-SNAPSHOT diff --git a/spring-cucumber/pom.xml b/spring-cucumber/pom.xml index a945797ee1..c6c163d7d1 100644 --- a/spring-cucumber/pom.xml +++ b/spring-cucumber/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cucumber 0.0.1-SNAPSHOT @@ -57,4 +58,4 @@ 1.3.2 - + \ No newline at end of file diff --git a/spring-data-rest-querydsl/pom.xml b/spring-data-rest-querydsl/pom.xml index 5e47f4979e..0b1cdd8928 100644 --- a/spring-data-rest-querydsl/pom.xml +++ b/spring-data-rest-querydsl/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-rest-querydsl 1.0 @@ -99,10 +99,11 @@ + 1.8 1.8 1.1.3 - + \ No newline at end of file diff --git a/spring-data-rest/pom.xml b/spring-data-rest/pom.xml index bfbd66a280..4a22ce92d1 100644 --- a/spring-data-rest/pom.xml +++ b/spring-data-rest/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-data-rest 1.0 diff --git a/spring-di-2/pom.xml b/spring-di-2/pom.xml index 4dd92ca18c..7d3f4c7b33 100644 --- a/spring-di-2/pom.xml +++ b/spring-di-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-di-2 1.0-SNAPSHOT @@ -78,4 +78,5 @@ 1.11 1 + \ No newline at end of file diff --git a/spring-di/pom.xml b/spring-di/pom.xml index df0b685ae2..cbd49242e4 100644 --- a/spring-di/pom.xml +++ b/spring-di/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-di 1.0-SNAPSHOT @@ -90,26 +90,22 @@ aspectjweaver ${aspectjweaver.version} - - - - - - + + + + javax.annotation javax.annotation-api ${annotation-api.version} - - - - - - - - + + + + + + @@ -155,7 +151,6 @@ 5.0.6.RELEASE 1.3.2 - 1.4.4.RELEASE 1 20.0 diff --git a/spring-drools/pom.xml b/spring-drools/pom.xml index 8b105158ec..b8c025893c 100644 --- a/spring-drools/pom.xml +++ b/spring-drools/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-drools 1.0.0-SNAPSHOT @@ -14,7 +15,6 @@ - org.kie kie-ci @@ -77,4 +77,5 @@ 7.0.0.Final + \ No newline at end of file diff --git a/spring-ejb/ejb-beans/pom.xml b/spring-ejb/ejb-beans/pom.xml index 8f2bf31ee4..cdc28ef5d7 100644 --- a/spring-ejb/ejb-beans/pom.xml +++ b/spring-ejb/ejb-beans/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.singletonsession ejb-beans @@ -41,7 +42,7 @@ spring-context ${springframework.version} - + javax.ejb javax.ejb-api @@ -188,4 +189,4 @@ 8.2.1.Final - + \ No newline at end of file diff --git a/spring-ejb/pom.xml b/spring-ejb/pom.xml index 1b3a52184e..383cde1e69 100755 --- a/spring-ejb/pom.xml +++ b/spring-ejb/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.ejb spring-ejb @@ -16,22 +17,12 @@ ../ - - - jboss-public-repository-group - JBoss Public Maven Repository Group - http://repository.jboss.org/nexus/content/groups/public/ - default - - true - never - - - true - never - - - + + spring-ejb-remote + ejb-beans + spring-ejb-client + wildfly + @@ -57,6 +48,23 @@ + + + jboss-public-repository-group + JBoss Public Maven Repository Group + http://repository.jboss.org/nexus/content/groups/public/ + default + + true + never + + + true + never + + + + @@ -71,13 +79,6 @@ - - spring-ejb-remote - ejb-beans - spring-ejb-client - wildfly - - 1.0.0-SNAPSHOT 8.0 @@ -86,4 +87,4 @@ 3.2 - + \ No newline at end of file diff --git a/spring-ejb/spring-ejb-client/pom.xml b/spring-ejb/spring-ejb-client/pom.xml index 6c335e8982..ecf9d0eb49 100644 --- a/spring-ejb/spring-ejb-client/pom.xml +++ b/spring-ejb/spring-ejb-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-ejb-client spring-ejb-client @@ -30,30 +31,25 @@ org.springframework.boot spring-boot-starter-web - org.wildfly wildfly-ejb-client-bom pom - com.baeldung.spring.ejb spring-ejb-remote ejb - org.springframework.boot spring-boot-starter-test test - io.undertow undertow-servlet - @@ -70,4 +66,4 @@ 2.0.4.RELEASE - + \ No newline at end of file diff --git a/spring-ejb/spring-ejb-remote/pom.xml b/spring-ejb/spring-ejb-remote/pom.xml index 28d5398b97..b7bf2aa79b 100644 --- a/spring-ejb/spring-ejb-remote/pom.xml +++ b/spring-ejb/spring-ejb-remote/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-ejb-remote spring-ejb-remote @@ -40,16 +40,13 @@ org.codehaus.cargo cargo-maven2-plugin ${cargo-maven2-plugin.version} - - wildfly10x https://download.jboss.org/wildfly/12.0.0.Final/wildfly-12.0.0.Final.zip - 127.0.0.1 @@ -58,13 +55,11 @@ testUser:admin1234! - - wildfly-runtime diff --git a/spring-ejb/wildfly/pom.xml b/spring-ejb/wildfly/pom.xml index fdf2517139..ae90f71b7c 100644 --- a/spring-ejb/wildfly/pom.xml +++ b/spring-ejb/wildfly/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.wildfly wildfly diff --git a/spring-ejb/wildfly/widlfly-web/pom.xml b/spring-ejb/wildfly/widlfly-web/pom.xml index 79d0dca470..fb8a7678af 100644 --- a/spring-ejb/wildfly/widlfly-web/pom.xml +++ b/spring-ejb/wildfly/widlfly-web/pom.xml @@ -1,11 +1,12 @@ - 4.0.0 widlfly-web - widlfly-web + widlfly-web war - + com.baeldung.wildfly wildfly diff --git a/spring-ejb/wildfly/wildfly-ear/pom.xml b/spring-ejb/wildfly/wildfly-ear/pom.xml index 07f53358bf..da321cb9eb 100644 --- a/spring-ejb/wildfly/wildfly-ear/pom.xml +++ b/spring-ejb/wildfly/wildfly-ear/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 wildfly-ear wildfly-ear diff --git a/spring-ejb/wildfly/wildfly-ejb-interfaces/pom.xml b/spring-ejb/wildfly/wildfly-ejb-interfaces/pom.xml index 21fc26106a..bc9159b667 100644 --- a/spring-ejb/wildfly/wildfly-ejb-interfaces/pom.xml +++ b/spring-ejb/wildfly/wildfly-ejb-interfaces/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 wildfly-ejb-interfaces wildfly-ejb-interfaces diff --git a/spring-ejb/wildfly/wildfly-ejb/pom.xml b/spring-ejb/wildfly/wildfly-ejb/pom.xml index c35e340ac9..36574bf984 100644 --- a/spring-ejb/wildfly/wildfly-ejb/pom.xml +++ b/spring-ejb/wildfly/wildfly-ejb/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 wildfly-ejb wildfly-ejb diff --git a/spring-ejb/wildfly/wildfly-jpa/pom.xml b/spring-ejb/wildfly/wildfly-jpa/pom.xml index 1bc618a296..603e337510 100644 --- a/spring-ejb/wildfly/wildfly-jpa/pom.xml +++ b/spring-ejb/wildfly/wildfly-jpa/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 wildfly-jpa wildfly-jpa diff --git a/spring-ejb/wildfly/wildfly-mdb/pom.xml b/spring-ejb/wildfly/wildfly-mdb/pom.xml index 109cff861b..0784725cde 100644 --- a/spring-ejb/wildfly/wildfly-mdb/pom.xml +++ b/spring-ejb/wildfly/wildfly-mdb/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 wildfly-mdb wildfly-mdb diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml index 29ed7d5caa..337597a741 100644 --- a/spring-exceptions/pom.xml +++ b/spring-exceptions/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-exceptions 0.1-SNAPSHOT @@ -14,9 +15,7 @@ - - org.springframework spring-web @@ -49,9 +48,7 @@ spring-context ${org.springframework.version} - - org.hibernate hibernate-core @@ -73,33 +70,26 @@ tomcat-dbcp ${tomcat-dbcp.version} - - org.hibernate hibernate-validator ${hibernate-validator.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - com.google.guava guava @@ -111,22 +101,18 @@ ${commons-lang3.version} test - - org.springframework spring-test ${org.springframework.version} test - javax.el el-api ${javax.el.version} - org.apache.derby derby @@ -157,9 +143,7 @@ true - - org.apache.maven.plugins maven-war-plugin @@ -168,40 +152,30 @@ false - - - 4.3.4.RELEASE 4.2.0.RELEASE 3.21.0-GA - 5.2.5.Final 5.1.40 7.0.73 10.13.1.1 - 5.3.3.Final 2.2 - 19.0 - 4.4.5 4.5.2 - 2.9.0 - 2.7 1.6.1 - \ No newline at end of file diff --git a/spring-freemarker/pom.xml b/spring-freemarker/pom.xml index bdf7e97bce..07d37736b6 100644 --- a/spring-freemarker/pom.xml +++ b/spring-freemarker/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.freemarker spring-freemarker @@ -61,4 +62,4 @@ 1.5.10.RELEASE - + \ No newline at end of file diff --git a/spring-integration/pom.xml b/spring-integration/pom.xml index f46445a39f..f5aaa93ff7 100644 --- a/spring-integration/pom.xml +++ b/spring-integration/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.samples.spring.integration spring-integration @@ -16,7 +17,6 @@ - org.springframework.integration @@ -74,14 +74,12 @@ spring-integration-jdbc ${spring.version} - org.springframework.security spring-security-test ${spring.version} test - com.h2database h2 @@ -124,4 +122,4 @@ 1.4.197 - + \ No newline at end of file diff --git a/spring-webflux-threads/pom.xml b/spring-webflux-threads/pom.xml index 15224fcd14..bc5050b660 100644 --- a/spring-webflux-threads/pom.xml +++ b/spring-webflux-threads/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring spring-webflux-threads @@ -21,33 +22,16 @@ org.springframework.boot spring-boot-starter-webflux - + - + - + io.reactivex.rxjava2 rxjava @@ -87,4 +71,4 @@ - + \ No newline at end of file From 776e3ca7c852efdcc7e9e15b42cd5842b2583ad7 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Fri, 14 May 2021 17:43:24 +0530 Subject: [PATCH 047/160] JAVA-5409: Fix formatting of POMs (Spring Cloud - Part 1) --- .../additional-sources-simple/pom.xml | 8 +++--- .../basic-config/pom.xml | 8 +++--- .../dynamodb-config/pom.xml | 9 ++++--- .../extra-configs/pom.xml | 8 +++--- .../spring-cloud-archaius/jdbc-config/pom.xml | 9 ++++--- spring-cloud/spring-cloud-archaius/pom.xml | 8 +++--- .../zookeeper-config/pom.xml | 9 ++++--- spring-cloud/spring-cloud-aws/pom.xml | 14 ++++------- .../spring-cloud-bootstrap/config/pom.xml | 6 ++--- .../customer-service/pom.xml | 9 ++++--- .../spring-cloud-bootstrap/discovery/pom.xml | 7 +++--- .../spring-cloud-bootstrap/gateway/pom.xml | 25 ++++++++----------- .../order-service/order-client/pom.xml | 6 +++-- .../order-service/order-server/pom.xml | 6 +++-- .../order-service/pom.xml | 8 +++--- spring-cloud/spring-cloud-bootstrap/pom.xml | 7 +++--- .../spring-cloud-bootstrap/svc-book/pom.xml | 11 +++----- .../spring-cloud-bootstrap/svc-rating/pom.xml | 12 +++------ .../spring-cloud-bootstrap/zipkin/pom.xml | 9 +++---- .../spring-cloud-circuit-breaker/pom.xml | 6 ++--- .../spring-cloud-config/client/pom.xml | 2 +- spring-cloud/spring-cloud-config/pom.xml | 7 +++--- .../spring-cloud-config/server/pom.xml | 2 +- .../spring-cloud-connectors-heroku/pom.xml | 7 +++--- spring-cloud/spring-cloud-consul/pom.xml | 18 ++++++------- spring-cloud/spring-cloud-contract/pom.xml | 7 +++--- .../spring-cloud-contract-consumer/pom.xml | 7 +++--- .../spring-cloud-contract-producer/pom.xml | 7 +++--- .../docker-message-server/pom.xml | 4 +-- .../docker-product-server/pom.xml | 4 +-- spring-cloud/spring-cloud-docker/pom.xml | 5 ++-- .../pom.xml | 7 +++--- .../spring-cloud-eureka-client/pom.xml | 7 +++--- .../spring-cloud-eureka-server/pom.xml | 7 +++--- spring-cloud/spring-cloud-eureka/pom.xml | 7 +++--- .../spring-cloud-eureka-client/pom.xml | 7 +++--- .../pom.xml | 15 +++-------- .../spring-cloud-eureka-feign-client/pom.xml | 7 +++--- .../spring-cloud-eureka-server/pom.xml | 7 +++--- spring-cloud/spring-cloud-functions/pom.xml | 13 +++++----- 40 files changed, 161 insertions(+), 171 deletions(-) diff --git a/spring-cloud/spring-cloud-archaius/additional-sources-simple/pom.xml b/spring-cloud/spring-cloud-archaius/additional-sources-simple/pom.xml index cc20511fc6..249cbe579f 100644 --- a/spring-cloud/spring-cloud-archaius/additional-sources-simple/pom.xml +++ b/spring-cloud/spring-cloud-archaius/additional-sources-simple/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 additional-sources-simple 1.0.0-SNAPSHOT @@ -21,5 +21,5 @@ spring-boot-starter-web - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/basic-config/pom.xml b/spring-cloud/spring-cloud-archaius/basic-config/pom.xml index a13fff2f9d..bdcef5b704 100644 --- a/spring-cloud/spring-cloud-archaius/basic-config/pom.xml +++ b/spring-cloud/spring-cloud-archaius/basic-config/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 basic-config 1.0.0-SNAPSHOT @@ -21,5 +21,5 @@ spring-boot-starter-web - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml b/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml index 9ff267425c..aa203670e0 100644 --- a/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml +++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 dynamodb-config dynamodb-config @@ -45,5 +46,5 @@ 5.0.3 0.7.6 - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/extra-configs/pom.xml b/spring-cloud/spring-cloud-archaius/extra-configs/pom.xml index 70f736642c..0c8f1e16a7 100644 --- a/spring-cloud/spring-cloud-archaius/extra-configs/pom.xml +++ b/spring-cloud/spring-cloud-archaius/extra-configs/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 extra-configs 1.0.0-SNAPSHOT @@ -41,5 +41,5 @@ 2.0.1.RELEASE - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/jdbc-config/pom.xml b/spring-cloud/spring-cloud-archaius/jdbc-config/pom.xml index b7e4917bea..9523c187e1 100644 --- a/spring-cloud/spring-cloud-archaius/jdbc-config/pom.xml +++ b/spring-cloud/spring-cloud-archaius/jdbc-config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 jdbc-config jdbc-config @@ -28,5 +29,5 @@ runtime - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/pom.xml b/spring-cloud/spring-cloud-archaius/pom.xml index df8162efa5..56d7f0bc93 100644 --- a/spring-cloud/spring-cloud-archaius/pom.xml +++ b/spring-cloud/spring-cloud-archaius/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-archaius 1.0.0-SNAPSHOT @@ -63,5 +63,5 @@ 2.0.1.RELEASE 1.2.0 - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-archaius/zookeeper-config/pom.xml b/spring-cloud/spring-cloud-archaius/zookeeper-config/pom.xml index 25eaf4435c..f54373d572 100644 --- a/spring-cloud/spring-cloud-archaius/zookeeper-config/pom.xml +++ b/spring-cloud/spring-cloud-archaius/zookeeper-config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 zookeeper-config zookeeper-config @@ -46,5 +47,5 @@ 2.0.0.RELEASE 3.4.13 - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-aws/pom.xml b/spring-cloud/spring-cloud-aws/pom.xml index f65db6a2fe..a8225c7f02 100644 --- a/spring-cloud/spring-cloud-aws/pom.xml +++ b/spring-cloud/spring-cloud-aws/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-aws @@ -32,23 +33,19 @@ org.springframework.cloud spring-cloud-starter-aws-messaging - org.springframework.boot spring-boot-starter-test test - org.postgresql postgresql - mysql mysql-connector-java - @@ -67,7 +64,6 @@ com.baeldung.spring.cloud.aws.SpringCloudAwsApplication Dalston.SR4 2.2.1.RELEASE - - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/config/pom.xml b/spring-cloud/spring-cloud-bootstrap/config/pom.xml index 6ebf23637e..706c5695d3 100644 --- a/spring-cloud/spring-cloud-bootstrap/config/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 config 1.0.0-SNAPSHOT @@ -42,7 +43,6 @@ Brixton.SR7 - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/customer-service/pom.xml b/spring-cloud/spring-cloud-bootstrap/customer-service/pom.xml index 729abb4f05..da2dee97d5 100644 --- a/spring-cloud/spring-cloud-bootstrap/customer-service/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/customer-service/pom.xml @@ -1,7 +1,7 @@ - - + 4.0.0 com.baeldung.customerservice customer-service @@ -72,4 +72,5 @@ 1.8 1.8 - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml b/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml index d77e29768f..fb06c6052b 100644 --- a/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 discovery 1.0.0-SNAPSHOT @@ -38,7 +39,6 @@ org.springframework.boot spring-boot-starter-security - org.springframework.session spring-session @@ -51,7 +51,6 @@ Edgware.SR5 - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml index 34b7af7c0a..1a6296ac4f 100644 --- a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 gateway 1.0.0-SNAPSHOT @@ -42,7 +43,6 @@ org.springframework.boot spring-boot-starter-security - org.springframework.session spring-session @@ -51,7 +51,6 @@ org.springframework.boot spring-boot-starter-data-redis - org.springframework.cloud spring-cloud-starter-zipkin @@ -60,7 +59,6 @@ org.springframework.cloud spring-cloud-starter-feign - @@ -77,15 +75,15 @@ - - - + dir="${project.basedir}/src/main/angular/ui"> + + + - - + dir="${project.basedir}/src/main/angular/ui"> + + @@ -100,7 +98,6 @@ Dalston.RELEASE - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/order-service/order-client/pom.xml b/spring-cloud/spring-cloud-bootstrap/order-service/order-client/pom.xml index 01e8afeec3..dc6e196325 100644 --- a/spring-cloud/spring-cloud-bootstrap/order-service/order-client/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/order-service/order-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.orderservice order-client @@ -14,4 +15,5 @@ order-service 1.0.0-SNAPSHOT + diff --git a/spring-cloud/spring-cloud-bootstrap/order-service/order-server/pom.xml b/spring-cloud/spring-cloud-bootstrap/order-service/order-server/pom.xml index d6c521c5df..85143b557e 100644 --- a/spring-cloud/spring-cloud-bootstrap/order-service/order-server/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/order-service/order-server/pom.xml @@ -1,16 +1,18 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.orderservice order-server 1.0.0-SNAPSHOT + order-service com.baeldung.orderservice 1.0.0-SNAPSHOT + com.baeldung.orderservice diff --git a/spring-cloud/spring-cloud-bootstrap/order-service/pom.xml b/spring-cloud/spring-cloud-bootstrap/order-service/pom.xml index 2ebc673ef4..64be52f5f4 100644 --- a/spring-cloud/spring-cloud-bootstrap/order-service/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/order-service/pom.xml @@ -1,7 +1,7 @@ - - + 4.0.0 com.baeldung.orderservice order-service @@ -119,4 +119,4 @@ com.baeldung.orderservice.OrderApplication - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/pom.xml b/spring-cloud/spring-cloud-bootstrap/pom.xml index eb1a55c2a9..deba342d69 100644 --- a/spring-cloud/spring-cloud-bootstrap/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-bootstrap 1.0.0-SNAPSHOT @@ -24,4 +25,4 @@ order-service - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml b/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml index de0785bd45..b1aa205af5 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud svc-book @@ -43,7 +44,6 @@ org.springframework.boot spring-boot-starter-security - org.springframework.session spring-session @@ -52,28 +52,23 @@ org.springframework.boot spring-boot-starter-data-redis - org.springframework.boot spring-boot-starter-data-jpa - com.h2database h2 runtime - org.springframework.cloud spring-cloud-starter-zipkin - Dalston.RELEASE - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml index 0cce78276a..e189eeea81 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud svc-rating @@ -31,7 +32,6 @@ org.springframework.boot spring-boot-starter-security - org.springframework.session spring-session @@ -40,12 +40,10 @@ org.springframework.boot spring-boot-starter-data-redis - org.springframework.boot spring-boot-starter-data-jpa - org.springframework.cloud spring-cloud-starter-hystrix @@ -54,18 +52,15 @@ org.springframework.boot spring-boot-starter-actuator - com.h2database h2 runtime - org.springframework.cloud spring-cloud-starter-zipkin - @@ -82,7 +77,6 @@ Dalston.RELEASE - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml b/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml index b83c5a2aaa..ba96f23795 100644 --- a/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 zipkin 1.0.0-SNAPSHOT @@ -22,18 +23,15 @@ org.springframework.cloud spring-cloud-starter-eureka - io.zipkin.java zipkin-server - io.zipkin.java zipkin-autoconfigure-ui runtime - @@ -50,7 +48,6 @@ Brixton.SR7 - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-circuit-breaker/pom.xml b/spring-cloud/spring-cloud-circuit-breaker/pom.xml index 680d835c19..f30c764d9b 100644 --- a/spring-cloud/spring-cloud-circuit-breaker/pom.xml +++ b/spring-cloud/spring-cloud-circuit-breaker/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-circuit-breaker spring-cloud-circuit-breaker @@ -56,4 +56,4 @@ 1.0.2.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml index 2400520d2b..00b5ba2edc 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -47,4 +47,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml index bfe17044e0..1e46b9accb 100644 --- a/spring-cloud/spring-cloud-config/pom.xml +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-config @@ -36,4 +37,4 @@ 2020.0.0 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-config/server/pom.xml b/spring-cloud/spring-cloud-config/server/pom.xml index f0f1e43612..c59b6583f2 100644 --- a/spring-cloud/spring-cloud-config/server/pom.xml +++ b/spring-cloud/spring-cloud-config/server/pom.xml @@ -51,4 +51,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-connectors-heroku/pom.xml b/spring-cloud/spring-cloud-connectors-heroku/pom.xml index d318aa3c64..e02da23f6c 100644 --- a/spring-cloud/spring-cloud-connectors-heroku/pom.xml +++ b/spring-cloud/spring-cloud-connectors-heroku/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-connectors-heroku @@ -59,5 +60,5 @@ Hoxton.SR4 42.2.10 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-consul/pom.xml b/spring-cloud/spring-cloud-consul/pom.xml index 4d4ac0aa01..f21550e360 100644 --- a/spring-cloud/spring-cloud-consul/pom.xml +++ b/spring-cloud/spring-cloud-consul/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-consul @@ -12,7 +13,7 @@ spring-cloud 1.0.0-SNAPSHOT - + jitpack.io @@ -26,7 +27,6 @@ spring-cloud-starter-consul-all ${spring-cloud-starter-consul.version} - org.springframework.cloud spring-cloud-starter-consul-config @@ -45,12 +45,12 @@ com.github.kinguinltdhk leadership-consul ${kinguinltdhk.version} - + - com.ecwid.consul - consul-api + com.ecwid.consul + consul-api - + @@ -60,4 +60,4 @@ com.baeldung.spring.cloud.consul.discovery.DiscoveryClientApplication - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-contract/pom.xml b/spring-cloud/spring-cloud-contract/pom.xml index f26f1d7e3b..1d12656f98 100644 --- a/spring-cloud/spring-cloud-contract/pom.xml +++ b/spring-cloud/spring-cloud-contract/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-contract 1.0.0-SNAPSHOT @@ -56,5 +57,5 @@ 2.1.1.RELEASE 2.1.4.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-contract/spring-cloud-contract-consumer/pom.xml b/spring-cloud/spring-cloud-contract/spring-cloud-contract-consumer/pom.xml index 7616032320..c99dd0bd5a 100644 --- a/spring-cloud/spring-cloud-contract/spring-cloud-contract-consumer/pom.xml +++ b/spring-cloud/spring-cloud-contract/spring-cloud-contract-consumer/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-contract-consumer 1.0.0-SNAPSHOT @@ -42,4 +43,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-contract/spring-cloud-contract-producer/pom.xml b/spring-cloud/spring-cloud-contract/spring-cloud-contract-producer/pom.xml index e909dbc253..736a2530b2 100644 --- a/spring-cloud/spring-cloud-contract/spring-cloud-contract-producer/pom.xml +++ b/spring-cloud/spring-cloud-contract/spring-cloud-contract-producer/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-contract-producer 1.0.0-SNAPSHOT @@ -49,4 +50,4 @@ 2.1.1.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-docker/docker-message-server/pom.xml b/spring-cloud/spring-cloud-docker/docker-message-server/pom.xml index fafd291c00..0cc235f706 100644 --- a/spring-cloud/spring-cloud-docker/docker-message-server/pom.xml +++ b/spring-cloud/spring-cloud-docker/docker-message-server/pom.xml @@ -2,7 +2,6 @@ - 4.0.0 docker-message-server docker-message-server @@ -52,4 +51,5 @@ - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-docker/docker-product-server/pom.xml b/spring-cloud/spring-cloud-docker/docker-product-server/pom.xml index a5bd6c50ea..be65a6d7d3 100644 --- a/spring-cloud/spring-cloud-docker/docker-product-server/pom.xml +++ b/spring-cloud/spring-cloud-docker/docker-product-server/pom.xml @@ -2,7 +2,6 @@ - 4.0.0 docker-product-server docker-product-server @@ -52,4 +51,5 @@ - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-docker/pom.xml b/spring-cloud/spring-cloud-docker/pom.xml index a9d978c9d4..3e407df6a1 100644 --- a/spring-cloud/spring-cloud-docker/pom.xml +++ b/spring-cloud/spring-cloud-docker/pom.xml @@ -1,8 +1,7 @@ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-docker spring-cloud-docker diff --git a/spring-cloud/spring-cloud-eureka-self-preservation/pom.xml b/spring-cloud/spring-cloud-eureka-self-preservation/pom.xml index 41ebba7d79..26353f8297 100644 --- a/spring-cloud/spring-cloud-eureka-self-preservation/pom.xml +++ b/spring-cloud/spring-cloud-eureka-self-preservation/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud.eureka spring-cloud-eureka-self-preservation @@ -34,4 +35,4 @@ Greenwich.SR3 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-client/pom.xml b/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-client/pom.xml index fc7d8bec33..f2670a5114 100644 --- a/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-client/pom.xml +++ b/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-client spring-cloud-eureka-client @@ -37,4 +38,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-server/pom.xml b/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-server/pom.xml index 02d1c8c354..b21e5100ef 100644 --- a/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-server/pom.xml +++ b/spring-cloud/spring-cloud-eureka-self-preservation/spring-cloud-eureka-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-server spring-cloud-eureka-server @@ -33,4 +34,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/pom.xml b/spring-cloud/spring-cloud-eureka/pom.xml index 9d7350e774..5cf0a74868 100644 --- a/spring-cloud/spring-cloud-eureka/pom.xml +++ b/spring-cloud/spring-cloud-eureka/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka 1.0.0-SNAPSHOT @@ -36,4 +37,4 @@ Greenwich.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml index dc6a1ae236..a3c78154a2 100644 --- a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-client 1.0.0-SNAPSHOT @@ -45,4 +46,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml index 95b1275e2c..4fdfe2d9c2 100644 --- a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-feign-client-integration-test 1.0.0-SNAPSHOT @@ -38,48 +39,40 @@ org.springframework.cloud spring-cloud-starter-openfeign - org.springframework.cloud spring-cloud-starter-netflix-ribbon - org.springframework.cloud spring-cloud-starter-netflix-eureka-client - org.springframework.boot spring-boot-starter-web - com.github.tomakehurst wiremock 2.27.2 test - org.projectlombok lombok - org.testcontainers testcontainers 1.14.3 test - org.awaitility awaitility 4.0.3 test - @@ -94,4 +87,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml index e0d63dc15d..b51fd11e29 100644 --- a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-feign-client 1.0.0-SNAPSHOT @@ -53,4 +54,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml index 9c0a933753..9c8e6f3e70 100644 --- a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-eureka-server 1.0.0-SNAPSHOT @@ -41,4 +42,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-functions/pom.xml b/spring-cloud/spring-cloud-functions/pom.xml index 0be3941db1..5f5376ddc9 100644 --- a/spring-cloud/spring-cloud-functions/pom.xml +++ b/spring-cloud/spring-cloud-functions/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.spring spring-cloud-functions @@ -16,15 +16,15 @@ 0.0.1-SNAPSHOT ../../parent-boot-2 - + org.springframework.cloud spring-cloud-function-adapter-aws ${spring-cloud-function.version} - - + + org.springframework.cloud spring-cloud-starter-function-web @@ -86,7 +86,6 @@ 2.0.2 1.1.0 1.0.10.RELEASE - - + \ No newline at end of file From f451361625c0003dda9a7d0e9acee90ecd63d9c1 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Fri, 14 May 2021 17:43:57 +0530 Subject: [PATCH 048/160] JAVA-5409: Fix formatting of POMs (Spring Cloud - Part 2) --- spring-cloud/pom.xml | 9 +++++---- spring-cloud/spring-cloud-gateway/pom.xml | 7 +------ .../feign-rest-consumer/pom.xml | 6 +++--- spring-cloud/spring-cloud-hystrix/pom.xml | 6 +++--- .../rest-consumer/pom.xml | 8 ++++---- .../rest-producer/pom.xml | 8 ++++---- .../kubernetes-guide/client-service/pom.xml | 7 ++++--- .../travel-agency-service/pom.xml | 6 +++--- .../kubernetes-minikube/demo-backend/pom.xml | 8 ++++---- .../kubernetes-minikube/demo-frontend/pom.xml | 9 +++++---- .../liveness-example/pom.xml | 6 ++---- .../readiness-example/pom.xml | 4 ++-- spring-cloud/spring-cloud-kubernetes/pom.xml | 5 +++-- .../spring-cloud-netflix-feign/pom.xml | 20 ++++++------------- .../spring-cloud-open-service-broker/pom.xml | 6 +++--- spring-cloud/spring-cloud-openfeign/pom.xml | 12 ++++------- spring-cloud/spring-cloud-rest/pom.xml | 7 ++++--- .../spring-cloud-rest-books-api/pom.xml | 7 +++---- .../spring-cloud-rest-config-server/pom.xml | 8 ++++---- .../pom.xml | 8 ++++---- .../spring-cloud-rest-reviews-api/pom.xml | 8 ++++---- .../spring-cloud-ribbon-client/pom.xml | 5 +++-- .../spring-cloud-ribbon-retry/pom.xml | 6 +++--- .../ribbon-client-service/pom.xml | 4 ++-- .../ribbon-weather-service/pom.xml | 4 ++-- .../spring-cloud-security/auth-client/pom.xml | 7 ++++--- .../auth-resource/pom.xml | 7 ++++--- .../spring-cloud-security/auth-server/pom.xml | 5 +++-- spring-cloud/spring-cloud-security/pom.xml | 7 ++++--- spring-cloud/spring-cloud-sentinel/pom.xml | 7 ++++--- .../twitterhdfs/pom.xml | 9 +++++---- spring-cloud/spring-cloud-stream/pom.xml | 7 ++++--- .../spring-cloud-stream-kafka/pom.xml | 14 +++---------- .../spring-cloud-stream-kinesis/pom.xml | 7 ++----- .../spring-cloud-stream-rabbit/pom.xml | 8 ++++---- spring-cloud/spring-cloud-task/pom.xml | 8 ++++---- .../springcloudtaskbatch/pom.xml | 9 +++------ .../springcloudtasksink/pom.xml | 8 ++++---- spring-cloud/spring-cloud-vault/pom.xml | 12 ++++------- .../spring-cloud-zookeeper/Greeting/pom.xml | 7 ++++--- .../spring-cloud-zookeeper/HelloWorld/pom.xml | 5 +++-- spring-cloud/spring-cloud-zookeeper/pom.xml | 5 +++-- .../bin/eureka-client/pom.xml | 7 ++++--- .../bin/eureka-server/pom.xml | 7 ++++--- .../bin/pom.xml | 9 +++++---- .../bin/zuul-server/pom.xml | 5 +++-- .../eureka-client/pom.xml | 8 ++++---- .../eureka-server/pom.xml | 8 ++++---- .../pom.xml | 6 +++--- .../zuul-server/pom.xml | 6 +++--- .../api-gateway/pom.xml | 6 +++--- .../spring-cloud-zuul-fallback/pom.xml | 8 ++++---- .../weather-service/pom.xml | 9 ++++----- spring-cloud/spring-cloud-zuul/pom.xml | 7 ++++--- .../spring-zuul-foos-resource/pom.xml | 5 +++-- .../spring-zuul-post-filter/pom.xml | 8 ++++---- .../spring-zuul-rate-limiting/pom.xml | 7 ++++--- .../spring-cloud-zuul/spring-zuul-ui/pom.xml | 7 ++++--- 58 files changed, 207 insertions(+), 222 deletions(-) diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index ac717e85da..83e7175869 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud @@ -43,7 +44,7 @@ spring-cloud-ribbon-retry spring-cloud-circuit-breaker spring-cloud-eureka-self-preservation - + spring-cloud-sentinel @@ -88,4 +89,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-gateway/pom.xml b/spring-cloud/spring-cloud-gateway/pom.xml index c9c087d738..eaa0d12cfd 100644 --- a/spring-cloud/spring-cloud-gateway/pom.xml +++ b/spring-cloud/spring-cloud-gateway/pom.xml @@ -45,19 +45,16 @@ org.springframework.cloud spring-cloud-starter-gateway - org.springframework.cloud spring-cloud-starter-circuitbreaker-reactor-resilience4j - org.springframework.boot spring-boot-starter-data-redis-reactive - it.ozimov @@ -65,7 +62,6 @@ ${redis.version} test - org.hibernate hibernate-validator-cdi @@ -79,7 +75,6 @@ org.springframework.boot spring-boot-starter-actuator - org.springframework.boot spring-boot-starter-test @@ -108,4 +103,4 @@ 5.5.2 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml index 204cb8765c..ea46ae3293 100644 --- a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 feign-rest-consumer 1.0.0-SNAPSHOT @@ -78,4 +78,4 @@ 1.0.0-SNAPSHOT - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-hystrix/pom.xml b/spring-cloud/spring-cloud-hystrix/pom.xml index 4aec8050ff..4fa0a31d62 100644 --- a/spring-cloud/spring-cloud-hystrix/pom.xml +++ b/spring-cloud/spring-cloud-hystrix/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-hystrix 1.0.0-SNAPSHOT @@ -21,4 +21,4 @@ feign-rest-consumer - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml index e96dc478a4..73a0859785 100644 --- a/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 rest-consumer 1.0.0-SNAPSHOT @@ -56,7 +57,6 @@ org.springframework.boot spring-boot-starter-actuator - org.springframework.boot spring-boot-starter-test @@ -69,4 +69,4 @@ 1.10.19 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml b/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml index e7be8f2c58..4843c592c9 100644 --- a/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 rest-producer 1.0.0-SNAPSHOT @@ -19,7 +20,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -32,4 +32,4 @@ 1.10.19 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml index 8e543db326..e916f2bc3e 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/client-service/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 client-service client-service @@ -87,4 +88,4 @@ 1.1.8.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml index 5ab017043c..c6c6de94c3 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-guide/travel-agency-service/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 travel-agency-service 1.0-SNAPSHOT @@ -27,7 +28,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-actuator diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-backend/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-backend/pom.xml index 5bd7d3f5ea..81455eb259 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-backend/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-backend/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 demo-backend demo-backend @@ -17,7 +18,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -34,4 +34,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-frontend/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-frontend/pom.xml index 004fabeb09..558b2cfc3c 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-frontend/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-minikube/demo-frontend/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 demo-frontend demo-frontend @@ -17,7 +18,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -33,4 +33,5 @@ - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/liveness-example/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/liveness-example/pom.xml index 16e718a3be..725aa9cd3d 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/liveness-example/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/liveness-example/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 liveness-example liveness-example @@ -19,12 +19,10 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-actuator - org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/readiness-example/pom.xml b/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/readiness-example/pom.xml index 0ee40b6504..65434259f2 100644 --- a/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/readiness-example/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/kubernetes-selfhealing/readiness-example/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 readiness-example readiness-example diff --git a/spring-cloud/spring-cloud-kubernetes/pom.xml b/spring-cloud/spring-cloud-kubernetes/pom.xml index 7e494b61d9..1a3e3826d4 100644 --- a/spring-cloud/spring-cloud-kubernetes/pom.xml +++ b/spring-cloud/spring-cloud-kubernetes/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-kubernetes diff --git a/spring-cloud/spring-cloud-netflix-feign/pom.xml b/spring-cloud/spring-cloud-netflix-feign/pom.xml index aa5ba5dbdb..6180ee7575 100644 --- a/spring-cloud/spring-cloud-netflix-feign/pom.xml +++ b/spring-cloud/spring-cloud-netflix-feign/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.cloud spring-cloud-netlix-feign @@ -32,23 +33,19 @@ org.springframework.cloud spring-cloud-starter-feign - com.netflix.feign feign-okhttp ${feign-ok.version} - org.springframework.boot spring-boot-starter-web - org.apache.httpcomponents httpcore - org.springframework.boot spring-boot-starter-test @@ -59,13 +56,8 @@ Camden.SR7 8.18.0 - - + + - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-open-service-broker/pom.xml b/spring-cloud/spring-cloud-open-service-broker/pom.xml index 42e90402e5..ca55bc2147 100644 --- a/spring-cloud/spring-cloud-open-service-broker/pom.xml +++ b/spring-cloud/spring-cloud-open-service-broker/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung spring-cloud-open-service-broker @@ -38,4 +38,4 @@ 3.3.5.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-openfeign/pom.xml b/spring-cloud/spring-cloud-openfeign/pom.xml index bdde46fe96..1cb618c7e1 100644 --- a/spring-cloud/spring-cloud-openfeign/pom.xml +++ b/spring-cloud/spring-cloud-openfeign/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.cloud spring-cloud-openfeign @@ -32,29 +33,24 @@ org.springframework.cloud spring-cloud-starter-openfeign - io.github.openfeign feign-okhttp - org.springframework.boot spring-boot-starter-web - io.github.openfeign.form feign-form 3.8.0 - io.github.openfeign.form feign-form-spring 3.8.0 - org.springframework.boot spring-boot-starter-test @@ -66,4 +62,4 @@ Hoxton.SR6 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-rest/pom.xml b/spring-cloud/spring-cloud-rest/pom.xml index 1136fca020..8f0b7b8dcc 100644 --- a/spring-cloud/spring-cloud-rest/pom.xml +++ b/spring-cloud/spring-cloud-rest/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-rest @@ -48,4 +49,4 @@ 1.8 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml index 8ba0fc5cad..2fa003a634 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-rest-books-api @@ -74,6 +75,4 @@ - - diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml index c64341f652..9180283c2d 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-rest-config-server @@ -52,7 +53,6 @@ Camden.SR4 - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml index 85790bf895..eb65395821 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-rest-discovery-server @@ -60,7 +61,6 @@ Edgware.SR4 - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml index 35d0e79543..a8d5837320 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-rest-reviews-api @@ -82,7 +83,6 @@ 3.0.1 0.6 - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-ribbon-client/pom.xml b/spring-cloud/spring-cloud-ribbon-client/pom.xml index 2c9820d179..77c25b2f6b 100644 --- a/spring-cloud/spring-cloud-ribbon-client/pom.xml +++ b/spring-cloud/spring-cloud-ribbon-client/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 spring-cloud-ribbon-client 0.0.1-SNAPSHOT diff --git a/spring-cloud/spring-cloud-ribbon-retry/pom.xml b/spring-cloud/spring-cloud-ribbon-retry/pom.xml index 99eb882421..e0075b4f41 100644 --- a/spring-cloud/spring-cloud-ribbon-retry/pom.xml +++ b/spring-cloud/spring-cloud-ribbon-retry/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.spring.cloud spring-cloud-ribbon-retry @@ -55,6 +55,6 @@ Hoxton.SR3 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-ribbon-retry/ribbon-client-service/pom.xml b/spring-cloud/spring-cloud-ribbon-retry/ribbon-client-service/pom.xml index ad47eb6c84..34d4d372bc 100644 --- a/spring-cloud/spring-cloud-ribbon-retry/ribbon-client-service/pom.xml +++ b/spring-cloud/spring-cloud-ribbon-retry/ribbon-client-service/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 ribbon-client-service diff --git a/spring-cloud/spring-cloud-ribbon-retry/ribbon-weather-service/pom.xml b/spring-cloud/spring-cloud-ribbon-retry/ribbon-weather-service/pom.xml index f091341025..d3edb6062b 100644 --- a/spring-cloud/spring-cloud-ribbon-retry/ribbon-weather-service/pom.xml +++ b/spring-cloud/spring-cloud-ribbon-retry/ribbon-weather-service/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 ribbon-weather-service diff --git a/spring-cloud/spring-cloud-security/auth-client/pom.xml b/spring-cloud/spring-cloud-security/auth-client/pom.xml index c7606719f9..cdbb056a45 100644 --- a/spring-cloud/spring-cloud-security/auth-client/pom.xml +++ b/spring-cloud/spring-cloud-security/auth-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 auth-client auth-client @@ -82,4 +83,4 @@ 4.3.1 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-security/auth-resource/pom.xml b/spring-cloud/spring-cloud-security/auth-resource/pom.xml index d3f9eaf795..c999030c07 100644 --- a/spring-cloud/spring-cloud-security/auth-resource/pom.xml +++ b/spring-cloud/spring-cloud-security/auth-resource/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 auth-resource auth-resource @@ -47,4 +48,4 @@ 1.0.10.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-security/auth-server/pom.xml b/spring-cloud/spring-cloud-security/auth-server/pom.xml index 59ddedf1b2..c0330aad43 100644 --- a/spring-cloud/spring-cloud-security/auth-server/pom.xml +++ b/spring-cloud/spring-cloud-security/auth-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 auth-server auth-server diff --git a/spring-cloud/spring-cloud-security/pom.xml b/spring-cloud/spring-cloud-security/pom.xml index 53b95380ed..0227989f99 100644 --- a/spring-cloud/spring-cloud-security/pom.xml +++ b/spring-cloud/spring-cloud-security/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-security 1.0.0-SNAPSHOT @@ -36,4 +37,4 @@ 2020.0.1 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index 612cbcbfbe..a36dcc51bc 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -1,13 +1,13 @@ + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 spring-cloud-sentinel spring-cloud-sentinel http://maven.apache.org pom + com.baeldung.spring.cloud spring-cloud @@ -39,4 +39,5 @@ UTF-8 - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-stream-starters/twitterhdfs/pom.xml b/spring-cloud/spring-cloud-stream-starters/twitterhdfs/pom.xml index c9a73b9aa1..9c8d4ac707 100644 --- a/spring-cloud/spring-cloud-stream-starters/twitterhdfs/pom.xml +++ b/spring-cloud/spring-cloud-stream-starters/twitterhdfs/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.twitterhdfs twitterhdfs @@ -12,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent 2.1.13.RELEASE - + @@ -32,7 +33,7 @@ javax.servlet jstl - + org.springframework.boot spring-boot-starter-test test diff --git a/spring-cloud/spring-cloud-stream/pom.xml b/spring-cloud/spring-cloud-stream/pom.xml index 17c788c000..96a7ad012b 100644 --- a/spring-cloud/spring-cloud-stream/pom.xml +++ b/spring-cloud/spring-cloud-stream/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-stream @@ -40,4 +41,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml index 32a31c3042..00e9e7c328 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml @@ -1,6 +1,6 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-stream-kafka spring-cloud-stream-kafka @@ -27,41 +27,34 @@ - org.springframework.cloud spring-cloud-stream-binder-kafka - org.springframework.cloud spring-cloud-stream-schema - org.springframework.cloud spring-cloud-stream-test-support test - io.confluent kafka-avro-serializer ${kafka-avro-serializer.version} - org.apache.avro avro-compiler ${avro.version} - org.apache.avro avro-maven-plugin ${avro.version} - @@ -104,7 +97,6 @@ Greenwich.SR1 4.0.0 1.8.2 - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml index 9e706cc239..f542d78620 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-stream-kinesis spring-cloud-stream-kinesis @@ -18,19 +18,16 @@ org.springframework.boot spring-boot-starter-web - org.springframework.cloud spring-cloud-stream-binder-kinesis ${spring-cloud-stream-kinesis-binder.version} - com.amazonaws aws-java-sdk-kinesis ${aws-sdk.version} - org.springframework.cloud spring-cloud-stream-test-support diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml index 4aa42f03d7..6ca9e89031 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-stream-rabbit spring-cloud-stream-rabbit @@ -19,7 +20,6 @@ org.springframework.cloud spring-cloud-starter-stream-rabbit - org.springframework.cloud spring-cloud-stream-test-support @@ -27,4 +27,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-task/pom.xml b/spring-cloud/spring-cloud-task/pom.xml index 21d8a4e42b..bf43799d2d 100644 --- a/spring-cloud/spring-cloud-task/pom.xml +++ b/spring-cloud/spring-cloud-task/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-task @@ -49,7 +50,6 @@ Hoxton.SR4 2.2.3.RELEASE - - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-task/springcloudtaskbatch/pom.xml b/spring-cloud/spring-cloud-task/springcloudtaskbatch/pom.xml index fd10322efb..7dbbb27a77 100644 --- a/spring-cloud/spring-cloud-task/springcloudtaskbatch/pom.xml +++ b/spring-cloud/spring-cloud-task/springcloudtaskbatch/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.cloud springcloudtaskbatch @@ -30,17 +30,14 @@ org.springframework.cloud spring-cloud-starter-task - org.springframework.cloud spring-cloud-task-core - org.springframework.boot spring-boot-starter-batch - org.springframework.cloud spring-cloud-task-batch @@ -65,4 +62,4 @@ com.baeldung.TaskDemo - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-task/springcloudtasksink/pom.xml b/spring-cloud/spring-cloud-task/springcloudtasksink/pom.xml index 33f6ccde74..ad7035ffe5 100644 --- a/spring-cloud/spring-cloud-task/springcloudtasksink/pom.xml +++ b/spring-cloud/spring-cloud-task/springcloudtasksink/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 springcloudtasksink springcloudtasksink @@ -32,7 +33,6 @@ spring-boot-starter-test test - org.springframework.cloud spring-cloud-deployer-local @@ -53,4 +53,4 @@ 2.3.1.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-vault/pom.xml b/spring-cloud/spring-cloud-vault/pom.xml index d9ae6b515f..131d58c967 100644 --- a/spring-cloud/spring-cloud-vault/pom.xml +++ b/spring-cloud/spring-cloud-vault/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-vault @@ -28,28 +29,23 @@ - org.springframework.cloud spring-cloud-starter-vault-config - org.springframework.cloud spring-cloud-vault-config-databases - org.springframework.boot spring-boot-starter-test test - mysql mysql-connector-java - org.springframework.boot spring-boot-starter-jdbc @@ -85,4 +81,4 @@ Greenwich.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml b/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml index 24e783ff30..8e7b87c220 100644 --- a/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml +++ b/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 Greeting Greeting @@ -79,4 +80,4 @@ 1.3 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zookeeper/HelloWorld/pom.xml b/spring-cloud/spring-cloud-zookeeper/HelloWorld/pom.xml index 777b857403..57a1cc029c 100644 --- a/spring-cloud/spring-cloud-zookeeper/HelloWorld/pom.xml +++ b/spring-cloud/spring-cloud-zookeeper/HelloWorld/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 HelloWorld HelloWorld diff --git a/spring-cloud/spring-cloud-zookeeper/pom.xml b/spring-cloud/spring-cloud-zookeeper/pom.xml index 31bf043ac0..79eabf74f0 100644 --- a/spring-cloud/spring-cloud-zookeeper/pom.xml +++ b/spring-cloud/spring-cloud-zookeeper/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-zookeeper spring-cloud-zookeeper diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-client/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-client/pom.xml index 321da7527a..9989893f2f 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-client/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 eureka-client 1.0.0-SNAPSHOT @@ -38,4 +39,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-server/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-server/pom.xml index 08854b02fd..34f82a7347 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-server/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/eureka-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 eureka-server 1.0.0-SNAPSHOT @@ -39,4 +40,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/pom.xml index c6658d70a2..81a4b9202c 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-zuul-eureka-integration 1.0.0-SNAPSHOT @@ -26,5 +27,5 @@ 1.4.2.RELEASE 1.10 - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/zuul-server/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/zuul-server/pom.xml index 2a899760dd..37fe4815bb 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/bin/zuul-server/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/bin/zuul-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 zuul-server diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-client/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-client/pom.xml index 77e8ef7c20..3514924198 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-client/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 eureka-client 1.0.0-SNAPSHOT @@ -37,7 +38,6 @@ spring-boot-starter-web ${spring-boot.version} - org.springframework.boot spring-boot-starter-test @@ -46,4 +46,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-server/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-server/pom.xml index c3f6642351..dcd912df07 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-server/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/eureka-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 eureka-server 1.0.0-SNAPSHOT @@ -37,7 +38,6 @@ commons-configuration ${commons-config.version} - org.springframework.boot spring-boot-starter-test @@ -46,4 +46,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/pom.xml index 996110f875..89d0d2c942 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-zuul-eureka-integration 1.0.0-SNAPSHOT @@ -30,4 +30,4 @@ Finchley.SR2 - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-eureka-integration/zuul-server/pom.xml b/spring-cloud/spring-cloud-zuul-eureka-integration/zuul-server/pom.xml index ddffe540c5..bb38ec1351 100644 --- a/spring-cloud/spring-cloud-zuul-eureka-integration/zuul-server/pom.xml +++ b/spring-cloud/spring-cloud-zuul-eureka-integration/zuul-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 zuul-server zuul-server @@ -46,7 +47,6 @@ rxjava ${rxjava.version} - org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml index 4e092736a5..cfee3ce656 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml +++ b/spring-cloud/spring-cloud-zuul-fallback/api-gateway/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 api-gateway api-gateway @@ -50,4 +50,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-fallback/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/pom.xml index 42925a6ab9..1c426503e5 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/pom.xml +++ b/spring-cloud/spring-cloud-zuul-fallback/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-zuul-fallback spring-cloud-zuul-fallback @@ -24,5 +24,5 @@ Finchley.SR2 3.1.1 - - + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml b/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml index e66110fb23..239be5e134 100644 --- a/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml +++ b/spring-cloud/spring-cloud-zuul-fallback/weather-service/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 weather-service weather-service @@ -31,13 +31,12 @@ - + org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -45,4 +44,4 @@ - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/pom.xml b/spring-cloud/spring-cloud-zuul/pom.xml index 13834848fe..fc3a127e90 100644 --- a/spring-cloud/spring-cloud-zuul/pom.xml +++ b/spring-cloud/spring-cloud-zuul/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud spring-cloud-zuul @@ -84,4 +85,4 @@ 2.2.2.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-foos-resource/pom.xml b/spring-cloud/spring-cloud-zuul/spring-zuul-foos-resource/pom.xml index f5a8c3b613..7a5f9f602b 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-foos-resource/pom.xml +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-foos-resource/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 spring-zuul-foos-resource spring-zuul-foos-resource diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml index 0ca9f0d050..851ad0fd8f 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 + spring-zuul-post-filter + spring-cloud-zuul com.baeldung.spring.cloud 0.0.1-SNAPSHOT - 4.0.0 - spring-zuul-post-filter diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-rate-limiting/pom.xml b/spring-cloud/spring-cloud-zuul/spring-zuul-rate-limiting/pom.xml index bb735a71ed..e09fcd3711 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-rate-limiting/pom.xml +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-rate-limiting/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-zuul-rate-limiting 0.0.1-SNAPSHOT @@ -43,4 +44,4 @@ 2.2.0.RELEASE - + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-ui/pom.xml b/spring-cloud/spring-cloud-zuul/spring-zuul-ui/pom.xml index b7e1702558..7c3f668473 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-ui/pom.xml +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-ui/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-zuul-ui spring-zuul-ui @@ -47,5 +48,5 @@ - + \ No newline at end of file From b1bf1bf8200f6a86a3fbe10c7fc2c4bd893b8875 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Fri, 14 May 2021 17:44:24 +0530 Subject: [PATCH 049/160] JAVA-5409: Fix formatting of POMs (Part 2) --- spring-cloud-bus/pom.xml | 6 ++--- .../spring-cloud-config-client/pom.xml | 11 ++++----- .../spring-cloud-config-server/pom.xml | 11 ++++----- .../apache-spark-job/pom.xml | 4 ++-- spring-cloud-data-flow/batch-job/pom.xml | 11 ++++----- spring-cloud-data-flow/pom.xml | 7 +++--- .../customer-mongodb-sink/pom.xml | 7 +++--- .../customer-transform/pom.xml | 7 +++--- .../spring-cloud-data-flow-etl/pom.xml | 7 +++--- .../data-flow-server/pom.xml | 6 ++--- .../data-flow-shell/pom.xml | 7 +++--- .../log-sink/pom.xml | 9 +++---- .../pom.xml | 11 +++++---- .../time-processor/pom.xml | 7 +++--- .../time-source/pom.xml | 7 +++--- spring-jenkins-pipeline/pom.xml | 7 +++--- spring-jersey/pom.xml | 18 ++++---------- spring-jinq/pom.xml | 11 ++++----- spring-jms/pom.xml | 16 ++++++------- spring-katharsis/pom.xml | 11 ++++----- spring-mobile/pom.xml | 10 +++++--- spring-mockito/pom.xml | 7 +++--- spring-protobuf/pom.xml | 9 ++++--- spring-quartz/pom.xml | 5 ++-- spring-reactor/pom.xml | 7 +++--- spring-remoting/pom.xml | 24 ++++++++++--------- spring-remoting/remoting-amqp/pom.xml | 7 +++--- .../remoting-amqp-client/pom.xml | 7 +++--- .../remoting-amqp-server/pom.xml | 7 +++--- .../remoting-hessian-burlap/pom.xml | 6 ++--- .../remoting-hessian-burlap-client/pom.xml | 6 ++--- .../remoting-hessian-burlap-server/pom.xml | 4 ++-- spring-remoting/remoting-http/pom.xml | 4 ++-- .../remoting-http/remoting-http-api/pom.xml | 4 ++-- .../remoting-http-client/pom.xml | 4 ++-- .../remoting-http-server/pom.xml | 4 ++-- spring-remoting/remoting-jms/pom.xml | 4 ++-- .../remoting-jms/remoting-jms-client/pom.xml | 4 ++-- .../remoting-jms/remoting-jms-server/pom.xml | 4 ++-- spring-remoting/remoting-rmi/pom.xml | 4 ++-- .../remoting-rmi/remoting-rmi-client/pom.xml | 4 ++-- .../remoting-rmi/remoting-rmi-server/pom.xml | 4 ++-- spring-roo/pom.xml | 21 ++++++---------- spring-scheduling/pom.xml | 5 ++-- 44 files changed, 169 insertions(+), 177 deletions(-) diff --git a/spring-cloud-bus/pom.xml b/spring-cloud-bus/pom.xml index 82d0bccd0b..938d6d4bb8 100644 --- a/spring-cloud-bus/pom.xml +++ b/spring-cloud-bus/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.spring.cloud spring-cloud-bus @@ -37,4 +37,4 @@ 2020.0.0 - + \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml index cc1c237646..28e7568266 100644 --- a/spring-cloud-bus/spring-cloud-config-client/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-config-client spring-cloud-config-client @@ -22,23 +23,19 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test test - org.springframework.boot spring-boot-actuator - org.springframework.boot spring-boot-actuator-autoconfigure - org.springframework.cloud spring-cloud-starter-bus-amqp @@ -54,4 +51,4 @@ - + \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml index a61008f3dd..03616b26af 100644 --- a/spring-cloud-bus/spring-cloud-config-server/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-config-server spring-cloud-config-server @@ -18,23 +19,19 @@ org.springframework.cloud spring-cloud-config-server - org.springframework.boot spring-boot-starter-security - org.springframework.boot spring-boot-starter-test test - org.springframework.cloud spring-cloud-config-monitor - org.springframework.cloud spring-cloud-starter-stream-rabbit @@ -50,4 +47,4 @@ - + \ No newline at end of file diff --git a/spring-cloud-data-flow/apache-spark-job/pom.xml b/spring-cloud-data-flow/apache-spark-job/pom.xml index a4816a30ba..4f2ef6cd6c 100644 --- a/spring-cloud-data-flow/apache-spark-job/pom.xml +++ b/spring-cloud-data-flow/apache-spark-job/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 apache-spark-job apache-spark-job diff --git a/spring-cloud-data-flow/batch-job/pom.xml b/spring-cloud-data-flow/batch-job/pom.xml index 6b02b000e1..edb7e34389 100644 --- a/spring-cloud-data-flow/batch-job/pom.xml +++ b/spring-cloud-data-flow/batch-job/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud batch-job @@ -26,18 +27,16 @@ - + org.springframework.cloud spring-cloud-starter-task - org.springframework.boot spring-boot-starter-batch - com.h2database h2 @@ -49,4 +48,4 @@ 2.2.3.RELEASE - + \ No newline at end of file diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml index 5b516146ae..f81daeeabc 100644 --- a/spring-cloud-data-flow/pom.xml +++ b/spring-cloud-data-flow/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-data-flow 0.0.1-SNAPSHOT @@ -21,4 +22,4 @@ apache-spark-job - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml index f4557335d6..a2a9bf1980 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 customer-mongodb-sink customer-mongodb-sink @@ -63,4 +64,4 @@ Hoxton.SR4 - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml index 81f194c772..067d25ec26 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 customer-transform customer-transform @@ -55,4 +56,4 @@ Hoxton.SR4 - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml index 91abdf3442..ffdd153f15 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-cloud-data-flow-etl 0.0.1-SNAPSHOT @@ -18,4 +19,4 @@ customer-transform - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml index 34da489cd1..5dc8459e10 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 data-flow-server 0.0.1-SNAPSHOT @@ -64,4 +64,4 @@ 5.2.12.Final - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml index cc37e76aa4..61c1b16581 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 data-flow-shell 0.0.1-SNAPSHOT @@ -46,4 +47,4 @@ 1.1.0.RELEASE - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml index 186e5b1886..79d1447207 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 log-sink 0.0.1-SNAPSHOT @@ -25,7 +26,7 @@ - + org.springframework.cloud @@ -37,4 +38,4 @@ Hoxton.SR4 - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml index e794287e10..678ba1c6ac 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-cloud-data-flow-stream-processing @@ -21,13 +22,13 @@ time-processor log-sink - + - + org.springframework.boot spring-boot-starter-test test - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml index b4ad84cfe9..083ce87ae6 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 time-processor 0.0.1-SNAPSHOT @@ -37,4 +38,4 @@ Hoxton.SR4 - + \ No newline at end of file diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml index 05908d3c52..1808198a5d 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring.cloud time-source @@ -38,4 +39,4 @@ Hoxton.SR4 - + \ No newline at end of file diff --git a/spring-jenkins-pipeline/pom.xml b/spring-jenkins-pipeline/pom.xml index 152e107409..f2fd4191fd 100644 --- a/spring-jenkins-pipeline/pom.xml +++ b/spring-jenkins-pipeline/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-jenkins-pipeline 0.0.1-SNAPSHOT @@ -83,4 +84,4 @@ 2.0.0 - + \ No newline at end of file diff --git a/spring-jersey/pom.xml b/spring-jersey/pom.xml index 50d377b73f..08c19f1d3b 100644 --- a/spring-jersey/pom.xml +++ b/spring-jersey/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-jersey 0.1-SNAPSHOT @@ -14,9 +15,7 @@ - - org.glassfish.jersey.containers jersey-container-servlet @@ -32,7 +31,6 @@ jersey-client ${jersey.version} - javax.servlet @@ -40,7 +38,6 @@ ${javax.servlet-api.version} provided - org.glassfish.jersey.ext @@ -53,9 +50,7 @@ - - org.apache.httpcomponents httpclient @@ -68,14 +63,12 @@ - org.apache.httpcomponents httpcore ${httpcore.version} test - org.glassfish.jersey.inject jersey-hk2 @@ -118,7 +111,6 @@ ${assertj-core.version} test - org.springframework.boot @@ -126,7 +118,6 @@ ${spring-boot.version} test - @@ -199,7 +190,6 @@ false - org.codehaus.cargo cargo-maven2-plugin @@ -231,4 +221,4 @@ 1.5.10.RELEASE - + \ No newline at end of file diff --git a/spring-jinq/pom.xml b/spring-jinq/pom.xml index 1f5d8cd915..14ac366e74 100644 --- a/spring-jinq/pom.xml +++ b/spring-jinq/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-jinq 0.1-SNAPSHOT @@ -20,24 +21,20 @@ jinq-jpa ${jinq.version} - com.h2database h2 - org.springframework.boot spring-boot-starter-data-jpa - org.springframework spring-orm - org.springframework.boot @@ -64,4 +61,4 @@ 1.8.29 - + \ No newline at end of file diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml index 9cd9126fac..09bf854221 100644 --- a/spring-jms/pom.xml +++ b/spring-jms/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-jms @@ -33,14 +34,13 @@ activemq-all ${activemq.version} - - org.springframework.boot - spring-boot-starter-test - ${spring-boot-test.version} - test - + org.springframework.boot + spring-boot-starter-test + ${spring-boot-test.version} + test + @@ -67,4 +67,4 @@ 1.5.10.RELEASE - + \ No newline at end of file diff --git a/spring-katharsis/pom.xml b/spring-katharsis/pom.xml index 674d9a2a14..b836a42bca 100644 --- a/spring-katharsis/pom.xml +++ b/spring-katharsis/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 org.springframework.samples spring-katharsis @@ -20,19 +21,15 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-data-jpa - com.h2database h2 - - io.katharsis katharsis-spring @@ -140,4 +137,4 @@ 1.6.1 - + \ No newline at end of file diff --git a/spring-mobile/pom.xml b/spring-mobile/pom.xml index 465458ba49..8b98e6d429 100644 --- a/spring-mobile/pom.xml +++ b/spring-mobile/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mobile 1.0-SNAPSHOT @@ -30,6 +31,7 @@ spring-boot-starter-freemarker + spring-milestones @@ -40,7 +42,9 @@ + 2.0.0.M3 - + + \ No newline at end of file diff --git a/spring-mockito/pom.xml b/spring-mockito/pom.xml index 5d2cd7c445..0753935d0c 100644 --- a/spring-mockito/pom.xml +++ b/spring-mockito/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mockito 0.0.1-SNAPSHOT @@ -31,4 +32,4 @@ 2.24.0 - + \ No newline at end of file diff --git a/spring-protobuf/pom.xml b/spring-protobuf/pom.xml index f43faef0d1..44a83803bd 100644 --- a/spring-protobuf/pom.xml +++ b/spring-protobuf/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-protobuf 0.1-SNAPSHOT @@ -24,12 +25,10 @@ protobuf-java-format ${protobuf-java-format.version} - org.springframework.boot spring-boot-starter-web - org.apache.httpcomponents httpclient @@ -42,4 +41,4 @@ com.baeldung.protobuf.Application - + \ No newline at end of file diff --git a/spring-quartz/pom.xml b/spring-quartz/pom.xml index 283d1a1734..19ea302a1d 100644 --- a/spring-quartz/pom.xml +++ b/spring-quartz/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-quartz spring-quartz diff --git a/spring-reactor/pom.xml b/spring-reactor/pom.xml index 0115826fd6..c64d449553 100644 --- a/spring-reactor/pom.xml +++ b/spring-reactor/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-reactor 1.0-SNAPSHOT @@ -41,4 +42,4 @@ 2.0.8.RELEASE - + \ No newline at end of file diff --git a/spring-remoting/pom.xml b/spring-remoting/pom.xml index 59cb9f863e..ba76b56dbd 100644 --- a/spring-remoting/pom.xml +++ b/spring-remoting/pom.xml @@ -1,13 +1,15 @@ - + 4.0.0 spring-remoting 1.0-SNAPSHOT spring-remoting pom Parent for all projects related to Spring Remoting, except remoting-hessian-burlap - + com.baeldung @@ -16,6 +18,14 @@ ../parent-boot-2 + + remoting-hessian-burlap + remoting-http + remoting-amqp + remoting-jms + remoting-rmi + + @@ -27,12 +37,4 @@ - - remoting-hessian-burlap - remoting-http - remoting-amqp - remoting-jms - remoting-rmi - - \ No newline at end of file diff --git a/spring-remoting/remoting-amqp/pom.xml b/spring-remoting/remoting-amqp/pom.xml index ea0b605980..8ce70f86c2 100644 --- a/spring-remoting/remoting-amqp/pom.xml +++ b/spring-remoting/remoting-amqp/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 remoting-amqp remoting-amqp @@ -17,4 +18,4 @@ remoting-amqp-client - + \ No newline at end of file diff --git a/spring-remoting/remoting-amqp/remoting-amqp-client/pom.xml b/spring-remoting/remoting-amqp/remoting-amqp-client/pom.xml index 17c5b31e62..1bcab004f1 100644 --- a/spring-remoting/remoting-amqp/remoting-amqp-client/pom.xml +++ b/spring-remoting/remoting-amqp/remoting-amqp-client/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 remoting-amqp-client remoting-amqp-client @@ -31,4 +32,4 @@ - + \ No newline at end of file diff --git a/spring-remoting/remoting-amqp/remoting-amqp-server/pom.xml b/spring-remoting/remoting-amqp/remoting-amqp-server/pom.xml index 13d0c0a6da..6b6c12b41a 100644 --- a/spring-remoting/remoting-amqp/remoting-amqp-server/pom.xml +++ b/spring-remoting/remoting-amqp/remoting-amqp-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 remoting-amqp-server remoting-amqp-server @@ -34,4 +35,4 @@ 1.0-SNAPSHOT - + \ No newline at end of file diff --git a/spring-remoting/remoting-hessian-burlap/pom.xml b/spring-remoting/remoting-hessian-burlap/pom.xml index 67e3e3eab4..e5975b9f37 100644 --- a/spring-remoting/remoting-hessian-burlap/pom.xml +++ b/spring-remoting/remoting-hessian-burlap/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-hessian-burlap 1.0-SNAPSHOT @@ -9,7 +9,7 @@ pom - + com.baeldung parent-boot-1 0.0.1-SNAPSHOT diff --git a/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml b/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml index 20680d5880..63458ef278 100644 --- a/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml +++ b/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-hessian-burlap-client remoting-hessian-burlap-client @@ -33,7 +33,6 @@ hessian ${hessian.version} - ${project.groupId} @@ -58,6 +57,7 @@ + 4.0.38 diff --git a/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml b/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml index 6e4f2e81e4..d64e8c94c1 100644 --- a/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml +++ b/spring-remoting/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-hessian-burlap-server remoting-hessian-burlap-server diff --git a/spring-remoting/remoting-http/pom.xml b/spring-remoting/remoting-http/pom.xml index 2e5195a909..22627c638c 100644 --- a/spring-remoting/remoting-http/pom.xml +++ b/spring-remoting/remoting-http/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-http remoting-http diff --git a/spring-remoting/remoting-http/remoting-http-api/pom.xml b/spring-remoting/remoting-http/remoting-http-api/pom.xml index 697c3f44e5..1f088a9ac1 100644 --- a/spring-remoting/remoting-http/remoting-http-api/pom.xml +++ b/spring-remoting/remoting-http/remoting-http-api/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-http-api remoting-http-api diff --git a/spring-remoting/remoting-http/remoting-http-client/pom.xml b/spring-remoting/remoting-http/remoting-http-client/pom.xml index 03de2d3e4d..909db5f902 100644 --- a/spring-remoting/remoting-http/remoting-http-client/pom.xml +++ b/spring-remoting/remoting-http/remoting-http-client/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-http-client remoting-http-client diff --git a/spring-remoting/remoting-http/remoting-http-server/pom.xml b/spring-remoting/remoting-http/remoting-http-server/pom.xml index 872688e683..be304b9e92 100644 --- a/spring-remoting/remoting-http/remoting-http-server/pom.xml +++ b/spring-remoting/remoting-http/remoting-http-server/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-http-server remoting-http-server diff --git a/spring-remoting/remoting-jms/pom.xml b/spring-remoting/remoting-jms/pom.xml index 33299cd2c5..61bd1d4cfd 100644 --- a/spring-remoting/remoting-jms/pom.xml +++ b/spring-remoting/remoting-jms/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-jms remoting-jms diff --git a/spring-remoting/remoting-jms/remoting-jms-client/pom.xml b/spring-remoting/remoting-jms/remoting-jms-client/pom.xml index 2f3f993b2e..9e8f230e26 100644 --- a/spring-remoting/remoting-jms/remoting-jms-client/pom.xml +++ b/spring-remoting/remoting-jms/remoting-jms-client/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-jms-client remoting-jms-client diff --git a/spring-remoting/remoting-jms/remoting-jms-server/pom.xml b/spring-remoting/remoting-jms/remoting-jms-server/pom.xml index 53d95edcd7..ae105627a0 100644 --- a/spring-remoting/remoting-jms/remoting-jms-server/pom.xml +++ b/spring-remoting/remoting-jms/remoting-jms-server/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-jms-server remoting-jms-server diff --git a/spring-remoting/remoting-rmi/pom.xml b/spring-remoting/remoting-rmi/pom.xml index 037e73658e..ee65c799a4 100644 --- a/spring-remoting/remoting-rmi/pom.xml +++ b/spring-remoting/remoting-rmi/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-rmi remoting-rmi diff --git a/spring-remoting/remoting-rmi/remoting-rmi-client/pom.xml b/spring-remoting/remoting-rmi/remoting-rmi-client/pom.xml index 5d8d82d6ab..91630a88e9 100644 --- a/spring-remoting/remoting-rmi/remoting-rmi-client/pom.xml +++ b/spring-remoting/remoting-rmi/remoting-rmi-client/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-rmi-client remoting-rmi-client diff --git a/spring-remoting/remoting-rmi/remoting-rmi-server/pom.xml b/spring-remoting/remoting-rmi/remoting-rmi-server/pom.xml index cb5eaa1031..ecf57018ec 100644 --- a/spring-remoting/remoting-rmi/remoting-rmi-server/pom.xml +++ b/spring-remoting/remoting-rmi/remoting-rmi-server/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 remoting-rmi-server remoting-rmi-server diff --git a/spring-roo/pom.xml b/spring-roo/pom.xml index a3680ade70..2c5d5590fa 100644 --- a/spring-roo/pom.xml +++ b/spring-roo/pom.xml @@ -1,7 +1,9 @@ - - + + 4.0.0 com.baeldung spring-roo @@ -13,7 +15,7 @@ io.spring.platform platform-bom Athens-RELEASE - + @@ -27,40 +29,33 @@ spring-boot-starter-test test - org.springframework.boot spring-boot-devtools true - org.springframework.roo org.springframework.roo.annotations pom - org.aspectj aspectjrt - org.apache.commons commons-lang3 - org.assertj assertj-core - - org.springframework.boot spring-boot-starter-data-jpa @@ -367,7 +362,6 @@ - org.springframework.boot @@ -427,7 +421,6 @@ pom provided - io.springlets springlets-data-jpa @@ -640,4 +633,4 @@ 2.0.0.RELEASE - + \ No newline at end of file diff --git a/spring-scheduling/pom.xml b/spring-scheduling/pom.xml index b27f33196d..8df35c4844 100644 --- a/spring-scheduling/pom.xml +++ b/spring-scheduling/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-scheduling 0.1-SNAPSHOT From 1bb3a14c94e88cc2e3ae9d61de598397ab7b8f41 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Fri, 14 May 2021 17:48:04 +0530 Subject: [PATCH 050/160] JAVA-5409: corrected typo --- spring-boot-modules/spring-boot-xml/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-xml/pom.xml b/spring-boot-modules/spring-boot-xml/pom.xml index bee9c7ddd3..b3fd343e4f 100644 --- a/spring-boot-modules/spring-boot-xml/pom.xml +++ b/spring-boot-modules/spring-boot-xml/pom.xml @@ -18,7 +18,7 @@ spring-boot-starter - Forg.springframework.boot + org.springframework.boot spring-boot-starter-test From 3c5b7234d945061b3d80b5e2d5f0473d2e27fe3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Traumat?= Date: Fri, 14 May 2021 17:58:18 +0200 Subject: [PATCH 051/160] Adding cassandre tutorial (#10757) * Adding Cassandre * Added a logger * Added a logger * Change test name * Change test name * Moved to spring-boot-modules * remove cassandre from the spring-boot-modules pom, and add it in the main pom. --- pom.xml | 1 + .../spring-boot-cassandre/README.md | 11 +++ .../spring-boot-cassandre/pom.xml | 68 ++++++++++++++ .../com/example/demo/DemoApplication.java | 13 +++ .../com/example/demo/MyFirstStrategy.java | 66 ++++++++++++++ .../src/main/resources/application.properties | 22 +++++ .../example/demo/DemoApplicationTests.java | 13 +++ .../example/demo/MyFirstStrategyUnitTest.java | 55 ++++++++++++ .../src/test/resources/application.properties | 22 +++++ .../src/test/resources/tickers-btc-usdt.tsv | 89 +++++++++++++++++++ .../src/test/resources/user-trade.tsv | 3 + 11 files changed, 363 insertions(+) create mode 100644 spring-boot-modules/spring-boot-cassandre/README.md create mode 100644 spring-boot-modules/spring-boot-cassandre/pom.xml create mode 100644 spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/DemoApplication.java create mode 100644 spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/MyFirstStrategy.java create mode 100644 spring-boot-modules/spring-boot-cassandre/src/main/resources/application.properties create mode 100644 spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/DemoApplicationTests.java create mode 100644 spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/MyFirstStrategyUnitTest.java create mode 100644 spring-boot-modules/spring-boot-cassandre/src/test/resources/application.properties create mode 100644 spring-boot-modules/spring-boot-cassandre/src/test/resources/tickers-btc-usdt.tsv create mode 100644 spring-boot-modules/spring-boot-cassandre/src/test/resources/user-trade.tsv diff --git a/pom.xml b/pom.xml index f4606ec368..d8bf527184 100644 --- a/pom.xml +++ b/pom.xml @@ -1276,6 +1276,7 @@ + spring-boot-modules/spring-boot-cassandre core-java-modules/core-java-9 core-java-modules/core-java-9-improvements core-java-modules/core-java-9-jigsaw diff --git a/spring-boot-modules/spring-boot-cassandre/README.md b/spring-boot-modules/spring-boot-cassandre/README.md new file mode 100644 index 0000000000..14ffbb7d6b --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/README.md @@ -0,0 +1,11 @@ +# Cassandre trading bot example + +This project is an example of a trading bot developed with Cassandre + +## Running the examples + +* `mvn test` - Run strategy backtesting +* `mvn spring-boot:run` - Run the bot + +## Relevant Articles +- [Build a Trading Bot with Cassandre Spring Boot Starter](https://www.baeldung.com/build-a-trading-bot-with-cassandre-spring-boot-starter/) diff --git a/spring-boot-modules/spring-boot-cassandre/pom.xml b/spring-boot-modules/spring-boot-cassandre/pom.xml new file mode 100644 index 0000000000..75163d2c2b --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + com.example + demo + 0.0.1-SNAPSHOT + Cassandre trading bot tutorial + Cassandre trading bot tutorial + + 11 + + + + org.springframework.boot + spring-boot-starter + + + + + tech.cassandre.trading.bot + cassandre-trading-bot-spring-boot-starter + 4.2.1 + + + org.knowm.xchange + xchange-kucoin + 5.0.7 + + + org.hsqldb + hsqldb + 2.5.1 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + tech.cassandre.trading.bot + cassandre-trading-bot-spring-boot-starter-test + 4.2.1 + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.4.5 + + + + + diff --git a/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/DemoApplication.java b/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000000..094d95b93f --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/MyFirstStrategy.java b/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/MyFirstStrategy.java new file mode 100644 index 0000000000..ea8ae74aa6 --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/main/java/com/example/demo/MyFirstStrategy.java @@ -0,0 +1,66 @@ +package com.example.demo; + +import static tech.cassandre.trading.bot.dto.position.PositionStatusDTO.CLOSED; +import static tech.cassandre.trading.bot.dto.position.PositionStatusDTO.OPENED; +import static tech.cassandre.trading.bot.dto.util.CurrencyDTO.BTC; +import static tech.cassandre.trading.bot.dto.util.CurrencyDTO.USDT; + +import java.math.BigDecimal; +import java.util.Optional; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import tech.cassandre.trading.bot.dto.market.TickerDTO; +import tech.cassandre.trading.bot.dto.position.PositionDTO; +import tech.cassandre.trading.bot.dto.position.PositionRulesDTO; +import tech.cassandre.trading.bot.dto.user.AccountDTO; +import tech.cassandre.trading.bot.dto.util.CurrencyPairDTO; +import tech.cassandre.trading.bot.strategy.BasicCassandreStrategy; +import tech.cassandre.trading.bot.strategy.CassandreStrategy; + +@CassandreStrategy +public class MyFirstStrategy extends BasicCassandreStrategy { + + private final Logger logger = LoggerFactory.getLogger(MyFirstStrategy.class); + + @Override + public Set getRequestedCurrencyPairs() { + return Set.of(new CurrencyPairDTO(BTC, USDT)); + } + + @Override + public Optional getTradeAccount(Set accounts) { + return accounts.stream() + .filter(a -> "trade".equals(a.getName())) + .findFirst(); + } + + @Override + public void onTickerUpdate(TickerDTO ticker) { + logger.info("Received a new ticker : {}", ticker); + + if (new BigDecimal("56000").compareTo(ticker.getLast()) == -1) { + + if (canBuy(new CurrencyPairDTO(BTC, USDT), new BigDecimal("0.01"))) { + PositionRulesDTO rules = PositionRulesDTO.builder() + .stopGainPercentage(4f) + .stopLossPercentage(25f) + .build(); + createLongPosition(new CurrencyPairDTO(BTC, USDT), new BigDecimal("0.01"), rules); + } + + } + } + + @Override + public void onPositionStatusUpdate(PositionDTO position) { + if (position.getStatus() == OPENED) { + logger.info("> New position opened : {}", position.getPositionId()); + } + if (position.getStatus() == CLOSED) { + logger.info("> Position closed : {}", position.getDescription()); + } + } + +} diff --git a/spring-boot-modules/spring-boot-cassandre/src/main/resources/application.properties b/spring-boot-modules/spring-boot-cassandre/src/main/resources/application.properties new file mode 100644 index 0000000000..5ecdabd47a --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/main/resources/application.properties @@ -0,0 +1,22 @@ +# +# Exchange configuration. +cassandre.trading.bot.exchange.name=kucoin +cassandre.trading.bot.exchange.username=kucoin.cassandre.test@gmail.com +cassandre.trading.bot.exchange.passphrase=cassandre +cassandre.trading.bot.exchange.key=6054ad25365ac6000689a998 +cassandre.trading.bot.exchange.secret=af080d55-afe3-47c9-8ec1-4b479fbcc5e7 +# +# Modes +cassandre.trading.bot.exchange.modes.sandbox=true +cassandre.trading.bot.exchange.modes.dry=false +# +# Exchange API calls rates (ms or standard ISO 8601 duration like 'PT5S'). +cassandre.trading.bot.exchange.rates.account=2000 +cassandre.trading.bot.exchange.rates.ticker=2000 +cassandre.trading.bot.exchange.rates.trade=2000 +# +# Database configuration. +cassandre.trading.bot.database.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver +cassandre.trading.bot.database.datasource.url=jdbc:hsqldb:mem:cassandre +cassandre.trading.bot.database.datasource.username=sa +cassandre.trading.bot.database.datasource.password= diff --git a/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/DemoApplicationTests.java b/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/DemoApplicationTests.java new file mode 100644 index 0000000000..eaa99696e2 --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/DemoApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DemoApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/MyFirstStrategyUnitTest.java b/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/MyFirstStrategyUnitTest.java new file mode 100644 index 0000000000..bf7c353821 --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/test/java/com/example/demo/MyFirstStrategyUnitTest.java @@ -0,0 +1,55 @@ +package com.example.demo; + +import static org.awaitility.Awaitility.await; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static tech.cassandre.trading.bot.dto.position.PositionStatusDTO.OPENED; +import static tech.cassandre.trading.bot.dto.util.CurrencyDTO.USDT; + +import java.util.HashMap; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; + +import tech.cassandre.trading.bot.dto.util.CurrencyDTO; +import tech.cassandre.trading.bot.dto.util.GainDTO; +import tech.cassandre.trading.bot.test.mock.TickerFluxMock; + +@SpringBootTest +@Import(TickerFluxMock.class) +@DisplayName("Simple strategy test") +public class MyFirstStrategyUnitTest { + + private final Logger logger = LoggerFactory.getLogger(MyFirstStrategyUnitTest.class); + + @Autowired + private MyFirstStrategy strategy; + + @Autowired + private TickerFluxMock tickerFluxMock; + + @Test + @DisplayName("Check gains") + public void whenTickersArrives_thenCheckGains() { + await().forever().until(() -> tickerFluxMock.isFluxDone()); + + final HashMap gains = strategy.getGains(); + + logger.info("Cumulated gains:"); + gains.forEach((currency, gain) -> logger.info(currency + " : " + gain.getAmount())); + + logger.info("Position still opened :"); + strategy.getPositions() + .values() + .stream() + .filter(p -> p.getStatus().equals(OPENED)) + .forEach(p -> logger.info(" - {} " + p.getDescription())); + + assertTrue(gains.get(USDT).getPercentage() > 0); + } + +} diff --git a/spring-boot-modules/spring-boot-cassandre/src/test/resources/application.properties b/spring-boot-modules/spring-boot-cassandre/src/test/resources/application.properties new file mode 100644 index 0000000000..3d6feb09d7 --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/test/resources/application.properties @@ -0,0 +1,22 @@ +# +# Exchange configuration. +cassandre.trading.bot.exchange.name=kucoin +cassandre.trading.bot.exchange.username=kucoin.cassandre.test@gmail.com +cassandre.trading.bot.exchange.passphrase=cassandre +cassandre.trading.bot.exchange.key=6054ad25365ac6000689a998 +cassandre.trading.bot.exchange.secret=af080d55-afe3-47c9-8ec1-4b479fbcc5e7 +# +# Modes +cassandre.trading.bot.exchange.modes.sandbox=true +cassandre.trading.bot.exchange.modes.dry=true +# +# Exchange API calls rates (ms or standard ISO 8601 duration like 'PT5S'). +cassandre.trading.bot.exchange.rates.account=2000 +cassandre.trading.bot.exchange.rates.ticker=2000 +cassandre.trading.bot.exchange.rates.trade=2000 +# +# Database configuration. +cassandre.trading.bot.database.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver +cassandre.trading.bot.database.datasource.url=jdbc:hsqldb:mem:cassandre +cassandre.trading.bot.database.datasource.username=sa +cassandre.trading.bot.database.datasource.password= diff --git a/spring-boot-modules/spring-boot-cassandre/src/test/resources/tickers-btc-usdt.tsv b/spring-boot-modules/spring-boot-cassandre/src/test/resources/tickers-btc-usdt.tsv new file mode 100644 index 0000000000..b89bd96bdc --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/test/resources/tickers-btc-usdt.tsv @@ -0,0 +1,89 @@ +1612569600 38294.4 39195.5 40964.2 38217.5 3882.29460938 153897343.463150723 +1612656000 39195.4 38807.6 39623.6 37341.4 2389.96820017 91972455.834535369 +1612742400 38807.6 46373.5 46767.9 38010 4971.54731481 212132648.426718929 +1612828800 46374.6 46434.8 48139.3 44961 4330.72854712 201891604.027160303 +1612915200 46430 44812.2 47300 43687.5 4351.84907778 198189685.592028516 +1613001600 44806.1 47941.5 48647.6 44005.8 4045.91883504 188171651.974437139 +1613088000 47963.1 47310.7 48958.8 46181.2 3356.01832119 159561721.419695848 +1613174400 47305.4 47152.6 48120.5 46225.5 2740.99221759 129227867.922246174 +1613260800 47152.5 48591.9 49686.9 47026.3 3359.4690565 163299915.839307312 +1613347200 48587.2 47904.4 49003.6 42841.6 3974.98461358 188990056.26923591 +1613433600 47913.1 49147.7 50619.3 47023.9 3599.85370182 176084748.845657596 +1613520000 49147.7 52118.1 52609.6 48931.1 3356.85082847 170893567.530348564 +1613606400 52114.3 51568.9 52522.9 50906.4 2183.18379408 113272339.172174965 +1613692800 51561.1 55890.5 56317.7 50727 3749.6920105 200656740.865959032 +1613779200 55893.6 55851.5 57622.6 53463.3 3394.87226216 190744601.429330887 +1613865600 55851.4 57423 58336.3 55489.6 2514.02340013 143658132.671448082 +1613952000 57420.6 54096.6 57517.8 44160 6125.32442907 330513978.457310237 +1614038400 54085.9 48908.3 54174.2 44900 8048.96505298 389277314.445372085 +1614124800 48902.9 49685.2 51361.9 47003.2 4816.75027676 239303706.844272809 +1614211200 49676.5 47082.7 52019.6 46624.4 3701.80236678 184044004.383578525 +1614297600 47082 46289.6 48408.8 44135 5329.77125908 247604118.914146591 +1614384000 46290.2 46114.4 48381.9 44836.5 2872.64640734 134946360.020429589 +1614470400 46111.3 45141.6 46626.1 43004.3 3940.17863714 175990962.484551548 +1614556800 45136.5 49590.3 49771.3 44958.9 3548.51026561 169389196.772247159 +1614643200 49590.3 48441.2 50201.6 47052.8 2936.94454126 142575425.463057812 +1614729600 48440.6 50345.5 52623.9 48100 3177.38943911 160801620.821885745 +1614816000 50347.6 48374.5 51762.1 47505.7 3624.17683614 178873453.27515484 +1614902400 48374.5 48758.9 49450 46189.8 3697.34556922 176318969.507294567 +1614988800 48746.9 48871.9 49255.1 47001 1949.15311354 94201823.810314647 +1615075200 48885 50930.4 51424.7 48885 2444.3584982 122962479.787996993 +1615161600 50956.6 52377 52387.5 49287.5 2710.99151191 137751640.241286989 +1615248000 52376.9 54867.6 54867.6 51833.8 3070.93581512 165487483.114064122 +1615334400 54867.5 55865.5 57364 52911.4 4049.50553851 224565244.752334892 +1615420800 55863.7 57781.1 58150 54238 3403.69441456 191915265.020541521 +1615507200 57781 57238.5 58057.5 55013.7 4031.0376629 228810606.091302364 +1615593600 57220.7 61180.9 61815.3 56059.3 4394.62318443 259602986.875738328 +1615680000 61174.3 59000 61700 59000 3084.33952274 186155667.656432156 +1615766400 59000 55607.1 60632.9 54525.6 5910.33518227 338468393.188725572 +1615852800 55607.1 56880.3 56918.9 53240.3 7410.49057723 409052587.523700888 +1615939200 56880.3 58875.8 58951.8 54147.5 5828.79026943 328135601.648660052 +1616025600 58882.9 57648.9 60107.7 57000 5073.7458698 297279816.540519693 +1616112000 57648.9 58024.2 59450.1 56071 3727.09434161 217005823.723994618 +1616198400 58024.3 58113.5 59874.6 57825.6 2746.52973805 161565114.165299707 +1616284800 58113.5 57350.2 58591.6 55501 3265.35649781 186845535.507151609 +1616371200 57345.3 54096.1 58415.5 53667 4219.99501831 237141977.003568352 +1616457600 54086.8 54348.4 55823.1 52986.3 4374.34046303 239135883.538398977 +1616544000 54348.4 52307.4 57200 51499.6 6416.76024581 351202326.218690674 +1616630400 52307.1 51301.7 53239.1 50455 7242.6466396 375950351.557038048 +1616716800 51301.7 55032 55062.5 51225.3 4609.48192944 245299757.451540308 +1616803200 55031.9 55820.4 56628.6 53967.5 3634.73588532 200758048.816804103 +1616889600 55820.3 55772.9 56541 54666.6 3158.20452681 176119911.151714842 +1616976000 55772.8 57628.9 58400.5 54926.5 4413.63121553 251384747.301649587 +1617062400 57630.8 58754.6 59351.9 57072.8 3563.87315049 208118726.050535887 +1617148800 58753.2 58745.9 59800 56357.5 4921.45848213 288469053.074870873 +1617235200 58745.5 58735.7 59487.1 57879 3163.98213108 186078130.901422269 +1617321600 58735.7 58963.6 60179.1 58460.7 2553.76427314 151446539.609794648 +1617408000 58963.6 57058.3 59795 56721.2 2512.19109578 147434403.06515736 +1617494400 57052.5 58201.4 58481.2 56432.6 2069.14670128 119228330.17272614 +1617580800 58201.4 59116.2 59254.1 56501 3003.76043377 174821106.684799505 +1617667200 59116.2 57988.3 59497.5 57304.8 2964.86183859 173169186.845682699 +1617753600 57988.3 55958.2 58668.6 55439 5277.04906389 299996660.411940246 +1617840000 55958.2 58076.7 58141 55700.6 3175.60482079 181817013.517575328 +1617926400 58076.7 58131.6 58900 57666.9 3516.19104669 204849717.059779284 +1618012800 58138.2 59770.2 61350 57902.1 5533.50675561 332014577.538990658 +1618099200 59770.2 60007.6 60687.4 59247.6 3896.37426019 233158562.799039154 +1618185600 60007.6 59863.4 61270.7 59417.4 4611.409014 277430208.743380477 +1618272000 59863.4 63578.7 63759.7 59815 6906.310253 430518557.569547626 +1618358400 63578.7 62958.7 64840 61000 7696.509177 487298143.928065301 +1618444800 62954.4 63152.6 63772.1 62023.9 4709.82427144 296178401.81115496 +1618531200 63152.6 61342.6 63509.7 59930.8 8295.32523869 510423835.691643255 +1618617600 61342.7 59995.2 62497.8 59599.6 5367.42979289 328364887.709585395 +1618704000 59995.3 56150.6 60409.5 49001 11485.97101449 637797282.448645379 +1618790400 56152.7 55618.8 57583.4 54205.2 7721.306905 432634348.931871989 +1618876800 55618.7 56427.8 57061.6 53328 8677.75606016 480164200.559836543 +1618963200 56426.1 53793.6 56761.7 53602 6240.82191836 345339357.806167462 +1619049600 53793.5 51696.4 55474.7 50400 8879.16016304 475394174.249706678 +1619136000 51691.2 51102.7 52112.1 47502.1 8885.07060366 441295812.644904319 +1619222400 51109.8 50033 51157.9 48676.5 4833.41744745 241336360.887795675 +1619308800 50041.5 49086.9 50554.6 46966.2 4805.34664069 237153315.222670555 +1619395200 49069 54000.2 54336.4 48775.8 6695.12934907 353727728.269533971 +1619481600 53997.1 55014.3 55439 53240.8 4344.22291318 237020455.905144335 +1619568000 55014.2 54833.2 56399.1 53808.3 4801.04618634 262912695.604761319 +1619654400 54833.1 53558.4 55181.2 52340.1 4356.05177188 234153663.397444462 +1619740800 53558.5 57697.3 57936.4 53042.6 5000.47557303 277531927.921795199 +1619827200 57697.3 57794.7 58471.4 57006.3 3639.78966647 210179438.189007639 +1619913600 57794.7 56568.5 57903.7 56044.3 3508.52428767 199206958.05741809 +1620000000 56568.5 57159.7 58977.9 56451.3 4780.43387226 276554749.540429296 +1620086400 57159.7 53196.3 57188.2 53083.3 7079.55804728 390469293.396018923 +1620172800 53196.3 57834.5 57979.7 52888 4224.63060355 233779565.506303973 diff --git a/spring-boot-modules/spring-boot-cassandre/src/test/resources/user-trade.tsv b/spring-boot-modules/spring-boot-cassandre/src/test/resources/user-trade.tsv new file mode 100644 index 0000000000..d0fa4e9767 --- /dev/null +++ b/spring-boot-modules/spring-boot-cassandre/src/test/resources/user-trade.tsv @@ -0,0 +1,3 @@ +BTC 1 +USDT 100000 +ETH 10 \ No newline at end of file From 18695338b12fc8776c5df3c262de52c9a25388bd Mon Sep 17 00:00:00 2001 From: mikr Date: Fri, 14 May 2021 18:01:30 +0200 Subject: [PATCH 052/160] JAVA-2399 Update spring-security-rest module to use Swagger 3.0.0 --- .../spring-security-web-rest/pom.xml | 2 +- .../com/baeldung/swagger2/SwaggerConfig.java | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/spring-security-modules/spring-security-web-rest/pom.xml b/spring-security-modules/spring-security-web-rest/pom.xml index 2330243aa6..941f4ed07e 100644 --- a/spring-security-modules/spring-security-web-rest/pom.xml +++ b/spring-security-modules/spring-security-web-rest/pom.xml @@ -275,7 +275,7 @@ 2.9.0 - 2.9.2 + 3.0.0 1.6.1 diff --git a/spring-security-modules/spring-security-web-rest/src/main/java/com/baeldung/swagger2/SwaggerConfig.java b/spring-security-modules/spring-security-web-rest/src/main/java/com/baeldung/swagger2/SwaggerConfig.java index c8c4227ebf..08a5931f7d 100644 --- a/spring-security-modules/spring-security-web-rest/src/main/java/com/baeldung/swagger2/SwaggerConfig.java +++ b/spring-security-modules/spring-security-web-rest/src/main/java/com/baeldung/swagger2/SwaggerConfig.java @@ -6,12 +6,11 @@ import java.util.Collections; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.http.HttpMethod; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.builders.ResponseMessageBuilder; -import springfox.documentation.schema.ModelRef; +import springfox.documentation.builders.ResponseBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; @@ -30,13 +29,12 @@ public class SwaggerConfig { .build() .apiInfo(apiInfo()) .useDefaultResponseMessages(false) - .globalResponseMessage(RequestMethod.GET, newArrayList(new ResponseMessageBuilder().code(500) - .message("500 message") - .responseModel(new ModelRef("Error")) - .build(), - new ResponseMessageBuilder().code(403) - .message("Forbidden!!!!!") - .build())); + .globalResponses(HttpMethod.GET, newArrayList( + new ResponseBuilder().code("500") + .description("500 message").build(), + new ResponseBuilder().code("403") + .description("Forbidden!!!!!").build() + )); } private ApiInfo apiInfo() { From b7bf539a69668a701628467c331f1bfb2b8797e9 Mon Sep 17 00:00:00 2001 From: Mainak Majumder Date: Sat, 15 May 2021 04:44:22 +0200 Subject: [PATCH 053/160] Code for the Baeldung article "HTTP PUT vs POST in REST (#10707) * Application source code for the Baeldung article "HTTP PUT vs POST method in REST API" * update indention in pom file, update code in Address class * update indention * rename application * update pom --- spring-boot-rest-2/pom.xml | 9 +++ .../java/com/baeldung/putvspost/Address.java | 57 +++++++++++++++++++ .../baeldung/putvspost/AddressController.java | 57 +++++++++++++++++++ .../baeldung/putvspost/AddressRepository.java | 7 +++ .../putvspost/PutVsPostApplication.java | 13 +++++ 5 files changed, 143 insertions(+) create mode 100644 spring-boot-rest-2/src/main/java/com/baeldung/putvspost/Address.java create mode 100644 spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressController.java create mode 100644 spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressRepository.java create mode 100644 spring-boot-rest-2/src/main/java/com/baeldung/putvspost/PutVsPostApplication.java diff --git a/spring-boot-rest-2/pom.xml b/spring-boot-rest-2/pom.xml index d74c393f27..b32e1c153d 100644 --- a/spring-boot-rest-2/pom.xml +++ b/spring-boot-rest-2/pom.xml @@ -30,6 +30,15 @@ springfox-boot-starter 3.0.0 + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + runtime + diff --git a/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/Address.java b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/Address.java new file mode 100644 index 0000000000..5c005c70f0 --- /dev/null +++ b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/Address.java @@ -0,0 +1,57 @@ +package com.baeldung.putvspost; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Address { + + private @Id @GeneratedValue Long id; + private String name; + private String city; + private String postalCode; + + Address() { + } + + public Address(String name, String city, String postalCode) { + this.name = name; + this.city = city; + this.postalCode = postalCode; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + @Override + public String toString() { + return "Address [id=" + id + ", name=" + name + ", city=" + city + ", postalCode=" + postalCode + "]"; + } + +} diff --git a/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressController.java b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressController.java new file mode 100644 index 0000000000..f989d5c211 --- /dev/null +++ b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressController.java @@ -0,0 +1,57 @@ +package com.baeldung.putvspost; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class AddressController { + + private final AddressRepository repository; + + AddressController(AddressRepository repository) { + this.repository = repository; + } + + @GetMapping("/addresses") + List
getAllAddresses() { + return repository.findAll(); + } + + @GetMapping("/addresses/{id}") + Optional
getAddressesById(@PathVariable Long id) { + return repository.findById(id); + } + + @PostMapping("/addresses") + Address createNewAddress(@RequestBody Address newAddress) { + return repository.save(newAddress); + } + + @PutMapping("/addresses/{id}") + Address replaceEmployee(@RequestBody Address newAddress, @PathVariable Long id) { + + return repository.findById(id) + .map(address -> { + address.setCity(newAddress.getCity()); + address.setPostalCode(newAddress.getPostalCode()); + return repository.save(address); + }) + .orElseGet(() -> { + return repository.save(newAddress); + }); + } + + @DeleteMapping("/addresses/{id}") + void deleteEmployee(@PathVariable Long id) { + repository.deleteById(id); + } + +} diff --git a/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressRepository.java b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressRepository.java new file mode 100644 index 0000000000..415a3c9030 --- /dev/null +++ b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/AddressRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.putvspost; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AddressRepository extends JpaRepository { + +} diff --git a/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/PutVsPostApplication.java b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/PutVsPostApplication.java new file mode 100644 index 0000000000..8cea53d269 --- /dev/null +++ b/spring-boot-rest-2/src/main/java/com/baeldung/putvspost/PutVsPostApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.putvspost; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PutVsPostApplication { + + public static void main(String[] args) { + SpringApplication.run(PutVsPostApplication.class, args); + } + +} From cfff9e33c92bea2ccc6b9b4c2be874f8daabf45a Mon Sep 17 00:00:00 2001 From: MicuEmerson Date: Sat, 15 May 2021 17:35:54 +0300 Subject: [PATCH 054/160] BAEL-4800: example of different POM types in Maven --- maven-modules/maven-pom-types/README.md | 11 + .../maven-pom-types/effective-pom.xml | 255 ++++++++++++++++++ maven-modules/maven-pom-types/pom-4.0.0.xml | 150 +++++++++++ maven-modules/maven-pom-types/pom.xml | 14 + 4 files changed, 430 insertions(+) create mode 100644 maven-modules/maven-pom-types/README.md create mode 100644 maven-modules/maven-pom-types/effective-pom.xml create mode 100644 maven-modules/maven-pom-types/pom-4.0.0.xml create mode 100644 maven-modules/maven-pom-types/pom.xml diff --git a/maven-modules/maven-pom-types/README.md b/maven-modules/maven-pom-types/README.md new file mode 100644 index 0000000000..8de8610383 --- /dev/null +++ b/maven-modules/maven-pom-types/README.md @@ -0,0 +1,11 @@ +## Maven POM types + +This module contains the XML files with POM types. + +pom.xml is the Simplest POM +pom-4.0.0.xml is the Super POM +effective-pom.xml was generated using `mvn help:effective-pom > effective-pom.xml` + +### Relevant Articles + +- [Guide to Maven Profiles](https://www.baeldung.com/difference-between-super-pom-simplest-and-effective-pom/) diff --git a/maven-modules/maven-pom-types/effective-pom.xml b/maven-modules/maven-pom-types/effective-pom.xml new file mode 100644 index 0000000000..09b3d5f7bf --- /dev/null +++ b/maven-modules/maven-pom-types/effective-pom.xml @@ -0,0 +1,255 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< com.baeldung:simplestPOM >---------------------- +[INFO] Building simplestPOM 1.0-SNAPSHOT +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- maven-help-plugin:3.2.0:effective-pom (default-cli) @ simplestPOM --- +[INFO] +Effective POMs, after inheritance, interpolation, and profiles are applied: + + + + + + + + + + + + + + + 4.0.0 + com.baeldung + simplestPOM + 1.0-SNAPSHOT + + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + + + never + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\java + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\scripts + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\java + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\classes + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\test-classes + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\resources + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\resources + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget + simplestPOM-1.0-SNAPSHOT + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + + + maven-clean-plugin + 2.5 + + + default-clean + clean + + clean + + + + + + maven-resources-plugin + 2.6 + + + default-testResources + process-test-resources + + testResources + + + + default-resources + process-resources + + resources + + + + + + maven-jar-plugin + 2.4 + + + default-jar + package + + jar + + + + + + maven-compiler-plugin + 3.1 + + + default-compile + compile + + compile + + + + default-testCompile + test-compile + + testCompile + + + + + + maven-surefire-plugin + 2.12.4 + + + default-test + test + + test + + + + + + maven-install-plugin + 2.4 + + + default-install + install + + install + + + + + + maven-deploy-plugin + 2.7 + + + default-deploy + deploy + + deploy + + + + + + maven-site-plugin + 3.3 + + + default-site + site + + site + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + default-deploy + site-deploy + + deploy + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + + +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 1.346 s +[INFO] Finished at: 2021-05-15T17:28:30+03:00 +[INFO] ------------------------------------------------------------------------ diff --git a/maven-modules/maven-pom-types/pom-4.0.0.xml b/maven-modules/maven-pom-types/pom-4.0.0.xml new file mode 100644 index 0000000000..b19a7d7b7a --- /dev/null +++ b/maven-modules/maven-pom-types/pom-4.0.0.xml @@ -0,0 +1,150 @@ + + + + + + + 4.0.0 + + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + + + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + never + + + + + + ${project.basedir}/target + ${project.build.directory}/classes + ${project.artifactId}-${project.version} + ${project.build.directory}/test-classes + ${project.basedir}/src/main/java + ${project.basedir}/src/main/scripts + ${project.basedir}/src/test/java + + + ${project.basedir}/src/main/resources + + + + + ${project.basedir}/src/test/resources + + + + + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + + + + ${project.build.directory}/site + + + + + + release-profile + + + + performRelease + true + + + + + + + true + maven-source-plugin + + + attach-sources + + jar-no-fork + + + + + + true + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + true + maven-deploy-plugin + + true + + + + + + + + + diff --git a/maven-modules/maven-pom-types/pom.xml b/maven-modules/maven-pom-types/pom.xml new file mode 100644 index 0000000000..6699e614f4 --- /dev/null +++ b/maven-modules/maven-pom-types/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + com.baeldung + simplestPOM + 1.0-SNAPSHOT + + + ${project.basedir}/customTarget + + + \ No newline at end of file From dda6b7583fea1456eaaa5f722e0c602e895fb38b Mon Sep 17 00:00:00 2001 From: KevinGilmore Date: Sat, 15 May 2021 10:20:22 -0500 Subject: [PATCH 055/160] BAEL-4934: update README (#10766) --- spring-boot-rest-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-rest-2/README.md b/spring-boot-rest-2/README.md index f09159198c..41270d58ea 100644 --- a/spring-boot-rest-2/README.md +++ b/spring-boot-rest-2/README.md @@ -1,3 +1,4 @@ ### Relevant Article: - [Get All Endpoints in Spring Boot](https://www.baeldung.com/spring-boot-get-all-endpoints) +- [HTTP PUT vs. POST in REST API](https://www.baeldung.com/rest-http-put-vs-post) From c3e386eb022b76ef5a69d52866f9a18caa513202 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sun, 16 May 2021 16:40:29 +0530 Subject: [PATCH 056/160] JAVA-5550 Removed Spring Milestones/RC dependencies from projects and upgraded them to their respective central versions --- netflix-modules/mantis/pom.xml | 12 +++--------- spring-boot-modules/spring-boot-properties/pom.xml | 11 +---------- spring-cloud/spring-cloud-circuit-breaker/pom.xml | 14 -------------- spring-mobile/pom.xml | 12 +----------- spring-roo/pom.xml | 12 ------------ 5 files changed, 5 insertions(+), 56 deletions(-) diff --git a/netflix-modules/mantis/pom.xml b/netflix-modules/mantis/pom.xml index 474b8f6dbf..1f8b377b94 100644 --- a/netflix-modules/mantis/pom.xml +++ b/netflix-modules/mantis/pom.xml @@ -19,7 +19,6 @@ org.springframework.boot spring-boot-starter - 2.1.3.RELEASE io.mantisrx @@ -35,36 +34,31 @@ com.fasterxml.jackson.core jackson-databind - 2.10.2 net.andreinc.mockneat mockneat - 0.3.8 + 0.4.2 org.projectlombok lombok - 1.18.12 org.springframework spring-webflux - 5.0.9.RELEASE test io.projectreactor.netty reactor-netty - 0.9.12.RELEASE test - - SpringLibReleaseRepo - https://repo.spring.io/libs-release/ + jcenter + https://jcenter.bintray.com/ diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml index adeb41e976..2acc66487c 100644 --- a/spring-boot-modules/spring-boot-properties/pom.xml +++ b/spring-boot-modules/spring-boot-properties/pom.xml @@ -121,17 +121,8 @@ - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - 2020.0.0-M5 + Hoxton.SR11 1.10 20.0 @ diff --git a/spring-cloud/spring-cloud-circuit-breaker/pom.xml b/spring-cloud/spring-cloud-circuit-breaker/pom.xml index 680d835c19..3cf63f3db1 100644 --- a/spring-cloud/spring-cloud-circuit-breaker/pom.xml +++ b/spring-cloud/spring-cloud-circuit-breaker/pom.xml @@ -14,20 +14,6 @@ .. - - - spring-release - Spring Release - https://repo.spring.io/release - - false - - - true - - - - diff --git a/spring-mobile/pom.xml b/spring-mobile/pom.xml index 465458ba49..05d1df0d41 100644 --- a/spring-mobile/pom.xml +++ b/spring-mobile/pom.xml @@ -30,17 +30,7 @@ spring-boot-starter-freemarker - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone - - false - - - - 2.0.0.M3 + 1.1.5.RELEASE diff --git a/spring-roo/pom.xml b/spring-roo/pom.xml index a3680ade70..71a1a35957 100644 --- a/spring-roo/pom.xml +++ b/spring-roo/pom.xml @@ -397,18 +397,6 @@ - - - maven-snapshot-repository - Maven Snapshot Repository - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - spring-roo-repository From d8e5930766425d9966059e08a5e533d91f58fe9c Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sun, 16 May 2021 16:59:44 +0530 Subject: [PATCH 057/160] JAVA-5550 Reverted changes done in spring-boot-properties as spring-cloud hoxton release is not compatible with spring boot 2.4 --- spring-boot-modules/spring-boot-properties/pom.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml index 2acc66487c..adeb41e976 100644 --- a/spring-boot-modules/spring-boot-properties/pom.xml +++ b/spring-boot-modules/spring-boot-properties/pom.xml @@ -121,8 +121,17 @@ + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + + - Hoxton.SR11 + 2020.0.0-M5 1.10 20.0 @ From b744d8e6ee36042dae1055f5011c1df50fd5dd25 Mon Sep 17 00:00:00 2001 From: akhil90s <46933461+akhil90s@users.noreply.github.com> Date: Sun, 16 May 2021 22:12:35 +0530 Subject: [PATCH 058/160] Code Coverage with SonarQube and Jacoco (#10674) * Code Coverage with SonarQube and Jacoco * SonarQube and Jacoco * Delete SonarQube and Jacoco From the Root directory * SonarQube and JaCoCo * SonarQube And JaCoCo * BAEL-4636 : Code Coverage with SonarQube and Jacoco * Shifted to testing-modules/testing-libraries-2 * Removing this project to make a single project * Code Coverage with SonarQube and Jacoco * Formatting in pom.xml file * Delete Directory * Delete unused directory * SonarQube And JaCoCo * SonarQube And JaCoCo --- testing-modules/testing-libraries-2/pom.xml | 47 +++++++++++++--- .../sonarqubeandjacoco/product/Product.java | 54 +++++++++++++++++++ .../product/ProductUnitTest.java | 26 +++++++++ 3 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 testing-modules/testing-libraries-2/src/main/java/com/baeldung/sonarqubeandjacoco/product/Product.java create mode 100644 testing-modules/testing-libraries-2/src/test/java/com/baeldung/sonarqubeandjacoco/product/ProductUnitTest.java diff --git a/testing-modules/testing-libraries-2/pom.xml b/testing-modules/testing-libraries-2/pom.xml index 7f96280cac..b01a1a918b 100644 --- a/testing-modules/testing-libraries-2/pom.xml +++ b/testing-modules/testing-libraries-2/pom.xml @@ -12,6 +12,15 @@ ../ + + 0.8.6 + 1.19.0 + 1.0.0 + 1.1.0 + 5.6.2 + 3.16.1 + + org.assertj @@ -72,6 +81,36 @@ + + + maven-war-plugin + 2.4 + + false + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + package + + report + + + + + testing-libraries @@ -81,11 +120,5 @@ - - 1.19.0 - 1.0.0 - 1.1.0 - 5.6.2 - 3.16.1 - + diff --git a/testing-modules/testing-libraries-2/src/main/java/com/baeldung/sonarqubeandjacoco/product/Product.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/sonarqubeandjacoco/product/Product.java new file mode 100644 index 0000000000..42f103a317 --- /dev/null +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/sonarqubeandjacoco/product/Product.java @@ -0,0 +1,54 @@ +package com.baeldung.sonarqubeandjacoco.product; + +public class Product { + + private int id; + private String name; + private int units; + private double price; + + public Product() { + super(); + } + + public Product(int id, String name, int units, double price) { + super(); + this.id = id; + this.name = name; + this.units = units; + this.price = price; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getUnits() { + return units; + } + + public void setUnits(int units) { + this.units = units; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + +} \ No newline at end of file diff --git a/testing-modules/testing-libraries-2/src/test/java/com/baeldung/sonarqubeandjacoco/product/ProductUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/sonarqubeandjacoco/product/ProductUnitTest.java new file mode 100644 index 0000000000..da649851e0 --- /dev/null +++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/sonarqubeandjacoco/product/ProductUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.sonarqubeandjacoco.product; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.Test; + +import com.baeldung.sonarqubeandjacoco.product.Product; + +public class ProductUnitTest { + + @Test + public void test() { + Product product = new Product(); + product.setId(1); + assertNull(product.getName()); + assert (product.getId() == 1); + } + + @Test + public void testProduct() { + Product product = new Product(1, "product", 1, 2.0); + assertNotNull(product.getName()); + } + +} From 6f757f33b3389b779182b7af836364898c888195 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Sun, 16 May 2021 20:02:27 +0200 Subject: [PATCH 059/160] BAEL-4871 Spring Conditional Annotations --- .../DevEnvLoggingConfiguration.java | 16 +++++++++++++++ .../conditional/IsDevEnvCondition.java | 13 ++++++++++++ .../conditional/IsWindowsCondition.java | 15 ++++++++++++++ .../conditional/Java8Condition.java | 14 +++++++++++++ .../conditional/Java8DependedService.java | 9 +++++++++ .../annotations/conditional/Java8OrJava9.java | 18 +++++++++++++++++ .../conditional/Java9Condition.java | 14 +++++++++++++ .../conditional/LoggingService.java | 20 +++++++++++++++++++ 8 files changed, 119 insertions(+) create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java new file mode 100644 index 0000000000..c2134ab053 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java @@ -0,0 +1,16 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Conditional(IsDevEnvCondition.class) +public class DevEnvLoggingConfiguration { + + @Bean + @Conditional(IsDevEnvCondition.class) + LoggingService loggingService() { + return new LoggingService(); + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java new file mode 100644 index 0000000000..e0da72d731 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java @@ -0,0 +1,13 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsDevEnvCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + return System.getProperty("env").equals("dev");; + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java new file mode 100644 index 0000000000..d7e492b5af --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java @@ -0,0 +1,15 @@ +package java.com.baeldung.annotations.conditional; + +import org.apache.commons.lang3.SystemUtils; + +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsWindowsCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + return SystemUtils.IS_OS_WINDOWS;; + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java new file mode 100644 index 0000000000..a18093ce18 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java @@ -0,0 +1,14 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java8Condition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + return ConditionalOnJava.JavaVersion.getJavaVersion().equals(ConditionalOnJava.JavaVersion.EIGHT); + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java new file mode 100644 index 0000000000..bd2bdff99a --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java @@ -0,0 +1,9 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.context.annotation.Conditional; +import org.springframework.stereotype.Service; + +@Service +@Conditional(Java8Condition.class) +public class Java8DependedService { +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java new file mode 100644 index 0000000000..5a19d7ef77 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java @@ -0,0 +1,18 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; +import org.springframework.context.annotation.Conditional; + +public class Java8OrJava9 extends AnyNestedCondition { + Java8OrJava9() { + super(ConfigurationPhase.REGISTER_BEAN); + } + + @Conditional(Java8Condition.class) + static class Java8 { + } + + @Conditional(Java9Condition.class) + static class Java9 { + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java new file mode 100644 index 0000000000..2f9c29d9ec --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java @@ -0,0 +1,14 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java9Condition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + return ConditionalOnJava.JavaVersion.getJavaVersion().equals(ConditionalOnJava.JavaVersion.NINE); + } +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java new file mode 100644 index 0000000000..e9aaaf3f74 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java @@ -0,0 +1,20 @@ +package java.com.baeldung.annotations.conditional; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Conditional; +import org.springframework.stereotype.Service; + +@Service +@Conditional(IsDevEnvCondition.class) +@ConditionalOnProperty( + value = "logging.enabled", + havingValue = "true", + matchIfMissing = true) +@ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}") +@ConditionalOnJava(ConditionalOnJava.JavaVersion.EIGHT) +@Conditional(IsWindowsCondition.class) +@Conditional(Java8Condition.class) +public class LoggingService { +} From 2d1d9f3ec5e15c73c3e7c7fb1917ff76c4e01a68 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Sun, 16 May 2021 20:03:39 +0200 Subject: [PATCH 060/160] BAEL-4871 Spring Conditional Annotations --- .../baeldung/annotations/conditional/LoggingService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java index e9aaaf3f74..f51ca10b7e 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java @@ -9,9 +9,9 @@ import org.springframework.stereotype.Service; @Service @Conditional(IsDevEnvCondition.class) @ConditionalOnProperty( - value = "logging.enabled", - havingValue = "true", - matchIfMissing = true) + value = "logging.enabled", + havingValue = "true", + matchIfMissing = true) @ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}") @ConditionalOnJava(ConditionalOnJava.JavaVersion.EIGHT) @Conditional(IsWindowsCondition.class) From b37973821c44377b9a03df81f5d634e66464ffb9 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Sun, 16 May 2021 20:04:35 +0200 Subject: [PATCH 061/160] BAEL-4871 Spring Conditional Annotations --- .../baeldung/annotations/conditional/IsDevEnvCondition.java | 2 +- .../com/baeldung/annotations/conditional/Java8OrJava9.java | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java index e0da72d731..6da17d68c5 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java @@ -8,6 +8,6 @@ public class IsDevEnvCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return System.getProperty("env").equals("dev");; + return System.getProperty("env").equals("dev"); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java index 5a19d7ef77..9574c60ce1 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java @@ -9,10 +9,8 @@ public class Java8OrJava9 extends AnyNestedCondition { } @Conditional(Java8Condition.class) - static class Java8 { - } + static class Java8 { } @Conditional(Java9Condition.class) - static class Java9 { - } + static class Java9 { } } From 9d5b3fcedb4db5810efab6dd3b742d5a7e2ae618 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Sun, 16 May 2021 20:09:03 +0200 Subject: [PATCH 062/160] BAEL-4871 Spring Conditional Annotations --- spring-boot-modules/spring-boot-annotations/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index b495c5de04..4ee40bb90b 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -24,6 +24,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-autoconfigure + org.springframework.boot spring-boot-starter-data-jpa From 4d08dcace0982ab0747b1a5937a932dd08ee320a Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Sun, 16 May 2021 20:16:33 +0200 Subject: [PATCH 063/160] BAEL-4871 Spring Conditional Annotations --- .../conditional/DevEnvLoggingConfiguration.java | 2 +- .../annotations/conditional/IsDevEnvCondition.java | 2 +- .../annotations/conditional/IsWindowsCondition.java | 4 ++-- .../baeldung/annotations/conditional/Java8Condition.java | 6 +++--- .../annotations/conditional/Java8DependedService.java | 2 +- .../baeldung/annotations/conditional/Java8OrJava9.java | 2 +- .../baeldung/annotations/conditional/Java9Condition.java | 6 +++--- .../baeldung/annotations/conditional/LoggingService.java | 9 ++++----- 8 files changed, 16 insertions(+), 17 deletions(-) diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java index c2134ab053..39f1d568f0 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/DevEnvLoggingConfiguration.java @@ -1,4 +1,4 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java index 6da17d68c5..7a866560c8 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java @@ -1,4 +1,4 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java index d7e492b5af..21702ed9b8 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java @@ -1,4 +1,4 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.apache.commons.lang3.SystemUtils; @@ -10,6 +10,6 @@ public class IsWindowsCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return SystemUtils.IS_OS_WINDOWS;; + return SystemUtils.IS_OS_WINDOWS; } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java index a18093ce18..0d2ad56917 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java @@ -1,6 +1,6 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; -import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +9,6 @@ public class Java8Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return ConditionalOnJava.JavaVersion.getJavaVersion().equals(ConditionalOnJava.JavaVersion.EIGHT); + return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java index bd2bdff99a..ab76dcd930 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8DependedService.java @@ -1,4 +1,4 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java index 9574c60ce1..77c501ed08 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8OrJava9.java @@ -1,4 +1,4 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.context.annotation.Conditional; diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java index 2f9c29d9ec..6a21be8bde 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java @@ -1,6 +1,6 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; -import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; +import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +9,6 @@ public class Java9Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return ConditionalOnJava.JavaVersion.getJavaVersion().equals(ConditionalOnJava.JavaVersion.NINE); + return JavaVersion.getJavaVersion().equals(JavaVersion.NINE); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java index f51ca10b7e..1a65a16763 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java @@ -1,20 +1,19 @@ -package java.com.baeldung.annotations.conditional; +package com.baeldung.annotations.conditional; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnJava; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; @Service -@Conditional(IsDevEnvCondition.class) +@Conditional({IsDevEnvCondition.class, IsWindowsCondition.class, Java8Condition.class}) @ConditionalOnProperty( value = "logging.enabled", havingValue = "true", matchIfMissing = true) @ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}") -@ConditionalOnJava(ConditionalOnJava.JavaVersion.EIGHT) -@Conditional(IsWindowsCondition.class) -@Conditional(Java8Condition.class) +@ConditionalOnJava(JavaVersion.EIGHT) public class LoggingService { } From bdd7733443ccc81ef7eadb84f428a2dd38ff43ff Mon Sep 17 00:00:00 2001 From: kwoyke Date: Mon, 17 May 2021 14:15:19 +0200 Subject: [PATCH 064/160] BAEL-4953: Fix FindBugs annotations (#10772) Co-authored-by: Krzysztof Woyke --- patterns/design-patterns-behavioral/pom.xml | 6 ++++++ .../main/java/com/baeldung/nulls/FindBugsAnnotations.java | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/patterns/design-patterns-behavioral/pom.xml b/patterns/design-patterns-behavioral/pom.xml index 93e07bb477..bc032a0f8f 100644 --- a/patterns/design-patterns-behavioral/pom.xml +++ b/patterns/design-patterns-behavioral/pom.xml @@ -26,6 +26,11 @@ ${lombok.version} provided + + com.google.code.findbugs + annotations + ${findbugs.annotations.version} + org.apache.commons commons-lang3 @@ -41,6 +46,7 @@ 16.0.2 + 3.0.1 3.9.1 diff --git a/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java index 697d5e4959..594516e3f2 100644 --- a/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java +++ b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java @@ -1,12 +1,12 @@ package com.baeldung.nulls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.Nullable; public class FindBugsAnnotations { - public void accept(@NotNull Object param) { + public void accept(@NonNull Object param) { System.out.println(param.toString()); } @@ -14,7 +14,7 @@ public class FindBugsAnnotations { System.out.println("Printing " + param); } - @NotNull + @NonNull public Object process() throws Exception { Object result = doSomething(); if (result == null) { From 55e113fe328d841aeae96c5bd3764982b064a2d4 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Mon, 17 May 2021 20:21:04 +0530 Subject: [PATCH 065/160] JAVA-5223: Fix formatting of POMs (Others) --- core-java-modules/core-java-9-jigsaw/pom.xml | 2 +- core-java-modules/core-java-9-streams/pom.xml | 4 ++-- jws/pom.xml | 7 +++--- libraries-4/pom.xml | 4 ++-- libraries-5/pom.xml | 4 ++-- libraries-6/pom.xml | 8 +++---- libraries/pom.xml | 8 ++++--- static-analysis/pom.xml | 5 ++-- stripe/pom.xml | 7 +++--- structurizr/pom.xml | 5 ++-- struts-2/pom.xml | 5 ++-- tensorflow-java/pom.xml | 4 ++-- twilio/pom.xml | 7 +++--- twitter4j/pom.xml | 7 +++--- vaadin/pom.xml | 10 ++++---- vavr-2/pom.xml | 15 ++++++------ vavr/pom.xml | 5 ++-- vertx-and-rxjava/pom.xml | 5 ++-- vertx/pom.xml | 12 ++++++---- video-tutorials/jackson-annotations/pom.xml | 24 +++---------------- video-tutorials/pom.xml | 8 +++---- vraptor/pom.xml | 18 +++----------- webrtc/pom.xml | 6 ++--- wicket/pom.xml | 6 ++--- wildfly/pom.xml | 5 ++-- xml/pom.xml | 15 ++++-------- xstream/pom.xml | 5 ++-- 27 files changed, 92 insertions(+), 119 deletions(-) diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml index 0797003174..a26a88f4b0 100644 --- a/core-java-modules/core-java-9-jigsaw/pom.xml +++ b/core-java-modules/core-java-9-jigsaw/pom.xml @@ -34,4 +34,4 @@ 1.9 - + \ No newline at end of file diff --git a/core-java-modules/core-java-9-streams/pom.xml b/core-java-modules/core-java-9-streams/pom.xml index e59cc347c7..aeaf2c7f57 100644 --- a/core-java-modules/core-java-9-streams/pom.xml +++ b/core-java-modules/core-java-9-streams/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-9-streams jar - + com.baeldung.core-java-modules core-java-modules @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/jws/pom.xml b/jws/pom.xml index be42798fd1..3d2f67c691 100644 --- a/jws/pom.xml +++ b/jws/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.example jws @@ -66,4 +67,4 @@ 3.0.2 - + \ No newline at end of file diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml index decd467de9..756bfbd3a8 100644 --- a/libraries-4/pom.xml +++ b/libraries-4/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 libraries-4 diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml index ff6c208f5f..a3ca204995 100644 --- a/libraries-5/pom.xml +++ b/libraries-5/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 libraries-5 diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index 6db3b1b77b..289597adc9 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 libraries-6 @@ -112,12 +112,12 @@ renjin-script-engine ${renjin.version} - + com.googlecode.libphonenumber libphonenumber ${libphonenumber.version} - + diff --git a/libraries/pom.xml b/libraries/pom.xml index 13f91fddd0..40cc1b4671 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 libraries libraries @@ -335,7 +336,8 @@ benchmarks - + org.openjdk.jmh.Main diff --git a/static-analysis/pom.xml b/static-analysis/pom.xml index 87e5f55977..577440117c 100644 --- a/static-analysis/pom.xml +++ b/static-analysis/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 static-analysis 1.0-SNAPSHOT diff --git a/stripe/pom.xml b/stripe/pom.xml index 48505c9e4e..cfd281b4a8 100644 --- a/stripe/pom.xml +++ b/stripe/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.stripe stripe @@ -40,4 +41,4 @@ 4.2.0 - + \ No newline at end of file diff --git a/structurizr/pom.xml b/structurizr/pom.xml index b8efba0937..85e3fc87d1 100644 --- a/structurizr/pom.xml +++ b/structurizr/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 structurizr structurizr diff --git a/struts-2/pom.xml b/struts-2/pom.xml index 3211ad7253..87663cf545 100644 --- a/struts-2/pom.xml +++ b/struts-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 struts-2 0.0.1-SNAPSHOT diff --git a/tensorflow-java/pom.xml b/tensorflow-java/pom.xml index 379a901925..2ac4d28a37 100644 --- a/tensorflow-java/pom.xml +++ b/tensorflow-java/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 tensorflow-java 1.0-SNAPSHOT diff --git a/twilio/pom.xml b/twilio/pom.xml index 76ad5faafb..327242749b 100644 --- a/twilio/pom.xml +++ b/twilio/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 twilio 1.0-SNAPSHOT @@ -24,4 +25,4 @@ 7.20.0 - + \ No newline at end of file diff --git a/twitter4j/pom.xml b/twitter4j/pom.xml index e2579bf73e..3e9bcd550a 100644 --- a/twitter4j/pom.xml +++ b/twitter4j/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 twitter4j twitter4j @@ -24,4 +25,4 @@ 4.0.6 - + \ No newline at end of file diff --git a/vaadin/pom.xml b/vaadin/pom.xml index 4814e70ae3..9025205527 100644 --- a/vaadin/pom.xml +++ b/vaadin/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 org.test vaadin @@ -107,7 +108,8 @@ - + org.eclipse.jetty jetty-maven-plugin @@ -189,4 +191,4 @@ 3.0.0 - + \ No newline at end of file diff --git a/vavr-2/pom.xml b/vavr-2/pom.xml index d20dd9afef..f3640d7c6e 100644 --- a/vavr-2/pom.xml +++ b/vavr-2/pom.xml @@ -1,17 +1,17 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + vavr-2 + vavr-2 + jar + parent-modules com.baeldung 1.0.0-SNAPSHOT - 4.0.0 - - vavr-2 - vavr-2 - jar @@ -24,4 +24,5 @@ 0.9.1 + \ No newline at end of file diff --git a/vavr/pom.xml b/vavr/pom.xml index 16097af848..1604ecc06e 100644 --- a/vavr/pom.xml +++ b/vavr/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 vavr 1.0 diff --git a/vertx-and-rxjava/pom.xml b/vertx-and-rxjava/pom.xml index 20b022a773..fb04ba784c 100644 --- a/vertx-and-rxjava/pom.xml +++ b/vertx-and-rxjava/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 vertx-and-rxjava vertx-and-rxjava diff --git a/vertx/pom.xml b/vertx/pom.xml index 81ede1ba0b..9a22e2dd72 100644 --- a/vertx/pom.xml +++ b/vertx/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 vertx 1.0-SNAPSHOT @@ -46,14 +47,15 @@ - + io.vertx.core.Starter com.baeldung.SimpleServerVerticle - + ${project.build.directory}/${project.artifactId}-${project.version}-app.jar @@ -67,4 +69,4 @@ 3.2.1 - + \ No newline at end of file diff --git a/video-tutorials/jackson-annotations/pom.xml b/video-tutorials/jackson-annotations/pom.xml index f396baf80b..827715fe5f 100644 --- a/video-tutorials/jackson-annotations/pom.xml +++ b/video-tutorials/jackson-annotations/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 jackson-annotations 1.0.0-SNAPSHOT @@ -13,73 +14,60 @@ - commons-io commons-io ${commons-io.version} - com.fasterxml.jackson.dataformat jackson-dataformat-xml ${jackson.version} - org.apache.commons commons-collections4 ${commons-collections4.version} - org.apache.commons commons-lang3 ${commons-lang3.version} - - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - com.fasterxml.jackson.datatype jackson-datatype-jsr310 ${jackson.version} - com.fasterxml.jackson.datatype jackson-datatype-joda ${jackson.version} - com.fasterxml.jackson.module jackson-module-jsonSchema ${jackson.version} - joda-time joda-time ${joda-time.version} - com.google.code.gson gson ${gson.version} - io.rest-assured @@ -93,7 +81,6 @@ - io.rest-assured @@ -101,28 +88,24 @@ ${rest-assured-json-schema-validator.version} test - io.rest-assured json-path ${json-path.version} test - com.github.fge json-schema-validator ${json-schema-validator.version} test - org.assertj assertj-core ${assertj-core.version} test - @@ -140,7 +123,6 @@ 2.9.6 2.8.0 4.1 - 3.0.1 3.0.0 diff --git a/video-tutorials/pom.xml b/video-tutorials/pom.xml index 53ff0c6d89..52c4f2af2a 100644 --- a/video-tutorials/pom.xml +++ b/video-tutorials/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 video-tutorials 1.0.0-SNAPSHOT @@ -18,5 +19,4 @@ jackson-annotations - - + \ No newline at end of file diff --git a/vraptor/pom.xml b/vraptor/pom.xml index 9956305e98..ab78c0d97a 100644 --- a/vraptor/pom.xml +++ b/vraptor/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 vraptor 1.0.0 @@ -20,7 +21,6 @@ vraptor ${vraptor.version} - org.jboss.weld.servlet weld-servlet-core @@ -32,7 +32,6 @@ - org.jboss.weld weld-core-impl @@ -44,69 +43,58 @@ - javax.el el-api ${el.version} provided - org.hibernate hibernate-validator-cdi ${hibernate-validator.version} - javax.servlet jstl ${jstl.version} - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - org.slf4j slf4j-log4j12 ${slf4j-log4j12.version} - br.com.caelum.vraptor vraptor-freemarker ${vraptor-freemarker.version} - br.com.caelum.vraptor vraptor-hibernate ${vraptor-hibernate.version} - mysql mysql-connector-java ${mysql-connector.version} - org.mindrot jbcrypt ${jbcrypt.version} - org.freemarker freemarker ${freemarker.version} - diff --git a/webrtc/pom.xml b/webrtc/pom.xml index 191ff11dd6..9b238d75f2 100644 --- a/webrtc/pom.xml +++ b/webrtc/pom.xml @@ -1,10 +1,8 @@ - 4.0.0 - webrtc 0.0.1 @@ -31,4 +29,4 @@ - + \ No newline at end of file diff --git a/wicket/pom.xml b/wicket/pom.xml index 68bc2f3e6b..55baf64032 100644 --- a/wicket/pom.xml +++ b/wicket/pom.xml @@ -1,6 +1,5 @@ - 4.0.0 @@ -23,7 +22,6 @@ wicket-core ${wicket.version} - org.eclipse.jetty.aggregate @@ -89,4 +87,4 @@ 2.6 - + \ No newline at end of file diff --git a/wildfly/pom.xml b/wildfly/pom.xml index 6d823bb4c9..c5d9bce37a 100644 --- a/wildfly/pom.xml +++ b/wildfly/pom.xml @@ -1,6 +1,5 @@ - 4.0.0 @@ -76,4 +75,4 @@ - + \ No newline at end of file diff --git a/xml/pom.xml b/xml/pom.xml index d2fa5c0727..b4c78b514d 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -1,6 +1,5 @@ - 4.0.0 @@ -88,31 +87,26 @@ commons-io ${commons-io.version} - org.apache.commons commons-collections4 ${commons-collections4.version} - org.apache.commons commons-lang3 ${commons-lang3.version} - org.jibx jibx-run ${jibx-version} - commons-lang commons-lang ${commons-lang.version} - org.junit.jupiter junit-jupiter @@ -270,7 +264,6 @@ - bindGen @@ -327,7 +320,8 @@ - + maven-assembly-plugin ${project.basedir} @@ -378,10 +372,9 @@ 0.9.6 2.4 - 1.3.1 3.8.0 - + \ No newline at end of file diff --git a/xstream/pom.xml b/xstream/pom.xml index 618df1a7c2..c4104d29c4 100644 --- a/xstream/pom.xml +++ b/xstream/pom.xml @@ -1,6 +1,5 @@ - 4.0.0 @@ -35,4 +34,4 @@ 1.3.8 - + \ No newline at end of file From 4b1f2c50a521114fbe1563da8ada2682e27de521 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Mon, 17 May 2021 20:22:27 +0530 Subject: [PATCH 066/160] JAVA-5223: Fix formatting of POMs (Spring Security Modules) --- spring-security-modules/pom.xml | 9 +++-- .../spring-5-security-cognito/pom.xml | 6 +-- .../spring-5-security-oauth/pom.xml | 7 ++-- .../spring-5-security/pom.xml | 7 ++-- spring-security-modules/spring-ldap/pom.xml | 11 ++--- .../spring-security-acl/pom.xml | 7 ++-- .../spring-security-auth0/pom.xml | 34 ++++++++-------- .../cache-control/pom.xml | 6 +-- .../spring-security-config/cors/pom.xml | 8 ++-- .../spring-security-config/pom.xml | 7 ++-- .../spring-security-core/pom.xml | 5 ++- .../spring-security-ldap/pom.xml | 13 +++--- .../spring-security-legacy-oidc/pom.xml | 6 +-- .../spring-security-oauth2-sso/pom.xml | 7 ++-- .../spring-security-sso-auth-server/pom.xml | 7 ++-- .../spring-security-sso-kerberos/pom.xml | 8 ++-- .../spring-security-sso-ui-2/pom.xml | 13 ++---- .../spring-security-sso-ui/pom.xml | 14 ++----- .../spring-security-oidc/pom.xml | 2 +- .../spring-security-okta/pom.xml | 10 +++-- .../spring-security-saml/pom.xml | 4 +- .../server/pom.xml | 8 ++-- .../spring-security-web-boot-1/pom.xml | 9 ++--- .../spring-security-web-boot-2/pom.xml | 18 ++++----- .../spring-security-web-boot-3/pom.xml | 6 +-- .../spring-security-web-digest-auth/pom.xml | 30 ++------------ .../spring-security-web-login/pom.xml | 21 ++-------- .../spring-security-web-mvc-custom/pom.xml | 28 ++----------- .../spring-security-web-mvc/pom.xml | 13 ++---- .../pom.xml | 40 ++++--------------- .../spring-security-web-react/pom.xml | 29 +++----------- .../pom.xml | 35 ++-------------- .../spring-security-web-rest-custom/pom.xml | 33 ++------------- .../spring-security-web-rest/pom.xml | 37 +++-------------- .../spring-security-web-sockets/pom.xml | 14 ++----- .../spring-security-web-thymeleaf/pom.xml | 7 ++-- .../spring-security-web-x509/pom.xml | 7 ++-- .../pom.xml | 7 ++-- .../pom.xml | 7 ++-- .../spring-session/pom.xml | 7 ++-- .../spring-session-jdbc/pom.xml | 4 +- .../spring-session-mongodb/pom.xml | 8 +--- .../spring-session-redis/pom.xml | 7 ++-- .../spring-social-login/pom.xml | 22 ++-------- 44 files changed, 182 insertions(+), 406 deletions(-) diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml index bb2702fc9d..0f4ba872ba 100644 --- a/spring-security-modules/pom.xml +++ b/spring-security-modules/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-modules 0.0.1-SNAPSHOT @@ -37,7 +38,7 @@ spring-security-web-mvc-custom spring-security-web-mvc spring-security-web-persisted-remember-me - spring-security-web-react + spring-security-web-react spring-security-web-rest-basic-auth spring-security-web-rest-custom spring-security-web-rest @@ -48,4 +49,4 @@ spring-social-login - + \ No newline at end of file diff --git a/spring-security-modules/spring-5-security-cognito/pom.xml b/spring-security-modules/spring-5-security-cognito/pom.xml index 877dbd52fa..4da8b2fae5 100644 --- a/spring-security-modules/spring-5-security-cognito/pom.xml +++ b/spring-security-modules/spring-5-security-cognito/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-5-security-cognito @@ -32,7 +33,6 @@ org.thymeleaf.extras thymeleaf-extras-springsecurity5 - org.springframework.security @@ -62,4 +62,4 @@ com.baeldung.cognito.SpringCognitoApplication - + \ No newline at end of file diff --git a/spring-security-modules/spring-5-security-oauth/pom.xml b/spring-security-modules/spring-5-security-oauth/pom.xml index d31cf293a3..03e1880431 100644 --- a/spring-security-modules/spring-5-security-oauth/pom.xml +++ b/spring-security-modules/spring-5-security-oauth/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-5-security-oauth @@ -36,7 +37,6 @@ org.springframework.boot spring-boot-starter-jersey - org.springframework.security.oauth.boot @@ -51,7 +51,6 @@ org.springframework.security spring-security-oauth2-jose - org.springframework spring-test @@ -72,4 +71,4 @@ com.baeldung.oauth2.SpringOAuthApplication - + \ No newline at end of file diff --git a/spring-security-modules/spring-5-security/pom.xml b/spring-security-modules/spring-5-security/pom.xml index d009115c92..73b956d1e7 100644 --- a/spring-security-modules/spring-5-security/pom.xml +++ b/spring-security-modules/spring-5-security/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-5-security 0.0.1-SNAPSHOT @@ -76,4 +77,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-ldap/pom.xml b/spring-security-modules/spring-ldap/pom.xml index 60da7d4c0d..44f754673f 100644 --- a/spring-security-modules/spring-ldap/pom.xml +++ b/spring-security-modules/spring-ldap/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-ldap 0.1-SNAPSHOT @@ -14,7 +15,6 @@ - org.springframework.ldap spring-ldap-core @@ -26,13 +26,11 @@ - org.springframework spring-context ${spring-context.version} - org.springframework.ldap @@ -46,7 +44,6 @@ - org.apache.directory.server @@ -84,8 +81,6 @@ ${shared-ldap.version} test - - org.springframework.data diff --git a/spring-security-modules/spring-security-acl/pom.xml b/spring-security-modules/spring-security-acl/pom.xml index 5c04aaa9ca..7facc1b14b 100644 --- a/spring-security-modules/spring-security-acl/pom.xml +++ b/spring-security-modules/spring-security-acl/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-acl 0.0.1-SNAPSHOT @@ -58,4 +59,4 @@ 2.6.11 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-auth0/pom.xml b/spring-security-modules/spring-security-auth0/pom.xml index 0bd879a40b..106a0db29f 100644 --- a/spring-security-modules/spring-security-auth0/pom.xml +++ b/spring-security-modules/spring-security-auth0/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-auth0 1.0-SNAPSHOT @@ -23,20 +24,20 @@ org.springframework.boot spring-boot-starter-security - - org.springframework.security - spring-security-core - - - org.springframework.security - spring-security-oauth2-resource-server - - - com.auth0 - mvc-auth-commons - ${mvc-auth-commons.version} - - + + org.springframework.security + spring-security-core + + + org.springframework.security + spring-security-oauth2-resource-server + + + com.auth0 + mvc-auth-commons + ${mvc-auth-commons.version} + + org.json json ${json.version} @@ -72,4 +73,5 @@ 20190722 1.2.0 + \ No newline at end of file diff --git a/spring-security-modules/spring-security-config/cache-control/pom.xml b/spring-security-modules/spring-security-config/cache-control/pom.xml index 753307493d..b10d65615e 100644 --- a/spring-security-modules/spring-security-config/cache-control/pom.xml +++ b/spring-security-modules/spring-security-config/cache-control/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 cache-control 1.0-SNAPSHOT @@ -26,7 +27,6 @@ org.springframework.boot spring-boot-starter-security - org.springframework.boot spring-boot-starter-test diff --git a/spring-security-modules/spring-security-config/cors/pom.xml b/spring-security-modules/spring-security-config/cors/pom.xml index 175b21a77d..2b8efb9add 100644 --- a/spring-security-modules/spring-security-config/cors/pom.xml +++ b/spring-security-modules/spring-security-config/cors/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 cors cors @@ -35,7 +36,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -57,4 +57,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-config/pom.xml b/spring-security-modules/spring-security-config/pom.xml index 2b6b6b6b4e..860a602aeb 100644 --- a/spring-security-modules/spring-security-config/pom.xml +++ b/spring-security-modules/spring-security-config/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-config 0.0.1-SNAPSHOT @@ -19,4 +20,4 @@ cors - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-core/pom.xml b/spring-security-modules/spring-security-core/pom.xml index 9f1e7cda29..0eb70c0853 100644 --- a/spring-security-modules/spring-security-core/pom.xml +++ b/spring-security-modules/spring-security-core/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-core @@ -99,4 +100,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-ldap/pom.xml b/spring-security-modules/spring-security-ldap/pom.xml index baed682186..3755c33125 100644 --- a/spring-security-modules/spring-security-ldap/pom.xml +++ b/spring-security-modules/spring-security-ldap/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-ldap 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -33,24 +33,21 @@ org.springframework.boot spring-boot-starter-actuator - org.springframework.security spring-security-ldap - org.apache.directory.server apacheds-server-jndi ${apacheds.version} - - spring-security-mvc-ldap + spring-security-ldap src/main/resources @@ -63,4 +60,4 @@ 1.5.5 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-legacy-oidc/pom.xml b/spring-security-modules/spring-security-legacy-oidc/pom.xml index a4ead0f6e0..148b836137 100644 --- a/spring-security-modules/spring-security-legacy-oidc/pom.xml +++ b/spring-security-modules/spring-security-legacy-oidc/pom.xml @@ -24,24 +24,20 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-tomcat - org.springframework.security.oauth spring-security-oauth2 ${spring-security-oauth2.version} - org.springframework.security spring-security-jwt ${spring-security-jwt.version} - com.auth0 jwks-rsa @@ -55,4 +51,4 @@ 0.3.0 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-oauth2-sso/pom.xml b/spring-security-modules/spring-security-oauth2-sso/pom.xml index a272ba5b50..c9f9274c98 100644 --- a/spring-security-modules/spring-security-oauth2-sso/pom.xml +++ b/spring-security-modules/spring-security-oauth2-sso/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-security-oauth2-sso @@ -30,4 +31,4 @@ 2.0.0-M2 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-auth-server/pom.xml b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-auth-server/pom.xml index 20a43eaf04..1a8d1b580f 100644 --- a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-auth-server/pom.xml +++ b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-auth-server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-sso-auth-server spring-security-sso-auth-server @@ -24,4 +25,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-kerberos/pom.xml b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-kerberos/pom.xml index f17ca171a5..c18769df1e 100644 --- a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-kerberos/pom.xml +++ b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-kerberos/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-security-sso-kerberos @@ -91,9 +91,9 @@ - + - com.baeldung.intro.Application + com.baeldung.intro.Application \ No newline at end of file diff --git a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui-2/pom.xml b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui-2/pom.xml index 514dd0d0f7..cd510a972a 100644 --- a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui-2/pom.xml +++ b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-sso-ui-2 spring-security-sso-ui-2 @@ -13,33 +14,27 @@ - org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-security - org.springframework.security.oauth.boot spring-security-oauth2-autoconfigure ${oauth-auto.version} - org.springframework.boot spring-boot-starter-thymeleaf - org.thymeleaf.extras thymeleaf-extras-springsecurity5 - - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui/pom.xml b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui/pom.xml index 5076b1878b..ec2da615f4 100644 --- a/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui/pom.xml +++ b/spring-security-modules/spring-security-oauth2-sso/spring-security-sso-ui/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-sso-ui spring-security-sso-ui @@ -13,34 +14,27 @@ - org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-security - org.springframework.security.oauth.boot spring-security-oauth2-autoconfigure ${oauth-auto.version} - - org.springframework.boot spring-boot-starter-thymeleaf - org.thymeleaf.extras thymeleaf-extras-springsecurity5 - - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-oidc/pom.xml b/spring-security-modules/spring-security-oidc/pom.xml index b9a4b340a3..2a413b1d27 100644 --- a/spring-security-modules/spring-security-oidc/pom.xml +++ b/spring-security-modules/spring-security-oidc/pom.xml @@ -26,4 +26,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-okta/pom.xml b/spring-security-modules/spring-security-okta/pom.xml index c5ff9013b5..98b8abedb4 100644 --- a/spring-security-modules/spring-security-okta/pom.xml +++ b/spring-security-modules/spring-security-okta/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-okta 1.0-SNAPSHOT @@ -55,8 +56,9 @@ - + 1.4.0 - + + \ No newline at end of file diff --git a/spring-security-modules/spring-security-saml/pom.xml b/spring-security-modules/spring-security-saml/pom.xml index 561582045a..8a9b418374 100644 --- a/spring-security-modules/spring-security-saml/pom.xml +++ b/spring-security-modules/spring-security-saml/pom.xml @@ -14,6 +14,7 @@ 0.0.1-SNAPSHOT ../../parent-boot-2 + Shibboleth @@ -70,4 +71,5 @@ 1.0.10.RELEASE - + + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-angular/server/pom.xml b/spring-security-modules/spring-security-web-angular/server/pom.xml index 07d5d44e8d..2e9ff9969d 100644 --- a/spring-security-modules/spring-security-web-angular/server/pom.xml +++ b/spring-security-modules/spring-security-web-angular/server/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 server 0.0.1-SNAPSHOT @@ -40,7 +41,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -62,4 +62,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-boot-1/pom.xml b/spring-security-modules/spring-security-web-boot-1/pom.xml index 1f80b62765..a376a49b4c 100644 --- a/spring-security-modules/spring-security-web-boot-1/pom.xml +++ b/spring-security-modules/spring-security-web-boot-1/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-security-web-boot-1 0.0.1-SNAPSHOT @@ -223,10 +223,9 @@ com.baeldung.roles.custom.Application - + - 1.1.2 1.6.1 2.6.11 diff --git a/spring-security-modules/spring-security-web-boot-2/pom.xml b/spring-security-modules/spring-security-web-boot-2/pom.xml index ca357509a3..ade644741d 100644 --- a/spring-security-modules/spring-security-web-boot-2/pom.xml +++ b/spring-security-modules/spring-security-web-boot-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-security-web-boot-2 0.0.1-SNAPSHOT @@ -184,7 +184,6 @@ - entryPoints @@ -222,19 +221,18 @@ - + com.baeldung.multiplelogin.MultipleLoginApplication - + - + - 1.1.2 1.6.1 2.6.11 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-boot-3/pom.xml b/spring-security-modules/spring-security-web-boot-3/pom.xml index a6e2b48d75..1fff259c16 100644 --- a/spring-security-modules/spring-security-web-boot-3/pom.xml +++ b/spring-security-modules/spring-security-web-boot-3/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-security-web-boot-3 0.0.1-SNAPSHOT @@ -27,4 +27,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-digest-auth/pom.xml b/spring-security-modules/spring-security-web-digest-auth/pom.xml index 39433c1295..710a3dd3b6 100644 --- a/spring-security-modules/spring-security-web-digest-auth/pom.xml +++ b/spring-security-modules/spring-security-web-digest-auth/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-web-digest-auth @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -28,9 +27,7 @@ spring-security-config ${org.springframework.security.version} - - org.springframework spring-core @@ -72,7 +69,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -83,37 +79,30 @@ spring-webmvc ${spring.version} - org.springframework spring-oxm ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - com.google.guava guava ${guava.version} - org.apache.httpcomponents httpcore @@ -125,7 +114,6 @@ - org.apache.httpcomponents httpclient @@ -137,35 +125,28 @@ - - org.springframework spring-test ${spring.version} test - - - spring-security-mvc-digest-auth + spring-security-web-digest-auth src/main/resources true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - org.codehaus.cargo cargo-maven2-plugin @@ -186,21 +167,16 @@ - - 4.2.6.RELEASE - 19.0 - 4.4.5 4.5.2 - 1.6.1 diff --git a/spring-security-modules/spring-security-web-login/pom.xml b/spring-security-modules/spring-security-web-login/pom.xml index 2b64d157d3..ac5393c1a0 100644 --- a/spring-security-modules/spring-security-web-login/pom.xml +++ b/spring-security-modules/spring-security-web-login/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-web-login @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -33,9 +32,7 @@ spring-security-taglibs ${spring-security.version} - - org.springframework spring-core @@ -77,7 +74,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -88,25 +84,20 @@ spring-webmvc ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - org.springframework spring-test @@ -119,20 +110,17 @@ ${spring-security.version} test - - spring-security-mvc-login + spring-security-web-login src/main/resources true - - org.apache.maven.plugins maven-war-plugin @@ -147,7 +135,6 @@ - org.codehaus.cargo cargo-maven2-plugin @@ -168,9 +155,7 @@ - - diff --git a/spring-security-modules/spring-security-web-mvc-custom/pom.xml b/spring-security-modules/spring-security-web-mvc-custom/pom.xml index bd4a800bc5..539f83d7b8 100644 --- a/spring-security-modules/spring-security-web-mvc-custom/pom.xml +++ b/spring-security-modules/spring-security-web-mvc-custom/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-web-mvc-custom @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -33,9 +32,7 @@ spring-security-taglibs ${spring-security.version} - - org.springframework spring-core @@ -77,7 +74,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -88,59 +84,48 @@ spring-webmvc ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - org.apache.commons commons-lang3 ${commons-lang3.version} - com.google.guava guava ${guava.version} - - org.springframework spring-test ${spring.version} test - org.springframework.security spring-security-test @@ -150,22 +135,19 @@ - spring-security-mvc-custom + spring-security-web-mvc-custom src/main/resources true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - org.codehaus.cargo cargo-maven2-plugin @@ -186,18 +168,14 @@ - - 19.0 - 1.6.1 - \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-mvc/pom.xml b/spring-security-modules/spring-security-web-mvc/pom.xml index b1e94b2db3..505826d1a2 100644 --- a/spring-security-modules/spring-security-web-mvc/pom.xml +++ b/spring-security-modules/spring-security-web-mvc/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-security-web-mvc 0.1-SNAPSHOT @@ -16,9 +16,7 @@ - - org.springframework.boot spring-boot-starter-security @@ -27,7 +25,6 @@ org.springframework.security spring-security-taglibs - org.springframework.boot @@ -42,19 +39,16 @@ org.springframework.boot spring-boot-starter-tomcat - javax.servlet jstl runtime - io.dropwizard.metrics metrics-core - org.springframework.boot @@ -67,7 +61,6 @@ ${javax.version} - @@ -86,4 +79,4 @@ 4.0.1 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-persisted-remember-me/pom.xml b/spring-security-modules/spring-security-web-persisted-remember-me/pom.xml index 25c5ddd9d0..66a2b3866b 100644 --- a/spring-security-modules/spring-security-web-persisted-remember-me/pom.xml +++ b/spring-security-modules/spring-security-web-persisted-remember-me/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-web-persisted-remember-me @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -38,9 +37,7 @@ spring-orm ${spring.version} - - org.springframework spring-core @@ -82,7 +79,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -93,81 +89,66 @@ spring-webmvc ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - com.h2database h2 ${h2.version} - org.postgresql postgresql ${postgresql.version} runtime - - com.google.guava guava ${guava.version} - - org.springframework.boot - spring-boot-starter-test - ${spring-boot.version} - test - - + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + - - - spring-security-mvc-persisted-remember-me + spring-security-web-persisted-remember-me src/main/resources true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - org.codehaus.cargo cargo-maven2-plugin @@ -188,21 +169,16 @@ - - 4.2.6.RELEASE - 9.4.1212 - 19.0 - 1.6.1 1.5.10.RELEASE diff --git a/spring-security-modules/spring-security-web-react/pom.xml b/spring-security-modules/spring-security-web-react/pom.xml index 663c7d76c3..e8f74413ff 100644 --- a/spring-security-modules/spring-security-web-react/pom.xml +++ b/spring-security-modules/spring-security-web-react/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-react 0.1-SNAPSHOT @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -33,9 +32,7 @@ spring-security-taglibs ${spring-security.version} - - org.springframework spring-core @@ -56,7 +53,6 @@ spring-aop ${spring.version} - org.springframework spring-web @@ -67,9 +63,7 @@ spring-webmvc ${spring.version} - - javax.servlet javax.servlet-api @@ -82,7 +76,6 @@ ${jstl.version} runtime - org.springframework.boot @@ -90,20 +83,17 @@ 1.5.10.RELEASE test - - spring-security-react + spring-security-web-react src/main/resources true - - org.apache.maven.plugins maven-war-plugin @@ -118,7 +108,6 @@ - com.github.eirslett frontend-maven-plugin @@ -152,27 +141,22 @@ - org.eclipse.jetty jetty-maven-plugin 9.4.11.v20180605 - - default-first - com.github.eirslett frontend-maven-plugin - install node and npm @@ -193,13 +177,11 @@ default-second - com.github.eirslett frontend-maven-plugin - install node and npm @@ -223,14 +205,13 @@ 19.0 - 2.7 1.6 9.4.11.v20180605 - v8.11.3 6.1.0 + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml b/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml index 0dc0b9cc42..de28df1933 100644 --- a/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml +++ b/spring-security-modules/spring-security-web-rest-basic-auth/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 spring-security-web-rest-basic-auth @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -28,9 +27,7 @@ spring-security-config ${spring-security.version} - - org.springframework spring-core @@ -72,7 +69,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -83,23 +79,18 @@ spring-webmvc ${spring.version} - org.springframework spring-oxm ${spring.version} - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - - @@ -111,7 +102,6 @@ - org.apache.httpcomponents httpcore @@ -123,7 +113,6 @@ - org.apache.httpcomponents httpclient @@ -135,59 +124,48 @@ - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - - com.google.guava guava ${guava.version} - - org.springframework spring-test ${spring.version} test - - spring-security-rest-basic-auth + spring-security-web-rest-basic-auth src/main/resources true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - org.codehaus.cargo cargo-maven2-plugin @@ -208,9 +186,7 @@ - - @@ -238,7 +214,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -262,21 +237,17 @@ - - 4.4.11 4.5.8 - 19.0 - 1.6.1 diff --git a/spring-security-modules/spring-security-web-rest-custom/pom.xml b/spring-security-modules/spring-security-web-rest-custom/pom.xml index 0ba7f95de7..85e50412ad 100644 --- a/spring-security-modules/spring-security-web-rest-custom/pom.xml +++ b/spring-security-modules/spring-security-web-rest-custom/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-rest-custom 0.1-SNAPSHOT @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -34,9 +33,7 @@ org.thymeleaf thymeleaf-spring5 - - org.springframework spring-core @@ -65,7 +62,6 @@ org.springframework spring-expression - org.springframework spring-web @@ -74,53 +70,41 @@ org.springframework spring-webmvc - org.springframework spring-oxm - commons-logging commons-logging ${commons-logging.version} - - com.fasterxml.jackson.core jackson-databind - - javax.servlet javax.servlet-api provided - javax.servlet jstl runtime - - org.apache.httpcomponents httpcore - org.apache.httpcomponents httpclient - - com.google.guava guava @@ -131,32 +115,27 @@ commons-lang3 ${commons-lang3.version} - - org.hamcrest hamcrest test - org.mockito mockito-core test - - spring-security-rest-custom + spring-security-web-rest-custom src/main/resources true - org.springframework.boot @@ -172,7 +151,6 @@ false - org.codehaus.cargo cargo-maven2-plugin @@ -193,16 +171,13 @@ - - 19.0 1.2 - 1.6.1 diff --git a/spring-security-modules/spring-security-web-rest/pom.xml b/spring-security-modules/spring-security-web-rest/pom.xml index 2330243aa6..c3f2c09e9e 100644 --- a/spring-security-modules/spring-security-web-rest/pom.xml +++ b/spring-security-modules/spring-security-web-rest/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-rest 0.1-SNAPSHOT @@ -15,9 +16,7 @@ - - org.springframework.security spring-security-web @@ -28,9 +27,7 @@ spring-security-config ${spring-security.version} - - org.springframework spring-core @@ -72,7 +69,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -83,37 +79,30 @@ spring-webmvc ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - javax.validation validation-api ${javax.validation.version} - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - com.google.guava @@ -125,7 +114,6 @@ commons-lang3 ${commons-lang3.version} - org.springframework @@ -133,15 +121,12 @@ ${spring.version} test - org.springframework.security spring-security-test ${spring-security.version} test - - com.jayway.restassured rest-assured @@ -154,37 +139,32 @@ - io.springfox springfox-swagger2 ${springfox-swagger.version} - io.springfox springfox-swagger-ui ${springfox-swagger.version} - commons-fileupload commons-fileupload ${commons-fileupload.version} - - spring-security-rest + spring-security-web-rest src/main/resources true - org.codehaus.cargo @@ -205,9 +185,7 @@ - - @@ -235,7 +213,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -267,18 +244,14 @@ 1.1.0.Final - 26.0-jre - 2.9.0 - 2.9.2 - 1.6.1 - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-sockets/pom.xml b/spring-security-modules/spring-security-web-sockets/pom.xml index 4aecf296b4..e822b6beda 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.springsecuredsockets spring-security-web-sockets @@ -50,7 +51,6 @@ - org.springframework.security @@ -62,7 +62,6 @@ spring-security-config ${spring-security.version} - org.springframework.data @@ -79,7 +78,6 @@ h2 ${h2.version} - org.springframework @@ -96,7 +94,6 @@ spring-security-messaging ${spring-security.version} - org.slf4j @@ -108,7 +105,6 @@ logback-classic ${logback-classic.version} - javax.servlet @@ -130,7 +126,6 @@ jstl ${jstl.version} - com.fasterxml.jackson.core @@ -147,7 +142,6 @@ jackson-annotations ${jackson.version} - org.springframework.boot @@ -158,7 +152,7 @@ - spring-security-mvc-socket + spring-security-web-sockets org.apache.tomcat.maven diff --git a/spring-security-modules/spring-security-web-thymeleaf/pom.xml b/spring-security-modules/spring-security-web-thymeleaf/pom.xml index 196ec0b86f..8e6e0856af 100644 --- a/spring-security-modules/spring-security-web-thymeleaf/pom.xml +++ b/spring-security-modules/spring-security-web-thymeleaf/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-thymeleaf 0.0.1-SNAPSHOT @@ -54,4 +55,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-x509/pom.xml b/spring-security-modules/spring-security-web-x509/pom.xml index 045c0aba6a..5282ab7d83 100644 --- a/spring-security-modules/spring-security-web-x509/pom.xml +++ b/spring-security-modules/spring-security-web-x509/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-x509 0.0.1-SNAPSHOT @@ -34,4 +35,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-x509/spring-security-web-x509-basic-auth/pom.xml b/spring-security-modules/spring-security-web-x509/spring-security-web-x509-basic-auth/pom.xml index 917ffa6b0e..9598843b63 100644 --- a/spring-security-modules/spring-security-web-x509/spring-security-web-x509-basic-auth/pom.xml +++ b/spring-security-modules/spring-security-web-x509/spring-security-web-x509-basic-auth/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-x509-basic-auth 0.0.1-SNAPSHOT @@ -35,4 +36,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-x509/spring-security-web-x509-client-auth/pom.xml b/spring-security-modules/spring-security-web-x509/spring-security-web-x509-client-auth/pom.xml index fdbc90c0f6..f310ab1e5c 100644 --- a/spring-security-modules/spring-security-web-x509/spring-security-web-x509-client-auth/pom.xml +++ b/spring-security-modules/spring-security-web-x509/spring-security-web-x509-client-auth/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-security-web-x509-client-auth 0.0.1-SNAPSHOT @@ -71,4 +72,4 @@ - + \ No newline at end of file diff --git a/spring-security-modules/spring-session/pom.xml b/spring-security-modules/spring-session/pom.xml index ac10700240..aec64da088 100644 --- a/spring-security-modules/spring-session/pom.xml +++ b/spring-security-modules/spring-session/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung spring-session @@ -21,4 +22,4 @@ spring-session-mongodb - + \ No newline at end of file diff --git a/spring-security-modules/spring-session/spring-session-jdbc/pom.xml b/spring-security-modules/spring-session/spring-session-jdbc/pom.xml index 95c366fc2e..64bbce44f2 100644 --- a/spring-security-modules/spring-session/spring-session-jdbc/pom.xml +++ b/spring-security-modules/spring-session/spring-session-jdbc/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-session-jdbc 0.0.1-SNAPSHOT diff --git a/spring-security-modules/spring-session/spring-session-mongodb/pom.xml b/spring-security-modules/spring-session/spring-session-mongodb/pom.xml index 82c8520356..878dfeb690 100644 --- a/spring-security-modules/spring-session/spring-session-mongodb/pom.xml +++ b/spring-security-modules/spring-session/spring-session-mongodb/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-session-mongodb 0.0.1-SNAPSHOT @@ -21,23 +21,19 @@ org.springframework.boot spring-boot-starter-web - org.springframework.session spring-session-data-mongodb - org.springframework.boot spring-boot-starter-data-mongodb - org.springframework.boot spring-boot-starter-test test - de.flapdoodle.embed de.flapdoodle.embed.mongo diff --git a/spring-security-modules/spring-session/spring-session-redis/pom.xml b/spring-security-modules/spring-session/spring-session-redis/pom.xml index 36eb632e1c..6824a3632d 100644 --- a/spring-security-modules/spring-session/spring-session-redis/pom.xml +++ b/spring-security-modules/spring-session/spring-session-redis/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-session-redis 1.0.0-SNAPSHOT @@ -36,7 +37,7 @@ embedded-redis ${embedded-redis.version} - + redis.clients jedis jar diff --git a/spring-security-modules/spring-social-login/pom.xml b/spring-security-modules/spring-social-login/pom.xml index 209a546a5a..ad4b7c72a6 100644 --- a/spring-security-modules/spring-social-login/pom.xml +++ b/spring-security-modules/spring-social-login/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-social-login spring-social-login @@ -14,68 +15,54 @@ - org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-thymeleaf - org.springframework.security spring-security-web - org.springframework.security spring-security-config - org.springframework.security spring-security-taglibs - org.thymeleaf.extras thymeleaf-extras-springsecurity5 - - org.springframework.social spring-social-facebook ${spring.social.facebook.version} - org.springframework.boot spring-boot-starter-data-jpa - com.h2database h2 - - org.springframework spring-test test - org.apache.commons commons-lang3 ${commons-lang3.version} - @@ -86,7 +73,6 @@ true - org.apache.maven.plugins @@ -94,7 +80,7 @@ - + 2.0.3.RELEASE From e5aba6f8616aaaa1c63a5bbecb8a1cd5677a68ab Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Mon, 17 May 2021 20:23:08 +0530 Subject: [PATCH 067/160] JAVA-5223: Fix formatting of POMs (Other Spring Modules) --- spring-shell/pom.xml | 7 +- spring-sleuth/pom.xml | 7 +- spring-soap/pom.xml | 9 +- spring-spel/pom.xml | 5 +- spring-state-machine/pom.xml | 5 +- spring-static-resources/pom.xml | 17 +--- spring-swagger-codegen/pom.xml | 7 +- .../pom.xml | 90 +++++++++---------- .../spring-swagger-codegen-api-client/pom.xml | 13 +-- .../spring-swagger-codegen-app/pom.xml | 7 +- spring-threads/pom.xml | 7 +- spring-vault/pom.xml | 8 +- spring-vertx/pom.xml | 9 +- spring-webflux-amqp/pom.xml | 13 ++- spring-websockets/pom.xml | 7 +- 15 files changed, 96 insertions(+), 115 deletions(-) diff --git a/spring-shell/pom.xml b/spring-shell/pom.xml index be1562b942..4e64436486 100644 --- a/spring-shell/pom.xml +++ b/spring-shell/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-shell 0.1-SNAPSHOT @@ -26,4 +27,4 @@ 1.2.0.RELEASE - + \ No newline at end of file diff --git a/spring-sleuth/pom.xml b/spring-sleuth/pom.xml index c37086558d..5fd109e968 100644 --- a/spring-sleuth/pom.xml +++ b/spring-sleuth/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-sleuth 1.0.0-SNAPSHOT @@ -41,4 +42,4 @@ 2.0.2.RELEASE - + \ No newline at end of file diff --git a/spring-soap/pom.xml b/spring-soap/pom.xml index bea3d033e6..8188178d61 100644 --- a/spring-soap/pom.xml +++ b/spring-soap/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-soap 1.0.0 @@ -37,7 +38,6 @@ org.springframework.boot spring-boot-maven-plugin - org.codehaus.mojo @@ -58,7 +58,6 @@ - org.jvnet.jaxb2.maven2 maven-jaxb2-plugin @@ -84,4 +83,4 @@ - + \ No newline at end of file diff --git a/spring-spel/pom.xml b/spring-spel/pom.xml index 2109117a86..9ea51cd796 100644 --- a/spring-spel/pom.xml +++ b/spring-spel/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-spel 1.0-SNAPSHOT diff --git a/spring-state-machine/pom.xml b/spring-state-machine/pom.xml index acb14a7613..bc2b67cc38 100644 --- a/spring-state-machine/pom.xml +++ b/spring-state-machine/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-state-machine spring-state-machine diff --git a/spring-static-resources/pom.xml b/spring-static-resources/pom.xml index 662c757f54..2841da9028 100644 --- a/spring-static-resources/pom.xml +++ b/spring-static-resources/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-static-resources 0.1.0-SNAPSHOT @@ -31,7 +32,6 @@ spring-security-taglibs ${spring-security.version} - org.springframework @@ -74,7 +74,6 @@ spring-expression ${spring.version} - org.springframework spring-web @@ -85,7 +84,6 @@ spring-webmvc ${spring.version} - org.aspectj @@ -97,7 +95,6 @@ javax.inject ${inject.version} - javax.servlet @@ -119,41 +116,35 @@ jackson-databind ${jackson.version} - org.hibernate hibernate-validator ${hibernate-validator.version} - joda-time joda-time ${joda-time.version} - com.github.jknack handlebars ${handlebars.version} - commons-io commons-io ${commons-io.version} - org.springframework spring-test ${spring.version} test - @@ -204,14 +195,12 @@ 1.8.9 2.3.2-b02 - 6.0.10.Final 4.1.0 2.10 4.0.1 1 - 1.5.1 diff --git a/spring-swagger-codegen/pom.xml b/spring-swagger-codegen/pom.xml index 39d8902956..93cb51d07c 100644 --- a/spring-swagger-codegen/pom.xml +++ b/spring-swagger-codegen/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-swagger-codegen 0.0.1-SNAPSHOT @@ -19,4 +20,4 @@ spring-swagger-codegen-app - + \ No newline at end of file diff --git a/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml b/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml index 3074849e4c..c3e694ba80 100644 --- a/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml +++ b/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.baeldung spring-openapi-generator-api-client @@ -13,7 +14,6 @@ scm:git:git@github.com:openapitools/openapi-generator.git https://github.com/openapitools/openapi-generator - Unlicense @@ -21,7 +21,6 @@ repo - OpenAPI-Generator Contributors @@ -31,51 +30,24 @@ - - - sign-artifacts - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - - - - - io.swagger swagger-annotations ${swagger-annotations-version} - com.google.code.findbugs jsr305 3.0.2 - org.springframework spring-web ${spring-web-version} - com.fasterxml.jackson.core @@ -102,17 +74,16 @@ jackson-databind-nullable ${jackson-databind-nullable-version} - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson-version} - - - com.github.joschi.jackson - jackson-datatype-threetenbp - ${jackson-threetenbp-version} - - + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson-version} + + + com.github.joschi.jackson + jackson-datatype-threetenbp + ${jackson-threetenbp-version} + junit @@ -174,7 +145,6 @@ - org.apache.maven.plugins @@ -191,7 +161,6 @@ - org.codehaus.mojo build-helper-maven-plugin @@ -228,8 +197,8 @@ maven-compiler-plugin 3.6.1 - 1.8 - 1.8 + 1.8 + 1.8 @@ -261,14 +230,39 @@ + + + sign-artifacts + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + 1.5.22 4.3.9.RELEASE 2.11.1 - + 0.2.1 2.9.10 1.0.0 4.13 - + + \ No newline at end of file diff --git a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml index b9b97139d6..c9ba912feb 100644 --- a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml +++ b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml @@ -1,19 +1,18 @@ - + 4.0.0 spring-swagger-codegen-api-client spring-swagger-codegen-api-client jar https://github.com/swagger-api/swagger-codegen Swagger Java - scm:git:git@github.com:swagger-api/swagger-codegen.git scm:git:git@github.com:swagger-api/swagger-codegen.git https://github.com/swagger-api/swagger-codegen - Unlicense @@ -21,7 +20,6 @@ repo - Swagger @@ -44,14 +42,12 @@ swagger-annotations ${swagger-annotations-version} - org.springframework spring-web ${spring-web-version} - com.fasterxml.jackson.core @@ -103,7 +99,6 @@ - org.codehaus.mojo build-helper-maven-plugin @@ -199,4 +194,4 @@ 1.10 - + \ No newline at end of file diff --git a/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml b/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml index cb3fe89c8f..493b7201ee 100644 --- a/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml +++ b/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-swagger-codegen-app spring-swagger-codegen-app @@ -46,4 +47,4 @@ 1.5.10.RELEASE - + \ No newline at end of file diff --git a/spring-threads/pom.xml b/spring-threads/pom.xml index 4513c627b9..31984bfbf5 100644 --- a/spring-threads/pom.xml +++ b/spring-threads/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-threads 0.0.1-SNAPSHOT @@ -22,4 +23,4 @@ - + \ No newline at end of file diff --git a/spring-vault/pom.xml b/spring-vault/pom.xml index a39c5575a9..759de80a6b 100644 --- a/spring-vault/pom.xml +++ b/spring-vault/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 spring-vault 0.0.1-SNAPSHOT @@ -41,4 +41,4 @@ 2.1.1.RELEASE - + \ No newline at end of file diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml index ef169c9a27..bd2dfa6cf6 100644 --- a/spring-vertx/pom.xml +++ b/spring-vertx/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-vertx spring-vertx @@ -29,13 +30,11 @@ - io.vertx vertx-web ${vertx.version} - com.h2database h2 @@ -61,4 +60,4 @@ 3.4.1 - + \ No newline at end of file diff --git a/spring-webflux-amqp/pom.xml b/spring-webflux-amqp/pom.xml index 7a7f6ef600..498556da2d 100755 --- a/spring-webflux-amqp/pom.xml +++ b/spring-webflux-amqp/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 com.baeldung.spring spring-webflux-amqp @@ -22,7 +23,7 @@ org.springframework.boot spring-boot-dependencies - + 2.1.3.RELEASE pom import @@ -39,25 +40,21 @@ org.springframework.boot spring-boot-starter-webflux - org.springframework.boot spring-boot-configuration-processor true - org.springframework.boot spring-boot-starter-test test - io.projectreactor reactor-test test - org.springframework.boot spring-boot-starter-integration @@ -73,4 +70,4 @@ - + \ No newline at end of file diff --git a/spring-websockets/pom.xml b/spring-websockets/pom.xml index d2a32a8eb6..a28ef8749a 100644 --- a/spring-websockets/pom.xml +++ b/spring-websockets/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-websockets spring-websockets @@ -43,4 +44,4 @@ - + \ No newline at end of file From 5b49805e3c8bfdd659c0bd98f4427b1e3f0c4bf9 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Mon, 17 May 2021 20:23:25 +0530 Subject: [PATCH 068/160] JAVA-5223: Fix formatting of POMs (Spring Web Modules) --- spring-web-modules/pom.xml | 9 ++-- spring-web-modules/spring-5-mvc/pom.xml | 6 +-- spring-web-modules/spring-boot-jsp/pom.xml | 20 ++++----- .../spring-mvc-basics-2/pom.xml | 12 ++--- .../spring-mvc-basics-3/pom.xml | 19 ++------ .../spring-mvc-basics-4/pom.xml | 4 +- spring-web-modules/spring-mvc-basics/pom.xml | 9 ++-- spring-web-modules/spring-mvc-crash/pom.xml | 27 +---------- .../spring-mvc-forms-jsp/pom.xml | 10 ++--- .../spring-mvc-forms-thymeleaf/pom.xml | 8 ++-- spring-web-modules/spring-mvc-java-2/pom.xml | 7 ++- spring-web-modules/spring-mvc-java/pom.xml | 26 ++--------- .../spring-mvc-velocity/pom.xml | 16 ++----- spring-web-modules/spring-mvc-views/pom.xml | 11 +---- spring-web-modules/spring-mvc-webflow/pom.xml | 16 +++---- spring-web-modules/spring-mvc-xml/pom.xml | 25 +---------- .../spring-rest-angular/pom.xml | 7 +-- spring-web-modules/spring-rest-http-2/pom.xml | 7 +-- spring-web-modules/spring-rest-http/pom.xml | 10 ++--- .../spring-rest-query-language/pom.xml | 45 ++----------------- spring-web-modules/spring-rest-shell/pom.xml | 8 ++-- spring-web-modules/spring-rest-simple/pom.xml | 27 ++--------- .../spring-rest-testing/pom.xml | 28 ++---------- .../spring-resttemplate-2/pom.xml | 14 ++---- .../spring-resttemplate-3/pom.xml | 7 +-- .../spring-resttemplate/pom.xml | 29 ++---------- spring-web-modules/spring-thymeleaf-2/pom.xml | 9 ++-- spring-web-modules/spring-thymeleaf-3/pom.xml | 8 ++-- spring-web-modules/spring-thymeleaf/pom.xml | 18 ++------ 29 files changed, 112 insertions(+), 330 deletions(-) diff --git a/spring-web-modules/pom.xml b/spring-web-modules/pom.xml index ca96dcff35..e498185c5e 100644 --- a/spring-web-modules/pom.xml +++ b/spring-web-modules/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-web-modules 0.0.1-SNAPSHOT @@ -18,7 +19,7 @@ spring-mvc-basics spring-mvc-basics-2 spring-mvc-basics-3 - spring-mvc-basics-4 + spring-mvc-basics-4 spring-mvc-crash spring-mvc-forms-jsp spring-mvc-forms-thymeleaf @@ -44,4 +45,4 @@ spring-boot-jsp - + \ No newline at end of file diff --git a/spring-web-modules/spring-5-mvc/pom.xml b/spring-web-modules/spring-5-mvc/pom.xml index ddcce8207b..79a4f73ace 100644 --- a/spring-web-modules/spring-5-mvc/pom.xml +++ b/spring-web-modules/spring-5-mvc/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-5-mvc spring-5-mvc @@ -96,4 +96,4 @@ 0.18 - + \ No newline at end of file diff --git a/spring-web-modules/spring-boot-jsp/pom.xml b/spring-web-modules/spring-boot-jsp/pom.xml index d646b6058a..30335fcc65 100644 --- a/spring-web-modules/spring-boot-jsp/pom.xml +++ b/spring-web-modules/spring-boot-jsp/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-jsp 0.0.1-SNAPSHOT @@ -35,8 +35,8 @@ org.apache.tomcat.embed tomcat-embed-jasper - - + + org.projectlombok @@ -48,12 +48,12 @@ org.springframework.boot spring-boot-starter-web - - - - - - + + + + + + org.springframework.boot spring-boot-starter-test diff --git a/spring-web-modules/spring-mvc-basics-2/pom.xml b/spring-web-modules/spring-mvc-basics-2/pom.xml index adc42d8db8..9136676d20 100644 --- a/spring-web-modules/spring-mvc-basics-2/pom.xml +++ b/spring-web-modules/spring-mvc-basics-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-basics-2 0.0.1-SNAPSHOT @@ -60,7 +61,6 @@ spring-tx ${spring.version} - org.thymeleaf @@ -72,7 +72,6 @@ thymeleaf-spring5 ${org.thymeleaf-version} - org.freemarker @@ -89,21 +88,18 @@ spring-boot-starter-freemarker ${spring-boot.version} - org.codehaus.groovy groovy-templates ${groovy.version} - de.neuland-bfi spring-jade4j ${jade.version} - org.springframework @@ -171,4 +167,4 @@ 2.3.4.RELEASE - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-basics-3/pom.xml b/spring-web-modules/spring-mvc-basics-3/pom.xml index a9245814a8..f9710ff2d1 100644 --- a/spring-web-modules/spring-mvc-basics-3/pom.xml +++ b/spring-web-modules/spring-mvc-basics-3/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-basics-3 spring-mvc-basics-3 @@ -15,69 +16,57 @@ - org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-validation - org.springframework.boot spring-boot-starter-test test - org.springframework.boot spring-boot-starter-thymeleaf provided - org.springframework.boot spring-boot-starter-data-jpa - org.springframework.boot spring-boot-starter-mail - org.springframework.boot spring-boot-starter-actuator - com.h2database h2 runtime - javax.persistence javax.persistence-api ${jpa.version} - com.google.guava guava ${guava.version} - org.subethamail subethasmtp ${subethasmtp.version} test - org.apache.httpcomponents httpclient @@ -146,4 +135,4 @@ 4.5.8 - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-basics-4/pom.xml b/spring-web-modules/spring-mvc-basics-4/pom.xml index 07dddcde0c..067d1ed3b1 100644 --- a/spring-web-modules/spring-mvc-basics-4/pom.xml +++ b/spring-web-modules/spring-mvc-basics-4/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-basics-4 spring-mvc-basics-4 diff --git a/spring-web-modules/spring-mvc-basics/pom.xml b/spring-web-modules/spring-mvc-basics/pom.xml index ac92c7bfe5..9fe4494393 100644 --- a/spring-web-modules/spring-mvc-basics/pom.xml +++ b/spring-web-modules/spring-mvc-basics/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-basics 0.1-SNAPSHOT @@ -28,7 +28,7 @@ commons-fileupload commons-fileupload ${commons-fileupload.version} - + org.apache.tomcat.embed @@ -60,5 +60,4 @@ - - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-crash/pom.xml b/spring-web-modules/spring-mvc-crash/pom.xml index 9a0d97bae9..9574eff2a4 100644 --- a/spring-web-modules/spring-mvc-crash/pom.xml +++ b/spring-web-modules/spring-mvc-crash/pom.xml @@ -15,9 +15,7 @@ - - org.springframework spring-web @@ -28,37 +26,30 @@ spring-webmvc ${org.springframework.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - org.hibernate.validator hibernate-validator ${hibernate-validator.version} - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - commons-io @@ -85,14 +76,12 @@ javax.el ${javax.el.version} - org.springframework.boot spring-boot-starter-test ${spring-boot.version} test - org.crashub @@ -115,7 +104,6 @@ - org.codehaus.groovy @@ -125,52 +113,41 @@ - spring-mvc-xml + spring-mvc-crash src/main/resources true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - - 5.0.2.RELEASE 1.5.10.RELEASE - 5.1.40 - 4.4.5 4.5.2 - 6.0.10.Final 3.0.1-b08 - 19.0 2.8.0 - 1.6.1 - 1.3.2 3.0.0-rc-3 - - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-jsp/pom.xml b/spring-web-modules/spring-mvc-forms-jsp/pom.xml index 0ca23bd6cb..94eb51a32d 100644 --- a/spring-web-modules/spring-mvc-forms-jsp/pom.xml +++ b/spring-web-modules/spring-mvc-forms-jsp/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 0.1-SNAPSHOT spring-mvc-forms-jsp @@ -91,7 +92,7 @@ - spring-mvc-forms + spring-mvc-forms-jsp @@ -102,5 +103,4 @@ 6.0.6 - - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml b/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml index 641f64b93c..fdd569d144 100644 --- a/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-forms-thymeleaf spring-mvc-forms-thymeleaf @@ -23,7 +24,6 @@ org.springframework.boot spring-boot-starter-thymeleaf - org.springframework.boot @@ -42,4 +42,4 @@ com.baeldung.sessionattrs.SessionAttrsApplication - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-java-2/pom.xml b/spring-web-modules/spring-mvc-java-2/pom.xml index 8a025defac..1bbb066786 100644 --- a/spring-web-modules/spring-mvc-java-2/pom.xml +++ b/spring-web-modules/spring-mvc-java-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-java-2 0.1-SNAPSHOT @@ -53,5 +53,4 @@ 5.2.2.RELEASE - - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-java/pom.xml b/spring-web-modules/spring-mvc-java/pom.xml index 1324511215..b8f5ec7910 100644 --- a/spring-web-modules/spring-mvc-java/pom.xml +++ b/spring-web-modules/spring-mvc-java/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-java 0.1-SNAPSHOT @@ -68,8 +69,6 @@ commons-fileupload ${commons-fileupload.version} - - org.thymeleaf @@ -81,7 +80,6 @@ thymeleaf ${thymeleaf.version} - com.jayway.jsonpath json-path @@ -93,14 +91,12 @@ spring-boot-starter-test test - org.apache.poi poi-ooxml ${poi.version} - org.hibernate.validator @@ -122,14 +118,11 @@ true - - maven-resources-plugin ${maven-resources-plugin.version} - org.apache.maven.plugins maven-war-plugin @@ -138,7 +131,6 @@ false - org.codehaus.cargo cargo-maven2-plugin @@ -217,43 +209,34 @@ - 3.0.9.RELEASE - 6.0.10.Final 5.1.40 - 6.0.10.Final - 19.0 2.2.0 - 4.4.5 4.5.2 3.0.7 2.23 - 3.2.2 2.7 1.6.1 3.1.0 - 1.9.1 - 3.16-beta1 - 3.0.1-b09 4.0.1 2.3.3 @@ -262,5 +245,4 @@ com.baeldung.SpringMVCApplication - - + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-velocity/pom.xml b/spring-web-modules/spring-mvc-velocity/pom.xml index 05016962a5..1b1e8b1ea4 100644 --- a/spring-web-modules/spring-mvc-velocity/pom.xml +++ b/spring-web-modules/spring-mvc-velocity/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-velocity 0.1-SNAPSHOT @@ -15,9 +16,7 @@ - - org.springframework spring-web @@ -33,22 +32,18 @@ spring-context-support ${spring.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - org.apache.velocity velocity ${velocity.version} - org.apache.velocity velocity-tools @@ -60,7 +55,6 @@ - org.powermock @@ -80,7 +74,6 @@ ${spring.version} test - @@ -91,7 +84,6 @@ true - org.apache.maven.plugins @@ -107,13 +99,11 @@ 1.6.6 - 4.4.5 4.5.2 1.7 2.0 2.9.0 - 2.7 1.6.1 diff --git a/spring-web-modules/spring-mvc-views/pom.xml b/spring-web-modules/spring-mvc-views/pom.xml index 649814263c..7e48175ff2 100644 --- a/spring-web-modules/spring-mvc-views/pom.xml +++ b/spring-web-modules/spring-mvc-views/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-views war @@ -50,37 +50,31 @@ hibernate-core ${hibernate.version} - org.hsqldb hsqldb ${hsqldb.version} - org.springframework.security spring-security-web ${spring.security.version} - org.springframework.security spring-security-config ${spring.security.version} - org.springframework.security spring-security-taglibs ${spring.security.version} - org.apache.tiles tiles-jsp ${apache-tiles.version} - @@ -95,7 +89,6 @@ ${java.version} - org.apache.maven.plugins maven-war-plugin diff --git a/spring-web-modules/spring-mvc-webflow/pom.xml b/spring-web-modules/spring-mvc-webflow/pom.xml index ab0f86394a..2e150e2d01 100644 --- a/spring-web-modules/spring-mvc-webflow/pom.xml +++ b/spring-web-modules/spring-mvc-webflow/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-mvc-webflow 0.1-SNAPSHOT @@ -14,7 +15,6 @@ - org.springframework @@ -26,14 +26,12 @@ spring-webmvc ${org.springframework.version} - org.springframework.webflow spring-webflow ${spring.webflow} - javax.servlet @@ -52,7 +50,6 @@ log4j-over-slf4j ${org.slf4j.version} - org.springframework.boot @@ -60,7 +57,6 @@ ${spring-boot-starter-test.version} test - @@ -86,7 +82,8 @@ .class - -Xmx2048m -XX:PermSize=256m -Dtomee.serialization.class.blacklist=- -Dtomee.serialization.class.whitelist=* + -Xmx2048m -XX:PermSize=256m -Dtomee.serialization.class.blacklist=- + -Dtomee.serialization.class.whitelist=* true @@ -104,13 +101,10 @@ 5.0.1.RELEASE - 2.5.0.RELEASE - 4.4.5 4.5.2 - 2.7 1.6.1 diff --git a/spring-web-modules/spring-mvc-xml/pom.xml b/spring-web-modules/spring-mvc-xml/pom.xml index 4812d5c979..354d652095 100644 --- a/spring-web-modules/spring-mvc-xml/pom.xml +++ b/spring-web-modules/spring-mvc-xml/pom.xml @@ -15,9 +15,7 @@ - - org.springframework spring-web @@ -28,37 +26,30 @@ spring-webmvc ${org.springframework.version} - - javax.servlet javax.servlet-api ${javax.servlet-api.version} provided - javax.servlet jstl ${jstl.version} runtime - org.hibernate.validator hibernate-validator ${hibernate-validator.version} - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - commons-io @@ -85,14 +76,12 @@ javax.el ${javax.el.version} - org.springframework.boot spring-boot-starter-test ${spring-boot.version} test - org.crashub @@ -115,7 +104,6 @@ - org.codehaus.groovy @@ -132,45 +120,34 @@ true - - org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} - - 5.0.2.RELEASE 1.5.10.RELEASE - 5.1.40 - 4.4.5 4.5.2 - 6.0.10.Final 3.0.1-b08 - 19.0 2.8.0 - 1.6.1 - 1.3.2 3.0.0-rc-3 - - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-angular/pom.xml b/spring-web-modules/spring-rest-angular/pom.xml index eb1ec8696c..ef14e78198 100644 --- a/spring-web-modules/spring-rest-angular/pom.xml +++ b/spring-web-modules/spring-rest-angular/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-angular 1.0 @@ -77,4 +78,4 @@ com.baeldung.web.main.Application - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-http-2/pom.xml b/spring-web-modules/spring-rest-http-2/pom.xml index a349ac1116..10d904e302 100644 --- a/spring-web-modules/spring-rest-http-2/pom.xml +++ b/spring-web-modules/spring-rest-http-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-http-2 0.1-SNAPSHOT @@ -53,4 +54,4 @@ 1.6.1 - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-http/pom.xml b/spring-web-modules/spring-rest-http/pom.xml index 94d1be7814..5a92b585e3 100644 --- a/spring-web-modules/spring-rest-http/pom.xml +++ b/spring-web-modules/spring-rest-http/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-http 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot spring-boot-starter-web @@ -54,13 +54,11 @@ json-patch ${jsonpatch.version} - - 1.4.9 1.12 - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-query-language/pom.xml b/spring-web-modules/spring-rest-query-language/pom.xml index 5e7ca023dd..c5a8c172f3 100644 --- a/spring-web-modules/spring-rest-query-language/pom.xml +++ b/spring-web-modules/spring-rest-query-language/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-query-language 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -25,7 +25,6 @@ org.springframework.boot spring-boot-starter-actuator - org.aspectj aspectjweaver @@ -35,9 +34,7 @@ tomcat-embed-jasper provided - - org.springframework spring-core @@ -84,16 +81,12 @@ org.springframework.data spring-data-commons - - org.springframework.boot spring-boot-starter-tomcat - - com.querydsl querydsl-apt @@ -102,17 +95,13 @@ com.querydsl querydsl-jpa - - cz.jirutka.rsql rsql-parser ${rsql.version} - - org.apache.httpcomponents httpclient @@ -127,9 +116,7 @@ org.apache.httpcomponents httpcore - - org.springframework spring-orm @@ -157,67 +144,53 @@ mysql-connector-java runtime - com.h2database h2 - - javax.servlet javax.servlet-api provided - javax.servlet jstl runtime - - com.fasterxml.jackson.core jackson-databind - com.thoughtworks.xstream xstream ${xstream.version} - - com.google.guava guava ${guava.version} - - org.springframework spring-test test - org.hamcrest hamcrest test - org.mockito mockito-core test - @@ -228,14 +201,11 @@ true - - org.apache.maven.plugins maven-war-plugin - org.codehaus.cargo cargo-maven2-plugin @@ -256,9 +226,7 @@ - - com.mysema.maven apt-maven-plugin @@ -275,9 +243,7 @@ - - @@ -342,18 +308,15 @@ 2.1.0 - 1.4.9 3.21.0-GA 1.4.01 - 19.0 - 1.7.0 1.1.3 - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-shell/pom.xml b/spring-web-modules/spring-rest-shell/pom.xml index f5792fd6ca..b83a0b6002 100644 --- a/spring-web-modules/spring-rest-shell/pom.xml +++ b/spring-web-modules/spring-rest-shell/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-shell spring-rest-shell @@ -28,7 +29,6 @@ org.springframework.boot spring-boot-starter-data-rest - com.h2database @@ -46,4 +46,4 @@ - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-simple/pom.xml b/spring-web-modules/spring-rest-simple/pom.xml index b9d5100fbf..e7671e0af0 100644 --- a/spring-web-modules/spring-rest-simple/pom.xml +++ b/spring-web-modules/spring-rest-simple/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-simple 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -38,7 +38,6 @@ org.springframework.boot spring-boot-starter-web - org.springframework @@ -64,7 +63,6 @@ ${commons-fileupload.version} - javax.servlet javax.servlet-api @@ -75,9 +73,7 @@ jstl runtime - - com.fasterxml.jackson.core jackson-databind @@ -91,9 +87,7 @@ xstream ${xstream.version} - - com.google.guava guava @@ -104,9 +98,7 @@ commons-lang3 ${commons-lang3.version} - - org.slf4j slf4j-api @@ -121,17 +113,13 @@ jcl-over-slf4j - - com.squareup.okhttp3 okhttp ${com.squareup.okhttp3.version} - - junit junit @@ -258,7 +246,6 @@ - live @@ -283,7 +270,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -307,7 +293,6 @@ - @@ -318,19 +303,15 @@ 1.4 3.1.0 1.4.9 - 20.0 2.9.0 - 1.6.0 3.0.4 - 3.4.1 - 2.2.0 - + \ No newline at end of file diff --git a/spring-web-modules/spring-rest-testing/pom.xml b/spring-web-modules/spring-rest-testing/pom.xml index fea8d25e4d..dc5fdcd323 100644 --- a/spring-web-modules/spring-rest-testing/pom.xml +++ b/spring-web-modules/spring-rest-testing/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-rest-testing 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -34,9 +34,7 @@ tomcat-embed-jasper provided - - org.springframework spring-core @@ -83,16 +81,12 @@ org.springframework.data spring-data-commons - - org.springframework.boot spring-boot-starter-tomcat - - org.apache.httpcomponents httpclient @@ -107,9 +101,7 @@ org.apache.httpcomponents httpcore - - org.springframework spring-orm @@ -145,9 +137,7 @@ net.bytebuddy byte-buddy - - javax.servlet javax.servlet-api @@ -158,41 +148,33 @@ jstl runtime - com.fasterxml.jackson.core jackson-databind - - com.google.guava guava ${guava.version} - - org.springframework spring-test test - org.hamcrest hamcrest test - org.mockito mockito-core test - @@ -285,14 +267,12 @@ 1.4.9 1.4.01 - 19.0 3.25.0-GA - 1.6.1 1.1.3 - + \ No newline at end of file diff --git a/spring-web-modules/spring-resttemplate-2/pom.xml b/spring-web-modules/spring-resttemplate-2/pom.xml index 158380b403..d0191b970e 100644 --- a/spring-web-modules/spring-resttemplate-2/pom.xml +++ b/spring-web-modules/spring-resttemplate-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-resttemplate-2 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -27,29 +27,23 @@ - org.springframework.boot spring-boot-starter-jetty - org.apache.httpcomponents httpclient - commons-io commons-io ${commons-io.version} - org.springframework.boot spring-boot-starter-test - - org.springframework @@ -61,7 +55,6 @@ - org.slf4j @@ -71,7 +64,6 @@ ch.qos.logback logback-classic - diff --git a/spring-web-modules/spring-resttemplate-3/pom.xml b/spring-web-modules/spring-resttemplate-3/pom.xml index b1c26e002f..8e313ccf39 100644 --- a/spring-web-modules/spring-resttemplate-3/pom.xml +++ b/spring-web-modules/spring-resttemplate-3/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-resttemplate-3 0.1-SNAPSHOT @@ -26,4 +27,4 @@ - + \ No newline at end of file diff --git a/spring-web-modules/spring-resttemplate/pom.xml b/spring-web-modules/spring-resttemplate/pom.xml index 1db6b5db57..221efd77ee 100644 --- a/spring-web-modules/spring-resttemplate/pom.xml +++ b/spring-web-modules/spring-resttemplate/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-resttemplate 0.1-SNAPSHOT @@ -15,7 +16,6 @@ - org.springframework.boot @@ -37,14 +37,11 @@ org.springframework.boot spring-boot-starter-test - - au.com.dius pact-jvm-provider-junit_2.11 ${pact.version} - org.springframework @@ -64,9 +61,7 @@ org.springframework spring-oxm - - com.fasterxml.jackson.core jackson-databind @@ -80,9 +75,7 @@ xstream ${xstream.version} - - com.google.guava guava @@ -93,9 +86,7 @@ commons-lang3 ${commons-lang3.version} - - org.slf4j slf4j-api @@ -110,24 +101,19 @@ jcl-over-slf4j - - com.squareup.okhttp3 okhttp ${com.squareup.okhttp3.version} - - junit junit ${junit.version} - org.hamcrest hamcrest @@ -153,7 +139,6 @@ - org.apache.maven.plugins maven-compiler-plugin @@ -232,7 +217,6 @@ - @@ -260,7 +244,6 @@ - org.apache.maven.plugins maven-surefire-plugin @@ -284,7 +267,6 @@ - @@ -292,14 +274,11 @@ 1.4.9 - 20.0 - 1.6.1 3.0.4 - 3.4.1 3.5.11 @@ -309,4 +288,4 @@ 3.7.0 - + \ No newline at end of file diff --git a/spring-web-modules/spring-thymeleaf-2/pom.xml b/spring-web-modules/spring-thymeleaf-2/pom.xml index ddcd1e1005..b2b893ecd5 100644 --- a/spring-web-modules/spring-thymeleaf-2/pom.xml +++ b/spring-web-modules/spring-thymeleaf-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-thymeleaf-2 spring-thymeleaf-2 @@ -26,7 +27,6 @@ org.springframework.boot spring-boot-starter-thymeleaf - org.springframework.boot spring-boot-starter-test @@ -40,7 +40,6 @@ org.apache.maven.plugins maven-war-plugin - org.apache.tomcat.maven tomcat7-maven-plugin @@ -71,4 +70,4 @@ 2.2 - + \ No newline at end of file diff --git a/spring-web-modules/spring-thymeleaf-3/pom.xml b/spring-web-modules/spring-thymeleaf-3/pom.xml index 6a46dca117..8f39c17d8c 100644 --- a/spring-web-modules/spring-thymeleaf-3/pom.xml +++ b/spring-web-modules/spring-thymeleaf-3/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-thymeleaf-3 spring-thymeleaf-3 @@ -56,7 +57,6 @@ org.apache.maven.plugins maven-war-plugin - org.apache.tomcat.maven tomcat7-maven-plugin @@ -87,4 +87,4 @@ 2.2 - + \ No newline at end of file diff --git a/spring-web-modules/spring-thymeleaf/pom.xml b/spring-web-modules/spring-thymeleaf/pom.xml index 7b0cd2c510..8201cb5c5b 100644 --- a/spring-web-modules/spring-thymeleaf/pom.xml +++ b/spring-web-modules/spring-thymeleaf/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 spring-thymeleaf 0.1-SNAPSHOT @@ -33,13 +34,11 @@ spring-webmvc ${spring.version} - org.springframework.data spring-data-commons ${spring-data.version} - javax.validation validation-api @@ -50,7 +49,6 @@ hibernate-validator ${hibernate-validator.version} - org.springframework.security @@ -62,7 +60,6 @@ spring-security-config ${spring-security.version} - org.thymeleaf @@ -84,7 +81,6 @@ thymeleaf-extras-java8time ${org.thymeleaf.extras-version} - javax.servlet @@ -92,7 +88,6 @@ ${javax.servlet-api.version} provided - org.springframework @@ -100,14 +95,12 @@ ${spring.version} test - org.springframework.security spring-security-test ${spring-security.version} test - @@ -120,7 +113,6 @@ false - org.codehaus.cargo cargo-maven2-plugin @@ -140,7 +132,6 @@ - @@ -151,9 +142,8 @@ 2.4.1 2.0.1.Final 6.0.11.Final - 1.6.1 - + \ No newline at end of file From d9db0949cbe7f8b86e5d55067d29e09afe39e96a Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Mon, 17 May 2021 20:23:43 +0530 Subject: [PATCH 069/160] JAVA-5223: Fix formatting of POMs (Testing Modules) --- testing-modules/assertion-libraries/pom.xml | 7 +- testing-modules/cucumber/pom.xml | 46 +++++---- testing-modules/easy-random/pom.xml | 4 +- testing-modules/easymock/pom.xml | 8 +- testing-modules/gatling/pom.xml | 6 +- testing-modules/groovy-spock/pom.xml | 7 +- testing-modules/hamcrest/pom.xml | 5 +- testing-modules/junit-4/pom.xml | 6 +- testing-modules/junit-5-advanced/pom.xml | 6 +- testing-modules/junit-5-basics/pom.xml | 6 +- testing-modules/junit-5/pom.xml | 8 +- testing-modules/junit5-annotations/pom.xml | 7 +- testing-modules/junit5-migration/pom.xml | 7 +- .../load-testing-comparison/pom.xml | 98 +++++++++---------- testing-modules/mockito-2/pom.xml | 7 +- testing-modules/mockito-3/pom.xml | 2 +- testing-modules/mockito/pom.xml | 9 +- testing-modules/mocks/pom.xml | 9 +- testing-modules/mockserver/pom.xml | 5 +- .../math-test-functions/pom.xml | 8 +- testing-modules/parallel-tests-junit/pom.xml | 7 +- .../string-test-functions/pom.xml | 8 +- testing-modules/pom.xml | 9 +- testing-modules/powermock/pom.xml | 11 ++- testing-modules/rest-assured/pom.xml | 27 +---- testing-modules/rest-testing/pom.xml | 20 +--- testing-modules/selenium-junit-testng/pom.xml | 2 +- testing-modules/spring-testing-2/pom.xml | 16 +-- testing-modules/spring-testing/pom.xml | 7 +- testing-modules/test-containers/pom.xml | 8 +- testing-modules/testing-assertions/pom.xml | 5 +- testing-modules/testing-libraries-2/pom.xml | 6 +- testing-modules/testing-libraries/pom.xml | 9 +- testing-modules/testng/pom.xml | 5 +- testing-modules/xmlunit-2/pom.xml | 7 +- testing-modules/zerocode/pom.xml | 16 ++- 36 files changed, 194 insertions(+), 230 deletions(-) diff --git a/testing-modules/assertion-libraries/pom.xml b/testing-modules/assertion-libraries/pom.xml index c8ab512e4b..19ebebce05 100644 --- a/testing-modules/assertion-libraries/pom.xml +++ b/testing-modules/assertion-libraries/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 assertion-libraries 0.1-SNAPSHOT @@ -72,4 +73,4 @@ 0.12 - + \ No newline at end of file diff --git a/testing-modules/cucumber/pom.xml b/testing-modules/cucumber/pom.xml index af1935aa17..531b16ddec 100644 --- a/testing-modules/cucumber/pom.xml +++ b/testing-modules/cucumber/pom.xml @@ -1,8 +1,11 @@ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + cucumber + 1.0-SNAPSHOT + cucumber com.baeldung @@ -12,25 +15,6 @@ - 4.0.0 - cucumber - 1.0-SNAPSHOT - cucumber - - - 14 - 14 - 6.10.3 - 5.4.0 - 2.22.2 - 3.141.59 - 4.3.1 - 0.40 - 3.0.0 - 4.5.3 - 2.2.5.RELEASE - - org.springframework.boot @@ -55,7 +39,6 @@ bootstrap ${bootstrap.version} - org.projectlombok lombok @@ -136,4 +119,19 @@ - + + + 14 + 14 + 6.10.3 + 5.4.0 + 2.22.2 + 3.141.59 + 4.3.1 + 0.40 + 3.0.0 + 4.5.3 + 2.2.5.RELEASE + + + \ No newline at end of file diff --git a/testing-modules/easy-random/pom.xml b/testing-modules/easy-random/pom.xml index 1a1f3f743d..1ea6fbc387 100644 --- a/testing-modules/easy-random/pom.xml +++ b/testing-modules/easy-random/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 easy-random easy-random diff --git a/testing-modules/easymock/pom.xml b/testing-modules/easymock/pom.xml index 98458b724d..a8e37da8eb 100644 --- a/testing-modules/easymock/pom.xml +++ b/testing-modules/easymock/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 easymock easymock @@ -26,4 +26,4 @@ 4.0.2 - + \ No newline at end of file diff --git a/testing-modules/gatling/pom.xml b/testing-modules/gatling/pom.xml index 99eaaac044..281c74d6b3 100644 --- a/testing-modules/gatling/pom.xml +++ b/testing-modules/gatling/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.baeldung gatling @@ -115,4 +115,4 @@ 3.0.4 - + \ No newline at end of file diff --git a/testing-modules/groovy-spock/pom.xml b/testing-modules/groovy-spock/pom.xml index fa2c98a884..3c1f00abdf 100644 --- a/testing-modules/groovy-spock/pom.xml +++ b/testing-modules/groovy-spock/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 org.spockframework groovy-spock @@ -53,4 +54,4 @@ 1.5 - + \ No newline at end of file diff --git a/testing-modules/hamcrest/pom.xml b/testing-modules/hamcrest/pom.xml index ec9177d8f2..df8c543edb 100644 --- a/testing-modules/hamcrest/pom.xml +++ b/testing-modules/hamcrest/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 hamcrest @@ -27,4 +28,4 @@ 2.0.0.0 - + \ No newline at end of file diff --git a/testing-modules/junit-4/pom.xml b/testing-modules/junit-4/pom.xml index be0f51ea23..0ae6b71f82 100644 --- a/testing-modules/junit-4/pom.xml +++ b/testing-modules/junit-4/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 junit-4 1.0-SNAPSHOT @@ -28,4 +28,4 @@ 1.1.0 - + \ No newline at end of file diff --git a/testing-modules/junit-5-advanced/pom.xml b/testing-modules/junit-5-advanced/pom.xml index f53af9347f..5fc466bb67 100644 --- a/testing-modules/junit-5-advanced/pom.xml +++ b/testing-modules/junit-5-advanced/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 junit-5-advanced 1.0-SNAPSHOT @@ -40,4 +40,4 @@ 5.4.2 - + \ No newline at end of file diff --git a/testing-modules/junit-5-basics/pom.xml b/testing-modules/junit-5-basics/pom.xml index cdb0c367ce..0358f0c29a 100644 --- a/testing-modules/junit-5-basics/pom.xml +++ b/testing-modules/junit-5-basics/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 junit-5-basics 1.0-SNAPSHOT @@ -154,4 +154,4 @@ 5.0.6.RELEASE - + \ No newline at end of file diff --git a/testing-modules/junit-5/pom.xml b/testing-modules/junit-5/pom.xml index 90898ebb3f..125fa77423 100644 --- a/testing-modules/junit-5/pom.xml +++ b/testing-modules/junit-5/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 junit-5 @@ -88,7 +89,6 @@ ${mockito.junit.jupiter.version} test - org.powermock powermock-api-mockito2 @@ -140,4 +140,4 @@ 3.0.0-M3 - + \ No newline at end of file diff --git a/testing-modules/junit5-annotations/pom.xml b/testing-modules/junit5-annotations/pom.xml index 7ffc17c69b..127a1bf33f 100644 --- a/testing-modules/junit5-annotations/pom.xml +++ b/testing-modules/junit5-annotations/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 junit5-annotations 1.0-SNAPSHOT @@ -61,4 +62,4 @@ 3.11.1 - + \ No newline at end of file diff --git a/testing-modules/junit5-migration/pom.xml b/testing-modules/junit5-migration/pom.xml index bab7bc0406..2e864f6434 100644 --- a/testing-modules/junit5-migration/pom.xml +++ b/testing-modules/junit5-migration/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 junit5-migration 1.0-SNAPSHOT @@ -56,4 +57,4 @@ 2.21.0 - + \ No newline at end of file diff --git a/testing-modules/load-testing-comparison/pom.xml b/testing-modules/load-testing-comparison/pom.xml index 4c237aeb75..63f2d9ce2f 100644 --- a/testing-modules/load-testing-comparison/pom.xml +++ b/testing-modules/load-testing-comparison/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 load-testing-comparison load-testing-comparison @@ -57,57 +57,57 @@ - - - - - - - - - - + + + + + + + + + + org.springframework.boot spring-boot-maven-plugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -122,4 +122,4 @@ 5.0 - + \ No newline at end of file diff --git a/testing-modules/mockito-2/pom.xml b/testing-modules/mockito-2/pom.xml index 055debe615..558ac59d08 100644 --- a/testing-modules/mockito-2/pom.xml +++ b/testing-modules/mockito-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 mockito-2 0.0.1-SNAPSHOT @@ -32,4 +33,4 @@ 2.21.0 - + \ No newline at end of file diff --git a/testing-modules/mockito-3/pom.xml b/testing-modules/mockito-3/pom.xml index 8d506561ed..5a150ccbf9 100644 --- a/testing-modules/mockito-3/pom.xml +++ b/testing-modules/mockito-3/pom.xml @@ -35,4 +35,4 @@ 3.8.0 - + \ No newline at end of file diff --git a/testing-modules/mockito/pom.xml b/testing-modules/mockito/pom.xml index ea5ef4c322..a159f609a5 100644 --- a/testing-modules/mockito/pom.xml +++ b/testing-modules/mockito/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 mockito 0.1-SNAPSHOT @@ -34,15 +35,12 @@ javax.persistence ${javax.persistence.version} - - org.apache.commons commons-lang3 ${commons-lang3.version} - org.springframework.boot @@ -74,7 +72,6 @@ 2.0.9.RELEASE 19.0 - 2.0.2 2.1.1 diff --git a/testing-modules/mocks/pom.xml b/testing-modules/mocks/pom.xml index abaf313dc5..17700a835e 100644 --- a/testing-modules/mocks/pom.xml +++ b/testing-modules/mocks/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 mocks mocks @@ -36,14 +37,12 @@ ${mockito.version} test - org.easymock easymock ${easymock.version} test - com.google.jimfs jimfs @@ -60,4 +59,4 @@ 1.1 - + \ No newline at end of file diff --git a/testing-modules/mockserver/pom.xml b/testing-modules/mockserver/pom.xml index 6d553f4b90..c039d6a0ab 100644 --- a/testing-modules/mockserver/pom.xml +++ b/testing-modules/mockserver/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 mockserver 1.0.0-SNAPSHOT diff --git a/testing-modules/parallel-tests-junit/math-test-functions/pom.xml b/testing-modules/parallel-tests-junit/math-test-functions/pom.xml index fdd45e19d6..39199834b9 100644 --- a/testing-modules/parallel-tests-junit/math-test-functions/pom.xml +++ b/testing-modules/parallel-tests-junit/math-test-functions/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 math-test-functions math-test-functions @@ -49,4 +49,4 @@ 2.22.0 - + \ No newline at end of file diff --git a/testing-modules/parallel-tests-junit/pom.xml b/testing-modules/parallel-tests-junit/pom.xml index f9c47c827c..f5a46b91e3 100644 --- a/testing-modules/parallel-tests-junit/pom.xml +++ b/testing-modules/parallel-tests-junit/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 parallel-tests-junit 0.0.1-SNAPSHOT @@ -19,4 +20,4 @@ string-test-functions - + \ No newline at end of file diff --git a/testing-modules/parallel-tests-junit/string-test-functions/pom.xml b/testing-modules/parallel-tests-junit/string-test-functions/pom.xml index 727a1f814a..39847444b5 100644 --- a/testing-modules/parallel-tests-junit/string-test-functions/pom.xml +++ b/testing-modules/parallel-tests-junit/string-test-functions/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 string-test-functions string-test-functions @@ -41,4 +41,4 @@ 2.22.0 - + \ No newline at end of file diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml index d2afd4ae70..28c743b2b3 100644 --- a/testing-modules/pom.xml +++ b/testing-modules/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 testing-modules testing-modules @@ -29,7 +30,7 @@ junit5-migration load-testing-comparison mockito-2 - mockito-3 + mockito-3 mockito mocks mockserver @@ -49,4 +50,4 @@ zerocode - + \ No newline at end of file diff --git a/testing-modules/powermock/pom.xml b/testing-modules/powermock/pom.xml index 39d5f96d0a..7179f3ffbe 100644 --- a/testing-modules/powermock/pom.xml +++ b/testing-modules/powermock/pom.xml @@ -1,15 +1,15 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + powermock + testing-modules com.baeldung 1.0.0-SNAPSHOT - 4.0.0 - - powermock @@ -30,4 +30,5 @@ 2.21.0 2.0.7 + \ No newline at end of file diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index eeb5389f49..bd4c1456c1 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 rest-assured 1.0 @@ -70,41 +71,34 @@ org.eclipse.jetty jetty-util - org.apache.httpcomponents httpcore - org.apache.commons commons-lang3 - com.github.fge uri-template ${uri-template.version} - com.googlecode.libphonenumber libphonenumber ${libphonenumber.version} - javax.mail mail ${javax.mail.version} - joda-time joda-time ${joda-time.version} - com.fasterxml.jackson.core jackson-annotations @@ -113,36 +107,30 @@ com.fasterxml.jackson.core jackson-databind - com.github.fge msg-simple ${msg-simple.version} - com.github.fge jackson-coreutils ${jackson-coreutils.version} - com.github.fge btf ${btf.version} - org.apache.httpcomponents httpclient - org.codehaus.groovy groovy-all ${groovy.version} - com.github.tomakehurst wiremock @@ -153,8 +141,7 @@ commons-collections ${commons-collections.version} - - + io.rest-assured rest-assured @@ -185,12 +172,9 @@ 2.5 1.4.7 9.4.0.v20161208 - 3.2.2 - 4.4.5 4.5.2 - 0.9 8.0.0 2.9.6 @@ -198,8 +182,7 @@ 1.2 2.4.7 2.4.1 - 2.5.3 - + \ No newline at end of file diff --git a/testing-modules/rest-testing/pom.xml b/testing-modules/rest-testing/pom.xml index b3966c1b6a..42e15f5199 100644 --- a/testing-modules/rest-testing/pom.xml +++ b/testing-modules/rest-testing/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 rest-testing 0.1-SNAPSHOT @@ -14,23 +15,18 @@ - - commons-io commons-io ${commons-io.version} - org.apache.commons commons-lang3 ${commons-lang3.version} - - org.apache.httpcomponents httpclient @@ -47,15 +43,12 @@ httpcore ${httpcore.version} - - com.fasterxml.jackson.core jackson-databind ${jackson.version} - com.github.tomakehurst @@ -63,7 +56,6 @@ ${wiremock.version} test - io.cucumber cucumber-java @@ -75,20 +67,17 @@ cucumber-junit ${cucumber.version} - org.jbehave jbehave-core ${jbehave.version} test - com.intuit.karate karate-apache ${karate.version} - com.intuit.karate karate-junit4 @@ -139,16 +128,13 @@ 19.0 - 2.9.0 6.8.0 2.21.0 0.6.1 - 4.4.5 4.5.2 - 4.1 diff --git a/testing-modules/selenium-junit-testng/pom.xml b/testing-modules/selenium-junit-testng/pom.xml index 8d661997f8..f06d47247c 100644 --- a/testing-modules/selenium-junit-testng/pom.xml +++ b/testing-modules/selenium-junit-testng/pom.xml @@ -67,4 +67,4 @@ 1.5.4 - + \ No newline at end of file diff --git a/testing-modules/spring-testing-2/pom.xml b/testing-modules/spring-testing-2/pom.xml index 40b556732a..419b8d512a 100644 --- a/testing-modules/spring-testing-2/pom.xml +++ b/testing-modules/spring-testing-2/pom.xml @@ -1,9 +1,7 @@ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-testing-2 0.1-SNAPSHOT @@ -21,24 +19,20 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-data-jpa - com.h2database h2 ${h2.version} - org.postgresql postgresql runtime - org.testcontainers @@ -54,11 +48,10 @@ - + - + org.apache.maven.plugins maven-surefire-plugin @@ -74,4 +67,5 @@ 1.12.2 + \ No newline at end of file diff --git a/testing-modules/spring-testing/pom.xml b/testing-modules/spring-testing/pom.xml index 74d55d4c08..bf4c1e7a69 100644 --- a/testing-modules/spring-testing/pom.xml +++ b/testing-modules/spring-testing/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-testing 0.1-SNAPSHOT @@ -20,19 +20,16 @@ java-hamcrest ${java-hamcrest.version} - org.projectlombok lombok ${lombok.version} provided - org.springframework.boot spring-boot-starter - org.springframework.boot diff --git a/testing-modules/test-containers/pom.xml b/testing-modules/test-containers/pom.xml index 2280a89b4a..4a65611c7a 100644 --- a/testing-modules/test-containers/pom.xml +++ b/testing-modules/test-containers/pom.xml @@ -1,8 +1,8 @@ - + 4.0.0 - test-containers 1.0-SNAPSHOT @@ -92,4 +92,4 @@ 1.3.2 - + \ No newline at end of file diff --git a/testing-modules/testing-assertions/pom.xml b/testing-modules/testing-assertions/pom.xml index 8b8536462d..82a507a985 100644 --- a/testing-modules/testing-assertions/pom.xml +++ b/testing-modules/testing-assertions/pom.xml @@ -11,7 +11,7 @@ 0.0.1-SNAPSHOT ../../parent-java - + ch.qos.logback @@ -55,4 +55,5 @@ 4.4 5.6.2 - + + \ No newline at end of file diff --git a/testing-modules/testing-libraries-2/pom.xml b/testing-modules/testing-libraries-2/pom.xml index 7f96280cac..e7016a2387 100644 --- a/testing-modules/testing-libraries-2/pom.xml +++ b/testing-modules/testing-libraries-2/pom.xml @@ -43,7 +43,6 @@ ${system-stubs.version} test - org.junit.jupiter @@ -72,7 +71,7 @@ - testing-libraries + testing-libraries-2 src/test/resources @@ -88,4 +87,5 @@ 5.6.2 3.16.1 - + + \ No newline at end of file diff --git a/testing-modules/testing-libraries/pom.xml b/testing-modules/testing-libraries/pom.xml index 4edd13fa30..4bbe56fc18 100644 --- a/testing-modules/testing-libraries/pom.xml +++ b/testing-modules/testing-libraries/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 testing-libraries testing-libraries @@ -29,7 +30,6 @@ ${cucumber.version} test - io.cucumber cucumber-java8 @@ -63,7 +63,6 @@ true - org.apache.maven.plugins @@ -105,4 +104,4 @@ 2.4.3 - + \ No newline at end of file diff --git a/testing-modules/testng/pom.xml b/testing-modules/testng/pom.xml index c4a1284b0e..8b6a46a694 100644 --- a/testing-modules/testng/pom.xml +++ b/testing-modules/testng/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 testng 0.1.0-SNAPSHOT diff --git a/testing-modules/xmlunit-2/pom.xml b/testing-modules/xmlunit-2/pom.xml index 5689e680e6..07153ab042 100644 --- a/testing-modules/xmlunit-2/pom.xml +++ b/testing-modules/xmlunit-2/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 xmlunit-2 xmlunit-2 @@ -30,4 +31,4 @@ 2.3.0 - + \ No newline at end of file diff --git a/testing-modules/zerocode/pom.xml b/testing-modules/zerocode/pom.xml index 63f0dc9cbb..48030166b5 100644 --- a/testing-modules/zerocode/pom.xml +++ b/testing-modules/zerocode/pom.xml @@ -1,30 +1,29 @@ - + 4.0.0 + zerocode + 1.0-SNAPSHOT + testing-modules com.baeldung 1.0.0-SNAPSHOT - zerocode - 1.0-SNAPSHOT - org.springframework.boot spring-boot-starter-web ${spring.boot.version} - org.springframework.boot spring-boot-starter-test ${spring.boot.version} test - - org.jsmart zerocode-tdd @@ -64,7 +63,6 @@ - org.apache.maven.plugins maven-failsafe-plugin @@ -101,4 +99,4 @@ 1.3.27 - + \ No newline at end of file From 836a94985cb132d4105564bd02c49cb677c544ce Mon Sep 17 00:00:00 2001 From: rvsathe Date: Mon, 17 May 2021 21:01:00 +0530 Subject: [PATCH 070/160] shifting the BAEL-3962 to core-java-networking-3 module. --- .../core-java-networking-3/pom.xml | 64 +++++++++- .../DownloadEmailAttachments.java | 114 ++++++++++++++++++ .../DownloadEmailAttachmentsUnitTest.java | 25 ++++ 3 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java create mode 100644 core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java diff --git a/core-java-modules/core-java-networking-3/pom.xml b/core-java-modules/core-java-networking-3/pom.xml index 35e88b3b92..73c392f51a 100644 --- a/core-java-modules/core-java-networking-3/pom.xml +++ b/core-java-modules/core-java-networking-3/pom.xml @@ -36,16 +36,74 @@ ${assertj.version} test + + junit + junit + 4.11 + test + + + com.sun.mail + javax.mail + 1.6.2 + core-java-networking-3 - - + + + + org.apache.maven.plugins maven-compiler-plugin - + + + org.apache.maven.plugins + maven-compiler-plugin + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java new file mode 100644 index 0000000000..4ca5a419ae --- /dev/null +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java @@ -0,0 +1,114 @@ +package com.baeldung.downloadAttachments; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import javax.mail.Address; +import javax.mail.Folder; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Multipart; +import javax.mail.NoSuchProviderException; +import javax.mail.Part; +import javax.mail.Session; +import javax.mail.Store; +import javax.mail.internet.MimeBodyPart; + +public class DownloadEmailAttachments { + private String downloadDirectory; + + public void setSaveDirectory(String dir) { + this.downloadDirectory = dir; + } + + public void downloadEmailAttachments(String host, String port, String userName, String password) throws NoSuchProviderException, MessagingException, IOException { + Properties properties = setMailServerProperties(host, port); + Store store = setSessionStoreProperties(userName, password, properties); + Folder inbox = store.getFolder("INBOX"); + inbox.open(Folder.READ_ONLY); + Message[] arrayMessages = inbox.getMessages(); + for (int i = 0; i < arrayMessages.length; i++) { + Message message = arrayMessages[i]; + Address[] fromAddress = message.getFrom(); + String from = fromAddress[0].toString(); + String subject = message.getSubject(); + String sentDate = message.getSentDate() + .toString(); + List attachments = new ArrayList(); + if (message.getContentType() + .contains("multipart")) { + attachments = downloadEmailMessages(message); + } + + System.out.println("Message #" + (i + 1) + ":"); + System.out.println(" From: " + from); + System.out.println(" Subject: " + subject); + System.out.println(" Sent Date: " + sentDate); + System.out.println(" Attachments: " + attachments); + } + inbox.close(false); + store.close(); + } + + public List downloadEmailMessages(Message message) throws IOException, MessagingException { + List downloadedAttachments = new ArrayList(); + Multipart multiPart = (Multipart) message.getContent(); + int numberOfParts = multiPart.getCount(); + for (int partCount = 0; partCount < numberOfParts; partCount++) { + MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount); + if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) { + String file = part.getFileName(); + part.saveFile(downloadDirectory + File.separator + part.getFileName()); + downloadedAttachments.add(file); + } + } + + return downloadedAttachments; + } + + public Store setSessionStoreProperties(String userName, String password, Properties properties) throws NoSuchProviderException, MessagingException { + Session session = Session.getDefaultInstance(properties); + + Store store = session.getStore("pop3"); + store.connect(userName, password); + return store; + } + + public Properties setMailServerProperties(String host, String port) { + Properties properties = new Properties(); + + properties.put("mail.pop3.host", host); + properties.put("mail.pop3.port", port); + + properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + properties.setProperty("mail.pop3.socketFactory.fallback", "false"); + properties.setProperty("mail.pop3.socketFactory.port", String.valueOf(port)); + return properties; + } + + public static void main(String[] args) { + String host = "pop.gmail.com"; + String port = "995"; + String userName = "your_email"; + String password = "your_password"; + + String saveDirectory = "valid_folder_path"; + + DownloadEmailAttachments receiver = new DownloadEmailAttachments(); + receiver.setSaveDirectory(saveDirectory); + try { + receiver.downloadEmailAttachments(host, port, userName, password); + } catch (NoSuchProviderException ex) { + System.out.println("No provider for pop3."); + ex.printStackTrace(); + } catch (MessagingException ex) { + System.out.println("Could not connect to the message store"); + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java new file mode 100644 index 0000000000..7e0582fed9 --- /dev/null +++ b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java @@ -0,0 +1,25 @@ +package com.baeldung.downloadAttachments; + +import static org.junit.Assert.fail; +import org.junit.Test; + +public class DownloadEmailAttachmentsUnitTest { + @Test + public void when_Run_then_downloadAttachments() { + + String host = "pop.gmail.com"; + String port = "995"; + String userName = "your_email"; + String password = "your_password"; + + String saveDirectory = "valid_folder_path"; + + DownloadEmailAttachments receiver = new DownloadEmailAttachments(); + receiver.setSaveDirectory(saveDirectory); + try { + receiver.downloadEmailAttachments(host, port, userName, password); + } catch (Exception ex) { + fail("Exception: " + ex); + } + } +} From d1e8164581e6c13331c1178cfbb04cc5c82b4325 Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Mon, 17 May 2021 23:46:45 +0530 Subject: [PATCH 071/160] Code commit for "Converting String to BigDecimal in Java" - Article (#10775) --- .../StringToBigDecimalConversionUnitTest.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java diff --git a/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java new file mode 100644 index 0000000000..e951b393c2 --- /dev/null +++ b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java @@ -0,0 +1,74 @@ +package com.baeldung.stringtobigdecimal; + +import static org.junit.Assert.assertEquals; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.ParseException; + +import org.junit.Test; + +public class StringToBigDecimalConversionUnitTest { + + @Test + public void givenValidString_WhenBigDecimalObjectWithStringParameter_ThenResultIsDecimalObject() { + BigDecimal bigDecimal = new BigDecimal(123); + assertEquals(bigDecimal, new BigDecimal("123")); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenBigDecimalObjectWithStringParameter_ThenNullPointerExceptionIsThrown() { + String bigDecimal = null; + new BigDecimal(bigDecimal); + } + + @Test(expected = NumberFormatException.class) + public void givenInalidString_WhenBigDecimalObjectWithStringParameter_ThenNumberFormatExceptionIsThrown() { + new BigDecimal("&"); + } + + @Test + public void givenValidString_WhenValueOfDoubleFromString_ThenResultIsDecimalObject() { + BigDecimal bigDecimal = new BigDecimal(123.42).setScale(2, BigDecimal.ROUND_HALF_UP); + assertEquals(bigDecimal, BigDecimal.valueOf(Double.valueOf("123.42"))); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenValueOfDoubleFromString_ThenNullPointerExceptionIsThrown() { + BigDecimal.valueOf(Double.valueOf(null)); + } + + @Test(expected = NumberFormatException.class) + public void givenInalidString_WhenValueOfDoubleFromString_ThenNumberFormatExceptionIsThrown() { + BigDecimal.valueOf(Double.valueOf("&")); + } + + @Test + public void givenValidString_WhenDecimalFormatOfString_ThenResultIsDecimalObject() throws ParseException { + BigDecimal bigDecimal = new BigDecimal(10692467440017.111).setScale(3, BigDecimal.ROUND_HALF_UP); + + DecimalFormatSymbols symbols = new DecimalFormatSymbols(); + symbols.setGroupingSeparator(','); + symbols.setDecimalSeparator('.'); + String pattern = "#,##0.0#"; + DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols); + decimalFormat.setParseBigDecimal(true); + + // parse the string value + BigDecimal parsedStringValue = (BigDecimal) decimalFormat.parse("10,692,467,440,017.111"); + + assertEquals(bigDecimal, parsedStringValue); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenDecimalFormatOfString_ThenNullPointerExceptionIsThrown() throws ParseException { + new DecimalFormat("#").parse(null); + } + + @Test(expected = ParseException.class) + public void givenInalidString_WhenDecimalFormatOfString_ThenNumberFormatExceptionIsThrown() throws ParseException { + new DecimalFormat("#").parse("&"); + } + +} From d6be1a079fd42de7fb85837dd39191c7cd766b4b Mon Sep 17 00:00:00 2001 From: MicuEmerson Date: Mon, 17 May 2021 21:37:38 +0300 Subject: [PATCH 072/160] BAEL-4800: adjustments - formated the code - changed artifactId - deleted readMe.md --- maven-modules/maven-pom-types/README.md | 11 - .../maven-pom-types/effective-pom.xml | 491 +++++++++--------- maven-modules/maven-pom-types/pom-4.0.0.xml | 268 +++++----- maven-modules/maven-pom-types/pom.xml | 18 +- 4 files changed, 392 insertions(+), 396 deletions(-) delete mode 100644 maven-modules/maven-pom-types/README.md diff --git a/maven-modules/maven-pom-types/README.md b/maven-modules/maven-pom-types/README.md deleted file mode 100644 index 8de8610383..0000000000 --- a/maven-modules/maven-pom-types/README.md +++ /dev/null @@ -1,11 +0,0 @@ -## Maven POM types - -This module contains the XML files with POM types. - -pom.xml is the Simplest POM -pom-4.0.0.xml is the Super POM -effective-pom.xml was generated using `mvn help:effective-pom > effective-pom.xml` - -### Relevant Articles - -- [Guide to Maven Profiles](https://www.baeldung.com/difference-between-super-pom-simplest-and-effective-pom/) diff --git a/maven-modules/maven-pom-types/effective-pom.xml b/maven-modules/maven-pom-types/effective-pom.xml index 09b3d5f7bf..750ba35175 100644 --- a/maven-modules/maven-pom-types/effective-pom.xml +++ b/maven-modules/maven-pom-types/effective-pom.xml @@ -1,255 +1,264 @@ + [INFO] Scanning for projects... -[INFO] -[INFO] ----------------------< com.baeldung:simplestPOM >---------------------- +[INFO] +[INFO] ----------------------< com.baeldung:simplestPOM +>---------------------- [INFO] Building simplestPOM 1.0-SNAPSHOT -[INFO] --------------------------------[ jar ]--------------------------------- -[INFO] -[INFO] --- maven-help-plugin:3.2.0:effective-pom (default-cli) @ simplestPOM --- -[INFO] +[INFO] +--------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- maven-help-plugin:3.2.0:effective-pom (default-cli) @ simplestPOM +--- +[INFO] Effective POMs, after inheritance, interpolation, and profiles are applied: - - - - + + + + - - - + + + - - 4.0.0 - com.baeldung - simplestPOM - 1.0-SNAPSHOT - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - - - never - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\java - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\scripts - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\java - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\classes - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\test-classes - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\resources - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\resources - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget - simplestPOM-1.0-SNAPSHOT - - - - maven-antrun-plugin - 1.3 - - - maven-assembly-plugin - 2.2-beta-5 - - - maven-dependency-plugin - 2.8 - - - maven-release-plugin - 2.5.3 - - - - - - maven-clean-plugin - 2.5 - - - default-clean - clean - - clean - - - - - - maven-resources-plugin - 2.6 - - - default-testResources - process-test-resources - - testResources - - - - default-resources - process-resources - - resources - - - - - - maven-jar-plugin - 2.4 - - - default-jar - package - - jar - - - - - - maven-compiler-plugin - 3.1 - - - default-compile - compile - - compile - - - - default-testCompile - test-compile - - testCompile - - - - - - maven-surefire-plugin - 2.12.4 - - - default-test - test - - test - - - - - - maven-install-plugin - 2.4 - - - default-install - install - - install - - - - - - maven-deploy-plugin - 2.7 - - - default-deploy - deploy - - deploy - - - - - - maven-site-plugin - 3.3 - - - default-site - site - - site - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - default-deploy - site-deploy - - deploy - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - + + 4.0.0 + com.baeldung + simplestPOM + 1.0-SNAPSHOT + + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + + + never + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\java + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\scripts + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\java + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\classes + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\test-classes + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\resources + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\resources + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget + simplestPOM-1.0-SNAPSHOT + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + + + maven-clean-plugin + 2.5 + + + default-clean + clean + + clean + + + + + + maven-resources-plugin + 2.6 + + + default-testResources + process-test-resources + + testResources + + + + default-resources + process-resources + + resources + + + + + + maven-jar-plugin + 2.4 + + + default-jar + package + + jar + + + + + + maven-compiler-plugin + 3.1 + + + default-compile + compile + + compile + + + + default-testCompile + test-compile + + testCompile + + + + + + maven-surefire-plugin + 2.12.4 + + + default-test + test + + test + + + + + + maven-install-plugin + 2.4 + + + default-install + install + + install + + + + + + maven-deploy-plugin + 2.7 + + + default-deploy + deploy + + deploy + + + + + + maven-site-plugin + 3.3 + + + default-site + site + + site + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + default-deploy + site-deploy + + deploy + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + -[INFO] ------------------------------------------------------------------------ +[INFO] +------------------------------------------------------------------------ [INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 1.346 s +[INFO] +------------------------------------------------------------------------ +[INFO] Total time: 1.346 s [INFO] Finished at: 2021-05-15T17:28:30+03:00 -[INFO] ------------------------------------------------------------------------ +[INFO] +------------------------------------------------------------------------ diff --git a/maven-modules/maven-pom-types/pom-4.0.0.xml b/maven-modules/maven-pom-types/pom-4.0.0.xml index b19a7d7b7a..4c3d4c82bf 100644 --- a/maven-modules/maven-pom-types/pom-4.0.0.xml +++ b/maven-modules/maven-pom-types/pom-4.0.0.xml @@ -1,150 +1,148 @@ - + - 4.0.0 + 4.0.0 - - - central - Central Repository - https://repo.maven.apache.org/maven2 - default - - false - - - + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + - - - central - Central Repository - https://repo.maven.apache.org/maven2 - default - - false - - - never - - - + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + never + + + - - ${project.basedir}/target - ${project.build.directory}/classes - ${project.artifactId}-${project.version} - ${project.build.directory}/test-classes - ${project.basedir}/src/main/java - ${project.basedir}/src/main/scripts - ${project.basedir}/src/test/java - - - ${project.basedir}/src/main/resources - - - - - ${project.basedir}/src/test/resources - - - - - - - - maven-antrun-plugin - 1.3 - - - maven-assembly-plugin - 2.2-beta-5 - - - maven-dependency-plugin - 2.8 - - - maven-release-plugin - 2.5.3 - - - - + + ${project.basedir}/target + ${project.build.directory}/classes + ${project.artifactId}-${project.version} + ${project.build.directory}/test-classes + + ${project.basedir}/src/main/java + ${project.basedir}/src/main/scripts + + ${project.basedir}/src/test/java + + + + ${project.basedir}/src/main/resources + + + + + ${project.basedir}/src/test/resources + + + + + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + - - ${project.build.directory}/site - + + ${project.build.directory}/site + - - - - release-profile + + + + release-profile - - - performRelease - true - - + + + performRelease + true + + - - - - true - maven-source-plugin - - - attach-sources - - jar-no-fork - - - - - - true - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - true - maven-deploy-plugin - - true - - - - - - + + + + true + maven-source-plugin + + + attach-sources + + jar-no-fork + + + + + + true + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + true + maven-deploy-plugin + + true + + + + + + diff --git a/maven-modules/maven-pom-types/pom.xml b/maven-modules/maven-pom-types/pom.xml index 6699e614f4..f600baabb7 100644 --- a/maven-modules/maven-pom-types/pom.xml +++ b/maven-modules/maven-pom-types/pom.xml @@ -1,14 +1,14 @@ - 4.0.0 - com.baeldung - simplestPOM - 1.0-SNAPSHOT + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + maven-pom-types + 1.0-SNAPSHOT - - ${project.basedir}/customTarget - + + ${project.basedir}/customTarget + \ No newline at end of file From 10346cd9d77cefc3d3d7955b4bef3a11b0ca3c87 Mon Sep 17 00:00:00 2001 From: Ali Dehghani Date: Tue, 18 May 2021 01:57:48 +0430 Subject: [PATCH 073/160] Fixed the wrong assertion issue in a test --- .../reactive/logging/WebClientLoggingIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/logging/WebClientLoggingIntegrationTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/logging/WebClientLoggingIntegrationTest.java index bb4e682481..dabfd22056 100644 --- a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/logging/WebClientLoggingIntegrationTest.java +++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/logging/WebClientLoggingIntegrationTest.java @@ -146,7 +146,7 @@ public class WebClientLoggingIntegrationTest { .exchange() .block(); - verify(mockAppender).doAppend(argThat(argument -> (((LoggingEvent) argument).getFormattedMessage()).contains("domain=.typicode.com;"))); + verify(mockAppender).doAppend(argThat(argument -> (((LoggingEvent) argument).getFormattedMessage()).contains(sampleUrl))); } From 1506fdef1f08e93e932a93efd4dfa7c5f733b7ea Mon Sep 17 00:00:00 2001 From: uzma khan Date: Sat, 15 May 2021 18:31:23 +0100 Subject: [PATCH 074/160] [BAEL-4829] Multipart request in spring --- .../spring-mvc-forms-thymeleaf/pom.xml | 5 ++ .../baeldung/multipartupload/Employee.java | 16 ++++++ .../multipartupload/EmployeeController.java | 49 ++++++++++++++++ .../multipartupload/EmployeeRepository.java | 8 +++ .../multipartupload/EmployeeService.java | 36 ++++++++++++ .../MultipartUploadApplication.java | 13 +++++ .../employee/createEmployeeForm.html | 16 ++++++ .../resources/templates/employee/success.html | 8 +++ .../EmployeeControllerIntegrationTest.java | 56 +++++++++++++++++++ 9 files changed, 207 insertions(+) create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/Employee.java create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeController.java create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeRepository.java create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeService.java create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/MultipartUploadApplication.java create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/createEmployeeForm.html create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/success.html create mode 100644 spring-web-modules/spring-mvc-forms-thymeleaf/src/test/java/com/baeldung/multipartupload/EmployeeControllerIntegrationTest.java diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml b/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml index fdd569d144..37bcee0b8d 100644 --- a/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/pom.xml @@ -24,6 +24,11 @@ org.springframework.boot spring-boot-starter-thymeleaf + + org.projectlombok + lombok + + org.springframework.boot diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/Employee.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/Employee.java new file mode 100644 index 0000000000..0bc600dd6a --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/Employee.java @@ -0,0 +1,16 @@ +package com.baeldung.multipartupload; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class Employee { + private String name; + private MultipartFile document; +} diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeController.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeController.java new file mode 100644 index 0000000000..e02844233e --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeController.java @@ -0,0 +1,49 @@ +package com.baeldung.multipartupload; + +import lombok.AllArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +@Controller +@AllArgsConstructor +public class EmployeeController { + + private final EmployeeService employeeService; + + @GetMapping(value = "/employee") + public String showEmployeeForm(Model model) { + model.addAttribute("employee", new Employee()); + return "employee/createEmployeeForm"; + } + + @RequestMapping(path = "/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }) + public String saveEmployee(@ModelAttribute Employee employee) { + employeeService.save(employee); + return "employee/success"; + } + + @RequestMapping(path = "/requestpart/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }) + public ResponseEntity saveEmployee(@RequestPart Employee employee, @RequestPart MultipartFile document) { + employee.setDocument(document); + employeeService.save(employee); + return ResponseEntity.ok().build(); + } + + @RequestMapping(path = "/requestparam/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }) + public ResponseEntity saveEmployee(@RequestParam String name, @RequestPart MultipartFile document) { + Employee employee = new Employee(name, document); + employeeService.save(employee); + return ResponseEntity.ok().build(); + } + +} \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeRepository.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeRepository.java new file mode 100644 index 0000000000..d4182e100d --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.multipartupload; + +import org.springframework.stereotype.Repository; + +@Repository +public interface EmployeeRepository { + void saveEmployee(Employee employee); +} \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeService.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeService.java new file mode 100644 index 0000000000..f6906c8ba9 --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/EmployeeService.java @@ -0,0 +1,36 @@ +package com.baeldung.multipartupload; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; + +@Service +public class EmployeeService { + + public void save(Employee employee) { + saveFile(employee.getDocument()); + // save other employee data + } + + private void saveFile(MultipartFile multipartFile) { + try { + saveToFilesystem(multipartFile); + } catch (Exception e) { + throw new RuntimeException("Unable to save file", e); + } + } + + private static void saveToFilesystem(MultipartFile multipartFile) throws IOException { + String dir = Files.createTempDirectory("tmpDir").toFile().getAbsolutePath(); + File file = new File(dir + File.pathSeparator + multipartFile.getName()); + + try (OutputStream os = new FileOutputStream(file)) { + os.write(multipartFile.getBytes()); + } + } +} diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/MultipartUploadApplication.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/MultipartUploadApplication.java new file mode 100644 index 0000000000..299a5c2325 --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/java/com/baeldung/multipartupload/MultipartUploadApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.multipartupload; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MultipartUploadApplication { + + public static void main(String[] args) { + SpringApplication.run(MultipartUploadApplication.class, args); + } + +} diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/createEmployeeForm.html b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/createEmployeeForm.html new file mode 100644 index 0000000000..c88a8b9318 --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/createEmployeeForm.html @@ -0,0 +1,16 @@ + + + + Getting Started: Handling Form Submission + + + +

Form

+
+

name:

+

document: + +

+
+ + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/success.html b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/success.html new file mode 100644 index 0000000000..2a49c01613 --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/main/resources/templates/employee/success.html @@ -0,0 +1,8 @@ + + + + + + Employee data submitted. + + \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/src/test/java/com/baeldung/multipartupload/EmployeeControllerIntegrationTest.java b/spring-web-modules/spring-mvc-forms-thymeleaf/src/test/java/com/baeldung/multipartupload/EmployeeControllerIntegrationTest.java new file mode 100644 index 0000000000..73cf905a34 --- /dev/null +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/src/test/java/com/baeldung/multipartupload/EmployeeControllerIntegrationTest.java @@ -0,0 +1,56 @@ +package com.baeldung.multipartupload; + +import org.junit.jupiter.api.Test; +import org.mockito.BDDMockito; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.apache.http.entity.ContentType.DEFAULT_BINARY; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest +@EnableWebMvc +public class EmployeeControllerIntegrationTest { + + private static final MockMultipartFile A_FILE = new MockMultipartFile("document", null, DEFAULT_BINARY.toString(), "Employee Record".getBytes()); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private EmployeeService employeeService; + + @Test + public void givenFormData_whenPost_thenReturns200OK() throws Exception { + + mockMvc.perform(multipart("/employee") + .file(A_FILE) + .param("name", "testname")) + .andExpect(status().isOk()); + } + + @Test + public void givenEmployeeJsonAndMultipartFile_whenPostWithRequestPart_thenReturnsOK() throws Exception { + MockMultipartFile employeeJson = new MockMultipartFile("employee", null, + "application/json", "{\"name\": \"Emp Name\"}".getBytes()); + + mockMvc.perform(multipart("/requestpart/employee") + .file(A_FILE) + .file(employeeJson)) + .andExpect(status().isOk()); + } + + @Test + public void givenRequestPartAndRequestParam_whenPost_thenReturns200OK() throws Exception { + mockMvc.perform(multipart("/requestparam/employee") + .file(A_FILE) + .param("name", "testname")) + .andExpect(status().isOk()); + } +} \ No newline at end of file From 3f3adc726e7352d5dd4faed9fc19e18a9de9d9ba Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Wed, 19 May 2021 08:34:43 +0530 Subject: [PATCH 075/160] Please override with the latest change (#10780) * Code commit for "Converting String to BigDecimal in Java" - Article * modified the assert param for comparing actual and expected values * removed the conflict change --- .../StringToBigDecimalConversionUnitTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java index e951b393c2..cd8ef6c70f 100644 --- a/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java +++ b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtobigdecimal/StringToBigDecimalConversionUnitTest.java @@ -13,8 +13,8 @@ public class StringToBigDecimalConversionUnitTest { @Test public void givenValidString_WhenBigDecimalObjectWithStringParameter_ThenResultIsDecimalObject() { - BigDecimal bigDecimal = new BigDecimal(123); - assertEquals(bigDecimal, new BigDecimal("123")); + BigDecimal bigDecimal = new BigDecimal("123"); + assertEquals(new BigDecimal(123), bigDecimal); } @Test(expected = NullPointerException.class) @@ -30,8 +30,8 @@ public class StringToBigDecimalConversionUnitTest { @Test public void givenValidString_WhenValueOfDoubleFromString_ThenResultIsDecimalObject() { - BigDecimal bigDecimal = new BigDecimal(123.42).setScale(2, BigDecimal.ROUND_HALF_UP); - assertEquals(bigDecimal, BigDecimal.valueOf(Double.valueOf("123.42"))); + BigDecimal bigDecimal = BigDecimal.valueOf(Double.valueOf("123.42")); + assertEquals(new BigDecimal(123.42).setScale(2, BigDecimal.ROUND_HALF_UP), bigDecimal); } @Test(expected = NullPointerException.class) From ef8ca205411a55c37fd6cc8602893ade61169ddd Mon Sep 17 00:00:00 2001 From: Liam Garvie Date: Wed, 19 May 2021 08:47:02 +0100 Subject: [PATCH 076/160] BAEL-4946 moved deserialization vulnerabilities code to a new package --- .../com/baeldung/deserialization/vulnerabilities/BadThing.java | 0 .../deserialization/vulnerabilities/MyCustomAttackObject.java | 0 .../deserialization/vulnerabilities/BadThingUnitTest.java | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/{core-java => core-java-io-4}/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java (100%) rename core-java-modules/{core-java => core-java-io-4}/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java (100%) rename core-java-modules/{core-java => core-java-io-4}/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java (92%) diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java rename to core-java-modules/core-java-io-4/src/main/java/com/baeldung/deserialization/vulnerabilities/BadThing.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java rename to core-java-modules/core-java-io-4/src/main/java/com/baeldung/deserialization/vulnerabilities/MyCustomAttackObject.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java similarity index 92% rename from core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java rename to core-java-modules/core-java-io-4/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java index 5db51ba132..ea2180d178 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java +++ b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/deserialization/vulnerabilities/BadThingUnitTest.java @@ -13,7 +13,7 @@ public class BadThingUnitTest { @Test @DisplayName("When a BadThing object is deserialized, then code execution in MyCustomAttackObject is run.") - public void testCodeExecution() throws Exception { + public void givenABadThingObject_whenItsDeserialized_thenExecutionIsRun() throws Exception { BadThing bt = new BadThing(); bt.looselyDefinedThing = new MyCustomAttackObject(); From 927106de3e353f2703751aadbc8485d3188f9d67 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Wed, 19 May 2021 17:41:38 +0530 Subject: [PATCH 077/160] removing the extra plugins since they are not necessary. --- .../core-java-networking-3/pom.xml | 133 ++++++------------ .../DownloadEmailAttachments.java | 4 +- 2 files changed, 46 insertions(+), 91 deletions(-) diff --git a/core-java-modules/core-java-networking-3/pom.xml b/core-java-modules/core-java-networking-3/pom.xml index 73c392f51a..add5051d0c 100644 --- a/core-java-modules/core-java-networking-3/pom.xml +++ b/core-java-modules/core-java-networking-3/pom.xml @@ -1,41 +1,41 @@ - 4.0.0 - core-java-networking-3 - core-java-networking-3 - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-networking-3 + core-java-networking-3 + jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../pom.xml - + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../pom.xml + - - - org.springframework - spring-core - ${spring.core.version} - - - org.eclipse.jetty - jetty-server - ${jetty.embeded.version} - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.embeded.version} - - - org.assertj - assertj-core - ${assertj.version} - test - + + + org.springframework + spring-core + ${spring.core.version} + + + org.eclipse.jetty + jetty-server + ${jetty.embeded.version} + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat.embeded.version} + + + org.assertj + assertj-core + ${assertj.version} + test + junit junit @@ -47,70 +47,25 @@ javax.mail 1.6.2 - + - - core-java-networking-3 + + core-java-networking-3 - - - org.apache.maven.plugins - maven-compiler-plugin - - org.apache.maven.plugins maven-compiler-plugin - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - + - - 5.2.8.RELEASE - 9.4.31.v20200723 - 10.0.0-M7 - 3.11.1 - + + 5.2.8.RELEASE + 9.4.31.v20200723 + 10.0.0-M7 + 3.11.1 + \ No newline at end of file diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java index 4ca5a419ae..cd9cb443d8 100644 --- a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java @@ -40,7 +40,7 @@ public class DownloadEmailAttachments { List attachments = new ArrayList(); if (message.getContentType() .contains("multipart")) { - attachments = downloadEmailMessages(message); + attachments = downloadAttachments(message); } System.out.println("Message #" + (i + 1) + ":"); @@ -53,7 +53,7 @@ public class DownloadEmailAttachments { store.close(); } - public List downloadEmailMessages(Message message) throws IOException, MessagingException { + public List downloadAttachments(Message message) throws IOException, MessagingException { List downloadedAttachments = new ArrayList(); Multipart multiPart = (Multipart) message.getContent(); int numberOfParts = multiPart.getCount(); From 4135a964fd22fc7492a26538cd41b4f8d50f63b9 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Wed, 19 May 2021 17:54:36 +0530 Subject: [PATCH 078/160] Delete pom.xml not required. --- java-download-email/pom.xml | 82 ------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 java-download-email/pom.xml diff --git a/java-download-email/pom.xml b/java-download-email/pom.xml deleted file mode 100644 index 7885fd9a48..0000000000 --- a/java-download-email/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - 4.0.0 - - DemoEmailAttachment - EmailAttachments - 0.0.1-SNAPSHOT - - EmailAttachments - - http://www.example.com - - - UTF-8 - 1.7 - 1.7 - - - - - junit - junit - 4.11 - test - - - com.sun.mail - javax.mail - 1.6.2 - - - - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - - - From caf88583070d00d496b3881b66c436a2ddeffdeb Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Wed, 19 May 2021 17:55:23 +0530 Subject: [PATCH 079/160] Delete DownloadEmailAttachments.java not required. --- .../DownloadEmailAttachments.java | 116 ------------------ 1 file changed, 116 deletions(-) delete mode 100644 java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java diff --git a/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java deleted file mode 100644 index c320b69b75..0000000000 --- a/java-download-email/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.baeldung.downloadAttachments; - -import java.io.File; -import java.io.IOException; -import java.util.Properties; -import javax.mail.Address; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Multipart; -import javax.mail.NoSuchProviderException; -import javax.mail.Part; -import javax.mail.Session; -import javax.mail.Store; -import javax.mail.internet.MimeBodyPart; - -public class DownloadEmailAttachments { - private String downloadDirectory; - - public void setSaveDirectory(String dir) { - this.downloadDirectory = dir; - } - - public void downloadEmailAttachments(String host, String port, String userName, String password) throws NoSuchProviderException, MessagingException, IOException { - Properties properties = setMailServerProperties(host, port); - Store store = setSessionStoreProperties(userName, password, properties); - Folder inbox = store.getFolder("INBOX"); - inbox.open(Folder.READ_ONLY); - Message[] arrayMessages = inbox.getMessages(); - for (int i = 0; i < arrayMessages.length; i++) { - Message message = arrayMessages[i]; - Address[] fromAddress = message.getFrom(); - String from = fromAddress[0].toString(); - String subject = message.getSubject(); - String sentDate = message.getSentDate() - .toString(); - String contentType = message.getContentType(); - String messageContent = ""; - String attachments = ""; - if (contentType.contains("multipart")) { - Multipart multiPart = (Multipart) message.getContent(); - int numberOfParts = multiPart.getCount(); - for (int partCount = 0; partCount < numberOfParts; partCount++) { - MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount); - if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) { - String file = part.getFileName(); - attachments += file + ", "; - part.saveFile(downloadDirectory + File.separator + file); - } else { - messageContent = part.getContent() - .toString(); - } - } - if (attachments.length() > 1) { - attachments = attachments.substring(0, attachments.length() - 2); - } - } else if (contentType.contains("text/plain") || contentType.contains("text/html")) { - Object content = message.getContent(); - if (content != null) { - messageContent = content.toString(); - } - } - System.out.println("Message #" + (i + 1) + ":"); - System.out.println(" From: " + from); - System.out.println(" Subject: " + subject); - System.out.println(" Sent Date: " + sentDate); - System.out.println(" Message: " + messageContent); - System.out.println(" Attachments: " + attachments); - } - inbox.close(false); - store.close(); - } - - public Store setSessionStoreProperties(String userName, String password, Properties properties) throws NoSuchProviderException, MessagingException { - Session session = Session.getDefaultInstance(properties); - - Store store = session.getStore("pop3"); - store.connect(userName, password); - return store; - } - - public Properties setMailServerProperties(String host, String port) { - Properties properties = new Properties(); - - properties.put("mail.pop3.host", host); - properties.put("mail.pop3.port", port); - - properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); - properties.setProperty("mail.pop3.socketFactory.fallback", "false"); - properties.setProperty("mail.pop3.socketFactory.port", String.valueOf(port)); - return properties; - } - - public static void main(String[] args) { - String host = "pop.gmail.com"; - String port = "995"; - String userName = "your_email"; - String password = "your_password"; - - String saveDirectory = "valid_folder_path"; - - DownloadEmailAttachments receiver = new DownloadEmailAttachments(); - receiver.setSaveDirectory(saveDirectory); - try { - receiver.downloadEmailAttachments(host, port, userName, password); - } catch (NoSuchProviderException ex) { - System.out.println("No provider for pop3."); - ex.printStackTrace(); - } catch (MessagingException ex) { - System.out.println("Could not connect to the message store"); - ex.printStackTrace(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } -} \ No newline at end of file From 4b71cf5ccbd026c49368e2e4619ec53739ae2b96 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Wed, 19 May 2021 17:56:05 +0530 Subject: [PATCH 080/160] Delete DownloadEmailAttachmentsTest.java not required. --- .../DownloadEmailAttachmentsTest.java | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java diff --git a/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java b/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java deleted file mode 100644 index b23ec87f05..0000000000 --- a/java-download-email/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.downloadAttachments; - -import static org.junit.Assert.fail; -import org.junit.Test; - -public class DownloadEmailAttachmentsTest { - @Test - public void when_Run_then_downloadAttachments() { - - String host = "pop.gmail.com"; - String port = "995"; - String userName = "your_email"; - String password = "your_password"; - - String saveDirectory = "valid_folder_path"; - - DownloadEmailAttachments receiver = new DownloadEmailAttachments(); - receiver.setSaveDirectory(saveDirectory); - try { - receiver.downloadEmailAttachments(host, port, userName, password); - } catch (Exception ex) { - fail("Exception: " + ex); - } - } -} From 806881214651b3357a0181c9694f9f20820324b8 Mon Sep 17 00:00:00 2001 From: MicuEmerson Date: Wed, 19 May 2021 19:19:59 +0300 Subject: [PATCH 081/160] BAEL-4800: adjustments #2 --- .../maven-pom-types/effective-pom.xml | 496 +++++++++--------- maven-modules/maven-pom-types/pom-4.0.0.xml | 248 ++++----- maven-modules/maven-pom-types/pom.xml | 17 +- 3 files changed, 365 insertions(+), 396 deletions(-) diff --git a/maven-modules/maven-pom-types/effective-pom.xml b/maven-modules/maven-pom-types/effective-pom.xml index 750ba35175..a2f8460809 100644 --- a/maven-modules/maven-pom-types/effective-pom.xml +++ b/maven-modules/maven-pom-types/effective-pom.xml @@ -1,264 +1,238 @@ - -[INFO] Scanning for projects... -[INFO] -[INFO] ----------------------< com.baeldung:simplestPOM ->---------------------- -[INFO] Building simplestPOM 1.0-SNAPSHOT -[INFO] ---------------------------------[ jar ]--------------------------------- -[INFO] -[INFO] --- maven-help-plugin:3.2.0:effective-pom (default-cli) @ simplestPOM ---- -[INFO] -Effective POMs, after inheritance, interpolation, and profiles are applied: - - - - - - - - - - - - - 4.0.0 - com.baeldung - simplestPOM - 1.0-SNAPSHOT - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - - - never - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\java - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\scripts - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\java - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\classes - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\test-classes - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\resources - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\resources - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget - simplestPOM-1.0-SNAPSHOT - - - - maven-antrun-plugin - 1.3 - - - maven-assembly-plugin - 2.2-beta-5 - - - maven-dependency-plugin - 2.8 - - - maven-release-plugin - 2.5.3 - - - - - - maven-clean-plugin - 2.5 - - - default-clean - clean - - clean - - - - - - maven-resources-plugin - 2.6 - - - default-testResources - process-test-resources - - testResources - - - - default-resources - process-resources - - resources - - - - - - maven-jar-plugin - 2.4 - - - default-jar - package - - jar - - - - - - maven-compiler-plugin - 3.1 - - - default-compile - compile - - compile - - - - default-testCompile - test-compile - - testCompile - - - - - - maven-surefire-plugin - 2.12.4 - - - default-test - test - - test - - - - - - maven-install-plugin - 2.4 - - - default-install - install - - install - - - - - - maven-deploy-plugin - 2.7 - - - default-deploy - deploy - - deploy - - - - - - maven-site-plugin - 3.3 - - - default-site - site - - site - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - default-deploy - site-deploy - - deploy - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - - - org.apache.maven.plugins - maven-project-info-reports-plugin - - - - - - - - C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + maven-pom-types + 1.0-SNAPSHOT + + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + + + never + + + false + + central + Central Repository + https://repo.maven.apache.org/maven2 + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\java + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\scripts + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\java + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\classes + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\test-classes + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\main\resources + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\src\test\resources + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget + simplestPOM-1.0-SNAPSHOT + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + + + maven-clean-plugin + 2.5 + + + default-clean + clean + + clean + + + + + + maven-resources-plugin + 2.6 + + + default-testResources + process-test-resources + + testResources + + + + default-resources + process-resources + + resources + + + + + + maven-jar-plugin + 2.4 + + + default-jar + package + + jar + + + + + + maven-compiler-plugin + 3.1 + + + default-compile + compile + + compile + + + + default-testCompile + test-compile + + testCompile + + + + + + maven-surefire-plugin + 2.12.4 + + + default-test + test + + test + + + + + + maven-install-plugin + 2.4 + + + default-install + install + + install + + + + + + maven-deploy-plugin + 2.7 + + + default-deploy + deploy + + deploy + + + + + + maven-site-plugin + 3.3 + + + default-site + site + + site + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + default-deploy + site-deploy + + deploy + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + + + + + + + + C:\Users\emicu\Desktop\tutorials\maven-modules\maven-pom-types\customTarget\site + + - - -[INFO] ------------------------------------------------------------------------- -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------- -[INFO] Total time: 1.346 s -[INFO] Finished at: 2021-05-15T17:28:30+03:00 -[INFO] ------------------------------------------------------------------------- diff --git a/maven-modules/maven-pom-types/pom-4.0.0.xml b/maven-modules/maven-pom-types/pom-4.0.0.xml index 4c3d4c82bf..24b15984af 100644 --- a/maven-modules/maven-pom-types/pom-4.0.0.xml +++ b/maven-modules/maven-pom-types/pom-4.0.0.xml @@ -13,136 +13,136 @@ - 4.0.0 + 4.0.0 - - - central - Central Repository - https://repo.maven.apache.org/maven2 - default - - false - - - + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + - - - central - Central Repository - https://repo.maven.apache.org/maven2 - default - - false - - - never - - - + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + + false + + + never + + + - - ${project.basedir}/target - ${project.build.directory}/classes - ${project.artifactId}-${project.version} - ${project.build.directory}/test-classes - - ${project.basedir}/src/main/java - ${project.basedir}/src/main/scripts - - ${project.basedir}/src/test/java - - - - ${project.basedir}/src/main/resources - - - - - ${project.basedir}/src/test/resources - - - - - - - - maven-antrun-plugin - 1.3 - - - maven-assembly-plugin - 2.2-beta-5 - - - maven-dependency-plugin - 2.8 - - - maven-release-plugin - 2.5.3 - - - - + + ${project.basedir}/target + ${project.build.directory}/classes + ${project.artifactId}-${project.version} + ${project.build.directory}/test-classes + + ${project.basedir}/src/main/java + ${project.basedir}/src/main/scripts + + ${project.basedir}/src/test/java + + + + ${project.basedir}/src/main/resources + + + + + ${project.basedir}/src/test/resources + + + + + + + + maven-antrun-plugin + 1.3 + + + maven-assembly-plugin + 2.2-beta-5 + + + maven-dependency-plugin + 2.8 + + + maven-release-plugin + 2.5.3 + + + + - - ${project.build.directory}/site - + + ${project.build.directory}/site + - - - - release-profile + + + + release-profile - - - performRelease - true - - + + + performRelease + true + + - - - - true - maven-source-plugin - - - attach-sources - - jar-no-fork - - - - - - true - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - true - maven-deploy-plugin - - true - - - - - - + + + + true + maven-source-plugin + + + attach-sources + + jar-no-fork + + + + + + true + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + true + maven-deploy-plugin + + true + + + + + + - + diff --git a/maven-modules/maven-pom-types/pom.xml b/maven-modules/maven-pom-types/pom.xml index f600baabb7..98fbc828a0 100644 --- a/maven-modules/maven-pom-types/pom.xml +++ b/maven-modules/maven-pom-types/pom.xml @@ -1,14 +1,9 @@ - 4.0.0 - com.baeldung - maven-pom-types - 1.0-SNAPSHOT - - - ${project.basedir}/customTarget - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + maven-pom-types + 1.0-SNAPSHOT \ No newline at end of file From dda696ff4a3b16a6c66bb7df20c231f75565b7f4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:05:57 +0800 Subject: [PATCH 082/160] Update README.md --- core-java-modules/core-java-11-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-11-2/README.md b/core-java-modules/core-java-11-2/README.md index c87936b07d..ca9a306b82 100644 --- a/core-java-modules/core-java-11-2/README.md +++ b/core-java-modules/core-java-11-2/README.md @@ -7,3 +7,4 @@ This module contains articles about Java 11 core features - [Guide to Java Reflection](http://www.baeldung.com/java-reflection) - [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors) - [New Features in Java 11](https://www.baeldung.com/java-11-new-features) +- [Getting the Java Version at Runtime](https://www.baeldung.com/get-java-version-runtime) From cc8fc1843aca6ca991203a15b377aea32868eda4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:07:46 +0800 Subject: [PATCH 083/160] Update README.md --- core-java-modules/core-java-lang-oop-patterns/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-oop-patterns/README.md b/core-java-modules/core-java-lang-oop-patterns/README.md index 178a556a96..df68a1413a 100644 --- a/core-java-modules/core-java-lang-oop-patterns/README.md +++ b/core-java-modules/core-java-lang-oop-patterns/README.md @@ -7,3 +7,4 @@ This module contains articles about Object-oriented programming (OOP) patterns i - [Inheritance and Composition (Is-a vs Has-a relationship) in Java](https://www.baeldung.com/java-inheritance-composition) - [Immutable Objects in Java](https://www.baeldung.com/java-immutable-object) - [How to Make a Deep Copy of an Object in Java](https://www.baeldung.com/java-deep-copy) +- [Using an Interface vs. Abstract Class in Java](https://www.baeldung.com/java-interface-vs-abstract-class) From 488df183045fda511d15319875cb4c4be5d09187 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:11:05 +0800 Subject: [PATCH 084/160] Update README.md --- core-java-modules/core-java-lang-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-4/README.md b/core-java-modules/core-java-lang-4/README.md index 8b8dff4bd1..e1023513eb 100644 --- a/core-java-modules/core-java-lang-4/README.md +++ b/core-java-modules/core-java-lang-4/README.md @@ -5,3 +5,4 @@ This module contains articles about core features in the Java language - [The Java final Keyword – Impact on Performance](https://www.baeldung.com/java-final-performance) - [The package-info.java File](https://www.baeldung.com/java-package-info) - [What are Compile-time Constants in Java?](https://www.baeldung.com/java-compile-time-constants) +- [Java Objects.hash() vs Objects.hashCode()](https://www.baeldung.com/java-objects-hash-vs-objects-hashcode) From 3a8f904a345c16a34c7f7e5e66b34e779d838931 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:12:58 +0800 Subject: [PATCH 085/160] Create README.md --- maven-modules/maven-copy-files/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 maven-modules/maven-copy-files/README.md diff --git a/maven-modules/maven-copy-files/README.md b/maven-modules/maven-copy-files/README.md new file mode 100644 index 0000000000..1e3a75cb0b --- /dev/null +++ b/maven-modules/maven-copy-files/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Copying Files With Maven](https://www.baeldung.com/maven-copy-files) From 3f830fb1667260680276ab87a90eb02fca3aebe7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:14:56 +0800 Subject: [PATCH 086/160] Update README.md --- core-java-modules/core-java-streams-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-streams-3/README.md b/core-java-modules/core-java-streams-3/README.md index 26b4dfe975..48ebf145d2 100644 --- a/core-java-modules/core-java-streams-3/README.md +++ b/core-java-modules/core-java-streams-3/README.md @@ -12,4 +12,5 @@ This module contains articles about the Stream API in Java. - [Should We Close a Java Stream?](https://www.baeldung.com/java-stream-close) - [Returning Stream vs. Collection](https://www.baeldung.com/java-return-stream-collection) - [Convert a Java Enumeration Into a Stream](https://www.baeldung.com/java-enumeration-to-stream) +- [When to Use a Parallel Stream in Java](https://www.baeldung.com/java-when-to-use-parallel-stream) - More articles: [[<-- prev>]](/../core-java-streams-2) From 823ec61b410f2d1a8fc8d45fe45be564442efe16 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:16:34 +0800 Subject: [PATCH 087/160] Update README.md --- persistence-modules/java-jpa-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md index 9c9e040825..e607043880 100644 --- a/persistence-modules/java-jpa-3/README.md +++ b/persistence-modules/java-jpa-3/README.md @@ -10,3 +10,4 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [JPA CascadeType.REMOVE vs orphanRemoval](https://www.baeldung.com/jpa-cascade-remove-vs-orphanremoval) - [A Guide to MultipleBagFetchException in Hibernate](https://www.baeldung.com/java-hibernate-multiplebagfetchexception) - [How to Convert a Hibernate Proxy to a Real Entity Object](https://www.baeldung.com/hibernate-proxy-to-real-entity-object) +- [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id) From 9929ffc1cceaa29ad08bec81a1bfa0de47f1cf8b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:17:47 +0800 Subject: [PATCH 088/160] Update README.md --- testing-modules/testing-libraries-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/testing-libraries-2/README.md b/testing-modules/testing-libraries-2/README.md index f8361904b8..868d8f307d 100644 --- a/testing-modules/testing-libraries-2/README.md +++ b/testing-modules/testing-libraries-2/README.md @@ -2,3 +2,4 @@ - [Guide to the System Rules Library](https://www.baeldung.com/java-system-rules-junit) - [Guide to the System Stubs Library](https://www.baeldung.com/java-system-stubs) +- [Code Coverage with SonarQube and JaCoCo](https://www.baeldung.com/sonarqube-jacoco-code-coverage) From cbd8cee5b419a9d679aaa12c5b2daa6da262d325 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:20:46 +0800 Subject: [PATCH 089/160] Update README.md --- spring-boot-modules/spring-boot-mvc-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-mvc-3/README.md b/spring-boot-modules/spring-boot-mvc-3/README.md index bc3eb9e496..f9c6989b3c 100644 --- a/spring-boot-modules/spring-boot-mvc-3/README.md +++ b/spring-boot-modules/spring-boot-mvc-3/README.md @@ -9,4 +9,5 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux) - [Differences in @Valid and @Validated Annotations in Spring](https://www.baeldung.com/spring-valid-vs-validated) - [CharacterEncodingFilter In SpringBoot](https://www.baeldung.com/spring-boot-characterencodingfilter) +- [HandlerInterceptors vs. Filters in Spring MVC](https://www.baeldung.com/spring-mvc-handlerinterceptor-vs-filter) - More articles: [[prev -->]](/spring-boot-modules/spring-boot-mvc-2) From f04dd12217de5efb6127691d118845338f9a00e9 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:22:21 +0800 Subject: [PATCH 090/160] Update README.md --- core-java-modules/core-java-string-operations-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-string-operations-3/README.md b/core-java-modules/core-java-string-operations-3/README.md index bc4af852ed..ad4ada3a68 100644 --- a/core-java-modules/core-java-string-operations-3/README.md +++ b/core-java-modules/core-java-string-operations-3/README.md @@ -3,3 +3,4 @@ - [Version Comparison in Java](https://www.baeldung.com/java-comparing-versions) - [Java (String) or .toString()?](https://www.baeldung.com/java-string-casting-vs-tostring) - [Split Java String by Newline](https://www.baeldung.com/java-string-split-by-newline) +- [Split a String in Java and Keep the Delimiters](https://www.baeldung.com/java-split-string-keep-delimiters) From 90c4e239321c72b060b3e5f788c55e7fb6a9198a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:25:36 +0800 Subject: [PATCH 091/160] Update README.md --- persistence-modules/spring-data-jpa-annotations/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-annotations/README.md b/persistence-modules/spring-data-jpa-annotations/README.md index 3892e75733..5a5440b1ed 100644 --- a/persistence-modules/spring-data-jpa-annotations/README.md +++ b/persistence-modules/spring-data-jpa-annotations/README.md @@ -9,6 +9,7 @@ This module contains articles about annotations used in Spring Data JPA - [Spring JPA @Embedded and @EmbeddedId](https://www.baeldung.com/spring-jpa-embedded-method-parameters) - [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management) - [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) +- [Overriding Column Definition With @AttributeOverride](https://www.baeldung.com/jpa-attributeoverride) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From e8c0d7bf5325ce671e879d10a44c0dccfdf801f0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:27:41 +0800 Subject: [PATCH 092/160] Update README.md --- spring-boot-modules/spring-boot-cassandre/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-cassandre/README.md b/spring-boot-modules/spring-boot-cassandre/README.md index 14ffbb7d6b..4dfef587db 100644 --- a/spring-boot-modules/spring-boot-cassandre/README.md +++ b/spring-boot-modules/spring-boot-cassandre/README.md @@ -8,4 +8,4 @@ This project is an example of a trading bot developed with Cassandre * `mvn spring-boot:run` - Run the bot ## Relevant Articles -- [Build a Trading Bot with Cassandre Spring Boot Starter](https://www.baeldung.com/build-a-trading-bot-with-cassandre-spring-boot-starter/) +- [Build a Trading Bot with Cassandre Spring Boot Starter](https://www.baeldung.com/cassandre-spring-boot-trading-bot) From 56d69f922ba5a9b293e4b5833881aaf53cc868f4 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 19 May 2021 22:59:16 +0530 Subject: [PATCH 093/160] JAVA-2419: Move/rename module spring-boot-xml --- spring-boot-modules/pom.xml | 1 - .../README.md | 1 + .../spring-boot-basic-customization-2/pom.xml | 5 ++- .../java/com/baeldung/springbootxml/Pojo.java | 0 .../SpringBootXmlApplication.java | 0 .../src/main/resources/application.properties | 1 + .../src/main/resources/beans.xml | 0 ...ringBootXmlApplicationIntegrationTest.java | 1 + spring-boot-modules/spring-boot-xml/README.md | 3 -- spring-boot-modules/spring-boot-xml/pom.xml | 39 ------------------- .../src/main/resources/application.properties | 1 - 11 files changed, 7 insertions(+), 45 deletions(-) rename spring-boot-modules/{spring-boot-xml => spring-boot-basic-customization-2}/src/main/java/com/baeldung/springbootxml/Pojo.java (100%) rename spring-boot-modules/{spring-boot-xml => spring-boot-basic-customization-2}/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplication.java (100%) rename spring-boot-modules/{spring-boot-xml => spring-boot-basic-customization-2}/src/main/resources/beans.xml (100%) rename spring-boot-modules/{spring-boot-xml/src/main/java => spring-boot-basic-customization-2/src/main/test}/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java (99%) delete mode 100644 spring-boot-modules/spring-boot-xml/README.md delete mode 100644 spring-boot-modules/spring-boot-xml/pom.xml delete mode 100644 spring-boot-modules/spring-boot-xml/src/main/resources/application.properties diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 7c94d5b7d7..53af0de315 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -70,7 +70,6 @@ spring-boot-swagger-jwt spring-boot-testing spring-boot-vue - spring-boot-xml spring-boot-actuator spring-boot-data-2 spring-boot-react diff --git a/spring-boot-modules/spring-boot-basic-customization-2/README.md b/spring-boot-modules/spring-boot-basic-customization-2/README.md index bf7e4abb76..f041c1d38a 100644 --- a/spring-boot-modules/spring-boot-basic-customization-2/README.md +++ b/spring-boot-modules/spring-boot-basic-customization-2/README.md @@ -5,3 +5,4 @@ This module contains articles about Spring Boot customization 2 ### Relevant Articles: - [DispatcherServlet and web.xml in Spring Boot](https://www.baeldung.com/spring-boot-dispatcherservlet-web-xml) + - [XML Defined Beans in Spring Boot](https://www.baeldung.com/spring-boot-xml-beans) \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-basic-customization-2/pom.xml b/spring-boot-modules/spring-boot-basic-customization-2/pom.xml index d42a7fd3de..8c1bc22600 100644 --- a/spring-boot-modules/spring-boot-basic-customization-2/pom.xml +++ b/spring-boot-modules/spring-boot-basic-customization-2/pom.xml @@ -23,7 +23,10 @@ org.springframework.boot spring-boot-starter-test - test + + + junit + junit diff --git a/spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/Pojo.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com/baeldung/springbootxml/Pojo.java similarity index 100% rename from spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/Pojo.java rename to spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com/baeldung/springbootxml/Pojo.java diff --git a/spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplication.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplication.java similarity index 100% rename from spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplication.java rename to spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplication.java diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties index e69de29bb2..ab9de92c82 100644 --- a/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties @@ -0,0 +1 @@ +sample=string loaded from properties! \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-xml/src/main/resources/beans.xml b/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/beans.xml similarity index 100% rename from spring-boot-modules/spring-boot-xml/src/main/resources/beans.xml rename to spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/beans.xml diff --git a/spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/test/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java similarity index 99% rename from spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot-basic-customization-2/src/main/test/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java index 2c3993d0d8..f3060de82a 100644 --- a/spring-boot-modules/spring-boot-xml/src/main/java/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java +++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/test/com/baeldung/springbootxml/SpringBootXmlApplicationIntegrationTest.java @@ -1,5 +1,6 @@ package com.baeldung.springbootxml; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-boot-modules/spring-boot-xml/README.md b/spring-boot-modules/spring-boot-xml/README.md deleted file mode 100644 index 7a9a0bdc09..0000000000 --- a/spring-boot-modules/spring-boot-xml/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Relevant Articles: - -- [XML Defined Beans in Spring Boot](https://www.baeldung.com/spring-boot-xml-beans) diff --git a/spring-boot-modules/spring-boot-xml/pom.xml b/spring-boot-modules/spring-boot-xml/pom.xml deleted file mode 100644 index b3fd343e4f..0000000000 --- a/spring-boot-modules/spring-boot-xml/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - spring-boot-xml - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-2 - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-test - - - junit - junit - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-xml/src/main/resources/application.properties b/spring-boot-modules/spring-boot-xml/src/main/resources/application.properties deleted file mode 100644 index ab9de92c82..0000000000 --- a/spring-boot-modules/spring-boot-xml/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -sample=string loaded from properties! \ No newline at end of file From 11941b70a1167d07c4a21e44f999b989d7d3f1f6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:30:51 +0800 Subject: [PATCH 094/160] Update README.md --- core-java-modules/core-java-string-conversions-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-string-conversions-2/README.md b/core-java-modules/core-java-string-conversions-2/README.md index afdd7e5760..3bd3ba927e 100644 --- a/core-java-modules/core-java-string-conversions-2/README.md +++ b/core-java-modules/core-java-string-conversions-2/README.md @@ -6,4 +6,5 @@ This module contains articles about string conversions from/to another type. - [Java String Conversions](https://www.baeldung.com/java-string-conversions) - [Convert String to Byte Array and Reverse in Java](https://www.baeldung.com/java-string-to-byte-array) - [Convert Character Array to String in Java](https://www.baeldung.com/java-char-array-to-string) +- [Converting String to BigDecimal in Java](https://www.baeldung.com/java-string-to-bigdecimal) - More articles: [[<-- prev]](/core-java-string-conversions) From a281d31d1ba51554ede0e44149bec423850321bb Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 20 May 2021 01:32:52 +0800 Subject: [PATCH 095/160] Update README.md --- persistence-modules/spring-data-jpa-crud/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-crud/README.md b/persistence-modules/spring-data-jpa-crud/README.md index dc0c78c87e..81559bb773 100644 --- a/persistence-modules/spring-data-jpa-crud/README.md +++ b/persistence-modules/spring-data-jpa-crud/README.md @@ -10,6 +10,7 @@ This module contains articles about CRUD operations in Spring Data JPA - [Batch Insert/Update with Hibernate/JPA](https://www.baeldung.com/jpa-hibernate-batch-insert-update) - [Difference Between save() and saveAndFlush() in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-save-saveandflush) - [Generate Database Schema with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-generate-db-schema) +- [How to Implement a Soft Delete with Spring JPA](https://www.baeldung.com/spring-jpa-soft-delete) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From 81a216ce06b4b570470cb2cd86ec45280147b543 Mon Sep 17 00:00:00 2001 From: Haroon Khan Date: Wed, 19 May 2021 22:26:56 +0100 Subject: [PATCH 096/160] [BAEL-4930] Cucumber integration with Gradle --- gradle/.gitignore | 6 + gradle/gradle-cucumber/build.gradle | 68 +++++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + gradle/gradle-cucumber/gradlew | 185 ++++++++++++++++++ gradle/gradle-cucumber/gradlew.bat | 89 +++++++++ gradle/gradle-cucumber/settings.gradle | 1 + .../src/main/java/com/baeldung/Account.java | 18 ++ .../baeldung/cucumber/RunCucumberTest.java | 14 ++ .../baeldung/cucumber/StepDefinitions.java | 28 +++ .../features/account_credited.feature | 6 + 11 files changed, 420 insertions(+) create mode 100644 gradle/gradle-cucumber/build.gradle create mode 100644 gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle/gradle-cucumber/gradlew create mode 100644 gradle/gradle-cucumber/gradlew.bat create mode 100644 gradle/gradle-cucumber/settings.gradle create mode 100644 gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java create mode 100644 gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java create mode 100644 gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java create mode 100644 gradle/gradle-cucumber/src/test/resources/features/account_credited.feature diff --git a/gradle/.gitignore b/gradle/.gitignore index da88288c09..01d29dfced 100644 --- a/gradle/.gitignore +++ b/gradle/.gitignore @@ -1 +1,7 @@ /.gradle/ + +**/build/** +/build/ + +# exclude jar for gradle wrapper +!**/gradle/wrapper/*.jar diff --git a/gradle/gradle-cucumber/build.gradle b/gradle/gradle-cucumber/build.gradle new file mode 100644 index 0000000000..e643e680c3 --- /dev/null +++ b/gradle/gradle-cucumber/build.gradle @@ -0,0 +1,68 @@ +import org.gradle.api.tasks.testing.logging.TestLogEvent + +plugins { + id 'java' + id 'se.thinkcode.cucumber-runner' version '0.0.8' +} + +ext { + junitVersion = '5.7.2' + cucumberVersion = '6.10.4' +} + +group 'com.baeldung' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}" + + testImplementation "io.cucumber:cucumber-java:${cucumberVersion}" + + testImplementation "io.cucumber:cucumber-junit:${cucumberVersion}" + testImplementation "org.junit.vintage:junit-vintage-engine:${junitVersion}" +} + +configurations { + cucumberRuntime { + extendsFrom testImplementation + } +} + +task cucumberCli() { + dependsOn assemble, testClasses + doLast { + javaexec { + main = "io.cucumber.core.cli.Main" + classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output + args = [ + '--plugin', 'pretty', + '--plugin', 'html:target/cucumber-report.html', + '--glue', 'com.baeldung.cucumber', + 'src/test/resources'] + } + } +} + +cucumber { + main = 'io.cucumber.core.cli.Main' +} + +test { + useJUnitPlatform() + + testLogging { + events TestLogEvent.FAILED, TestLogEvent.PASSED, TestLogEvent.SKIPPED + } + + systemProperties(project.gradle.startParameter.systemPropertiesArgs) +} diff --git a/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar b/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties b/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..da9702f9e7 --- /dev/null +++ b/gradle/gradle-cucumber/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/gradle-cucumber/gradlew b/gradle/gradle-cucumber/gradlew new file mode 100755 index 0000000000..4f906e0c81 --- /dev/null +++ b/gradle/gradle-cucumber/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradle/gradle-cucumber/gradlew.bat b/gradle/gradle-cucumber/gradlew.bat new file mode 100644 index 0000000000..ac1b06f938 --- /dev/null +++ b/gradle/gradle-cucumber/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle/gradle-cucumber/settings.gradle b/gradle/gradle-cucumber/settings.gradle new file mode 100644 index 0000000000..9b3cf0ebc7 --- /dev/null +++ b/gradle/gradle-cucumber/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'gradle-cucumber' diff --git a/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java b/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java new file mode 100644 index 0000000000..48f1b031a2 --- /dev/null +++ b/gradle/gradle-cucumber/src/main/java/com/baeldung/Account.java @@ -0,0 +1,18 @@ +package com.baeldung; + +public class Account { + + private Double balance; + + public Account(Double initialBalance) { + this.balance = initialBalance; + } + + public void credit(Double amount) { + balance += amount; + } + + public Double getBalance() { + return balance; + } +} diff --git a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java new file mode 100644 index 0000000000..38c01f5487 --- /dev/null +++ b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/RunCucumberTest.java @@ -0,0 +1,14 @@ +package com.baeldung.cucumber; + +import io.cucumber.junit.Cucumber; +import io.cucumber.junit.CucumberOptions; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions( + plugin = {"pretty", "html:target/cucumber-report.html"}, + features = {"src/test/resources"} +) +public class RunCucumberTest { + +} diff --git a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java new file mode 100644 index 0000000000..58f3d10513 --- /dev/null +++ b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java @@ -0,0 +1,28 @@ +package com.baeldung.cucumber; + +import com.baeldung.Account; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class StepDefinitions { + + private Account account; + + @Given("account balance is {double}") + public void account_balance_is(Double initialBalance) { + account = new Account(initialBalance); + } + + @When("the account is credited with {double}") + public void the_account_is_credited_with(Double amount) { + account.credit(amount); + } + + @Then("account should have a balance of {double}") + public void account_should_have_a_balance_of(Double expectedBalance) { + assertEquals(expectedBalance, account.getBalance()); + } +} diff --git a/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature b/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature new file mode 100644 index 0000000000..bd7940d1a5 --- /dev/null +++ b/gradle/gradle-cucumber/src/test/resources/features/account_credited.feature @@ -0,0 +1,6 @@ +Feature: Account is credited with amount + + Scenario: Credit amount + Given account balance is 0.0 + When the account is credited with 10.0 + Then account should have a balance of 10.0 From 270034a046f7c07a69713d14de15f469e0804033 Mon Sep 17 00:00:00 2001 From: makapszenna <66560584+makapszenna@users.noreply.github.com> Date: Thu, 20 May 2021 03:27:09 +0200 Subject: [PATCH 097/160] BAEL-4796 How to display a message in Maven - improvement (#10779) Co-authored-by: Adrianna Zychewicz --- maven-modules/maven-printing-plugins/pom.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/maven-modules/maven-printing-plugins/pom.xml b/maven-modules/maven-printing-plugins/pom.xml index 6ea1ab2a84..805c3c1633 100644 --- a/maven-modules/maven-printing-plugins/pom.xml +++ b/maven-modules/maven-printing-plugins/pom.xml @@ -49,9 +49,11 @@ echo - Hello, world - Embed a line break: ${line.separator} - ArtifactId is ${project.artifactId} + + Hello, world + Embed a line break: ${line.separator} + ArtifactId is ${project.artifactId} + INFO /logs/log-echo.txt true From 8ee60907ea91867d377f2282df194246dbe36863 Mon Sep 17 00:00:00 2001 From: KevinGilmore Date: Wed, 19 May 2021 20:27:34 -0500 Subject: [PATCH 098/160] BAEL-4636: add link back to article (#10787) --- testing-modules/testing-libraries-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/testing-libraries-2/README.md b/testing-modules/testing-libraries-2/README.md index f8361904b8..868d8f307d 100644 --- a/testing-modules/testing-libraries-2/README.md +++ b/testing-modules/testing-libraries-2/README.md @@ -2,3 +2,4 @@ - [Guide to the System Rules Library](https://www.baeldung.com/java-system-rules-junit) - [Guide to the System Stubs Library](https://www.baeldung.com/java-system-stubs) +- [Code Coverage with SonarQube and JaCoCo](https://www.baeldung.com/sonarqube-jacoco-code-coverage) From 31f40d862359b24a45c02a15c6c8a7a282ee4fae Mon Sep 17 00:00:00 2001 From: kwoyke Date: Fri, 21 May 2021 07:16:08 +0200 Subject: [PATCH 099/160] "BAEL-3407: Add examples for injecting Spring components in MapStruct" (#10778) Co-authored-by: Krzysztof Woyke --- ...DestinationMapperUsingInjectedService.java | 22 ++++++++++++ .../com/baeldung/service/SimpleService.java | 11 ++++++ ...ionMapperUsingInjectedIntegrationTest.java | 35 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedService.java create mode 100644 mapstruct/src/main/java/com/baeldung/service/SimpleService.java create mode 100644 mapstruct/src/test/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedIntegrationTest.java diff --git a/mapstruct/src/main/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedService.java b/mapstruct/src/main/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedService.java new file mode 100644 index 0000000000..22e6499711 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedService.java @@ -0,0 +1,22 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.SimpleSource; +import com.baeldung.entity.SimpleDestination; +import com.baeldung.service.SimpleService; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.springframework.beans.factory.annotation.Autowired; + +@Mapper(componentModel = "spring") +public abstract class SimpleDestinationMapperUsingInjectedService { + + @Autowired + protected SimpleService simpleService; + + @Mapping(target = "name", expression = "java(simpleService.enrichName(source.getName()))") + public abstract SimpleDestination sourceToDestination(SimpleSource source); + + public abstract SimpleSource destinationToSource(SimpleDestination destination); + + +} diff --git a/mapstruct/src/main/java/com/baeldung/service/SimpleService.java b/mapstruct/src/main/java/com/baeldung/service/SimpleService.java new file mode 100644 index 0000000000..14b6c09592 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/service/SimpleService.java @@ -0,0 +1,11 @@ +package com.baeldung.service; + +import org.springframework.stereotype.Service; + +@Service +public class SimpleService { + + public String enrichName(String name) { + return "-:: " + name + " ::-"; + } +} diff --git a/mapstruct/src/test/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedIntegrationTest.java b/mapstruct/src/test/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedIntegrationTest.java new file mode 100644 index 0000000000..3bfbc60de6 --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapper/SimpleDestinationMapperUsingInjectedIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.SimpleSource; +import com.baeldung.entity.SimpleDestination; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:applicationContext.xml") +public class SimpleDestinationMapperUsingInjectedIntegrationTest { + + @Autowired + private SimpleDestinationMapperUsingInjectedService mapper; + + @Test + public void givenSourceToDestination_whenMaps_thenNameEnriched() { + // Given + SimpleSource source = new SimpleSource(); + source.setName("Bob"); + source.setDescription("The Builder"); + + // When + SimpleDestination destination = mapper.sourceToDestination(source); + + // Then + assertThat(destination).isNotNull(); + assertThat(destination.getName()).isEqualTo("-:: Bob ::-"); + assertThat(destination.getDescription()).isEqualTo("The Builder"); + } +} \ No newline at end of file From 3e61f32493c0682caa2728172c67271206b9d859 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Fri, 21 May 2021 14:48:00 +0530 Subject: [PATCH 100/160] Update DownloadEmailAttachments.java changes as per review comments --- .../downloadAttachments/DownloadEmailAttachments.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java index cd9cb443d8..07fb21c1a2 100644 --- a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java @@ -35,11 +35,9 @@ public class DownloadEmailAttachments { Address[] fromAddress = message.getFrom(); String from = fromAddress[0].toString(); String subject = message.getSubject(); - String sentDate = message.getSentDate() - .toString(); + String sentDate = message.getSentDate().toString(); List attachments = new ArrayList(); - if (message.getContentType() - .contains("multipart")) { + if (message.getContentType().contains("multipart")) { attachments = downloadAttachments(message); } @@ -111,4 +109,4 @@ public class DownloadEmailAttachments { ex.printStackTrace(); } } -} \ No newline at end of file +} From 51d20e8bdb5bee4b78f6d18fdfdb8c3875c8a7f8 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Fri, 21 May 2021 15:15:48 +0530 Subject: [PATCH 101/160] Update DownloadEmailAttachments.java changing the package name to downloadattachments. --- .../baeldung/downloadAttachments/DownloadEmailAttachments.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java index 07fb21c1a2..4030f3b983 100644 --- a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java @@ -1,4 +1,4 @@ -package com.baeldung.downloadAttachments; +package com.baeldung.downloadattachments; import java.io.File; import java.io.IOException; From 4c75aea71e67d5616d1a6d386bbafe8bf9dadd71 Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Fri, 21 May 2021 15:16:55 +0530 Subject: [PATCH 102/160] Update DownloadEmailAttachmentsUnitTest.java changing the package name to downloadattachments. and file name as per review comments. --- .../downloadAttachments/DownloadEmailAttachmentsUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java index 7e0582fed9..050790e6be 100644 --- a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java +++ b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java @@ -1,9 +1,9 @@ -package com.baeldung.downloadAttachments; +package com.baeldung.downloadattachments; import static org.junit.Assert.fail; import org.junit.Test; -public class DownloadEmailAttachmentsUnitTest { +public class DownloadEmailAttachmentsLiveTest { @Test public void when_Run_then_downloadAttachments() { From 830f61fafbf7f8dcd18d3a7ca2dbf33859ce049f Mon Sep 17 00:00:00 2001 From: rvsathe <38076470+rvsathe@users.noreply.github.com> Date: Fri, 21 May 2021 15:48:14 +0530 Subject: [PATCH 103/160] Rename DownloadEmailAttachmentsUnitTest.java to DownloadEmailAttachmentsLiveTest.java changes as per review comments --- ...chmentsUnitTest.java => DownloadEmailAttachmentsLiveTest.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/{DownloadEmailAttachmentsUnitTest.java => DownloadEmailAttachmentsLiveTest.java} (100%) diff --git a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsLiveTest.java similarity index 100% rename from core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsUnitTest.java rename to core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsLiveTest.java From c18a15288df194f94b757fccf1d1662dbecb6be6 Mon Sep 17 00:00:00 2001 From: rvsathe Date: Fri, 21 May 2021 17:27:38 +0530 Subject: [PATCH 104/160] Renamed packages according t code files --- .../DownloadEmailAttachments.java | 0 .../DownloadEmailAttachmentsLiveTest.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename core-java-modules/core-java-networking-3/src/main/java/com/baeldung/{downloadAttachments => downloadattachments}/DownloadEmailAttachments.java (100%) rename core-java-modules/core-java-networking-3/src/test/java/com/baeldung/{downloadAttachments => downloadattachments}/DownloadEmailAttachmentsLiveTest.java (100%) diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadattachments/DownloadEmailAttachments.java similarity index 100% rename from core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadAttachments/DownloadEmailAttachments.java rename to core-java-modules/core-java-networking-3/src/main/java/com/baeldung/downloadattachments/DownloadEmailAttachments.java diff --git a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsLiveTest.java b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadattachments/DownloadEmailAttachmentsLiveTest.java similarity index 100% rename from core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadAttachments/DownloadEmailAttachmentsLiveTest.java rename to core-java-modules/core-java-networking-3/src/test/java/com/baeldung/downloadattachments/DownloadEmailAttachmentsLiveTest.java From 207bcad90ed87921552c69564119e7de1203602d Mon Sep 17 00:00:00 2001 From: rvsathe Date: Fri, 21 May 2021 17:43:32 +0530 Subject: [PATCH 105/160] changing the indent to 4. --- .../core-java-networking-3/pom.xml | 126 +++++++++--------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/core-java-modules/core-java-networking-3/pom.xml b/core-java-modules/core-java-networking-3/pom.xml index add5051d0c..0ad800e173 100644 --- a/core-java-modules/core-java-networking-3/pom.xml +++ b/core-java-modules/core-java-networking-3/pom.xml @@ -1,71 +1,71 @@ - 4.0.0 - core-java-networking-3 - core-java-networking-3 - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-networking-3 + core-java-networking-3 + jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../pom.xml - + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../pom.xml + - - - org.springframework - spring-core - ${spring.core.version} - - - org.eclipse.jetty - jetty-server - ${jetty.embeded.version} - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.embeded.version} - - - org.assertj - assertj-core - ${assertj.version} - test - - - junit - junit - 4.11 - test - - - com.sun.mail - javax.mail - 1.6.2 - - + + + org.springframework + spring-core + ${spring.core.version} + + + org.eclipse.jetty + jetty-server + ${jetty.embeded.version} + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat.embeded.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + junit + junit + 4.11 + test + + + com.sun.mail + javax.mail + 1.6.2 + + - - core-java-networking-3 - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - + + core-java-networking-3 + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + - - 5.2.8.RELEASE - 9.4.31.v20200723 - 10.0.0-M7 - 3.11.1 - + + 5.2.8.RELEASE + 9.4.31.v20200723 + 10.0.0-M7 + 3.11.1 + \ No newline at end of file From 2598e4fa4d5b665cc2bd518665b4756a1107719c Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 14:40:57 +0200 Subject: [PATCH 106/160] BAEL-4871 Spring Conditional Annotations --- .../spring-boot-annotations/pom.xml | 5 ++ .../conditional/ConditionalUtils.java | 20 ++++++++ .../conditional/IsDevEnvCondition.java | 2 +- .../conditional/IsWindowsCondition.java | 4 +- .../conditional/Java8Condition.java | 3 +- .../conditional/Java9Condition.java | 3 +- .../conditional/LoggingService.java | 2 +- .../ConditionalTestConfiguration.java | 10 ++++ .../DevEnvLoggingConfigurationTest.java | 50 +++++++++++++++++++ .../IsDevEnvConditionUnitTest.java | 31 ++++++++++++ .../IsWindowsConditionUnitTest.java | 40 +++++++++++++++ .../conditional/Java8ConditionUnitTest.java | 40 +++++++++++++++ .../conditional/Java9ConditionUnitTest.java | 40 +++++++++++++++ 13 files changed, 241 insertions(+), 9 deletions(-) create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java create mode 100644 spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index 4ee40bb90b..0affed0746 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -42,6 +42,11 @@ org.hibernate hibernate-core + + org.mockito + mockito-inline + test + org.springframework.boot diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java new file mode 100644 index 0000000000..7294d843d1 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java @@ -0,0 +1,20 @@ +package com.baeldung.annotations.conditional; + +import org.apache.commons.lang3.SystemUtils; +import org.springframework.boot.system.JavaVersion; + +public class ConditionalUtils { + + public static boolean isWindows() { + return SystemUtils.IS_OS_WINDOWS; + } + + public static boolean isJava8() { + return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT); + } + + public static boolean isJava9() { + return JavaVersion.getJavaVersion().equals(JavaVersion.NINE); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java index 7a866560c8..768cd9f6ed 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java @@ -8,6 +8,6 @@ public class IsDevEnvCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return System.getProperty("env").equals("dev"); + return "dev".equals(System.getProperty("env")); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java index 21702ed9b8..24aa4f4b1c 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java @@ -1,7 +1,5 @@ package com.baeldung.annotations.conditional; -import org.apache.commons.lang3.SystemUtils; - import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -10,6 +8,6 @@ public class IsWindowsCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return SystemUtils.IS_OS_WINDOWS; + return ConditionalUtils.isWindows(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java index 0d2ad56917..c5f5e16d52 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java @@ -1,6 +1,5 @@ package com.baeldung.annotations.conditional; -import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +8,6 @@ public class Java8Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT); + return ConditionalUtils.isJava8(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java index 6a21be8bde..2afa8b25a7 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java @@ -1,6 +1,5 @@ package com.baeldung.annotations.conditional; -import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +8,6 @@ public class Java9Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return JavaVersion.getJavaVersion().equals(JavaVersion.NINE); + return ConditionalUtils.isJava9(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java index 1a65a16763..e104ec86e1 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; value = "logging.enabled", havingValue = "true", matchIfMissing = true) -@ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}") +@ConditionalOnExpression("${logging.enabled:true} and '${logging.level}'.equals('DEBUG')") @ConditionalOnJava(JavaVersion.EIGHT) public class LoggingService { } diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java new file mode 100644 index 0000000000..6b23433422 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.annotations.conditional; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.ComponentScan; + +@TestConfiguration +@ComponentScan("com.baeldung.annotations.conditional") +public class ConditionalTestConfiguration { + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java new file mode 100644 index 0000000000..54899f523d --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java @@ -0,0 +1,50 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +public class DevEnvLoggingConfigurationTest { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner(); + + @Test + public void whenDevEnvEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldBeCreated() { + System.setProperty("env", "dev"); + + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertNotNull( + context.getBean(DevEnvLoggingConfiguration.class) + ) + ); + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertNotNull( + context.getBean(LoggingService.class) + ) + ); + } + + @Test + public void whenDevEnvNotEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldNotBeCreated() { + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> + context.getBean(DevEnvLoggingConfiguration.class) + ) + ); + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> + context.getBean(LoggingService.class) + ) + ); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java new file mode 100644 index 0000000000..f4ef471f76 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsDevEnvConditionUnitTest { + + @Test + public void whenDevEnvEnabled_thenDevEnvConditionShouldPass() { + System.setProperty("env", "dev"); + + Assertions.assertTrue( + new IsDevEnvCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + @Test + public void whenDevEnvNotEnabled_thenDevEnvConditionShouldNotPass() { + Assertions.assertTrue( + new IsDevEnvCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java new file mode 100644 index 0000000000..8f632aed1d --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsWindowsConditionUnitTest { + + @Test + public void whenOnWindows_thenIsWindowsConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isWindows) + .thenReturn(true); + Assertions.assertTrue( + new IsWindowsCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnWindows_thenIsWindowsConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isWindows) + .thenReturn(false); + Assertions.assertFalse( + new IsWindowsCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java new file mode 100644 index 0000000000..37bf002ae2 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java8ConditionUnitTest { + + @Test + public void whenOnJava8_thenJava8ConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava8) + .thenReturn(true); + Assertions.assertTrue( + new Java8Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnJava8_thenJava8ConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava8) + .thenReturn(false); + Assertions.assertFalse( + new Java8Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java new file mode 100644 index 0000000000..5808569107 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java9ConditionUnitTest { + + @Test + public void whenOnJava9_thenJava9ConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava9) + .thenReturn(true); + Assertions.assertTrue( + new Java9Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnJava9_thenJava9ConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava9) + .thenReturn(false); + Assertions.assertFalse( + new Java9Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +} From 94919df0c26d03419481403b15c8a5662a423202 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 14:43:48 +0200 Subject: [PATCH 107/160] BAEL-4871 Spring Conditional Annotations --- spring-boot-modules/spring-boot-annotations/pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index 0affed0746..22572e7492 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -42,17 +42,17 @@ org.hibernate hibernate-core - - org.mockito - mockito-inline - test - org.springframework.boot spring-boot-starter-test test + + org.mockito + mockito-inline + test + \ No newline at end of file From adfe5c687ebadf07f87dba09227092099f639239 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 14:55:38 +0200 Subject: [PATCH 108/160] BAEL-4871 Spring Conditional Annotations --- ...urationTest.java => DevEnvLoggingConfigurationUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/{DevEnvLoggingConfigurationTest.java => DevEnvLoggingConfigurationUnitTest.java} (97%) diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java similarity index 97% rename from spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java rename to spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java index 54899f523d..2815fda82e 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java @@ -5,7 +5,7 @@ import org.junit.jupiter.api.Assertions; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -public class DevEnvLoggingConfigurationTest { +public class DevEnvLoggingConfigurationUnitTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner(); From 93c3b2bf358e1ff9fc835cf4cc727834b71ac48f Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 14:59:07 +0200 Subject: [PATCH 109/160] BAEL-4871 Spring Conditional Annotations --- .../conditional/DevEnvLoggingConfigurationUnitTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java index 2815fda82e..e7c1975127 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationUnitTest.java @@ -31,6 +31,8 @@ public class DevEnvLoggingConfigurationUnitTest { @Test public void whenDevEnvNotEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldNotBeCreated() { + System.setProperty("env", "not-dev"); + contextRunner .withUserConfiguration(ConditionalTestConfiguration.class) .run(context -> From 90780c982e14ee09ed0a1783bbf566e42bed06d2 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 15:55:43 +0200 Subject: [PATCH 110/160] BAEL-4871 Spring Conditional Annotations --- .../annotations/conditional/IsDevEnvConditionUnitTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java index f4ef471f76..5302fc79dd 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java @@ -21,7 +21,9 @@ public class IsDevEnvConditionUnitTest { @Test public void whenDevEnvNotEnabled_thenDevEnvConditionShouldNotPass() { - Assertions.assertTrue( + System.setProperty("env", "not-dev"); + + Assertions.assertFalse( new IsDevEnvCondition().matches( Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) ) From 5739671260a1c7213d873b72598d122435936a11 Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Fri, 21 May 2021 16:00:09 +0200 Subject: [PATCH 111/160] BAEL-4871 Spring Conditional Annotations --- .../annotations/conditional/IsWindowsConditionUnitTest.java | 1 - .../baeldung/annotations/conditional/Java8ConditionUnitTest.java | 1 - .../baeldung/annotations/conditional/Java9ConditionUnitTest.java | 1 - 3 files changed, 3 deletions(-) diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java index 8f632aed1d..45ae65a0e2 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java @@ -11,7 +11,6 @@ public class IsWindowsConditionUnitTest { @Test public void whenOnWindows_thenIsWindowsConditionShouldPass() { - try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { theMock.when(ConditionalUtils::isWindows) .thenReturn(true); diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java index 37bf002ae2..0d1b1eded6 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java @@ -11,7 +11,6 @@ public class Java8ConditionUnitTest { @Test public void whenOnJava8_thenJava8ConditionShouldPass() { - try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { theMock.when(ConditionalUtils::isJava8) .thenReturn(true); diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java index 5808569107..ce277e81fe 100644 --- a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java @@ -11,7 +11,6 @@ public class Java9ConditionUnitTest { @Test public void whenOnJava9_thenJava9ConditionShouldPass() { - try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { theMock.when(ConditionalUtils::isJava9) .thenReturn(true); From 2553a71828d0beea1dbf04d40d116c3a683bc70a Mon Sep 17 00:00:00 2001 From: kwoyke Date: Sat, 22 May 2021 10:46:02 +0200 Subject: [PATCH 112/160] BAEL-4970: Close the original response body (#10782) Co-authored-by: Krzysztof Woyke --- .../okhttp/interceptors/ErrorResponseInterceptor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries-http-2/src/main/java/com/baeldung/okhttp/interceptors/ErrorResponseInterceptor.java b/libraries-http-2/src/main/java/com/baeldung/okhttp/interceptors/ErrorResponseInterceptor.java index f6c6673705..02f45e1282 100644 --- a/libraries-http-2/src/main/java/com/baeldung/okhttp/interceptors/ErrorResponseInterceptor.java +++ b/libraries-http-2/src/main/java/com/baeldung/okhttp/interceptors/ErrorResponseInterceptor.java @@ -21,7 +21,12 @@ public class ErrorResponseInterceptor implements Interceptor { Gson gson = new Gson(); String body = gson.toJson(new ErrorMessage(response.code(), "The response from the server was not OK")); ResponseBody responseBody = ResponseBody.create(body, APPLICATION_JSON); - + + ResponseBody originalBody = response.body(); + if (originalBody != null) { + originalBody.close(); + } + return response.newBuilder() .body(responseBody) .build(); From bef579431423ab9678107d8f9bdfdc1b7df39f40 Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Sat, 22 May 2021 14:47:58 +0530 Subject: [PATCH 113/160] Code commit for BAEL-4489 (#10790) * Code commit for "Converting String to BigDecimal in Java" - Article * modified the assert param for comparing actual and expected values * removed the conflict change * Code commit for Secret Key to String and vice versa in java * renaming the junit class name to match coding standard --- .../ConversionClassUtil.java | 53 +++++++++++++++++++ .../ConversionClassUtilUnitTest.java | 44 +++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java create mode 100644 core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java diff --git a/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java b/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java new file mode 100644 index 0000000000..5ff1b7cb9d --- /dev/null +++ b/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java @@ -0,0 +1,53 @@ +package com.baeldung.secretkeyandstringconversion; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.KeySpec; +import java.util.Base64; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +public class ConversionClassUtil { + + /* Generating Secret key */ + + // Generating Secret Key using KeyGenerator class with 256 + public static SecretKey generateKey(int n) throws NoSuchAlgorithmException { + KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); + keyGenerator.init(n); + SecretKey originalKey = keyGenerator.generateKey(); + return originalKey; + } + + // Generating Secret Key using password and salt + public static SecretKey getKeyFromPassword(String password, String salt) + throws NoSuchAlgorithmException, InvalidKeySpecException { + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256); + SecretKey originalKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES"); + return originalKey; + } + + /* Converting Secret key into String */ + public static String convertSecretKeyToString(SecretKey secretKey) throws NoSuchAlgorithmException { + // Converting the Secret Key into byte array + byte[] rawData = secretKey.getEncoded(); + // Getting String - Base64 encoded version of the Secret Key + String encodedKey = Base64.getEncoder().encodeToString(rawData); + return encodedKey; + } + + /* Converting String into Secret key into */ + public static SecretKey convertStringToSecretKeyto(String encodedKey) { + // Decoding the Base64 encoded string into byte array + byte[] decodedKey = Base64.getDecoder().decode(encodedKey); + // Rebuilding the Secret Key using SecretKeySpec Class + SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES"); + return originalKey; + } + +} diff --git a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java new file mode 100644 index 0000000000..29c8ba9fd0 --- /dev/null +++ b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java @@ -0,0 +1,44 @@ +package com.baeldung.secretkeyandstringconversion; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; + +import javax.crypto.SecretKey; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ConversionClassUtilUnitTest { + + @Test + void givenPasswordAndSalt_whenCreateSecreKeyCheckConversion_thenSuccess() + throws NoSuchAlgorithmException, InvalidKeySpecException { + // given + String password = "Baeldung@2021"; + String salt = "@$#baelDunG@#^$*"; + + // when + SecretKey encodedKey = ConversionClassUtil.getKeyFromPassword(password, salt); + String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); + SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); + + // then + Assertions.assertEquals(encodedKey, decodeKey); + } + + @Test + void givenSize_whenCreateSecreKeyCheckConversion_thenSuccess() + throws NoSuchAlgorithmException, InvalidKeySpecException { + // given + int size = 256; + + // when + SecretKey encodedKey = ConversionClassUtil.generateKey(size); + String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); + SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); + + // then + Assertions.assertEquals(encodedKey, decodeKey); + } + +} From 726f7cbb81663c331b7252b05d6347cbf10870f5 Mon Sep 17 00:00:00 2001 From: Haroon Khan Date: Sat, 22 May 2021 10:43:35 +0100 Subject: [PATCH 114/160] [BAEL-4930] Update method names in step definition --- .../test/java/com/baeldung/cucumber/StepDefinitions.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java index 58f3d10513..a3d0d7961b 100644 --- a/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java +++ b/gradle/gradle-cucumber/src/test/java/com/baeldung/cucumber/StepDefinitions.java @@ -12,17 +12,17 @@ public class StepDefinitions { private Account account; @Given("account balance is {double}") - public void account_balance_is(Double initialBalance) { + public void givenAccountBalance(Double initialBalance) { account = new Account(initialBalance); } @When("the account is credited with {double}") - public void the_account_is_credited_with(Double amount) { + public void whenAccountIsCredited(Double amount) { account.credit(amount); } @Then("account should have a balance of {double}") - public void account_should_have_a_balance_of(Double expectedBalance) { + public void thenAccountShouldHaveBalance(Double expectedBalance) { assertEquals(expectedBalance, account.getBalance()); } } From 5e68c55f060b9e32491fc34b19ee43123e75e005 Mon Sep 17 00:00:00 2001 From: KevinGilmore Date: Sat, 22 May 2021 11:23:11 -0500 Subject: [PATCH 115/160] BAEL-4796: add link back to article (#10791) --- maven-modules/maven-printing-plugins/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 maven-modules/maven-printing-plugins/README.md diff --git a/maven-modules/maven-printing-plugins/README.md b/maven-modules/maven-printing-plugins/README.md new file mode 100644 index 0000000000..862c4bcdd1 --- /dev/null +++ b/maven-modules/maven-printing-plugins/README.md @@ -0,0 +1,7 @@ +## Maven Printing Plugins + +This module contains articles about printing from Maven plugins. + +### Relevant Articles + +- [How to Display a Message in Maven](https://www.baeldung.com/maven-print-message-during-execution) From 960642482e9707e441a74c33d956708345aed9d2 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Sun, 23 May 2021 21:05:12 +0530 Subject: [PATCH 116/160] JAVA-5392: Upgrade spring-boot-admin module --- .../spring-boot-admin/spring-boot-admin-client/pom.xml | 2 +- .../spring-boot-admin/spring-boot-admin-server/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml b/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml index a565b94c79..eca92ff3a5 100644 --- a/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml +++ b/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml @@ -60,7 +60,7 @@ - 2.4.0 + 2.4.1 2.0.4.RELEASE diff --git a/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml b/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml index b53394cdef..63bc286b45 100644 --- a/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml +++ b/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml @@ -76,8 +76,8 @@ - 2.4.0 - 2.4.0 + 2.4.1 + 2.4.1 1.5.7 2.0.4.RELEASE From 26f3376b1bed8a305bc6bb2415c4fedf7f63784d Mon Sep 17 00:00:00 2001 From: freelansam <79205526+freelansam@users.noreply.github.com> Date: Sun, 23 May 2021 21:44:50 +0530 Subject: [PATCH 117/160] BAEL-4791: Spring AliasFor Annotation (#10794) --- spring-core-5/pom.xml | 5 ++ .../java/com/baeldung/aliasfor/MyMapping.java | 29 ++++++++ .../aliasfor/MyMappingController.java | 13 ++++ .../baeldung/aliasfor/AliasForUnitTest.java | 66 +++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java create mode 100644 spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java create mode 100644 spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java diff --git a/spring-core-5/pom.xml b/spring-core-5/pom.xml index 68229b80b8..1c2e80be44 100644 --- a/spring-core-5/pom.xml +++ b/spring-core-5/pom.xml @@ -19,6 +19,11 @@ spring-boot-starter ${spring-boot-starter.version} + + org.springframework.boot + spring-boot-starter-web + ${spring-boot-starter.version} + org.springframework.boot spring-boot-starter-test diff --git a/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java b/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java new file mode 100644 index 0000000000..05263297b5 --- /dev/null +++ b/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java @@ -0,0 +1,29 @@ +package com.baeldung.aliasfor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@RequestMapping +public @interface MyMapping { + + @AliasFor(annotation = RequestMapping.class, attribute = "method") + RequestMethod[] action() default {}; + + @AliasFor(annotation = RequestMapping.class, attribute = "path") + String[] value() default {}; + + @AliasFor(annotation = RequestMapping.class, attribute = "path") + String[] mapping() default {}; + + @AliasFor(annotation = RequestMapping.class, attribute = "path") + String[] route() default {}; + +} diff --git a/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java b/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java new file mode 100644 index 0000000000..c3dc2784f8 --- /dev/null +++ b/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java @@ -0,0 +1,13 @@ +package com.baeldung.aliasfor; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +public class MyMappingController { + + @MyMapping(action = RequestMethod.PATCH, route = "/test") + public void mappingMethod() { + } + +} diff --git a/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java b/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java new file mode 100644 index 0000000000..449a55a6f8 --- /dev/null +++ b/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java @@ -0,0 +1,66 @@ +package com.baeldung.aliasfor; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; + +import java.lang.reflect.Method; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = MyMappingController.class) +public class AliasForUnitTest { + + @Autowired + private ConfigurableApplicationContext context; + + Class controllerClass; + + @Before + public void setControllerBean() { + MyMappingController controllerBean = context.getBean(MyMappingController.class); + controllerClass = controllerBean.getClass(); + } + + @Test + public void givenComposedAnnotation_whenExplicitAlias_thenMetaAnnotationAttributeOverridden() { + + for (Method method : controllerClass.getMethods()) { + if (method.isAnnotationPresent(MyMapping.class)) { + MyMapping annotation = AnnotationUtils.findAnnotation(method, MyMapping.class); + RequestMapping metaAnnotation = AnnotationUtils.findAnnotation(method, RequestMapping.class); + + assertEquals(RequestMethod.PATCH, annotation.action()[0]); + + assertEquals(0, metaAnnotation.method().length); + } + } + } + + @Test + public void givenComposedAnnotation_whenImplictAlias_thenAttributesEqual() { + for (Method method : controllerClass.getMethods()) { + if (method.isAnnotationPresent(MyMapping.class)) { + MyMapping annotationOnBean = AnnotationUtils.findAnnotation(method, MyMapping.class); + + assertTrue(annotationOnBean.mapping()[0].equals(annotationOnBean.route()[0])); + assertTrue(annotationOnBean.value()[0].equals(annotationOnBean.route()[0])); + } + } + } + +} From d8c91ee26aefb12380e03b8ea286cf37461059bb Mon Sep 17 00:00:00 2001 From: mikr Date: Mon, 24 May 2021 13:47:38 +0200 Subject: [PATCH 118/160] JAVA-3589 Update Lombok version --- lombok-custom/pom.xml | 1 - lombok/pom.xml | 2 -- pom.xml | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/lombok-custom/pom.xml b/lombok-custom/pom.xml index 220367bfe9..68ce4d1346 100644 --- a/lombok-custom/pom.xml +++ b/lombok-custom/pom.xml @@ -57,7 +57,6 @@ - 1.14.8 1.8 3.3.0-v_771 diff --git a/lombok/pom.xml b/lombok/pom.xml index 334d1defc9..c5758ea8df 100644 --- a/lombok/pom.xml +++ b/lombok/pom.xml @@ -73,8 +73,6 @@ - - 1.18.10 1.0.0.Final diff --git a/pom.xml b/pom.xml index f4606ec368..e805431b18 100644 --- a/pom.xml +++ b/pom.xml @@ -1404,7 +1404,7 @@ 3.0.0 3.13.0 - 1.16.12 + 1.18.20 1.4.197 From a8b32feea86346e880691647aa4af4de539ed570 Mon Sep 17 00:00:00 2001 From: mikr Date: Mon, 24 May 2021 16:15:51 +0200 Subject: [PATCH 119/160] JAVA-3589 Update Lombok version --- lombok-custom/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/lombok-custom/pom.xml b/lombok-custom/pom.xml index 68ce4d1346..220367bfe9 100644 --- a/lombok-custom/pom.xml +++ b/lombok-custom/pom.xml @@ -57,6 +57,7 @@ + 1.14.8 1.8 3.3.0-v_771 From fa55f989d68e9f38fc0e19ccd9061c9ddf5d3122 Mon Sep 17 00:00:00 2001 From: anmoldeep0123 Date: Tue, 25 May 2021 00:27:21 +0530 Subject: [PATCH 120/160] BAEL-4220 | A Guide to IllegalAccessError and when it happens (#10798) * BAEL-4220 | A Guide to IllegalAccessError and when it happens * BAEL-4220 | A Guide to IllegalAccessError and when it happens | fix tests * BAEL-4220 | A Guide to IllegalAccessError and when it happens | fix tests * BAEL-4220 | A Guide to IllegalAccessError and when it happens | BDD test names --- .../exceptions/illegalaccesserror/Class1.java | 8 +++++++ .../exceptions/illegalaccesserror/Class2.java | 10 +++++++++ .../IllegalAccessErrorExample.java | 20 ++++++++++++++++++ .../IllegalAccessErrorSolved.java | 20 ++++++++++++++++++ .../IllegalAccessErrorExampleUnitTest.java | 21 +++++++++++++++++++ .../IllegalAccessErrorSolvedUnitTest.java | 14 +++++++++++++ 6 files changed, 93 insertions(+) create mode 100644 core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class1.java create mode 100644 core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class2.java create mode 100644 core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExample.java create mode 100644 core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolved.java create mode 100644 core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExampleUnitTest.java create mode 100644 core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolvedUnitTest.java diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class1.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class1.java new file mode 100644 index 0000000000..d50d2bc5f5 --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class1.java @@ -0,0 +1,8 @@ +package com.baeldung.exceptions.illegalaccesserror; + +public class Class1 { + + public void bar() { + System.out.println("SUCCESS"); + } +} diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class2.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class2.java new file mode 100644 index 0000000000..766ceccb6b --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/Class2.java @@ -0,0 +1,10 @@ +package com.baeldung.exceptions.illegalaccesserror; + +public class Class2 { + + public void foo() { + Class1 c1 = new Class1(); + c1.bar(); + } +} + \ No newline at end of file diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExample.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExample.java new file mode 100644 index 0000000000..2cc1abbb1d --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExample.java @@ -0,0 +1,20 @@ +package com.baeldung.exceptions.illegalaccesserror; + +public class IllegalAccessErrorExample { + + interface Baeldung { + public default void foobar() { + System.out.println("This is a default method."); + } + } + + class Super { + private void foobar() { + System.out.println("SuperClass method foobar"); + } + } + + class MySubClass extends Super implements Baeldung { + + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolved.java b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolved.java new file mode 100644 index 0000000000..8f6a4c14a4 --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/main/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolved.java @@ -0,0 +1,20 @@ +package com.baeldung.exceptions.illegalaccesserror; + +public class IllegalAccessErrorSolved { + + interface BaeldungSolved { + public default void foobar() { + System.out.println("This is a default method."); + } + } + + class SuperSolved { + public void foobar() { + System.out.println("SuperClass method foobar"); + } + } + + class MySubClassSolved extends SuperSolved implements BaeldungSolved { + + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExampleUnitTest.java b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExampleUnitTest.java new file mode 100644 index 0000000000..201e782229 --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorExampleUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.exceptions.illegalaccesserror; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class IllegalAccessErrorExampleUnitTest { + + @Test() + public void givenInterfaceDefaultMethOverriddenPrivateAccess_whenInvoked_thenIllegalAccessError() { + Assertions.assertThrows(IllegalAccessError.class, () -> { + new IllegalAccessErrorExample().new MySubClass().foobar(); + }); + } + + @Test() + public void givenClass1Class2_whenSameClassDefintion_thenNoIllegalAccessError() { + Assertions.assertDoesNotThrow(() -> { + new Class2().foo(); + }); + } +} diff --git a/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolvedUnitTest.java b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolvedUnitTest.java new file mode 100644 index 0000000000..ad150334d4 --- /dev/null +++ b/core-java-modules/core-java-exceptions-3/src/test/java/com/baeldung/exceptions/illegalaccesserror/IllegalAccessErrorSolvedUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.exceptions.illegalaccesserror; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class IllegalAccessErrorSolvedUnitTest { + + @Test() + public void givenInterfaceDefaultMethOverriddenNonPrivateAccess_whenInvoked_thenNoIllegalAccessError() { + Assertions.assertDoesNotThrow(() -> { + new IllegalAccessErrorSolved().new MySubClassSolved().foobar(); + }); + } +} From ebb5192a603e4e145858534bea0282f97ecd182b Mon Sep 17 00:00:00 2001 From: majewsk6 Date: Tue, 25 May 2021 11:53:59 +0200 Subject: [PATCH 121/160] BAEL-4871 Spring Conditional Annotations --- .../conditional/AdditionalWebConfiguration.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/AdditionalWebConfiguration.java diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/AdditionalWebConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/AdditionalWebConfiguration.java new file mode 100644 index 0000000000..22b41a28e0 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/AdditionalWebConfiguration.java @@ -0,0 +1,9 @@ +package com.baeldung.annotations.conditional; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnWarDeployment; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnWarDeployment +public class AdditionalWebConfiguration { +} From 27c53fd6deea979b598020b02e91423650f79cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20G=C5=82=C3=B3wka?= Date: Tue, 25 May 2021 21:48:22 +0200 Subject: [PATCH 122/160] BAEL-4887: fetching multiple entities in JPA query (#10803) --- .../jpa/returnmultipleentities/Channel.java | 43 ++++++++++ .../ReportRepository.java | 23 +++++ .../returnmultipleentities/Subscription.java | 41 +++++++++ .../jpa/returnmultipleentities/User.java | 29 +++++++ .../main/resources/META-INF/persistence.xml | 20 +++++ ...ReturnMultipleEntitiesIntegrationTest.java | 84 +++++++++++++++++++ 6 files changed, 240 insertions(+) create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Channel.java create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/ReportRepository.java create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Subscription.java create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/User.java create mode 100644 persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/returnmultipleentities/ReturnMultipleEntitiesIntegrationTest.java diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Channel.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Channel.java new file mode 100644 index 0000000000..7f60dd8de4 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Channel.java @@ -0,0 +1,43 @@ +package com.baeldung.jpa.returnmultipleentities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Objects; + +@Entity +public class Channel { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String code; + + private Long subscriptionId; + + public void setCode(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setSubscriptionId(Long subscriptionId) { + this.subscriptionId = subscriptionId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Channel channel = (Channel) o; + return Objects.equals(id, channel.id) && Objects.equals(code, channel.code) && Objects.equals(subscriptionId, channel.subscriptionId); + } + + @Override + public int hashCode() { + return Objects.hash(id, code, subscriptionId); + } +} diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/ReportRepository.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/ReportRepository.java new file mode 100644 index 0000000000..ae574de7d5 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/ReportRepository.java @@ -0,0 +1,23 @@ +package com.baeldung.jpa.returnmultipleentities; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.Query; +import java.util.List; + +public class ReportRepository { + private final EntityManagerFactory emf; + + public ReportRepository() { + emf = Persistence.createEntityManagerFactory("jpa-h2-return-multiple-entities"); + } + + public List find(String email) { + EntityManager entityManager = emf.createEntityManager(); + Query query = entityManager.createQuery("SELECT c, s, u FROM Channel c, Subscription s, User u WHERE c.subscriptionId = s.id AND s.id = u.subscriptionId AND u.email=:email"); + query.setParameter("email", email); + + return query.getResultList(); + } +} diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Subscription.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Subscription.java new file mode 100644 index 0000000000..91510ebb9f --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/Subscription.java @@ -0,0 +1,41 @@ +package com.baeldung.jpa.returnmultipleentities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Objects; + +@Entity +public class Subscription { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String code; + + public void setCode(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public Long getId() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Subscription subscription = (Subscription) o; + return Objects.equals(id, subscription.id) && Objects.equals(code, subscription.code); + } + + @Override + public int hashCode() { + return Objects.hash(id, code); + } +} diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/User.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/User.java new file mode 100644 index 0000000000..35d546b57d --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/returnmultipleentities/User.java @@ -0,0 +1,29 @@ +package com.baeldung.jpa.returnmultipleentities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String email; + + private Long subscriptionId; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setSubscriptionId(Long subscriptionId) { + this.subscriptionId = subscriptionId; + } +} diff --git a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml index bc41f35c01..666fc1500a 100644 --- a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml @@ -113,4 +113,24 @@ + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.returnmultipleentities.Channel + com.baeldung.jpa.returnmultipleentities.Subscription + com.baeldung.jpa.returnmultipleentities.User + com.baeldung.jpa.returnmultipleentities.ReportRepository + true + + + + + + + + + + + + + diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/returnmultipleentities/ReturnMultipleEntitiesIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/returnmultipleentities/ReturnMultipleEntitiesIntegrationTest.java new file mode 100644 index 0000000000..eb71060f22 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/returnmultipleentities/ReturnMultipleEntitiesIntegrationTest.java @@ -0,0 +1,84 @@ +package com.baeldung.jpa.returnmultipleentities; + +import org.junit.Before; +import org.junit.Test; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +public class ReturnMultipleEntitiesIntegrationTest { + private static EntityManagerFactory factory; + private static EntityManager entityManager; + private ReportRepository reportRepository; + + @Before + public void setup() { + factory = Persistence.createEntityManagerFactory("jpa-h2-return-multiple-entities"); + entityManager = factory.createEntityManager(); + reportRepository = new ReportRepository(); + populateH2DB(); + } + + @Test + public void whenQueryingForMultipleEntitiesInOneQuery_thenJPAReturnsMultipleEntitiesInCorrectOrder() { + List reportDetails = reportRepository.find("user1@gmail.com"); + + assertEquals(2, reportDetails.size()); + + for (Object[] reportDetail : reportDetails) { + assertEquals(3, reportDetail.length); + + Channel channel = (Channel) reportDetail[0]; + Subscription subscription = (Subscription) reportDetail[1]; + User user = (User) reportDetail[2]; + + assertEquals("single", subscription.getCode()); + assertEquals("user1@gmail.com", user.getEmail()); + if (!("eurosport".equals(channel.getCode()) || "hbo".equals(channel.getCode()))) { + fail(); + } + } + } + + private static void populateH2DB() { + entityManager.getTransaction().begin(); + + Subscription single = new Subscription(); + single.setCode("single"); + + Subscription family = new Subscription(); + family.setCode("family"); + + entityManager.persist(single); + entityManager.persist(family); + + Channel bbc = new Channel(); + bbc.setCode("bbc"); + bbc.setSubscriptionId(family.getId()); + + Channel eurosport = new Channel(); + eurosport.setCode("eurosport"); + eurosport.setSubscriptionId(single.getId()); + + Channel hbo = new Channel(); + hbo.setCode("hbo"); + hbo.setSubscriptionId(single.getId()); + + entityManager.persist(bbc); + entityManager.persist(eurosport); + entityManager.persist(hbo); + + User user1 = new User(); + user1.setEmail("user1@gmail.com"); + user1.setSubscriptionId(single.getId()); + + entityManager.persist(user1); + + entityManager.getTransaction().commit(); + } +} From 6877e54e1afa8cae490a51f8f871a37191e319c9 Mon Sep 17 00:00:00 2001 From: freelansam <79205526+freelansam@users.noreply.github.com> Date: Wed, 26 May 2021 01:23:21 +0530 Subject: [PATCH 123/160] BAEL-4791 - clean up (#10804) --- .../java/com/baeldung/aliasfor/AliasForUnitTest.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java b/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java index 449a55a6f8..7beada3f35 100644 --- a/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java +++ b/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java @@ -1,10 +1,7 @@ package com.baeldung.aliasfor; -import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; import java.lang.reflect.Method; @@ -14,8 +11,6 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.bind.annotation.RequestMapping; @@ -57,8 +52,8 @@ public class AliasForUnitTest { if (method.isAnnotationPresent(MyMapping.class)) { MyMapping annotationOnBean = AnnotationUtils.findAnnotation(method, MyMapping.class); - assertTrue(annotationOnBean.mapping()[0].equals(annotationOnBean.route()[0])); - assertTrue(annotationOnBean.value()[0].equals(annotationOnBean.route()[0])); + assertEquals(annotationOnBean.mapping()[0], annotationOnBean.route()[0]); + assertEquals(annotationOnBean.value()[0], annotationOnBean.route()[0]); } } } From 74805c8ada94ae3d1ca8e397803a4634c66cbfc7 Mon Sep 17 00:00:00 2001 From: sunainag Date: Wed, 26 May 2021 01:51:56 +0530 Subject: [PATCH 124/160] "BAEL-4894: Wire tap (EIP Patterns)" (#10781) --- patterns/.gitignore | 1 + patterns/enterprise-patterns/pom.xml | 62 ++++++++++++++++ .../enterprise-patterns/wire-tap/README.md | 34 +++++++++ patterns/enterprise-patterns/wire-tap/pom.xml | 29 ++++++++ .../wire-tap/src/data/.camel/msg1.xml | 2 + .../wire-tap/src/data/msg.xml | 2 + .../java/com/baeldung/AmqApplication.java | 70 +++++++++++++++++++ .../src/main/java/com/baeldung/MyBean.java | 14 ++++ .../src/main/java/com/baeldung/MyPayload.java | 31 ++++++++ .../com/baeldung/MyPayloadClonePrepare.java | 15 ++++ .../src/main/resources/application.properties | 9 +++ .../src/main/resources/log4j.properties | 16 +++++ ...HYLTPDL1209-34209-1621429668568-4-10-1-1-1 | 1 + ...HYLTPDL1209-34209-1621429668568-4-11-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-2-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-3-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-4-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-5-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-6-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-7-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-8-1-1-1 | 1 + ...NHYLTPDL1209-34209-1621429668568-4-9-1-1-1 | 1 + ...HYLTPDL1209-46717-1621429562728-4-10-1-1-1 | 1 + ...HYLTPDL1209-46717-1621429562728-4-11-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-2-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-3-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-4-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-5-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-6-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-7-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-8-1-1-1 | 1 + ...NHYLTPDL1209-46717-1621429562728-4-9-1-1-1 | 1 + patterns/pom.xml | 1 + 33 files changed, 306 insertions(+) create mode 100644 patterns/.gitignore create mode 100644 patterns/enterprise-patterns/pom.xml create mode 100644 patterns/enterprise-patterns/wire-tap/README.md create mode 100644 patterns/enterprise-patterns/wire-tap/pom.xml create mode 100644 patterns/enterprise-patterns/wire-tap/src/data/.camel/msg1.xml create mode 100644 patterns/enterprise-patterns/wire-tap/src/data/msg.xml create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/AmqApplication.java create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyBean.java create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayload.java create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayloadClonePrepare.java create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/resources/application.properties create mode 100644 patterns/enterprise-patterns/wire-tap/src/main/resources/log4j.properties create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-10-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-11-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-2-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-3-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-4-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-5-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-6-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-7-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-8-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-9-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-10-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-11-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-2-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-3-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-4-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-5-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-6-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-7-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-8-1-1-1 create mode 100644 patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-9-1-1-1 diff --git a/patterns/.gitignore b/patterns/.gitignore new file mode 100644 index 0000000000..1d420f6aaf --- /dev/null +++ b/patterns/.gitignore @@ -0,0 +1 @@ +/product-service/ diff --git a/patterns/enterprise-patterns/pom.xml b/patterns/enterprise-patterns/pom.xml new file mode 100644 index 0000000000..3637072c58 --- /dev/null +++ b/patterns/enterprise-patterns/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + com.baeldung + patterns + 1.0.0-SNAPSHOT + + + enterprise-patterns + pom + + + 3.7.4 + + + + + org.apache.camel.springboot + camel-spring-boot-starter + + + org.apache.camel.springboot + camel-activemq-starter + + + + + org.springframework.boot + spring-boot-starter-test + 2.2.2.RELEASE + + + org.apache.camel + camel-test-spring-junit5 + test + + + + + + + org.apache.camel.springboot + camel-spring-boot-dependencies + ${camel.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/patterns/enterprise-patterns/wire-tap/README.md b/patterns/enterprise-patterns/wire-tap/README.md new file mode 100644 index 0000000000..5f2aaf0d5a --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/README.md @@ -0,0 +1,34 @@ +# Wire Tap Pattern + +The application shows you how to use a Wire Tap to monitor, debug or troubleshoot messages flowing through the system, without permanently consuming them off, or making any changes to the expected message in the output channel. + +This example shows how to implement this with a simple Apache Camel application using Spring Boot and Apache ActiveMq. +For convenience, we are using in-memory activeMq. + + + +### Configuring and using the Connection Factory + +1. Create CamelContext. +2. Connect to embedded (or remote) ActiveMQ JMS broker. +3. Add JMS queue to CamelContext. +4. Load file orders (xml/csv) from src/data into the JMS queue. +5. Based on the extension of the incoming file message, route to the respective queues. +6. Test that the destination route is working. +7. Audit the received file (order) from the wire tap queue. + +### How to run the example: + + mvn spring-boot:run + + +The Wire Tap processor, by default, makes a shallow copy of the Camel Exchange instance. The copy of the exchange is sent to the endpoint specified in the wireTap statement. The body of the wire tapped message contains the same object as that in the original message which means any change to the internal state of that object during the wire tap route may also end up changing the main message’s body. + +To solve this, we need to create a deep copy of the object before passing it to the wire tap destination. Wire Tap EIP provides us with a mechanism to perform a “deep” copy of the message, by implementing the org.apache.camel.Processor class. This needs to be be called using onPrepare statement right after wireTap. +For more details, check out the AmqApplicationUnitTest.class. + +### Relevant Articles: + +- [Wire tap (Enterprise Integration Pattern)](https://drafts.baeldung.com/?p=103346&preview=true) +- [Intro to Apache camel](https://www.baeldung.com/apache-camel-intro) + diff --git a/patterns/enterprise-patterns/wire-tap/pom.xml b/patterns/enterprise-patterns/wire-tap/pom.xml new file mode 100644 index 0000000000..9169c4ac91 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + wire-tap + 1.0 + jar + + + enterprise-patterns + com.baeldung + 1.0.0-SNAPSHOT + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/patterns/enterprise-patterns/wire-tap/src/data/.camel/msg1.xml b/patterns/enterprise-patterns/wire-tap/src/data/.camel/msg1.xml new file mode 100644 index 0000000000..0a6fa64552 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/data/.camel/msg1.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/src/data/msg.xml b/patterns/enterprise-patterns/wire-tap/src/data/msg.xml new file mode 100644 index 0000000000..0a6fa64552 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/data/msg.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/AmqApplication.java b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/AmqApplication.java new file mode 100644 index 0000000000..eacef86d75 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/AmqApplication.java @@ -0,0 +1,70 @@ +package com.baeldung; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.camel.CamelContext; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.jms.JmsComponent; +import org.apache.camel.impl.DefaultCamelContext; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AmqApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(AmqApplication.class, args); + + try (CamelContext context = new DefaultCamelContext()) { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( + "vm://localhost?broker.persistent=false"); + connectionFactory.setTrustAllPackages(true); + context.addComponent("direct", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); + addRoute(context); + + try (ProducerTemplate template = context.createProducerTemplate()) { + context.start(); + + MyPayload payload = new MyPayload("One"); + template.sendBody("direct:source", payload); + Thread.sleep(10000); + } finally { + context.stop(); + } + } + } + + private static void addRoute(CamelContext context) throws Exception { + context.addRoutes(newExchangeRoute()); + } + + static RoutesBuilder traditionalWireTapRoute() { + return new RouteBuilder() { + public void configure() { + + from("direct:source").log("Main route: Send '${body}' to tap router").wireTap("direct:tap").delay(1000) + .log("Main route: Add 'two' to '${body}'").bean(MyBean.class, "addTwo").to("direct:destination") + .log("Main route: Output '${body}'"); + + from("direct:tap").log("Tap Wire route: received '${body}'") + .log("Tap Wire route: Add 'three' to '${body}'").bean(MyBean.class, "addThree") + .log("Tap Wire route: Output '${body}'"); + + from("direct:destination").log("Output at destination: '${body}'"); + } + }; + } + + static RoutesBuilder newExchangeRoute() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + + from("direct:source").wireTap("direct:tap").onPrepare(new MyPayloadClonePrepare()).end().delay(1000); + + from("direct:tap").bean(MyBean.class, "addThree"); + } + }; + } + +} diff --git a/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyBean.java b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyBean.java new file mode 100644 index 0000000000..62c45725b0 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyBean.java @@ -0,0 +1,14 @@ +package com.baeldung; + +public class MyBean { + + public MyPayload addTwo(MyPayload body) { + body.setValue(body.getValue() + " and two"); + return body; + } + + public MyPayload addThree(MyPayload body) { + body.setValue(body.getValue() + " and three"); + return body; + } +} diff --git a/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayload.java b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayload.java new file mode 100644 index 0000000000..84d6a22733 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayload.java @@ -0,0 +1,31 @@ +package com.baeldung; + +import java.io.Serializable; + +public class MyPayload implements Serializable { + + private static final long serialVersionUID = 1L; + private String value; + + public MyPayload(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String toString() { + return value; + } + + public MyPayload deepClone() { + MyPayload myPayload = new MyPayload(value); + return myPayload; + } + +} diff --git a/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayloadClonePrepare.java b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayloadClonePrepare.java new file mode 100644 index 0000000000..938194bc1a --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/java/com/baeldung/MyPayloadClonePrepare.java @@ -0,0 +1,15 @@ +package com.baeldung; + +import java.util.Date; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +public class MyPayloadClonePrepare implements Processor { + + public void process(Exchange exchange) throws Exception { + MyPayload myPayload = exchange.getIn().getBody(MyPayload.class); + exchange.getIn().setBody(myPayload.deepClone()); + exchange.getIn().setHeader("date", new Date()); + } +} diff --git a/patterns/enterprise-patterns/wire-tap/src/main/resources/application.properties b/patterns/enterprise-patterns/wire-tap/src/main/resources/application.properties new file mode 100644 index 0000000000..a74f494fa5 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/resources/application.properties @@ -0,0 +1,9 @@ +# to keep the JVM running +camel.springboot.main-run-controller = true + +#configure the URL of the remote ActiveMQ broker +#camel.component.activemq.broker-url=tcp://localhost:61616 +#spring.activemq.broker-url=tcp://localhost:61616 + +spring.activemq.in-memory=true +spring.activemq.pool.enabled=false \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/src/main/resources/log4j.properties b/patterns/enterprise-patterns/wire-tap/src/main/resources/log4j.properties new file mode 100644 index 0000000000..28aa51259a --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/src/main/resources/log4j.properties @@ -0,0 +1,16 @@ +# Root logger option +log4j.rootLogger=INFO, file, console + +log4j.logger.com.javarticles=INFO, file + +# Direct log messages to a log file +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.File=javarticles.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d | %p | %F %L | %m%n + +# Direct log messages to stdout +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.Target=System.out +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{HH:mm}| %p | %F %L | %m%n \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-10-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-10-1-1-1 new file mode 100644 index 0000000000..25b70e3283 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-10-1-1-1 @@ -0,0 +1 @@ +Test Message: 8 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-11-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-11-1-1-1 new file mode 100644 index 0000000000..3948af158c --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-11-1-1-1 @@ -0,0 +1 @@ +Test Message: 9 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-2-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-2-1-1-1 new file mode 100644 index 0000000000..262fbf6de5 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-2-1-1-1 @@ -0,0 +1 @@ +Test Message: 0 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-3-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-3-1-1-1 new file mode 100644 index 0000000000..64a5c33134 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-3-1-1-1 @@ -0,0 +1 @@ +Test Message: 1 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-4-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-4-1-1-1 new file mode 100644 index 0000000000..de22e70d38 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-4-1-1-1 @@ -0,0 +1 @@ +Test Message: 2 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-5-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-5-1-1-1 new file mode 100644 index 0000000000..d400e1afeb --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-5-1-1-1 @@ -0,0 +1 @@ +Test Message: 3 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-6-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-6-1-1-1 new file mode 100644 index 0000000000..660c960fcb --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-6-1-1-1 @@ -0,0 +1 @@ +Test Message: 4 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-7-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-7-1-1-1 new file mode 100644 index 0000000000..c97f21578a --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-7-1-1-1 @@ -0,0 +1 @@ +Test Message: 5 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-8-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-8-1-1-1 new file mode 100644 index 0000000000..be38d662ff --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-8-1-1-1 @@ -0,0 +1 @@ +Test Message: 6 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-9-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-9-1-1-1 new file mode 100644 index 0000000000..518e4227fc --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-34209-1621429668568-4-9-1-1-1 @@ -0,0 +1 @@ +Test Message: 7 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-10-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-10-1-1-1 new file mode 100644 index 0000000000..25b70e3283 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-10-1-1-1 @@ -0,0 +1 @@ +Test Message: 8 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-11-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-11-1-1-1 new file mode 100644 index 0000000000..3948af158c --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-11-1-1-1 @@ -0,0 +1 @@ +Test Message: 9 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-2-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-2-1-1-1 new file mode 100644 index 0000000000..262fbf6de5 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-2-1-1-1 @@ -0,0 +1 @@ +Test Message: 0 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-3-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-3-1-1-1 new file mode 100644 index 0000000000..64a5c33134 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-3-1-1-1 @@ -0,0 +1 @@ +Test Message: 1 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-4-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-4-1-1-1 new file mode 100644 index 0000000000..de22e70d38 --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-4-1-1-1 @@ -0,0 +1 @@ +Test Message: 2 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-5-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-5-1-1-1 new file mode 100644 index 0000000000..d400e1afeb --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-5-1-1-1 @@ -0,0 +1 @@ +Test Message: 3 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-6-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-6-1-1-1 new file mode 100644 index 0000000000..660c960fcb --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-6-1-1-1 @@ -0,0 +1 @@ +Test Message: 4 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-7-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-7-1-1-1 new file mode 100644 index 0000000000..c97f21578a --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-7-1-1-1 @@ -0,0 +1 @@ +Test Message: 5 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-8-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-8-1-1-1 new file mode 100644 index 0000000000..be38d662ff --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-8-1-1-1 @@ -0,0 +1 @@ +Test Message: 6 \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-9-1-1-1 b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-9-1-1-1 new file mode 100644 index 0000000000..518e4227fc --- /dev/null +++ b/patterns/enterprise-patterns/wire-tap/test/ID-PRINHYLTPDL1209-46717-1621429562728-4-9-1-1-1 @@ -0,0 +1 @@ +Test Message: 7 \ No newline at end of file diff --git a/patterns/pom.xml b/patterns/pom.xml index 3bde26cae2..6e92ad2813 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -28,6 +28,7 @@ intercepting-filter solid clean-architecture + enterprise-patterns From 4e96ddfa14574757a92b9a7d2004bfdd974c25f6 Mon Sep 17 00:00:00 2001 From: Benjamin Caure Date: Tue, 25 May 2021 22:27:16 +0200 Subject: [PATCH 125/160] BAEL-4665: add text blocks to multiline strings test (#10777) * BAEL-4665: add text blocks to multiline strings test * BAEL-4665: move core-java-strings to jdk9 profile --- core-java-modules/core-java-strings/pom.xml | 1 + .../main/java/com/baeldung/multiline/MultiLineString.java | 7 +++++++ .../com/baeldung/multiline/MultiLineStringUnitTest.java | 1 + core-java-modules/pom.xml | 1 - pom.xml | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-strings/pom.xml b/core-java-modules/core-java-strings/pom.xml index 137499de6b..aca0bb3346 100644 --- a/core-java-modules/core-java-strings/pom.xml +++ b/core-java-modules/core-java-strings/pom.xml @@ -57,6 +57,7 @@ 3.6.1 61.1 + 15 \ No newline at end of file diff --git a/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java b/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java index 987bc751cd..5d333799c4 100644 --- a/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java +++ b/core-java-modules/core-java-strings/src/main/java/com/baeldung/multiline/MultiLineString.java @@ -64,4 +64,11 @@ public class MultiLineString { return new String(Files.readAllBytes(Paths.get("src/main/resources/stephenking.txt"))); } + public String textBlocks() { + return """ + Get busy living + or + get busy dying. + --Stephen King"""; + } } diff --git a/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java b/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java index 04d318c71b..66bc0a655b 100644 --- a/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java +++ b/core-java-modules/core-java-strings/src/test/java/com/baeldung/multiline/MultiLineStringUnitTest.java @@ -16,6 +16,7 @@ public class MultiLineStringUnitTest { assertEquals(ms.stringJoin(), ms.stringBuilder()); assertEquals(ms.stringBuilder(), ms.guavaJoiner()); assertEquals(ms.guavaJoiner(), ms.loadFromFile()); + assertEquals(ms.loadFromFile(), ms.textBlocks()); } } diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index b4aae7949f..905fd30ee8 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -111,7 +111,6 @@ core-java-string-operations core-java-string-operations-2 core-java-string-operations-3 - core-java-strings core-java-sun core-java-regex pre-jpms diff --git a/pom.xml b/pom.xml index d161ec18e0..686db65e8f 100644 --- a/pom.xml +++ b/pom.xml @@ -1340,6 +1340,7 @@ core-java-modules/core-java-os core-java-modules/core-java-time-measurements core-java-modules/multimodulemavenproject + core-java-modules/core-java-strings From ea553b2d73761aa86f9979ca860b698b0e21e327 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 27 May 2021 00:56:46 +0800 Subject: [PATCH 126/160] Update README.md --- spring-web-modules/spring-mvc-forms-thymeleaf/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-web-modules/spring-mvc-forms-thymeleaf/README.md b/spring-web-modules/spring-mvc-forms-thymeleaf/README.md index 57fa32901c..eb005346f6 100644 --- a/spring-web-modules/spring-mvc-forms-thymeleaf/README.md +++ b/spring-web-modules/spring-mvc-forms-thymeleaf/README.md @@ -6,4 +6,5 @@ This module contains articles about Spring MVC Forms using Thymeleaf - [Session Attributes in Spring MVC](https://www.baeldung.com/spring-mvc-session-attributes) - [Binding a List in Thymeleaf](https://www.baeldung.com/thymeleaf-list) +- [Multipart Request Handling in Spring](https://www.baeldung.com/sprint-boot-multipart-requests) From 536a2287f1beb7522fcf7bcfbf894380282e3df4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 27 May 2021 01:01:00 +0800 Subject: [PATCH 127/160] Update README.md --- core-java-modules/core-java/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index b0e740e3b5..14857d5d87 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -11,3 +11,4 @@ - [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) From 48105ee4b484ef34cddd5938b2cecf513029e82d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 27 May 2021 01:03:35 +0800 Subject: [PATCH 128/160] Update README.md --- spring-core-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-core-5/README.md b/spring-core-5/README.md index 4315535e69..cf90d9ffc3 100644 --- a/spring-core-5/README.md +++ b/spring-core-5/README.md @@ -7,4 +7,5 @@ This module contains articles about core Spring functionality - [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation) - [Solving Spring’s “not eligible for auto-proxying” Warning](https://www.baeldung.com/spring-not-eligible-for-auto-proxying) - [Spring Bean Names](https://www.baeldung.com/spring-bean-names) +- [AliasFor Annotation in Spring](https://www.baeldung.com/spring-aliasfor-annotation) - More articles: [[<-- prev]](/spring-core-4) From 81fbe9454994b47bb46c699a7a56d4af432b731c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 27 May 2021 01:05:26 +0800 Subject: [PATCH 129/160] Create README.md --- maven-modules/maven-pom-types/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 maven-modules/maven-pom-types/README.md diff --git a/maven-modules/maven-pom-types/README.md b/maven-modules/maven-pom-types/README.md new file mode 100644 index 0000000000..40119f68c1 --- /dev/null +++ b/maven-modules/maven-pom-types/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Difference Between Super, Simplest, and Effective POM](https://www.baeldung.com/maven-super-simplest-effective-pom) From a9121efec05a819fa0608e6b260d07026d5b02e0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 27 May 2021 01:06:55 +0800 Subject: [PATCH 130/160] Update README.md --- spring-boot-modules/spring-boot-annotations/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-annotations/README.md b/spring-boot-modules/spring-boot-annotations/README.md index 1b2bca435c..9742661f30 100644 --- a/spring-boot-modules/spring-boot-annotations/README.md +++ b/spring-boot-modules/spring-boot-annotations/README.md @@ -11,3 +11,4 @@ This module contains articles about Spring Boot annotations - [Spring Bean Annotations](https://www.baeldung.com/spring-bean-annotations) - [Difference Between @ComponentScan and @EnableAutoConfiguration in Spring Boot](https://www.baeldung.com/spring-componentscan-vs-enableautoconfiguration) - [Where Should the Spring @Service Annotation Be Kept?](https://www.baeldung.com/spring-service-annotation-placement) +- [Spring Conditional Annotations](https://www.baeldung.com/spring-conditional-annotations) From a626528201e3792bfbda183c853c35b32287a5b7 Mon Sep 17 00:00:00 2001 From: singhalak11 <84023281+singhalak11@users.noreply.github.com> Date: Thu, 27 May 2021 23:28:53 +0530 Subject: [PATCH 131/160] BAEL-4987: new module for operators (#10800) --- .../core-java-lang-operators-2/README.md | 5 ++ .../core-java-lang-operators-2/pom.xml | 49 +++++++++++++++++++ .../BitwiseAndLogicalOROperatorUnitTest.java | 4 ++ core-java-modules/pom.xml | 1 + 4 files changed, 59 insertions(+) create mode 100644 core-java-modules/core-java-lang-operators-2/README.md create mode 100644 core-java-modules/core-java-lang-operators-2/pom.xml create mode 100644 core-java-modules/core-java-lang-operators-2/src/test/java/com/baeldung/oroperators/BitwiseAndLogicalOROperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-operators-2/README.md b/core-java-modules/core-java-lang-operators-2/README.md new file mode 100644 index 0000000000..46c874f361 --- /dev/null +++ b/core-java-modules/core-java-lang-operators-2/README.md @@ -0,0 +1,5 @@ +## Core Java Operators + +This module contains articles about Java operators + +## Relevant Articles: diff --git a/core-java-modules/core-java-lang-operators-2/pom.xml b/core-java-modules/core-java-lang-operators-2/pom.xml new file mode 100644 index 0000000000..1e7e659e6d --- /dev/null +++ b/core-java-modules/core-java-lang-operators-2/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + core-java-lang-operators-2 + 0.1.0-SNAPSHOT + core-java-lang-operators-2 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + + core-java-lang-operators-2 + + + src/main/resources + true + + + + + + + 3.10.0 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-operators-2/src/test/java/com/baeldung/oroperators/BitwiseAndLogicalOROperatorUnitTest.java b/core-java-modules/core-java-lang-operators-2/src/test/java/com/baeldung/oroperators/BitwiseAndLogicalOROperatorUnitTest.java new file mode 100644 index 0000000000..c04638991d --- /dev/null +++ b/core-java-modules/core-java-lang-operators-2/src/test/java/com/baeldung/oroperators/BitwiseAndLogicalOROperatorUnitTest.java @@ -0,0 +1,4 @@ +package com.baeldung.oroperators; + +public class BitwiseAndLogicalOROperatorUnitTest { +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 905fd30ee8..b801d44a08 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -86,6 +86,7 @@ core-java-lang-oop-methods core-java-lang-oop-others core-java-lang-operators + core-java-lang-operators-2 core-java-lang-syntax core-java-lang-syntax-2 core-java-networking From 805e96f7844d746fa6ad067740cefaf65bcc7c95 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Fri, 28 May 2021 12:51:10 +0200 Subject: [PATCH 132/160] BAEL-4585: Add readNbytes code sample (#10814) * BAEL-4585: Add readNbytes code example * BAEL-4585: Fix code samples Co-authored-by: Krzysztof Woyke --- .../InputStreamToByteArrayUnitTest.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/io/conversion/InputStreamToByteArrayUnitTest.java b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/io/conversion/InputStreamToByteArrayUnitTest.java index b64709be09..3450ac5627 100644 --- a/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/io/conversion/InputStreamToByteArrayUnitTest.java +++ b/core-java-modules/core-java-9-improvements/src/test/java/com/baeldung/java9/io/conversion/InputStreamToByteArrayUnitTest.java @@ -15,24 +15,43 @@ public class InputStreamToByteArrayUnitTest { @Test public final void givenUsingPlainJavaOnFixedSizeStream_whenConvertingAnInputStreamToAByteArray_thenCorrect() throws IOException { - final InputStream initialStream = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); - final byte[] targetArray = new byte[initialStream.available()]; - initialStream.read(targetArray); + final InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); + final byte[] targetArray = new byte[is.available()]; + + is.read(targetArray); } @Test public final void givenUsingPlainJavaOnUnknownSizeStream_whenConvertingAnInputStreamToAByteArray_thenCorrect() throws IOException { - final InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 }); - + final InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2, 3, 4, 5, 6 }); final ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; - final byte[] data = new byte[1024]; + final byte[] data = new byte[4]; + while ((nRead = is.read(data, 0, data.length)) != -1) { buffer.write(data, 0, nRead); } buffer.flush(); - final byte[] byteArray = buffer.toByteArray(); + final byte[] targetArray = buffer.toByteArray(); + } + + @Test + public final void givenUsingPlainJava9OnUnknownSizeStream_whenConvertingAnInputStreamToAByteArray_thenCorrect() throws IOException { + final InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2, 3, 4, 5, 6 }); + final ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + int nRead; + final byte[] data = new byte[4]; + + while ((nRead = is.readNBytes(data, 0, data.length)) != 0) { + System.out.println("here " + nRead); + buffer.write(data, 0, nRead); + } + + buffer.flush(); + final byte[] targetArray = buffer.toByteArray(); } @Test From eefc0b2bc7dd31a53c9f47a36acf73e883f2c9aa Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Sat, 29 May 2021 02:08:15 +0530 Subject: [PATCH 133/160] code commit for BAEL-4869 (#10812) * Code commit for "Converting String to BigDecimal in Java" - Article * modified the assert param for comparing actual and expected values * removed the conflict change * Code commit for Secret Key to String and vice versa in java * renaming the junit class name to match coding standard * code commit for BAEL-4869 * Adding new module with Secret key to String conversion in Java [BAEL-4489] * changed code indent by space instead of tab --- .../core-java-security-3/README.md | 8 +++ .../core-java-security-3/pom.xml | 53 +++++++++++++++++++ .../ConversionClassUtil.java | 53 +++++++++++++++++++ .../ConversionClassUtilUnitTest.java | 44 +++++++++++++++ .../config/MaxHTTPHeaderSizeConfig.java | 15 ++++++ .../MaxHttpHeaderSizeController.java | 17 ++++++ ...tpHeaderSizeControllerIntegrationTest.java | 48 +++++++++++++++++ .../MaxHttpHeaderSizeControllerLiveTest.java | 53 +++++++++++++++++++ .../test/resources/randomSringForheader.txt | 1 + 9 files changed, 292 insertions(+) create mode 100644 core-java-modules/core-java-security-3/README.md create mode 100644 core-java-modules/core-java-security-3/pom.xml create mode 100644 core-java-modules/core-java-security-3/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java create mode 100644 core-java-modules/core-java-security-3/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java create mode 100644 spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt diff --git a/core-java-modules/core-java-security-3/README.md b/core-java-modules/core-java-security-3/README.md new file mode 100644 index 0000000000..4585b6cc86 --- /dev/null +++ b/core-java-modules/core-java-security-3/README.md @@ -0,0 +1,8 @@ +## Core Java Security + +This module contains articles about core Java Security + +### Relevant Articles: + +- [Secret Key and String Conversion in Java](https://www.baeldung.com/secret-key-and-string-conversion-in-java/) +- 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 new file mode 100644 index 0000000000..2520cee7f8 --- /dev/null +++ b/core-java-modules/core-java-security-3/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + core-java-security-2 + 0.1.0-SNAPSHOT + core-java-security-2 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + javax.xml.bind + jaxb-api + ${jaxb-api.version} + + + + + + 1.60 + 1.11 + + 3.18.0 + 2.3.1 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-security-3/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java b/core-java-modules/core-java-security-3/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java new file mode 100644 index 0000000000..8fdf682666 --- /dev/null +++ b/core-java-modules/core-java-security-3/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java @@ -0,0 +1,53 @@ +package com.baeldung.secretkeyandstringconversion; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.KeySpec; +import java.util.Base64; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +public class ConversionClassUtil { + + /* Generating Secret key */ + + // Generating Secret Key using KeyGenerator class with 256 + public static SecretKey generateKey(int n) throws NoSuchAlgorithmException { + KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); + keyGenerator.init(n); + SecretKey originalKey = keyGenerator.generateKey(); + return originalKey; + } + + // Generating Secret Key using password and salt + public static SecretKey getKeyFromPassword(String password, String salt) + throws NoSuchAlgorithmException, InvalidKeySpecException { + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256); + SecretKey originalKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES"); + return originalKey; + } + + /* Converting Secret key into String */ + public static String convertSecretKeyToString(SecretKey secretKey) throws NoSuchAlgorithmException { + // Converting the Secret Key into byte array + byte[] rawData = secretKey.getEncoded(); + // Getting String - Base64 encoded version of the Secret Key + String encodedKey = Base64.getEncoder().encodeToString(rawData); + return encodedKey; + } + + /* Converting String into Secret key into */ + public static SecretKey convertStringToSecretKeyto(String encodedKey) { + // Decoding the Base64 encoded string into byte array + byte[] decodedKey = Base64.getDecoder().decode(encodedKey); + // Rebuilding the Secret Key using SecretKeySpec Class + SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES"); + return originalKey; + } + +} diff --git a/core-java-modules/core-java-security-3/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java new file mode 100644 index 0000000000..7a912dbf26 --- /dev/null +++ b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java @@ -0,0 +1,44 @@ +package com.baeldung.secretkeyandstringconversion; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; + +import javax.crypto.SecretKey; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ConversionClassUtilUnitTest { + + @Test + void givenPasswordAndSalt_whenCreateSecreKeyCheckConversion_thenSuccess() + throws NoSuchAlgorithmException, InvalidKeySpecException { + // given + String password = "Baeldung@2021"; + String salt = "@$#baelDunG@#^$*"; + + // when + SecretKey encodedKey = ConversionClassUtil.getKeyFromPassword(password, salt); + String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); + SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); + + // then + Assertions.assertEquals(encodedKey, decodeKey); + } + + @Test + void givenSize_whenCreateSecreKeyCheckConversion_thenSuccess() + throws NoSuchAlgorithmException, InvalidKeySpecException { + // given + int size = 256; + + // when + SecretKey encodedKey = ConversionClassUtil.generateKey(size); + String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); + SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); + + // then + Assertions.assertEquals(encodedKey, decodeKey); + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java new file mode 100644 index 0000000000..0a71f914db --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MaxHTTPHeaderSizeConfig.java @@ -0,0 +1,15 @@ +package com.baeldung.sampleapp.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@ComponentScan({ "com.baeldung.sampleapp.web" }) +public class MaxHTTPHeaderSizeConfig implements WebMvcConfigurer { + + public MaxHTTPHeaderSizeConfig() { + super(); + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java new file mode 100644 index 0000000000..0c55f88fa1 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MaxHttpHeaderSizeController.java @@ -0,0 +1,17 @@ +package com.baeldung.sampleapp.web.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/request-header-test") +public class MaxHttpHeaderSizeController { + + @GetMapping + public boolean testMaxHTTPHeaderSize(@RequestHeader(value = "token") String token) { + return true; + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java new file mode 100644 index 0000000000..9b839f34a0 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerIntegrationTest.java @@ -0,0 +1,48 @@ +package com.baeldung.web.controller; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.sampleapp.config.WebConfig; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = WebConfig.class) +@WebAppConfiguration +public class MaxHttpHeaderSizeControllerIntegrationTest { + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext webApplicationContext; + + @Before + public void setUp() { + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + @Test + public void givenTokenWithLessThan8KBLegth_whenSendGetRequest_thenReturnsOK() throws Exception { + mockMvc.perform(get("/request-header-test").contentType(MediaType.APPLICATION_JSON_VALUE) + .with(httpBasic("user", "password")).header("token", "token")).andExpect(status().isOk()); + } + + @Test + public void givenTokenIsMissingInHeade_whenSendGetRequest_thenThrowsBadRequest() throws Exception { + mockMvc.perform(get("/request-header-test").contentType(MediaType.APPLICATION_JSON_VALUE) + .with(httpBasic("user", "password"))).andExpect(status().isBadRequest()); + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java new file mode 100644 index 0000000000..9c7e7c9029 --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/MaxHttpHeaderSizeControllerLiveTest.java @@ -0,0 +1,53 @@ +package com.baeldung.web.controller; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.baeldung.sampleapp.config.MaxHTTPHeaderSizeConfig; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { MaxHTTPHeaderSizeConfig.class }, loader = AnnotationConfigContextLoader.class) +@ActiveProfiles("test") +// Start MaxHttpHeaderSizeController Spring Boot App(MainApplication) first +public class MaxHttpHeaderSizeControllerLiveTest { + + @Test(expected = HttpClientErrorException.class) + public void givenTokenWithGreaterThan8KBLegth_whenSendGetRequest_thenThrowsBadRequest() throws Exception { + final String url = "http://localhost:8080/request-header-test"; + HttpHeaders headers = new HttpHeaders(); + headers.set("token", readRandomStringFromFile()); + + HttpEntity entity = new HttpEntity(headers); + final ResponseEntity response = new RestTemplate().exchange(url, HttpMethod.GET, entity, String.class); + } + + static String readRandomStringFromFile() throws IOException { + BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/randomSringForheader.txt")); + StringBuilder stringBuilder = new StringBuilder(); + String line = null; + String ls = System.getProperty("line.separator"); + while ((line = reader.readLine()) != null) { + stringBuilder.append(line); + stringBuilder.append(ls); + } + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + reader.close(); + String content = stringBuilder.toString(); + return content; + } + +} diff --git a/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt b/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt new file mode 100644 index 0000000000..444be3479e --- /dev/null +++ b/spring-boot-modules/spring-boot-runtime/src/test/resources/randomSringForheader.txt @@ -0,0 +1 @@ +eyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxgeyJraWQiOiIyMTM1MGE2NC02YTYxLTRiNmYtYjIyZS1lYTNkOTNiY2YyMTQiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0NjE3Zjk4NC1mY2VlLTRmNTctYTg3Yi1jNTcyOTA2ODk3NzkiLCJpc3MiOiJodHRwczovL2FwaS50ZXNjby5jb20vaWRlbnRpdHkvdjQvaXNzdWUtdG9rZW4iLCJzdWIiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJpYXQiOjE2MjE4Mzk4NDcsIm5iZiI6MTYyMTgzOTg0NywiZXhwIjoxNjIxODQzNDQ3LCJzY29wZSI6ImludGVybmFsIHB1YmxpYyIsImNvbmZpZGVuY2VfbGV2ZWwiOjEyLCJjbGllbnRfaWQiOiI2ZTg5Y2M0Yi0xMDlkLTQwNjAtOTBlNC04ZTMyZTgzNTQzYmYiLCJ0b2tlbl90eXBlIjoiYmVhcmVyIn0.QylY2akATMYkwcBWDQsfUAcY4y27mgKz1NIG78oNjUqCEskMDjWTPM6ZS5neE7CUso72p1ud8BDl8B0SIiRTlCVoaZxVZzUqOlM1ZJQKah-w9KFtZ48cdS_qKYxa2gp82suF-Q-lbWwPAqS-AYTcFaNMqsVlsCDCtOVoB-ALpa5mh0z6tQkqjU7uhsWut3fkKLmMym8x8ejnDth2QdjGIvSXHbYWRH0kYPFDZKS6jHsFOzGGiCHfn201UQLEVLbwL7knyQ8qQ5wolwdNymr364s1CT0A9VHIAfLVSscVIV0ae3rUoqUtjKrbSfXfntIpRyUm66INAbBgyFiWh3yRxg \ No newline at end of file From 57da383564aa2a0cab19e102bb8233afb9b4217e Mon Sep 17 00:00:00 2001 From: kwoyke Date: Fri, 28 May 2021 23:09:41 +0200 Subject: [PATCH 134/160] JAVA-5605: Upgrade parent-spring-5 to Spring 5.3.7 (#10817) * JAVA-5605: Upgrade parent-spring-5 to Spring 5.3.7 * JAVA-5605: Remove mistakenly added node.exe Co-authored-by: Krzysztof Woyke --- parent-spring-5/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-spring-5/pom.xml b/parent-spring-5/pom.xml index b70ca2bd0f..6bedf9fb67 100644 --- a/parent-spring-5/pom.xml +++ b/parent-spring-5/pom.xml @@ -30,7 +30,7 @@ - 5.3.3 + 5.3.7 5.2.3.RELEASE 1.5.10.RELEASE From 8eb252eae6b2ed1cdec7fa56fe54e31ed28f9ba5 Mon Sep 17 00:00:00 2001 From: Bhabani Prasad Patel Date: Sat, 29 May 2021 16:53:38 +0530 Subject: [PATCH 135/160] Removing this piece of code as been moved to a new module. (#10820) --- .../ConversionClassUtil.java | 53 ------------------- .../ConversionClassUtilUnitTest.java | 44 --------------- 2 files changed, 97 deletions(-) delete mode 100644 core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java delete mode 100644 core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java diff --git a/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java b/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java deleted file mode 100644 index 5ff1b7cb9d..0000000000 --- a/core-java-modules/core-java-security-2/src/main/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.secretkeyandstringconversion; - -import java.security.NoSuchAlgorithmException; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.KeySpec; -import java.util.Base64; - -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.PBEKeySpec; -import javax.crypto.spec.SecretKeySpec; - -public class ConversionClassUtil { - - /* Generating Secret key */ - - // Generating Secret Key using KeyGenerator class with 256 - public static SecretKey generateKey(int n) throws NoSuchAlgorithmException { - KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); - keyGenerator.init(n); - SecretKey originalKey = keyGenerator.generateKey(); - return originalKey; - } - - // Generating Secret Key using password and salt - public static SecretKey getKeyFromPassword(String password, String salt) - throws NoSuchAlgorithmException, InvalidKeySpecException { - SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); - KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256); - SecretKey originalKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES"); - return originalKey; - } - - /* Converting Secret key into String */ - public static String convertSecretKeyToString(SecretKey secretKey) throws NoSuchAlgorithmException { - // Converting the Secret Key into byte array - byte[] rawData = secretKey.getEncoded(); - // Getting String - Base64 encoded version of the Secret Key - String encodedKey = Base64.getEncoder().encodeToString(rawData); - return encodedKey; - } - - /* Converting String into Secret key into */ - public static SecretKey convertStringToSecretKeyto(String encodedKey) { - // Decoding the Base64 encoded string into byte array - byte[] decodedKey = Base64.getDecoder().decode(encodedKey); - // Rebuilding the Secret Key using SecretKeySpec Class - SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES"); - return originalKey; - } - -} diff --git a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java deleted file mode 100644 index 29c8ba9fd0..0000000000 --- a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/secretkeyandstringconversion/ConversionClassUtilUnitTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.secretkeyandstringconversion; - -import java.security.NoSuchAlgorithmException; -import java.security.spec.InvalidKeySpecException; - -import javax.crypto.SecretKey; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class ConversionClassUtilUnitTest { - - @Test - void givenPasswordAndSalt_whenCreateSecreKeyCheckConversion_thenSuccess() - throws NoSuchAlgorithmException, InvalidKeySpecException { - // given - String password = "Baeldung@2021"; - String salt = "@$#baelDunG@#^$*"; - - // when - SecretKey encodedKey = ConversionClassUtil.getKeyFromPassword(password, salt); - String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); - SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); - - // then - Assertions.assertEquals(encodedKey, decodeKey); - } - - @Test - void givenSize_whenCreateSecreKeyCheckConversion_thenSuccess() - throws NoSuchAlgorithmException, InvalidKeySpecException { - // given - int size = 256; - - // when - SecretKey encodedKey = ConversionClassUtil.generateKey(size); - String encodedString = ConversionClassUtil.convertSecretKeyToString(encodedKey); - SecretKey decodeKey = ConversionClassUtil.convertStringToSecretKeyto(encodedString); - - // then - Assertions.assertEquals(encodedKey, decodeKey); - } - -} From fb529aeee2cbc30606776b39e0f97f80d63ff452 Mon Sep 17 00:00:00 2001 From: Azhwani Date: Sun, 30 May 2021 12:41:38 +0200 Subject: [PATCH 136/160] first commit --- .../spring-boot-exceptions/pom.xml | 52 +++++++++++-------- .../MainClass.java | 13 +++++ .../MainEntryPoint.java | 14 +++++ 3 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java create mode 100644 spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java diff --git a/spring-boot-modules/spring-boot-exceptions/pom.xml b/spring-boot-modules/spring-boot-exceptions/pom.xml index c0c335f55c..381042cdaa 100644 --- a/spring-boot-modules/spring-boot-exceptions/pom.xml +++ b/spring-boot-modules/spring-boot-exceptions/pom.xml @@ -1,28 +1,36 @@ - 4.0.0 - spring-boot-exceptions - jar - spring-boot-exceptions - Demo project for working with Spring Boot exceptions + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + spring-boot-exceptions + jar + spring-boot-exceptions + Demo project for working with Spring Boot exceptions - - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT - ../ - + + com.baeldung.spring-boot-modules + spring-boot-modules + 1.0.0-SNAPSHOT + ../ + - - spring-boot-exceptions - - - src/main/resources - true - - - + + + + org.springframework.boot + spring-boot-starter-web + + + + + spring-boot-exceptions + + + src/main/resources + true + + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java new file mode 100644 index 0000000000..284795c280 --- /dev/null +++ b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java @@ -0,0 +1,13 @@ +package com.baeldung.applicationcontextexception; + +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; + +@SpringBootApplication +public class MainClass { + + public static void main(String[] args) { + new SpringApplicationBuilder(MainClass.class).web(WebApplicationType.NONE).run(args); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java new file mode 100644 index 0000000000..4cb40b3c4d --- /dev/null +++ b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java @@ -0,0 +1,14 @@ +package com.baeldung.applicationcontextexception; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +//Remove this annotation to produce ApplicationContextException +@SpringBootApplication +public class MainEntryPoint { + + public static void main(String[] args) { + SpringApplication.run(MainEntryPoint.class, args); + } + +} From 775b2585abcbc6ec5b1265d6df436fcc10342853 Mon Sep 17 00:00:00 2001 From: Azhwani Date: Sun, 30 May 2021 12:46:40 +0200 Subject: [PATCH 137/160] cleanup code --- spring-boot-modules/spring-boot-exceptions/pom.xml | 2 +- .../applicationcontextexception/MainClass.java | 13 ------------- .../applicationcontextexception/MainEntryPoint.java | 2 +- 3 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java diff --git a/spring-boot-modules/spring-boot-exceptions/pom.xml b/spring-boot-modules/spring-boot-exceptions/pom.xml index 381042cdaa..19011db771 100644 --- a/spring-boot-modules/spring-boot-exceptions/pom.xml +++ b/spring-boot-modules/spring-boot-exceptions/pom.xml @@ -15,7 +15,7 @@ ../ - + org.springframework.boot diff --git a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java deleted file mode 100644 index 284795c280..0000000000 --- a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainClass.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.applicationcontextexception; - -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; - -@SpringBootApplication -public class MainClass { - - public static void main(String[] args) { - new SpringApplicationBuilder(MainClass.class).web(WebApplicationType.NONE).run(args); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java index 4cb40b3c4d..c187399636 100644 --- a/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java +++ b/spring-boot-modules/spring-boot-exceptions/src/test/java/com/baeldung/applicationcontextexception/MainEntryPoint.java @@ -3,7 +3,7 @@ package com.baeldung.applicationcontextexception; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -//Remove this annotation to produce ApplicationContextException +//Remove this annotation to produce ApplicationContextException error @SpringBootApplication public class MainEntryPoint { From ec06909f0c426fdd08f9e7ab298894fd0269dac5 Mon Sep 17 00:00:00 2001 From: Azhwani Date: Sun, 30 May 2021 14:27:42 +0200 Subject: [PATCH 138/160] format pom.xml --- .../spring-boot-exceptions/pom.xml | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/spring-boot-modules/spring-boot-exceptions/pom.xml b/spring-boot-modules/spring-boot-exceptions/pom.xml index 19011db771..9866c418be 100644 --- a/spring-boot-modules/spring-boot-exceptions/pom.xml +++ b/spring-boot-modules/spring-boot-exceptions/pom.xml @@ -1,36 +1,36 @@ - 4.0.0 - spring-boot-exceptions - jar - spring-boot-exceptions - Demo project for working with Spring Boot exceptions + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + spring-boot-exceptions + jar + spring-boot-exceptions + Demo project for working with Spring Boot exceptions - - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT - ../ - + + com.baeldung.spring-boot-modules + spring-boot-modules + 1.0.0-SNAPSHOT + ../ + - - - - org.springframework.boot - spring-boot-starter-web - - + + + + org.springframework.boot + spring-boot-starter-web + + - - spring-boot-exceptions - - - src/main/resources - true - - - + + spring-boot-exceptions + + + src/main/resources + true + + + \ No newline at end of file From 6f55a1201a20f2f7ea71f05fa6db797e72a1c8b4 Mon Sep 17 00:00:00 2001 From: uzma khan Date: Sun, 30 May 2021 23:02:47 +0100 Subject: [PATCH 139/160] [BAEL-4406] Add JaCoCo exclusions --- gradle/gradle-jacoco/build.gradle | 54 +++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + gradle/gradle-jacoco/gradlew | 185 ++++++++++++++++++ gradle/gradle-jacoco/gradlew.bat | 89 +++++++++ gradle/gradle-jacoco/lombok.config | 1 + gradle/gradle-jacoco/settings.gradle | 1 + .../java/com/baeldung/config/AppConfig.java | 11 ++ .../java/com/baeldung/domain/Product.java | 12 ++ .../java/com/baeldung/dto/ExcludedPOJO.java | 4 + .../java/com/baeldung/dto/ProductDTO.java | 4 + .../java/com/baeldung/generated/Customer.java | 11 ++ .../com/baeldung/generated/Generated.java | 15 ++ .../com/baeldung/service/CustomerService.java | 16 ++ .../com/baeldung/service/ProductService.java | 9 + .../service/CustomerServiceUnitTest.java | 14 ++ .../service/ProductServiceUnitTest.java | 15 ++ .../features/account_credited.feature | 6 + .../maven-plugins/maven-jacoco/lombok.config | 1 + .../maven-plugins/maven-jacoco/pom.xml | 68 +++++++ .../java/com/baeldung/config/AppConfig.java | 11 ++ .../java/com/baeldung/domain/Product.java | 12 ++ .../java/com/baeldung/dto/ExcludedPOJO.java | 4 + .../java/com/baeldung/dto/ProductDTO.java | 4 + .../java/com/baeldung/generated/Customer.java | 11 ++ .../com/baeldung/generated/Generated.java | 15 ++ .../com/baeldung/service/CustomerService.java | 16 ++ .../com/baeldung/service/ProductService.java | 9 + .../service/CustomerServiceUnitTest.java | 14 ++ .../service/ProductServiceUnitTest.java | 15 ++ maven-modules/maven-plugins/pom.xml | 1 + 31 files changed, 633 insertions(+) create mode 100644 gradle/gradle-jacoco/build.gradle create mode 100644 gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle/gradle-jacoco/gradlew create mode 100644 gradle/gradle-jacoco/gradlew.bat create mode 100644 gradle/gradle-jacoco/lombok.config create mode 100644 gradle/gradle-jacoco/settings.gradle create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java create mode 100644 gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java create mode 100644 gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java create mode 100644 gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java create mode 100644 gradle/gradle-jacoco/src/test/resources/features/account_credited.feature create mode 100644 maven-modules/maven-plugins/maven-jacoco/lombok.config create mode 100644 maven-modules/maven-plugins/maven-jacoco/pom.xml create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java create mode 100644 maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java diff --git a/gradle/gradle-jacoco/build.gradle b/gradle/gradle-jacoco/build.gradle new file mode 100644 index 0000000000..ef9e0a9c7c --- /dev/null +++ b/gradle/gradle-jacoco/build.gradle @@ -0,0 +1,54 @@ + +plugins { + id 'java' + id 'jacoco' +} + +ext { + junitVersion = '5.7.2' + lombokVersion = '1.18.20' +} + +group 'com.com.baeldung' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}" + + compileOnly "org.projectlombok:lombok:${lombokVersion}" + annotationProcessor "org.projectlombok:lombok:${lombokVersion}" +} + +test { + useJUnitPlatform() + + finalizedBy jacocoTestReport // report is always generated after tests run +} + +jacocoTestReport { + dependsOn test // tests are required to run before generating the report + + afterEvaluate { + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it, exclude: [ + "com/baeldung/**/ExcludedPOJO.class", + "com/baeldung/**/*DTO.*", + "**/config/*" + ]) + })) + } +} + +jacoco { + toolVersion = "0.8.6" +} diff --git a/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar b/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties b/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..da9702f9e7 --- /dev/null +++ b/gradle/gradle-jacoco/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle/gradle-jacoco/gradlew b/gradle/gradle-jacoco/gradlew new file mode 100755 index 0000000000..4f906e0c81 --- /dev/null +++ b/gradle/gradle-jacoco/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradle/gradle-jacoco/gradlew.bat b/gradle/gradle-jacoco/gradlew.bat new file mode 100644 index 0000000000..ac1b06f938 --- /dev/null +++ b/gradle/gradle-jacoco/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle/gradle-jacoco/lombok.config b/gradle/gradle-jacoco/lombok.config new file mode 100644 index 0000000000..7a21e88040 --- /dev/null +++ b/gradle/gradle-jacoco/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation = true diff --git a/gradle/gradle-jacoco/settings.gradle b/gradle/gradle-jacoco/settings.gradle new file mode 100644 index 0000000000..b0ed8f1486 --- /dev/null +++ b/gradle/gradle-jacoco/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'gradle-jacoco' diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java new file mode 100644 index 0000000000..d103f4b4f5 --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/config/AppConfig.java @@ -0,0 +1,11 @@ +package com.baeldung.config; + +import com.baeldung.service.ProductService; + +public class AppConfig { + + public ProductService productService() { + return new ProductService(); + } + +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java new file mode 100644 index 0000000000..c64b6d2eae --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/domain/Product.java @@ -0,0 +1,12 @@ +package com.baeldung.domain; + +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class Product { + private int id; + private String name; + +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java new file mode 100644 index 0000000000..0f7278459e --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java @@ -0,0 +1,4 @@ +package com.baeldung.dto; + +public class ExcludedPOJO { +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java new file mode 100644 index 0000000000..0ae1659c14 --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java @@ -0,0 +1,4 @@ +package com.baeldung.dto; + +public class ProductDTO { +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java new file mode 100644 index 0000000000..015966b330 --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java @@ -0,0 +1,11 @@ +package com.baeldung.generated; + +@Generated +public class Customer { + // every thing in this class will be excluded from jacoco report because of @Generated + + @Override + public String toString() { + return "Customer{}"; + } +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java new file mode 100644 index 0000000000..865df8ca8a --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Generated.java @@ -0,0 +1,15 @@ +package com.baeldung.generated; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Documented +@Retention(RUNTIME) +@Target({TYPE, METHOD}) +public @interface Generated { +} \ No newline at end of file diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java new file mode 100644 index 0000000000..e6dbe8df5e --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/service/CustomerService.java @@ -0,0 +1,16 @@ +package com.baeldung.service; + +import com.baeldung.generated.Generated; + +public class CustomerService { + + //this method will be excluded from coverage due to @Generated. + @Generated + public String getProductId() { + return "An ID"; + } + + public String getCustomerName() { + return "some name"; + } +} diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java new file mode 100644 index 0000000000..5f73ddc7fd --- /dev/null +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/service/ProductService.java @@ -0,0 +1,9 @@ +package com.baeldung.service; + +public class ProductService { + private static final double DISCOUNT = 0.25; + + public double getSalePrice(double originalPrice) { + return originalPrice - originalPrice * DISCOUNT; + } +} diff --git a/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java b/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java new file mode 100644 index 0000000000..63dd2c755a --- /dev/null +++ b/gradle/gradle-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.service; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class CustomerServiceUnitTest { + + @Test + public void givenCustomer_whenGetCustomer_thenReturnNewCustomer() { + CustomerService customerService = new CustomerService(); + assertNotNull(customerService.getCustomerName()); + } +} diff --git a/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java b/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java new file mode 100644 index 0000000000..a9d216785a --- /dev/null +++ b/gradle/gradle-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java @@ -0,0 +1,15 @@ +package com.baeldung.service; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ProductServiceUnitTest { + + @Test + public void givenOriginalPrice_whenGetSalePrice_thenReturnsDiscountedPrice() { + ProductService productService = new ProductService(); + double salePrice = productService.getSalePrice(100); + assertEquals(salePrice, 75); + } +} diff --git a/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature b/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature new file mode 100644 index 0000000000..bd7940d1a5 --- /dev/null +++ b/gradle/gradle-jacoco/src/test/resources/features/account_credited.feature @@ -0,0 +1,6 @@ +Feature: Account is credited with amount + + Scenario: Credit amount + Given account balance is 0.0 + When the account is credited with 10.0 + Then account should have a balance of 10.0 diff --git a/maven-modules/maven-plugins/maven-jacoco/lombok.config b/maven-modules/maven-plugins/maven-jacoco/lombok.config new file mode 100644 index 0000000000..7a21e88040 --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation = true diff --git a/maven-modules/maven-plugins/maven-jacoco/pom.xml b/maven-modules/maven-plugins/maven-jacoco/pom.xml new file mode 100644 index 0000000000..3298b780e0 --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/pom.xml @@ -0,0 +1,68 @@ + + + + maven-plugins + com.baeldung + 0.0.1-SNAPSHOT + + 4.0.0 + + maven-jacoco + + + org.projectlombok + lombok + 1.18.20 + provided + + + + + + maven-verifier-plugin + ${maven.verifier.version} + + + none + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + com/baeldung/**/ExcludedPOJO.class + com/baeldung/**/*DTO.* + **/config/* + + + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + package + + report + + + + + + + + + 0.8.6 + + + + + \ No newline at end of file diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java new file mode 100644 index 0000000000..d103f4b4f5 --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java @@ -0,0 +1,11 @@ +package com.baeldung.config; + +import com.baeldung.service.ProductService; + +public class AppConfig { + + public ProductService productService() { + return new ProductService(); + } + +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java new file mode 100644 index 0000000000..c64b6d2eae --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java @@ -0,0 +1,12 @@ +package com.baeldung.domain; + +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class Product { + private int id; + private String name; + +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java new file mode 100644 index 0000000000..0f7278459e --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java @@ -0,0 +1,4 @@ +package com.baeldung.dto; + +public class ExcludedPOJO { +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java new file mode 100644 index 0000000000..0ae1659c14 --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java @@ -0,0 +1,4 @@ +package com.baeldung.dto; + +public class ProductDTO { +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java new file mode 100644 index 0000000000..015966b330 --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java @@ -0,0 +1,11 @@ +package com.baeldung.generated; + +@Generated +public class Customer { + // every thing in this class will be excluded from jacoco report because of @Generated + + @Override + public String toString() { + return "Customer{}"; + } +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java new file mode 100644 index 0000000000..865df8ca8a --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java @@ -0,0 +1,15 @@ +package com.baeldung.generated; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Documented +@Retention(RUNTIME) +@Target({TYPE, METHOD}) +public @interface Generated { +} \ No newline at end of file diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java new file mode 100644 index 0000000000..e6dbe8df5e --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java @@ -0,0 +1,16 @@ +package com.baeldung.service; + +import com.baeldung.generated.Generated; + +public class CustomerService { + + //this method will be excluded from coverage due to @Generated. + @Generated + public String getProductId() { + return "An ID"; + } + + public String getCustomerName() { + return "some name"; + } +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java new file mode 100644 index 0000000000..5f73ddc7fd --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java @@ -0,0 +1,9 @@ +package com.baeldung.service; + +public class ProductService { + private static final double DISCOUNT = 0.25; + + public double getSalePrice(double originalPrice) { + return originalPrice - originalPrice * DISCOUNT; + } +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java b/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java new file mode 100644 index 0000000000..63dd2c755a --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.service; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class CustomerServiceUnitTest { + + @Test + public void givenCustomer_whenGetCustomer_thenReturnNewCustomer() { + CustomerService customerService = new CustomerService(); + assertNotNull(customerService.getCustomerName()); + } +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java b/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java new file mode 100644 index 0000000000..a9d216785a --- /dev/null +++ b/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java @@ -0,0 +1,15 @@ +package com.baeldung.service; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ProductServiceUnitTest { + + @Test + public void givenOriginalPrice_whenGetSalePrice_thenReturnsDiscountedPrice() { + ProductService productService = new ProductService(); + double salePrice = productService.getSalePrice(100); + assertEquals(salePrice, 75); + } +} diff --git a/maven-modules/maven-plugins/pom.xml b/maven-modules/maven-plugins/pom.xml index 29b3b550ea..338f865f9f 100644 --- a/maven-modules/maven-plugins/pom.xml +++ b/maven-modules/maven-plugins/pom.xml @@ -19,6 +19,7 @@ custom-rule maven-enforcer jaxws + maven-jacoco From 9501c437855227e869d78ae104b5cb51cb120ba9 Mon Sep 17 00:00:00 2001 From: nguyennamthai Date: Mon, 31 May 2021 12:00:38 +0700 Subject: [PATCH 140/160] BAEL-4884 Add unit tests for map vs. flatMap (#10836) --- .../reactor/mapping/MappingUnitTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 reactor-core/src/test/java/com/baeldung/reactor/mapping/MappingUnitTest.java diff --git a/reactor-core/src/test/java/com/baeldung/reactor/mapping/MappingUnitTest.java b/reactor-core/src/test/java/com/baeldung/reactor/mapping/MappingUnitTest.java new file mode 100644 index 0000000000..137bcbe021 --- /dev/null +++ b/reactor-core/src/test/java/com/baeldung/reactor/mapping/MappingUnitTest.java @@ -0,0 +1,37 @@ +package com.baeldung.reactor.mapping; + +import org.junit.Test; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; +import reactor.test.StepVerifier; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MappingUnitTest { + @Test + public void givenInputStream_whenCallingTheMapOperator_thenItemsAreTransformed() { + Function mapper = String::toUpperCase; + Flux inFlux = Flux.just("baeldung", ".", "com"); + Flux outFlux = inFlux.map(mapper); + + StepVerifier.create(outFlux) + .expectNext("BAELDUNG", ".", "COM") + .expectComplete() + .verify(); + } + + @Test + public void givenInputStream_whenCallingTheFlatMapOperator_thenItemsAreFlatten() { + Function> mapper = s -> Flux.just(s.toUpperCase().split("")); + Flux inFlux = Flux.just("baeldung", ".", "com"); + Flux outFlux = inFlux.flatMap(mapper); + + List output = new ArrayList<>(); + outFlux.subscribe(output::add); + assertThat(output).containsExactlyInAnyOrder("B", "A", "E", "L", "D", "U", "N", "G", ".", "C", "O", "M"); + } +} From d532c5049732fc12b26c6d09bf0731a8edde2c8e Mon Sep 17 00:00:00 2001 From: Ashley Frieze Date: Sun, 23 May 2021 23:48:43 +0100 Subject: [PATCH 141/160] BAEL-4967-Enterprise AWS Lambda Features --- aws-lambda/.gitignore | 1 + aws-lambda/pom.xml | 1 + aws-lambda/todo-reminder/ToDoFunction/pom.xml | 105 ++++++++++++++++++ .../java/com/baeldung/lambda/todo/App.java | 43 +++++++ .../com/baeldung/lambda/todo/api/PostApi.java | 8 ++ .../baeldung/lambda/todo/api/PostItem.java | 40 +++++++ .../com/baeldung/lambda/todo/api/ToDoApi.java | 10 ++ .../baeldung/lambda/todo/api/ToDoItem.java | 50 +++++++++ .../baeldung/lambda/todo/config/Config.java | 50 +++++++++ .../lambda/todo/config/Credentials.java | 22 ++++ .../lambda/todo/config/ExecutionContext.java | 36 ++++++ .../baeldung/lambda/todo/config/Services.java | 38 +++++++ .../lambda/todo/service/PostService.java | 30 +++++ .../todo/service/ToDoReaderService.java | 30 +++++ .../src/main/resources/configuration.yml | 9 ++ .../src/main/resources/log4j2.xml | 15 +++ .../com/baeldung/lambda/todo/AppTest.java | 58 ++++++++++ .../todo/service/ToDoReaderServiceTest.java | 24 ++++ aws-lambda/todo-reminder/template.yaml | 22 ++++ 19 files changed, 592 insertions(+) create mode 100644 aws-lambda/.gitignore create mode 100644 aws-lambda/todo-reminder/ToDoFunction/pom.xml create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java create mode 100644 aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java create mode 100644 aws-lambda/todo-reminder/template.yaml diff --git a/aws-lambda/.gitignore b/aws-lambda/.gitignore new file mode 100644 index 0000000000..9984c2e554 --- /dev/null +++ b/aws-lambda/.gitignore @@ -0,0 +1 @@ +.aws-sam/ diff --git a/aws-lambda/pom.xml b/aws-lambda/pom.xml index 5dc275141d..8014a87126 100644 --- a/aws-lambda/pom.xml +++ b/aws-lambda/pom.xml @@ -17,6 +17,7 @@ lambda shipping-tracker/ShippingFunction + todo-reminder/ToDoFunction diff --git a/aws-lambda/todo-reminder/ToDoFunction/pom.xml b/aws-lambda/todo-reminder/ToDoFunction/pom.xml new file mode 100644 index 0000000000..f80cbdf22f --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/pom.xml @@ -0,0 +1,105 @@ + + 4.0.0 + helloworld + HelloWorld + 1.0 + jar + To Do Application Example. + + 1.8 + 1.8 + + + + + com.amazonaws + aws-lambda-java-core + 1.2.1 + + + com.amazonaws + aws-lambda-java-events + 3.6.0 + + + uk.org.webcompere + lightweight-config + 1.1.0 + + + com.amazonaws + aws-lambda-java-log4j2 + 1.2.0 + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.13.2 + + + io.github.openfeign + feign-core + 11.2 + + + io.github.openfeign + feign-slf4j + 11.2 + + + io.github.openfeign + feign-gson + 11.2 + + + com.google.inject + guice + 5.0.1 + + + junit + junit + 4.13.1 + test + + + uk.org.webcompere + system-stubs-junit4 + 1.2.0 + test + + + org.mockito + mockito-core + 3.3.0 + test + + + org.assertj + assertj-core + 3.19.0 + test + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + + + package + + shade + + + + + + + diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java new file mode 100644 index 0000000000..b322dabca8 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java @@ -0,0 +1,43 @@ +package com.baeldung.lambda.todo; + +import java.io.*; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; +import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; +import com.baeldung.lambda.todo.config.ExecutionContext; +import com.baeldung.lambda.todo.service.PostService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Handler for requests to Lambda function. + */ +public class App implements RequestStreamHandler { + private static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + private String environmentName = System.getenv("ENV_NAME"); + private ExecutionContext executionContext = new ExecutionContext(); + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { + context.getLogger().log("App starting\n"); + context.getLogger().log("Environment: " + + environmentName + "\n"); + + try { + PostService postService = executionContext.getPostService(); + executionContext.getToDoReaderService() + .getOldestToDo() + .ifPresent(postService::makePost); + } catch (Exception e) { + LOGGER.error("Failed: {}", e.getMessage(), e); + } + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java new file mode 100644 index 0000000000..0521dfe05c --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java @@ -0,0 +1,8 @@ +package com.baeldung.lambda.todo.api; + +import feign.RequestLine; + +public interface PostApi { + @RequestLine("POST /posts") + void makePost(PostItem item); +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java new file mode 100644 index 0000000000..96049e37d4 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java @@ -0,0 +1,40 @@ +package com.baeldung.lambda.todo.api; + +public class PostItem { + private String title; + private String body; + private int userId; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + @Override + public String toString() { + return "PostItem{" + + "title='" + title + '\'' + + ", body='" + body + '\'' + + ", userId=" + userId + + '}'; + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java new file mode 100644 index 0000000000..bf75cd566d --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java @@ -0,0 +1,10 @@ +package com.baeldung.lambda.todo.api; + +import feign.RequestLine; + +import java.util.List; + +public interface ToDoApi { + @RequestLine("GET /todos") + List getAllTodos(); +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java new file mode 100644 index 0000000000..d43b7a947c --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java @@ -0,0 +1,50 @@ +package com.baeldung.lambda.todo.api; + +public class ToDoItem { + private int userId; + private int id; + private String title; + private boolean completed; + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isCompleted() { + return completed; + } + + public void setCompleted(boolean completed) { + this.completed = completed; + } + + @Override + public String toString() { + return "ToDoItem{" + + "userId=" + userId + + ", id=" + id + + ", title='" + title + '\'' + + ", completed=" + completed + + '}'; + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java new file mode 100644 index 0000000000..f919ac4006 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java @@ -0,0 +1,50 @@ +package com.baeldung.lambda.todo.config; + +public class Config { + private String toDoEndpoint; + private String postEndpoint; + private String environmentName; + + private Credentials toDoCredentials; + private Credentials postCredentials; + + public String getToDoEndpoint() { + return toDoEndpoint; + } + + public void setToDoEndpoint(String toDoEndpoint) { + this.toDoEndpoint = toDoEndpoint; + } + + public String getPostEndpoint() { + return postEndpoint; + } + + public void setPostEndpoint(String postEndpoint) { + this.postEndpoint = postEndpoint; + } + + public String getEnvironmentName() { + return environmentName; + } + + public void setEnvironmentName(String environmentName) { + this.environmentName = environmentName; + } + + public Credentials getToDoCredentials() { + return toDoCredentials; + } + + public void setToDoCredentials(Credentials toDoCredentials) { + this.toDoCredentials = toDoCredentials; + } + + public Credentials getPostCredentials() { + return postCredentials; + } + + public void setPostCredentials(Credentials postCredentials) { + this.postCredentials = postCredentials; + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java new file mode 100644 index 0000000000..a11399381c --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java @@ -0,0 +1,22 @@ +package com.baeldung.lambda.todo.config; + +public class Credentials { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java new file mode 100644 index 0000000000..b588187abd --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java @@ -0,0 +1,36 @@ +package com.baeldung.lambda.todo.config; + +import com.baeldung.lambda.todo.service.PostService; +import com.baeldung.lambda.todo.service.ToDoReaderService; +import com.google.inject.Guice; +import com.google.inject.Injector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ExecutionContext { + private static final Logger LOGGER = + LoggerFactory.getLogger(ExecutionContext.class); + + private ToDoReaderService toDoReaderService; + private PostService postService; + + public ExecutionContext() { + LOGGER.info("Loading configuration"); + + try { + Injector injector = Guice.createInjector(new Services()); + this.toDoReaderService = injector.getInstance(ToDoReaderService.class); + this.postService = injector.getInstance(PostService.class); + } catch (Exception e) { + LOGGER.error("Could not start", e); + } + } + + public ToDoReaderService getToDoReaderService() { + return toDoReaderService; + } + + public PostService getPostService() { + return postService; + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java new file mode 100644 index 0000000000..c1d85012eb --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java @@ -0,0 +1,38 @@ +package com.baeldung.lambda.todo.config; + +import com.baeldung.lambda.todo.api.PostApi; +import com.baeldung.lambda.todo.api.ToDoApi; +import com.google.inject.AbstractModule; +import feign.Feign; +import feign.auth.BasicAuthRequestInterceptor; +import feign.gson.GsonDecoder; +import feign.gson.GsonEncoder; +import feign.slf4j.Slf4jLogger; +import uk.org.webcompere.lightweightconfig.ConfigLoader; + +import static feign.Logger.Level.FULL; + +public class Services extends AbstractModule { + @Override + protected void configure() { + Config config = ConfigLoader.loadYmlConfigFromResource("configuration.yml", Config.class); + + ToDoApi toDoApi = Feign.builder() + .decoder(new GsonDecoder()) + .logger(new Slf4jLogger()) + .logLevel(FULL) + .requestInterceptor(new BasicAuthRequestInterceptor(config.getToDoCredentials().getUsername(), config.getToDoCredentials().getPassword())) + .target(ToDoApi.class, config.getToDoEndpoint()); + + PostApi postApi = Feign.builder() + .encoder(new GsonEncoder()) + .logger(new Slf4jLogger()) + .logLevel(FULL) + .requestInterceptor(new BasicAuthRequestInterceptor(config.getPostCredentials().getUsername(), config.getPostCredentials().getPassword())) + .target(PostApi.class, config.getPostEndpoint()); + + bind(Config.class).toInstance(config); + bind(ToDoApi.class).toInstance(toDoApi); + bind(PostApi.class).toInstance(postApi); + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java new file mode 100644 index 0000000000..bb0a67dbd1 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java @@ -0,0 +1,30 @@ +package com.baeldung.lambda.todo.service; + +import com.baeldung.lambda.todo.api.PostApi; +import com.baeldung.lambda.todo.api.PostItem; +import com.baeldung.lambda.todo.api.ToDoItem; +import com.google.inject.Inject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +public class PostService { + private static final Logger LOGGER = LogManager.getLogger(PostService.class); + private PostApi postApi; + + @Inject + public PostService(PostApi postApi) { + this.postApi = postApi; + } + + public void makePost(ToDoItem toDoItem) { + LOGGER.info("Posting about: {}", toDoItem); + PostItem item = new PostItem(); + item.setTitle("To Do is Out Of Date: " + toDoItem.getId()); + item.setUserId(toDoItem.getUserId()); + item.setBody("Not done: " + toDoItem.getTitle()); + + LOGGER.info("Post: {}", item); + postApi.makePost(item); + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java new file mode 100644 index 0000000000..5cd18ff46a --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java @@ -0,0 +1,30 @@ +package com.baeldung.lambda.todo.service; + +import com.baeldung.lambda.todo.api.ToDoApi; +import com.baeldung.lambda.todo.api.ToDoItem; +import com.baeldung.lambda.todo.config.Config; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.inject.Inject; +import java.util.Optional; + +public class ToDoReaderService { + // Log4j logger + private static final Logger LOGGER = LogManager.getLogger(ToDoReaderService.class); + + private ToDoApi toDoApi; + + @Inject + public ToDoReaderService(Config configuration, ToDoApi toDoApi) { + LOGGER.info("ToDo Endpoint on: {}", configuration.getToDoEndpoint()); + + this.toDoApi = toDoApi; + } + + public Optional getOldestToDo() { + return toDoApi.getAllTodos().stream() + .filter(item -> !item.isCompleted()) + .findFirst(); + } +} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml b/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml new file mode 100644 index 0000000000..f67239bc23 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml @@ -0,0 +1,9 @@ +toDoEndpoint: https://jsonplaceholder.typicode.com +postEndpoint: https://jsonplaceholder.typicode.com +environmentName: ${ENV_NAME} +toDoCredentials: + username: baeldung + password: ${TODO_PASSWORD:-password} +postCredentials: + username: baeldung + password: ${POST_PASSWORD:-password} diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml b/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..b241e5d167 --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml @@ -0,0 +1,15 @@ + + + + + + %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n + + + + + + + + + diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java b/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java new file mode 100644 index 0000000000..cbdc8c22cb --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java @@ -0,0 +1,58 @@ +package com.baeldung.lambda.todo; + +import com.amazonaws.services.lambda.runtime.Context; +import com.baeldung.lambda.todo.config.Config; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import uk.org.webcompere.lightweightconfig.ConfigLoader; +import uk.org.webcompere.systemstubs.rules.EnvironmentVariablesRule; +import uk.org.webcompere.systemstubs.stream.input.LinesAltStream; +import uk.org.webcompere.systemstubs.stream.output.NoopStream; + +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; + +@RunWith(MockitoJUnitRunner.class) +public class AppTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mockContext; + + @Rule + public EnvironmentVariablesRule environmentVariablesRule = new EnvironmentVariablesRule(); + + private InputStream fakeInputStream = new LinesAltStream(); + private OutputStream fakeOutputStream = new NoopStream(); + + @Test + public void whenTheEnvironmentVariableIsSet_thenItIsLogged() throws Exception { + environmentVariablesRule.set("ENV_NAME", "unitTest"); + new App().handleRequest(fakeInputStream, fakeOutputStream, mockContext); + + verify(mockContext.getLogger()) + .log("Environment: unitTest\n"); + } + + @Test + public void givenEnvironmentVariableIsNotSet_thenUseDefault() { + String setting = Optional.ofNullable(System.getenv("SETTING")) + .orElse("default"); + + assertThat(setting).isEqualTo("default"); + } + + @Test + public void givenConfiguration_canLoadIntoPojo() { + environmentVariablesRule.set("ENV_NAME", "unitTest"); + Config config = ConfigLoader.loadYmlConfigFromResource("configuration.yml", Config.class); + assertThat(config.getEnvironmentName()).isEqualTo("unitTest"); + } +} \ No newline at end of file diff --git a/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java b/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java new file mode 100644 index 0000000000..634c5257ff --- /dev/null +++ b/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java @@ -0,0 +1,24 @@ +package com.baeldung.lambda.todo.service; + +import com.baeldung.lambda.todo.config.Config; +import org.junit.Rule; +import org.junit.Test; +import uk.org.webcompere.systemstubs.rules.SystemOutRule; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +public class ToDoReaderServiceTest { + + @Rule + public SystemOutRule systemOutRule = new SystemOutRule(); + + @Test + public void whenTheServiceStarts_thenItOutputsEndpoint() { + Config config = new Config(); + config.setToDoEndpoint("https://todo-endpoint.com"); + ToDoReaderService service = new ToDoReaderService(config, null); + + assertThat(systemOutRule.getLinesNormalized()) + .contains("ToDo Endpoint on: https://todo-endpoint.com"); + } +} \ No newline at end of file diff --git a/aws-lambda/todo-reminder/template.yaml b/aws-lambda/todo-reminder/template.yaml new file mode 100644 index 0000000000..f32ee392c5 --- /dev/null +++ b/aws-lambda/todo-reminder/template.yaml @@ -0,0 +1,22 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: todo-reminder application + +Parameters: + EnvironmentName: + Type: String + Default: dev + +Resources: + ToDoFunction: + Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction + Properties: + Timeout: 20 + CodeUri: ToDoFunction + Handler: com.baeldung.lambda.todo.App::handleRequest + Runtime: java8 + MemorySize: 512 + Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object + Variables: + PARAM1: VALUE + ENV_NAME: !Ref EnvironmentName \ No newline at end of file From 5a555f7cf4218ccf80b02aaaf57b356520f0c4c4 Mon Sep 17 00:00:00 2001 From: Carlos Cavero Date: Tue, 1 Jun 2021 05:15:20 +0200 Subject: [PATCH 142/160] [BAEL-4907] - Add the tests to libraries-data-3 (#10848) --- libraries-data-3/README.md | 10 + libraries-data-3/log4j.properties | 1 + libraries-data-3/pom.xml | 59 ++++ .../kafka/streams/KafkaStreamsLiveTest.java | 279 ++++++++++++++++++ 4 files changed, 349 insertions(+) create mode 100644 libraries-data-3/README.md create mode 100644 libraries-data-3/log4j.properties create mode 100644 libraries-data-3/pom.xml create mode 100644 libraries-data-3/src/test/java/com/baeldung/kafka/streams/KafkaStreamsLiveTest.java diff --git a/libraries-data-3/README.md b/libraries-data-3/README.md new file mode 100644 index 0000000000..fffdf65252 --- /dev/null +++ b/libraries-data-3/README.md @@ -0,0 +1,10 @@ +## Data Libraries + +This module contains articles about libraries for data processing in Java. + +### Relevant articles +- [Kafka Streams vs Kafka Consumer]() +- More articles: [[<-- prev]](/../libraries-data-2) + +##### Building the project +You can build the project from the command line using: *mvn clean install*, or in an IDE. If you have issues with the derive4j imports in your IDE, you have to add the folder: *target/generated-sources/annotations* to the project build path in your IDE. diff --git a/libraries-data-3/log4j.properties b/libraries-data-3/log4j.properties new file mode 100644 index 0000000000..2173c5d96f --- /dev/null +++ b/libraries-data-3/log4j.properties @@ -0,0 +1 @@ +log4j.rootLogger=INFO, stdout diff --git a/libraries-data-3/pom.xml b/libraries-data-3/pom.xml new file mode 100644 index 0000000000..bfc39e537e --- /dev/null +++ b/libraries-data-3/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + libraries-data-3 + libraries-data-3 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.kafka + kafka-clients + ${kafka.version} + test + test + + + org.apache.kafka + kafka-streams + ${kafka.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.testcontainers + kafka + ${testcontainers-kafka.version} + test + + + + + 3.6.2 + 1.7.25 + 2.8.0 + 1.15.3 + + + \ No newline at end of file diff --git a/libraries-data-3/src/test/java/com/baeldung/kafka/streams/KafkaStreamsLiveTest.java b/libraries-data-3/src/test/java/com/baeldung/kafka/streams/KafkaStreamsLiveTest.java new file mode 100644 index 0000000000..0d4c0606e3 --- /dev/null +++ b/libraries-data-3/src/test/java/com/baeldung/kafka/streams/KafkaStreamsLiveTest.java @@ -0,0 +1,279 @@ +package com.baeldung.kafka.streams; + +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.Serde; +import org.apache.kafka.common.serialization.Serdes; +import org.apache.kafka.common.utils.Bytes; +import org.apache.kafka.streams.KafkaStreams; +import org.apache.kafka.streams.KeyValue; +import org.apache.kafka.streams.StoreQueryParameters; +import org.apache.kafka.streams.StreamsBuilder; +import org.apache.kafka.streams.StreamsConfig; +import org.apache.kafka.streams.Topology; +import org.apache.kafka.streams.kstream.Consumed; +import org.apache.kafka.streams.kstream.Grouped; +import org.apache.kafka.streams.kstream.JoinWindows; +import org.apache.kafka.streams.kstream.KGroupedStream; +import org.apache.kafka.streams.kstream.KGroupedTable; +import org.apache.kafka.streams.kstream.KStream; +import org.apache.kafka.streams.kstream.KTable; +import org.apache.kafka.streams.kstream.Materialized; +import org.apache.kafka.streams.kstream.Produced; +import org.apache.kafka.streams.kstream.TimeWindows; +import org.apache.kafka.streams.state.KeyValueIterator; +import org.apache.kafka.streams.state.KeyValueStore; +import org.apache.kafka.streams.state.QueryableStoreTypes; +import org.apache.kafka.streams.state.ReadOnlyKeyValueStore; +import org.apache.kafka.streams.state.StoreBuilder; +import org.apache.kafka.streams.state.Stores; +import org.apache.kafka.streams.state.WindowStore; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.utility.DockerImageName; + +import java.time.Duration; +import java.util.Arrays; +import java.util.Locale; +import java.util.Properties; + +import static org.apache.kafka.clients.consumer.ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG; +import static org.apache.kafka.clients.producer.ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG; +import static org.apache.kafka.clients.producer.ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG; + +public class KafkaStreamsLiveTest { + private final String LEFT_TOPIC = "left-stream-topic"; + private final String RIGHT_TOPIC = "right-stream-topic"; + private final String LEFT_RIGHT_TOPIC = "left-right-stream-topic"; + + private KafkaProducer producer = createKafkaProducer(); + private Properties streamsConfiguration = new Properties(); + + static final String TEXT_LINES_TOPIC = "TextLinesTopic"; + + private final String TEXT_EXAMPLE_1 = "test test and test"; + private final String TEXT_EXAMPLE_2 = "test filter filter this sentence"; + + @ClassRule + public static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.4.3")); + + @Before + public void setUp() { + streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers()); + streamsConfiguration.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); + streamsConfiguration.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); + streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000); + streamsConfiguration.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); + } + + @Test + public void shouldTestKafkaTableLatestWord() throws InterruptedException { + String inputTopic = "topicTable"; + + final StreamsBuilder builder = new StreamsBuilder(); + + KTable textLinesTable = builder.table(inputTopic, + Consumed.with(Serdes.String(), Serdes.String())); + + textLinesTable.toStream().foreach((word, count) -> System.out.println("Latest word: " + word + " -> " + count)); + + final Topology topology = builder.build(); + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "latest-word-id"); + KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration); + + streams.cleanUp(); + streams.start(); + producer.send(new ProducerRecord(inputTopic, "1", TEXT_EXAMPLE_1)); + producer.send(new ProducerRecord(inputTopic, "2", TEXT_EXAMPLE_2)); + + Thread.sleep(2000); + streams.close(); + } + + @Test + public void shouldTestWordCountKafkaStreams() throws InterruptedException { + String wordCountTopic = "wordCountTopic"; + + final StreamsBuilder builder = new StreamsBuilder(); + KStream textLines = builder.stream(wordCountTopic, + Consumed.with(Serdes.String(), Serdes.String())); + + KTable wordCounts = textLines + .flatMapValues(value -> Arrays.asList(value.toLowerCase(Locale.ROOT) + .split("\\W+"))) + .groupBy((key, word) -> word) + .count(Materialized.> as("counts-store")); + + wordCounts.toStream().foreach((word, count) -> System.out.println("Word: " + word + " -> " + count)); + + wordCounts.toStream().to("outputTopic", + Produced.with(Serdes.String(), Serdes.Long())); + + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-stream-table-id"); + final Topology topology = builder.build(); + KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration); + + streams.cleanUp(); + streams.start(); + + producer.send(new ProducerRecord(wordCountTopic, "1", TEXT_EXAMPLE_1)); + producer.send(new ProducerRecord(wordCountTopic, "2", TEXT_EXAMPLE_2)); + + Thread.sleep(2000); + streams.close(); + } + + // Filter, map + @Test + public void shouldTestStatelessTransformations() throws InterruptedException { + String wordCountTopic = "wordCountTopic"; + + //when + final StreamsBuilder builder = new StreamsBuilder(); + KStream textLines = builder.stream(wordCountTopic, + Consumed.with(Serdes.String(), Serdes.String())); + + final KStream textLinesUpperCase = + textLines + .map((key, value) -> KeyValue.pair(value, value.toUpperCase())) + .filter((key, value) -> value.contains("FILTER")); + + KTable wordCounts = textLinesUpperCase + .flatMapValues(value -> Arrays.asList(value.split("\\W+"))) + .groupBy((key, word) -> word) + .count(Materialized.> as("counts-store")); + + wordCounts.toStream().foreach((word, count) -> System.out.println("Word: " + word + " -> " + count)); + + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-filter-map-id"); + final Topology topology = builder.build(); + KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration); + + streams.cleanUp(); + streams.start(); + + producer.send(new ProducerRecord(wordCountTopic, "1", TEXT_EXAMPLE_1)); + producer.send(new ProducerRecord(wordCountTopic, "2", TEXT_EXAMPLE_2)); + + Thread.sleep(2000); + streams.close(); + + } + + @Test + public void shouldTestAggregationStatefulTransformations() throws InterruptedException { + String aggregationTopic = "aggregationTopic"; + + final StreamsBuilder builder = new StreamsBuilder(); + final KStream input = builder.stream(aggregationTopic, + Consumed.with(Serdes.ByteArray(), Serdes.String())); + final KTable aggregated = input + .groupBy((key, value) -> (value != null && value.length() > 0) ? value.substring(0, 2).toLowerCase() : "", + Grouped.with(Serdes.String(), Serdes.String())) + .aggregate(() -> 0L, (aggKey, newValue, aggValue) -> aggValue + newValue.length(), + Materialized.with(Serdes.String(), Serdes.Long())); + + aggregated.toStream().foreach((word, count) -> System.out.println("Word: " + word + " -> " + count)); + + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "aggregation-id"); + final Topology topology = builder.build(); + KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration); + + streams.cleanUp(); + streams.start(); + + producer.send(new ProducerRecord(aggregationTopic, "1", "one")); + producer.send(new ProducerRecord(aggregationTopic, "2", "two")); + producer.send(new ProducerRecord(aggregationTopic, "3", "three")); + producer.send(new ProducerRecord(aggregationTopic, "4", "four")); + producer.send(new ProducerRecord(aggregationTopic, "5", "five")); + + Thread.sleep(5000); + streams.close(); + + } + + @Test + public void shouldTestWindowingJoinStatefulTransformations() throws InterruptedException { + final StreamsBuilder builder = new StreamsBuilder(); + + KStream leftSource = builder.stream(LEFT_TOPIC); + KStream rightSource = builder.stream(RIGHT_TOPIC); + + KStream leftRightSource = leftSource.outerJoin(rightSource, + (leftValue, rightValue) -> "left=" + leftValue + ", right=" + rightValue, + JoinWindows.of(Duration.ofSeconds(5))) + .groupByKey() + .reduce(((key, lastValue) -> lastValue)) + .toStream(); + + leftRightSource.foreach((key, value) -> System.out.println("(key= " + key + ") -> (" + value + ")")); + + final Topology topology = builder.build(); + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "windowing-join-id"); + KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration); + + streams.cleanUp(); + streams.start(); + + producer.send(new ProducerRecord(LEFT_TOPIC, "1", "left")); + producer.send(new ProducerRecord(RIGHT_TOPIC, "2", "right")); + + Thread.sleep(2000); + streams.close(); + } + + @Test + public void shouldTestWordCountWithInteractiveQueries() throws InterruptedException { + + final Serde stringSerde = Serdes.String(); + final StreamsBuilder builder = new StreamsBuilder(); + final KStream + textLines = builder.stream(TEXT_LINES_TOPIC, Consumed.with(Serdes.String(), Serdes.String())); + + final KGroupedStream groupedByWord = textLines + .flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + .groupBy((key, word) -> word, Grouped.with(stringSerde, stringSerde)); + + groupedByWord.count(Materialized.>as("WordCountsStore") + .withValueSerde(Serdes.Long())); + + streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-interactive-queries"); + + final KafkaStreams streams = new KafkaStreams(builder.build(), streamsConfiguration); + streams.cleanUp(); + streams.start(); + + producer.send(new ProducerRecord(TEXT_LINES_TOPIC, "1", TEXT_EXAMPLE_1)); + producer.send(new ProducerRecord(TEXT_LINES_TOPIC, "2", TEXT_EXAMPLE_2)); + + Thread.sleep(2000); + ReadOnlyKeyValueStore keyValueStore = + streams.store(StoreQueryParameters.fromNameAndType( + "WordCountsStore", QueryableStoreTypes.keyValueStore())); + + KeyValueIterator range = keyValueStore.all(); + while (range.hasNext()) { + KeyValue next = range.next(); + System.out.println("Count for " + next.key + ": " + next.value); + } + + streams.close(); + } + + private static KafkaProducer createKafkaProducer() { + + Properties props = new Properties(); + props.put(BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers()); + props.put(KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); + props.put(VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); + + return new KafkaProducer(props); + + } +} + + From 1a590ce24570bde3390c310d6c3a34dabd90fcbe Mon Sep 17 00:00:00 2001 From: psevestre Date: Tue, 1 Jun 2021 00:20:02 -0300 Subject: [PATCH 143/160] [BAEL-4968] Article code (#10849) * [BAEL-4849] Article code * [BAEL-4968] Article code --- kubernetes/k8s-intro/pom.xml | 1 + .../com/baeldung/kubernetes/intro/RunJob.java | 152 ++++++++++++++++++ .../kubernetes/intro/RunJobLiveTest.java | 10 ++ 3 files changed, 163 insertions(+) create mode 100644 kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/RunJob.java create mode 100644 kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/RunJobLiveTest.java diff --git a/kubernetes/k8s-intro/pom.xml b/kubernetes/k8s-intro/pom.xml index 61722cb2c8..5da137ebb6 100644 --- a/kubernetes/k8s-intro/pom.xml +++ b/kubernetes/k8s-intro/pom.xml @@ -17,6 +17,7 @@ client-java 11.0.0 + ch.qos.logback logback-classic diff --git a/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/RunJob.java b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/RunJob.java new file mode 100644 index 0000000000..0c73dfb203 --- /dev/null +++ b/kubernetes/k8s-intro/src/main/java/com/baeldung/kubernetes/intro/RunJob.java @@ -0,0 +1,152 @@ +/** + * + */ +package com.baeldung.kubernetes.intro; + +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.kubernetes.client.custom.V1Patch; +import io.kubernetes.client.custom.V1Patch.V1PatchAdapter; +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.apis.BatchV1Api; +import io.kubernetes.client.openapi.apis.CoreV1Api; +import io.kubernetes.client.openapi.models.V1DeleteOptions; +import io.kubernetes.client.openapi.models.V1DeleteOptionsBuilder; +import io.kubernetes.client.openapi.models.V1Job; +import io.kubernetes.client.openapi.models.V1JobBuilder; +import io.kubernetes.client.openapi.models.V1JobSpec; +import io.kubernetes.client.openapi.models.V1JobSpecBuilder; +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder; +import io.kubernetes.client.openapi.models.V1Status; +import io.kubernetes.client.util.Config; +import io.kubernetes.client.util.PatchUtils; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; + +/** + * @author Philippe + * + */ +public class RunJob { + + private static Logger log = LoggerFactory.getLogger(RunJob.class); + + public static void main(String[] args) throws Exception { + + // Create client with logginginterceptor + ApiClient client = Config.defaultClient(); + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message)); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient newClient = client.getHttpClient() + .newBuilder() + .addInterceptor(interceptor) + .readTimeout(0, TimeUnit.SECONDS) + .build(); + client.setHttpClient(newClient); + + // Create Job Spec + BatchV1Api api = new BatchV1Api(client); + String ns = "report-jobs"; + V1Job body = new V1JobBuilder() + .withNewMetadata() + .withNamespace(ns) + .withName("payroll-report-job") + .endMetadata() + .withNewSpec() + .withCompletions(2) + .withParallelism(1) + .withNewTemplate() + .withNewMetadata() + .addToLabels("name", "payroll-report") + .endMetadata() + .editOrNewSpec() + .addNewContainer() + .withName("main") + .withImage("alpine") + .addNewCommand("/bin/sh") + .addNewArg("-c") + .addNewArg("sleep 10") + .endContainer() + .withRestartPolicy("Never") + .endSpec() + .endTemplate() + .endSpec() + .build(); + + // Send to K8S + V1Job createdJob = api.createNamespacedJob(ns, body, null, null, null); + log.info("job: uid={}", createdJob.getMetadata().getUid()); + + // Let's change its parallelism value + V1Job patchedJob = new V1JobBuilder(createdJob) + .withNewMetadata() + .withName(createdJob.getMetadata().getName()) + .withNamespace(createdJob.getMetadata().getNamespace()) + .endMetadata() + .editSpec() + .withParallelism(2) + .endSpec() + .build(); + + String patchedJobJSON = client.getJSON().serialize(patchedJob); + V1Patch patch = new V1Patch(patchedJobJSON); + + PatchUtils.patch( + V1Job.class, + () -> api.patchNamespacedJobCall( + createdJob.getMetadata().getName(), + createdJob.getMetadata().getNamespace(), + patch, + null, + null, + "acme", + true, + null), + V1Patch.PATCH_FORMAT_APPLY_YAML, + api.getApiClient()); + + while(!jobCompleted(api,createdJob)) { + log.info("[I75] still running..."); + Thread.sleep(1000); + } + + V1Status response = api.deleteNamespacedJob( + createdJob.getMetadata().getName(), + createdJob.getMetadata().getNamespace(), + null, + null, + null, + null, + null, + null ) ; + + log.info("[I122] response={}", response); + } + + private static boolean jobCompleted(BatchV1Api api, V1Job createdJob) throws Exception { + + V1Job job = api.readNamespacedJob( + createdJob.getMetadata().getName(), + createdJob.getMetadata().getNamespace(), + null,null,null); + + if ( job.getStatus() == null ) { + return false; + } + + log.info("[I88] Status: active={}, succeeded={}, failed={}", + job.getStatus().getActive(), + job.getStatus().getSucceeded(), + job.getStatus().getFailed() + ); + Integer active = job.getStatus().getActive(); + + return active == null || active == 0 ; + } + +} diff --git a/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/RunJobLiveTest.java b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/RunJobLiveTest.java new file mode 100644 index 0000000000..d6621db2d4 --- /dev/null +++ b/kubernetes/k8s-intro/src/test/java/com/baeldung/kubernetes/intro/RunJobLiveTest.java @@ -0,0 +1,10 @@ +package com.baeldung.kubernetes.intro; + +import org.junit.jupiter.api.Test; + +class RunJobLiveTest { + @Test + void whenWatchPods_thenSuccess() throws Exception { + RunJob.main(new String[] {}); + } +} From 69f4ccd5f4fc70db7db4b06a26e6bab7752fc623 Mon Sep 17 00:00:00 2001 From: Glen Johnson <43274646+synaptrec@users.noreply.github.com> Date: Tue, 1 Jun 2021 11:11:28 +0100 Subject: [PATCH 144/160] [BAEL-4875] 1. contains -> containsExactly, 2. get number strings as Java types, 3. Sci Not. and Hex (#10819) * [BAEL-4875] Added Finding as Numeric Values + Finding Sci Not & Hex Nums Added: 1. Finding Integers and Decimal Numbers as Numeric Values 2. Finding Scientific Notation and Hex numbers * BAEL-4875 - Changed assertThat.contains(...) to containsExactly(...) Changed all instances of assertThat.contains(...) to containsExactly(...) in FindNumbersUnitTest Co-authored-by: gjohnson --- .../countdigits/CountDigitsUnitTest.java | 77 +++++++++++ .../findnumbers/FindNumbersUnitTest.java | 128 ++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/countdigits/CountDigitsUnitTest.java create mode 100644 core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/findnumbers/FindNumbersUnitTest.java diff --git a/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/countdigits/CountDigitsUnitTest.java b/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/countdigits/CountDigitsUnitTest.java new file mode 100644 index 0000000000..e90d2e9f26 --- /dev/null +++ b/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/countdigits/CountDigitsUnitTest.java @@ -0,0 +1,77 @@ +package com.baeldung.regex.countdigits; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.jupiter.api.Test; + +import com.google.common.base.CharMatcher; + +/** + * Unit Test to count the number of digits in a String + */ +class CountDigitsUnitTest { + + // Guava CharMatcher to match digits + private static final CharMatcher DIGIT_CHAR_MATCHER = CharMatcher.inRange('0', '9'); + + private static final String STR_WITH_ALL_DIGITS = "970987678607608"; + private static final String STR_WITH_SINGLE_DIGITS_SEP_BY_NON_DIGITS = "9kjl()4f*(&6~3dfd8&5dfd8a"; + private static final String STR_WITH_SEQUENCES_OF_1_OR_MORE_DIGITS_SEP_BY_NON_DIGITS + = "64.6lk.l~453lkdsf9wg038.68*()(k;95786fsd7986"; + + private static int countDigits(String stringToSearch) { + Matcher countEmailMatcher = Pattern.compile("\\d").matcher(stringToSearch); + + int count = 0; + while (countEmailMatcher.find()) { + count++; + } + + return count; + } + + @Test + void givenStrOfAllDigits_whenRegexMatchByDigit_thenFifteenDigitsCounted() { + int count = countDigits(STR_WITH_ALL_DIGITS); + + assertThat(count).isEqualTo(15); + } + + @Test + void givenStrWithSingleDigitsSepByNonDigits_whenRegexMatchByDigit_thenSevenDigitsCounted() { + int count = countDigits(STR_WITH_SINGLE_DIGITS_SEP_BY_NON_DIGITS); + + assertThat(count).isEqualTo(7); + } + + @Test + void givenStrWithOneOrMoreDigitsSepByNonDigits_whenRegexMatchByDigit_thenTwentyOneDigitsCounted() { + int count = countDigits(STR_WITH_SEQUENCES_OF_1_OR_MORE_DIGITS_SEP_BY_NON_DIGITS); + + assertThat(count).isEqualTo(21); + } + + @Test + void givenStrOfAllDigits_whenGuavaCharMatchByDigit_thenFifteenDigitsCounted() { + int count = DIGIT_CHAR_MATCHER.countIn(STR_WITH_ALL_DIGITS); + + assertThat(count).isEqualTo(15); + } + + @Test + void givenStrWithSingleDigitsSepByNonDigits_whenGuavaCharMatchByDigit_thenSevenDigitsCounted() { + int count = DIGIT_CHAR_MATCHER.countIn(STR_WITH_SINGLE_DIGITS_SEP_BY_NON_DIGITS); + + assertThat(count).isEqualTo(7); + } + + @Test + void givenStrWithOneOrMoreDigitsSepByNonDigits_whenGuavaCharMatchByDigit_thenTwentyOneDigitsCounted() { + int count = DIGIT_CHAR_MATCHER.countIn(STR_WITH_SEQUENCES_OF_1_OR_MORE_DIGITS_SEP_BY_NON_DIGITS); + + assertThat(count).isEqualTo(21); + } +} diff --git a/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/findnumbers/FindNumbersUnitTest.java b/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/findnumbers/FindNumbersUnitTest.java new file mode 100644 index 0000000000..128a326ae2 --- /dev/null +++ b/core-java-modules/core-java-regex/src/test/java/com/baeldung/regex/findnumbers/FindNumbersUnitTest.java @@ -0,0 +1,128 @@ +package com.baeldung.regex.findnumbers; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.DoubleStream; +import java.util.stream.LongStream; + +import org.junit.jupiter.api.Test; + +/** + * Unit Test to find Integers, Decimal Numbers, and Scientific Notation and Hexadecimal Numbers in a String + */ +class FindNumbersUnitTest { + + private static List findIntegers(String stringToSearch) { + Pattern integerPattern = Pattern.compile("-?\\d+"); + Matcher matcher = integerPattern.matcher(stringToSearch); + + List integerList = new ArrayList<>(); + while (matcher.find()) { + integerList.add(matcher.group()); + } + + return integerList; + } + + private static List findDecimalNums(String stringToSearch) { + Pattern decimalNumPattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + Matcher matcher = decimalNumPattern.matcher(stringToSearch); + + List decimalNumList = new ArrayList<>(); + while (matcher.find()) { + decimalNumList.add(matcher.group()); + } + + return decimalNumList; + } + + @Test + void givenStrOfAllDigits_whenRegexMatchByInt_thenWholeStrMatchedAsOneInt() { + List integersFound = findIntegers("970987678607608"); + + assertThat(integersFound).containsExactly("970987678607608"); + } + + @Test + void givenStrWithIntegersSepByPeriods_whenRegexMatchByInt_thenExpectedIntsFound() { + List integersFound = findIntegers("3453..5.-23532...32432.-2363.3454......345.-34."); + + assertThat(integersFound).containsExactly("3453", "5", "-23532", "32432", "-2363", "3454", "345", "-34"); + } + + @Test + void givenStrWithIntegersSepByNonDigits_whenRegexMatchByInt_thenExpectedIntsFound() { + List integersFound = findIntegers("646lkl~4-53l-k34.fdsf.-ds-35.45f9wg3868*()(k;-95786fsd79-86"); + + assertThat(integersFound).containsExactly("646", "4", "-53", "34", "-35", "45", "9", "3868", "-95786", "79", "-86"); + } + + @Test + void givenStrOfAllDigits_whenRegexMatchByDecNum_thenWholeStrMatchedAsOneDecimalNumber() { + List decimalNumsFound = findDecimalNums("970987678607608"); + + assertThat(decimalNumsFound).containsExactly("970987678607608"); + } + + @Test + void givenStrOfDecNumsSepByNonDigits_whenRegexMatchByDecNum_thenExpectedNumsFound() { + List decimalNumsFound = findDecimalNums(".7854.455wo.rdy(do.g)-3.-553.00.53;good^night%o3456sdcardR%3567.4%£cat"); + + assertThat(decimalNumsFound).containsExactly("7854.455", "-3", "-553.00", "53", "3456", "3567.4"); + } + + @Test + void givenStrWithRandomDigitsDashesAndPeriods_whenRegexMatchByDecNum_thenExpectedNumsFound() { + List decimalNumsFound = findDecimalNums(".-..90834.345.--493-..-85.-875.345-.-.-355.345...345.-.636-5.6-3."); + + assertThat(decimalNumsFound).containsExactly("90834.345", "-493", "-85", "-875.345", "-355.345", "345", "636", "-5.6", "-3"); + } + + @Test + void givenStrOfIntsSepByNonDigits_whenRegexMatchByInt_thenExpectedValuesFound() { + LongStream integerValuesFound = findIntegers(".7854.455wo.rdy(do.g)-3.ght%o34.56") + .stream().mapToLong(Long::valueOf); + + assertThat(integerValuesFound).containsExactly(7854L, 455L, -3L, 34L, 56L); + } + + @Test + void givenStrOfDecNumsSepByNonDigits_whenRegexMatchByDecNum_thenExpectedValuesFound() { + DoubleStream decimalNumValuesFound = findDecimalNums(".7854.455wo.rdy(do.g)-3.ght%o34.56") + .stream().mapToDouble(Double::valueOf); + + assertThat(decimalNumValuesFound).containsExactly(7854.455, -3.0, 34.56); + } + + @Test + void givenStrOfSciNotationNumsSepByNonDigits_whenRegexMatchBySciNotNum_thenExpectedNumsFound() { + String strToSearch = "}s1.25E-3>,/@l2e109he-70.96E+105d£d_-8.7312E-102=#;,.d919.3822e+31e]"; + + Matcher matcher = Pattern.compile("-?\\d+(\\.\\d+)?[eE][+-]?\\d+") + .matcher(strToSearch); + List sciNotationNums = new ArrayList<>(); + while (matcher.find()) { + sciNotationNums.add(matcher.group()); + } + + assertThat(sciNotationNums).containsExactly("1.25E-3", "2e109", "-70.96E+105", "-8.7312E-102", "919.3822e+31"); + } + + @Test + void givenStrOfHexNumsSepByNonDigits_whenRegexMatchByHexNum_thenExpectedNumsFound() { + String strToSearch = "}saF851Bq-3f6Cm>,/@j-2Ad9eE>70ae19.>"; + + Matcher matcher = Pattern.compile("-?[0-9a-fA-F]+") + .matcher(strToSearch); + List hexNums = new ArrayList<>(); + while (matcher.find()) { + hexNums.add(matcher.group()); + } + + assertThat(hexNums).containsExactly("aF851B", "-3f6C", "-2Ad9eE", "70ae19"); + } +} From 2326e02ed27577590bcaa959491e276ec0f5a810 Mon Sep 17 00:00:00 2001 From: uzma khan Date: Tue, 1 Jun 2021 11:16:59 +0100 Subject: [PATCH 145/160] [BAEL-4406] Fix typo --- .../src/main/java/com/baeldung/generated/Customer.java | 2 +- .../src/main/java/com/baeldung/generated/Customer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java index 015966b330..e7bb837a5c 100644 --- a/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java +++ b/gradle/gradle-jacoco/src/main/java/com/baeldung/generated/Customer.java @@ -2,7 +2,7 @@ package com.baeldung.generated; @Generated public class Customer { - // every thing in this class will be excluded from jacoco report because of @Generated + // everything in this class will be excluded from jacoco report because of @Generated @Override public String toString() { diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java index 015966b330..e7bb837a5c 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java +++ b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java @@ -2,7 +2,7 @@ package com.baeldung.generated; @Generated public class Customer { - // every thing in this class will be excluded from jacoco report because of @Generated + // everything in this class will be excluded from jacoco report because of @Generated @Override public String toString() { From 559d47a612321cb04181192cf5b882b5954ce3e6 Mon Sep 17 00:00:00 2001 From: MeenaGawande <45625809+MeenaGawande@users.noreply.github.com> Date: Wed, 2 Jun 2021 08:22:34 +0530 Subject: [PATCH 146/160] [BAEL-4958] JPA Unique Constraint (#10793) * [BAEL-4958] JPA Unique Constraint Defining Unique Constraints in JPA * [BAEL-4958] JPA Unique Constraint Changed the field name from pAddress to streetAddress * [BAEL-4958] JPA Unique Constraint Resolved conflicts * [BAEL-4958] JPA Unique Constraint Getters and setters are changed for address field * [BAEL-4958] JPA Unique Constraint Fixed Junits * [BAEL-4958] JPA Unique Constraint Fixed id field Co-authored-by: MeenaGawande --- .../jpa/uniqueconstraints/Address.java | 37 ++++++ .../jpa/uniqueconstraints/Person.java | 116 +++++++++++++++++ .../main/resources/META-INF/persistence.xml | 16 +++ .../UniqueColumnIntegrationTest.java | 119 ++++++++++++++++++ .../UniqueConstraintIntegrationTest.java | 116 +++++++++++++++++ 5 files changed, 404 insertions(+) create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java create mode 100644 persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java create mode 100644 persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java new file mode 100644 index 0000000000..b20de6a471 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java @@ -0,0 +1,37 @@ +package com.baeldung.jpa.uniqueconstraints; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table +public class Address implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Long id; + + private String streetAddress; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStreetAddress() { + return streetAddress; + } + + public void setStreetAddress(String streetAddress) { + this.streetAddress = streetAddress; + } +} \ No newline at end of file diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java new file mode 100644 index 0000000000..c5df90df73 --- /dev/null +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java @@ -0,0 +1,116 @@ +package com.baeldung.jpa.uniqueconstraints; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +@Entity +@Table(uniqueConstraints = { @UniqueConstraint(name = "UniqueNumberAndStatus", columnNames = { "personNumber", "isActive" }), + @UniqueConstraint(name = "UniqueSecurityAndDepartment", columnNames = { "securityNumber", "departmentCode" }), + @UniqueConstraint(name = "UniqueNumberAndAddress", columnNames = { "personNumber", "address" }) }) +public class Person implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue + private Long id; + + private String name; + + private String password; + + @Column(unique = true) + private String email; + + @Column(unique = true) + private Long personNumber; + + private Boolean isActive; + + private String securityNumber; + + private String departmentCode; + + @Column(unique = true) + @JoinColumn(name = "addressId", referencedColumnName = "id") + private Address address; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Long getPersonNumber() { + return personNumber; + } + + public void setPersonNumber(Long personNumber) { + this.personNumber = personNumber; + } + + public Boolean getIsActive() { + return isActive; + } + + public void setIsActive(Boolean isActive) { + this.isActive = isActive; + } + + public String getScode() { + return securityNumber; + } + + public void setScode(String scode) { + this.securityNumber = scode; + } + + public String getDcode() { + return departmentCode; + } + + public void setDcode(String dcode) { + this.departmentCode = dcode; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } +} \ No newline at end of file diff --git a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml index 666fc1500a..1166aaca71 100644 --- a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml @@ -113,6 +113,22 @@ + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.uniqueconstraints.Person + com.baeldung.jpa.uniqueconstraints.Address + true + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider com.baeldung.jpa.returnmultipleentities.Channel diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java new file mode 100644 index 0000000000..ca776ba00b --- /dev/null +++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java @@ -0,0 +1,119 @@ +package com.baeldung.jpa.uniqueconstraints; + +import java.util.Optional; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.hibernate.exception.ConstraintViolationException; +import org.junit.Assert; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class UniqueColumnIntegrationTest { + + private static EntityManagerFactory factory; + private static EntityManager entityManager; + + @BeforeAll + public static void setup() { + factory = Persistence.createEntityManagerFactory("jpa-unique-constraints"); + entityManager = factory.createEntityManager(); + } + + @Test + public void whenPersistPersonWithSameNumber_thenConstraintViolationException() { + Person person1 = new Person(); + person1.setPersonNumber(2000L); + person1.setEmail("john.beth@gmail.com"); + + Person person2 = new Person(); + person2.setPersonNumber(2000L); + person2.setEmail("anthony.green@gmail.com"); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } + + @Test + public void whenPersistPersonWithSameEmail_thenConstraintViolationException() { + Person person1 = new Person(); + person1.setPersonNumber(4000L); + person1.setEmail("timm.beth@gmail.com"); + + Person person2 = new Person(); + person2.setPersonNumber(3000L); + person2.setEmail("timm.beth@gmail.com"); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } + + @Test + public void whenPersistPersonWithSameAddress_thenConstraintViolationException() { + Person person1 = new Person(); + person1.setPersonNumber(5000L); + person1.setEmail("chris.beck@gmail.com"); + + Address address1 = new Address(); + address1.setStreetAddress("20 Street"); + person1.setAddress(address1); + + Person person2 = new Person(); + person2.setPersonNumber(6000L); + person2.setEmail("mark.jonson@gmail.com"); + person2.setAddress(address1); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } +} \ No newline at end of file diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java new file mode 100644 index 0000000000..f12313724e --- /dev/null +++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java @@ -0,0 +1,116 @@ +package com.baeldung.jpa.uniqueconstraints; + +import java.util.Optional; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.hibernate.exception.ConstraintViolationException; +import org.junit.Assert; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class UniqueConstraintIntegrationTest { + private static EntityManagerFactory factory; + private static EntityManager entityManager; + + @BeforeAll + public static void setup() { + factory = Persistence.createEntityManagerFactory("jpa-unique-constraints"); + entityManager = factory.createEntityManager(); + } + + @Test + public void whenPersistPersonWithSameNumberAndStatus_thenConstraintViolationException() { + Person person1 = new Person(); + person1.setPersonNumber(12345L); + person1.setIsActive(Boolean.TRUE); + + Person person2 = new Person(); + person2.setPersonNumber(12345L); + person2.setIsActive(Boolean.TRUE); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } + + @Test + public void whenPersistPersonWithSameSCodeAndDecode_thenConstraintViolationException() { + Person person1 = new Person(); + person1.setDcode("Sec1"); + person1.setScode("Axybg356"); + + Person person2 = new Person(); + person2.setDcode("Sec1"); + person2.setScode("Axybg356"); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } + + @Test + public void whenPersistPersonWithSameNumberAndAddress_thenConstraintViolationException() { + Address address1 = new Address(); + address1.setStreetAddress("40 Street"); + + Person person1 = new Person(); + person1.setPersonNumber(54321L); + person1.setAddress(address1); + + Person person2 = new Person(); + person2.setPersonNumber(99999L); + person2.setAddress(address1); + + entityManager.getTransaction().begin(); + entityManager.persist(person1); + entityManager.getTransaction().commit(); + + entityManager.getTransaction().begin(); + try { + entityManager.persist(person2); + entityManager.getTransaction().commit(); + Assert.fail("Should raise an exception - unique key violation"); + } catch (Exception ex) { + Assert.assertTrue(Optional.of(ex) + .map(Throwable::getCause) + .map(Throwable::getCause) + .filter(x -> x instanceof ConstraintViolationException) + .isPresent()); + } finally { + entityManager.getTransaction().rollback(); + } + } +} \ No newline at end of file From 6ab67e6968cde6b82eeeb1724f1dd57a23ed9821 Mon Sep 17 00:00:00 2001 From: uzma khan Date: Thu, 3 Jun 2021 10:11:38 +0100 Subject: [PATCH 147/160] [BAEL-4406] Move maven code to testing-libraries-2 --- .../maven-plugins/maven-jacoco/pom.xml | 68 ------------------- .../java/com/baeldung/dto/ExcludedPOJO.java | 4 -- .../java/com/baeldung/dto/ProductDTO.java | 4 -- .../testing-libraries-2}/lombok.config | 0 testing-modules/testing-libraries-2/pom.xml | 13 ++++ .../jacocoexclusions}/config/AppConfig.java | 4 +- .../jacocoexclusions}/domain/Product.java | 2 +- .../jacocoexclusions/dto/ExcludedPOJO.java | 4 ++ .../jacocoexclusions/dto/ProductDTO.java | 4 ++ .../jacocoexclusions}/generated/Customer.java | 2 +- .../generated/Generated.java | 2 +- .../service/CustomerService.java | 4 +- .../service/ProductService.java | 2 +- .../service/CustomerServiceUnitTest.java | 2 +- .../service/ProductServiceUnitTest.java | 2 +- 15 files changed, 31 insertions(+), 86 deletions(-) delete mode 100644 maven-modules/maven-plugins/maven-jacoco/pom.xml delete mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java delete mode 100644 maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java rename {maven-modules/maven-plugins/maven-jacoco => testing-modules/testing-libraries-2}/lombok.config (100%) rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/config/AppConfig.java (52%) rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/domain/Product.java (74%) create mode 100644 testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ExcludedPOJO.java create mode 100644 testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ProductDTO.java rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/generated/Customer.java (81%) rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/generated/Generated.java (88%) rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/service/CustomerService.java (70%) rename {maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung => testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions}/service/ProductService.java (81%) rename {maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung => testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions}/service/CustomerServiceUnitTest.java (88%) rename {maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung => testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions}/service/ProductServiceUnitTest.java (89%) diff --git a/maven-modules/maven-plugins/maven-jacoco/pom.xml b/maven-modules/maven-plugins/maven-jacoco/pom.xml deleted file mode 100644 index 3298b780e0..0000000000 --- a/maven-modules/maven-plugins/maven-jacoco/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - maven-plugins - com.baeldung - 0.0.1-SNAPSHOT - - 4.0.0 - - maven-jacoco - - - org.projectlombok - lombok - 1.18.20 - provided - - - - - - maven-verifier-plugin - ${maven.verifier.version} - - - none - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - com/baeldung/**/ExcludedPOJO.class - com/baeldung/**/*DTO.* - **/config/* - - - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - package - - report - - - - - - - - - 0.8.6 - - - - - \ No newline at end of file diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java deleted file mode 100644 index 0f7278459e..0000000000 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ExcludedPOJO.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.baeldung.dto; - -public class ExcludedPOJO { -} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java b/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java deleted file mode 100644 index 0ae1659c14..0000000000 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/dto/ProductDTO.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.baeldung.dto; - -public class ProductDTO { -} diff --git a/maven-modules/maven-plugins/maven-jacoco/lombok.config b/testing-modules/testing-libraries-2/lombok.config similarity index 100% rename from maven-modules/maven-plugins/maven-jacoco/lombok.config rename to testing-modules/testing-libraries-2/lombok.config diff --git a/testing-modules/testing-libraries-2/pom.xml b/testing-modules/testing-libraries-2/pom.xml index 5a57dc0958..d914fcfb86 100644 --- a/testing-modules/testing-libraries-2/pom.xml +++ b/testing-modules/testing-libraries-2/pom.xml @@ -13,6 +13,12 @@ + + org.projectlombok + lombok + ${lombok.version} + provided + org.assertj assertj-core @@ -85,6 +91,13 @@ org.jacoco jacoco-maven-plugin ${jacoco.version} + + + com/baeldung/**/ExcludedPOJO.class + com/baeldung/**/*DTO.* + **/config/* + + jacoco-initialize diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/config/AppConfig.java similarity index 52% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/config/AppConfig.java index d103f4b4f5..26bfe7b196 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/config/AppConfig.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/config/AppConfig.java @@ -1,6 +1,6 @@ -package com.baeldung.config; +package com.baeldung.jacocoexclusions.config; -import com.baeldung.service.ProductService; +import com.baeldung.jacocoexclusions.service.ProductService; public class AppConfig { diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/domain/Product.java similarity index 74% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/domain/Product.java index c64b6d2eae..5606107371 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/domain/Product.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/domain/Product.java @@ -1,4 +1,4 @@ -package com.baeldung.domain; +package com.baeldung.jacocoexclusions.domain; import lombok.Builder; import lombok.Data; diff --git a/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ExcludedPOJO.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ExcludedPOJO.java new file mode 100644 index 0000000000..27b461f70e --- /dev/null +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ExcludedPOJO.java @@ -0,0 +1,4 @@ +package com.baeldung.jacocoexclusions.dto; + +public class ExcludedPOJO { +} diff --git a/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ProductDTO.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ProductDTO.java new file mode 100644 index 0000000000..fb0ec05621 --- /dev/null +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/dto/ProductDTO.java @@ -0,0 +1,4 @@ +package com.baeldung.jacocoexclusions.dto; + +public class ProductDTO { +} diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Customer.java similarity index 81% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Customer.java index e7bb837a5c..cab70467e3 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Customer.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Customer.java @@ -1,4 +1,4 @@ -package com.baeldung.generated; +package com.baeldung.jacocoexclusions.generated; @Generated public class Customer { diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Generated.java similarity index 88% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Generated.java index 865df8ca8a..93be21e32d 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/generated/Generated.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/generated/Generated.java @@ -1,4 +1,4 @@ -package com.baeldung.generated; +package com.baeldung.jacocoexclusions.generated; import java.lang.annotation.Documented; import java.lang.annotation.Retention; diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/CustomerService.java similarity index 70% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/CustomerService.java index e6dbe8df5e..889153ba0a 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/CustomerService.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/CustomerService.java @@ -1,6 +1,6 @@ -package com.baeldung.service; +package com.baeldung.jacocoexclusions.service; -import com.baeldung.generated.Generated; +import com.baeldung.jacocoexclusions.generated.Generated; public class CustomerService { diff --git a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/ProductService.java similarity index 81% rename from maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java rename to testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/ProductService.java index 5f73ddc7fd..c87295e642 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/main/java/com/baeldung/service/ProductService.java +++ b/testing-modules/testing-libraries-2/src/main/java/com/baeldung/jacocoexclusions/service/ProductService.java @@ -1,4 +1,4 @@ -package com.baeldung.service; +package com.baeldung.jacocoexclusions.service; public class ProductService { private static final double DISCOUNT = 0.25; diff --git a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/CustomerServiceUnitTest.java similarity index 88% rename from maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java rename to testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/CustomerServiceUnitTest.java index 63dd2c755a..b35f92ca20 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/CustomerServiceUnitTest.java +++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/CustomerServiceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.service; +package com.baeldung.jacocoexclusions.service; import org.junit.jupiter.api.Test; diff --git a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/ProductServiceUnitTest.java similarity index 89% rename from maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java rename to testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/ProductServiceUnitTest.java index a9d216785a..609be33640 100644 --- a/maven-modules/maven-plugins/maven-jacoco/src/test/java/com/baeldung/service/ProductServiceUnitTest.java +++ b/testing-modules/testing-libraries-2/src/test/java/com/baeldung/jacocoexclusions/service/ProductServiceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.service; +package com.baeldung.jacocoexclusions.service; import org.junit.jupiter.api.Test; From 8bb4d52445e738b51aa12ac516d7c107621f7c6c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:11:37 +0800 Subject: [PATCH 148/160] Update README.md --- core-java-modules/core-java-exceptions-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions-3/README.md b/core-java-modules/core-java-exceptions-3/README.md index e1372381a8..f79eb41a8b 100644 --- a/core-java-modules/core-java-exceptions-3/README.md +++ b/core-java-modules/core-java-exceptions-3/README.md @@ -8,3 +8,4 @@ - [Localizing Exception Messages in Java](https://www.baeldung.com/java-localize-exception-messages) - [Explanation of ClassCastException in Java](https://www.baeldung.com/java-classcastexception) - [NoSuchFieldError in Java](https://www.baeldung.com/java-nosuchfielderror) +- [IllegalAccessError in Java](https://www.baeldung.com/java-illegalaccesserror) From c7af17e69fadbee2e56ee603eb359218f069b011 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:17:29 +0800 Subject: [PATCH 149/160] Update README.md --- core-java-modules/core-java-arrays-guides/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-arrays-guides/README.md b/core-java-modules/core-java-arrays-guides/README.md index 7338ff9523..00bb6b53c8 100644 --- a/core-java-modules/core-java-arrays-guides/README.md +++ b/core-java-modules/core-java-arrays-guides/README.md @@ -8,3 +8,4 @@ This module contains complete guides about arrays in Java - [What is \[Ljava.lang.Object;?](https://www.baeldung.com/java-tostring-array) - [Guide to ArrayStoreException](https://www.baeldung.com/java-arraystoreexception) - [Creating a Generic Array in Java](https://www.baeldung.com/java-generic-array) +- [Maximum Size of Java Arrays](https://www.baeldung.com/java-arrays-max-size) From edc0b6c747a46cf59d04e971beb9a16a507ddfd4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:20:28 +0800 Subject: [PATCH 150/160] Update README.md --- core-java-modules/core-java-networking-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-networking-3/README.md b/core-java-modules/core-java-networking-3/README.md index 09470fe88c..730231525f 100644 --- a/core-java-modules/core-java-networking-3/README.md +++ b/core-java-modules/core-java-networking-3/README.md @@ -5,4 +5,5 @@ This module contains articles about networking in Java ### Relevant Articles - [Finding a Free Port in Java](https://www.baeldung.com/java-free-port) +- [Downloading Email Attachments in Java](https://www.baeldung.com/java-download-email-attachments) - [[<-- Prev]](/core-java-modules/core-java-networking-2) From e96f316c8b55c3c7b3dcd4e7e492094aa23bd865 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:23:18 +0800 Subject: [PATCH 151/160] Create README.md --- gradle/gradle-cucumber/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 gradle/gradle-cucumber/README.md diff --git a/gradle/gradle-cucumber/README.md b/gradle/gradle-cucumber/README.md new file mode 100644 index 0000000000..a92593e959 --- /dev/null +++ b/gradle/gradle-cucumber/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Using Cucumber with Gradle](https://www.baeldung.com/java-cucumber-gradle) From 33a845253c1d463e1d4df91b2fad0938c4b9c57b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:26:37 +0800 Subject: [PATCH 152/160] Update README.md --- core-java-modules/core-java-security-3/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-security-3/README.md b/core-java-modules/core-java-security-3/README.md index 4585b6cc86..970faaac88 100644 --- a/core-java-modules/core-java-security-3/README.md +++ b/core-java-modules/core-java-security-3/README.md @@ -4,5 +4,5 @@ This module contains articles about core Java Security ### Relevant Articles: -- [Secret Key and String Conversion in Java](https://www.baeldung.com/secret-key-and-string-conversion-in-java/) +- [Secret Key and String Conversion in Java](https://www.baeldung.com/java-secret-key-to-string) - More articles: [[<-- prev]](/core-java-modules/core-java-security-2) From cf166adab63b7a33a34af6505beecb00f409b9e0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:28:36 +0800 Subject: [PATCH 153/160] Update README.md --- persistence-modules/java-jpa-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md index e607043880..c229c5a3a3 100644 --- a/persistence-modules/java-jpa-3/README.md +++ b/persistence-modules/java-jpa-3/README.md @@ -11,3 +11,4 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [A Guide to MultipleBagFetchException in Hibernate](https://www.baeldung.com/java-hibernate-multiplebagfetchexception) - [How to Convert a Hibernate Proxy to a Real Entity Object](https://www.baeldung.com/hibernate-proxy-to-real-entity-object) - [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id) +- [How to Return Multiple Entities In JPA Query](https://www.baeldung.com/jpa-return-multiple-entities) From f894b98103638c19608be1ea212019914ddae82b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:30:13 +0800 Subject: [PATCH 154/160] Update README.md --- core-java-modules/core-java-reflection-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-reflection-2/README.md b/core-java-modules/core-java-reflection-2/README.md index 3195cddc42..4c888bdf58 100644 --- a/core-java-modules/core-java-reflection-2/README.md +++ b/core-java-modules/core-java-reflection-2/README.md @@ -5,3 +5,4 @@ - [Checking If a Method is Static Using Reflection in Java](https://www.baeldung.com/java-check-method-is-static) - [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) From 16bc7f439373642bc0e4fae5385b33efa4d7f604 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:36:50 +0800 Subject: [PATCH 155/160] Update README.md --- aws-lambda/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/aws-lambda/README.md b/aws-lambda/README.md index 759c9dd506..0ae188fc97 100644 --- a/aws-lambda/README.md +++ b/aws-lambda/README.md @@ -6,3 +6,4 @@ This module contains articles about AWS Lambda - [Using AWS Lambda with API Gateway](https://www.baeldung.com/aws-lambda-api-gateway) - [Introduction to AWS Serverless Application Model](https://www.baeldung.com/aws-serverless) - [How to Implement Hibernate in an AWS Lambda Function in Java](https://www.baeldung.com/java-aws-lambda-hibernate) +- [Writing an Enterprise-Grade AWS Lambda in Java](https://www.baeldung.com/java-enterprise-aws-lambda) From 98fce705da1520f8ba85c3b7a3972a81a16ebfa3 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:38:54 +0800 Subject: [PATCH 156/160] Update README.md --- core-java-modules/core-java-regex/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-regex/README.md b/core-java-modules/core-java-regex/README.md index 92321fa656..bc28f4b732 100644 --- a/core-java-modules/core-java-regex/README.md +++ b/core-java-modules/core-java-regex/README.md @@ -13,3 +13,4 @@ - [Regular Expressions \s and \s+ in Java](https://www.baeldung.com/java-regex-s-splus) - [Validate Phone Numbers With Java Regex](https://www.baeldung.com/java-regex-validate-phone-numbers) - [How to Count the Number of Matches for a Regex?](https://www.baeldung.com/java-count-regex-matches) +- [Find All Numbers in a String in Java](https://www.baeldung.com/java-find-numbers-in-string) From 26768f40a5493131527f4bb6f725c2ee00aaa72c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 3 Jun 2021 22:41:19 +0800 Subject: [PATCH 157/160] Update README.md --- persistence-modules/java-jpa-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md index c229c5a3a3..c024d7c540 100644 --- a/persistence-modules/java-jpa-3/README.md +++ b/persistence-modules/java-jpa-3/README.md @@ -12,3 +12,4 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [How to Convert a Hibernate Proxy to a Real Entity Object](https://www.baeldung.com/hibernate-proxy-to-real-entity-object) - [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id) - [How to Return Multiple Entities In JPA Query](https://www.baeldung.com/jpa-return-multiple-entities) +- [Defining Unique Constraints in JPA](https://www.baeldung.com/jpa-unique-constraints) From 443c0c78500d081c6bdb53aba46ef9f321c4eb32 Mon Sep 17 00:00:00 2001 From: uzma khan Date: Thu, 3 Jun 2021 21:55:47 +0100 Subject: [PATCH 158/160] [BAEL-4406] Retrigger checks From 70514c9fc7165e17512361754e7a9f8bc6bac99e Mon Sep 17 00:00:00 2001 From: uzma khan Date: Thu, 3 Jun 2021 22:08:03 +0100 Subject: [PATCH 159/160] [BAEL-4406] Remove redundant pom reference --- maven-modules/maven-plugins/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/maven-modules/maven-plugins/pom.xml b/maven-modules/maven-plugins/pom.xml index 338f865f9f..29b3b550ea 100644 --- a/maven-modules/maven-plugins/pom.xml +++ b/maven-modules/maven-plugins/pom.xml @@ -19,7 +19,6 @@ custom-rule maven-enforcer jaxws - maven-jacoco From 836e9b479cf7ccf7f82e8425df55b29f3481ba72 Mon Sep 17 00:00:00 2001 From: polomos Date: Sat, 5 Jun 2021 05:26:27 +0200 Subject: [PATCH 160/160] BAEL-4724 Fixing log4j's "no appender found" warning (#10802) --- .../com/baeldung/log4j/NoAppenderExample.java | 18 ++++++++++++++++++ .../log4j/src/main/resources/log4j.properties | 5 +++++ .../log4j/src/main/resources/log4j.xml | 2 ++ 3 files changed, 25 insertions(+) create mode 100644 logging-modules/log4j/src/main/java/com/baeldung/log4j/NoAppenderExample.java create mode 100644 logging-modules/log4j/src/main/resources/log4j.properties diff --git a/logging-modules/log4j/src/main/java/com/baeldung/log4j/NoAppenderExample.java b/logging-modules/log4j/src/main/java/com/baeldung/log4j/NoAppenderExample.java new file mode 100644 index 0000000000..9bd8a06537 --- /dev/null +++ b/logging-modules/log4j/src/main/java/com/baeldung/log4j/NoAppenderExample.java @@ -0,0 +1,18 @@ +package com.baeldung.log4j; + +import org.apache.log4j.Logger; + +public class NoAppenderExample { + + private final static Logger logger = Logger.getLogger(NoAppenderExample.class); + + public static void main(String[] args) { + + //Setup default appender + //BasicConfigurator.configure(); + + //Define path to configuration file + //PropertyConfigurator.configure("src\\main\\resources\\log4j.properties"); + logger.info("Info log message"); + } +} diff --git a/logging-modules/log4j/src/main/resources/log4j.properties b/logging-modules/log4j/src/main/resources/log4j.properties new file mode 100644 index 0000000000..b10ba2b7d4 --- /dev/null +++ b/logging-modules/log4j/src/main/resources/log4j.properties @@ -0,0 +1,5 @@ +log4j.rootLogger=INFO, stdout +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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n \ No newline at end of file diff --git a/logging-modules/log4j/src/main/resources/log4j.xml b/logging-modules/log4j/src/main/resources/log4j.xml index 562d6920f9..3004649edf 100644 --- a/logging-modules/log4j/src/main/resources/log4j.xml +++ b/logging-modules/log4j/src/main/resources/log4j.xml @@ -90,6 +90,8 @@ + +