From 812057b43cad1b07aa2133898e608cd04b8048ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer?= <59844362+omertopuz@users.noreply.github.com> Date: Sat, 5 Jun 2021 23:04:19 +0300 Subject: [PATCH 01/42] Update Graph.java for dfsWithoutRecursion, when a node popped from the stack it should be checked that the current node is visited or not. Since stack has duplicated nodes, some nodes is visired doubly. --- .../main/java/com/baeldung/algorithms/dfs/Graph.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java b/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java index d2cc723cf9..4623dbb7a4 100644 --- a/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java +++ b/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java @@ -29,11 +29,13 @@ public class Graph { stack.push(start); while (!stack.isEmpty()) { int current = stack.pop(); - isVisited[current] = true; - visit(current); - for (int dest : adjVertices.get(current)) { - if (!isVisited[dest]) - stack.push(dest); + if(!isVisited[current]){ + isVisited[current] = true; + visit(current); + for (int dest : adjVertices.get(current)) { + if (!isVisited[dest]) + stack.push(dest); + } } } } From 75e9acc874ef3a54b0c590080af95b7b2874b774 Mon Sep 17 00:00:00 2001 From: Trixi Turny Date: Sun, 1 Aug 2021 14:26:57 +0100 Subject: [PATCH 02/42] BAEL-5054 2 examples of file upload with webclient --- webclient_upload/pom.xml | 76 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 webclient_upload/pom.xml diff --git a/webclient_upload/pom.xml b/webclient_upload/pom.xml new file mode 100644 index 0000000000..69f7f78cd1 --- /dev/null +++ b/webclient_upload/pom.xml @@ -0,0 +1,76 @@ + + + + 4.0.0 + + com.baeldung + webclient_upload + 1.0-SNAPSHOT + jar + + + + org.springframework.boot + spring-boot-starter-parent + 2.5.0 + + + webclient_upload Maven Webapp + + 16 + 1.0.1.RELEASE + + + + + + + org.projectreactor + reactor-spring + ${reactor-spring.version} + + + + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-webflux + + + org.projectreactor + reactor-spring + + + org.springframework.boot + spring-boot-starter-test + test + + + io.rest-assured + json-schema-validator + test + + + org.springframework.boot + spring-boot-starter-web + + + + + From 6d979cf2e34860d7b33dd00ad5eb91a214ff6aa2 Mon Sep 17 00:00:00 2001 From: mikr Date: Tue, 24 Aug 2021 10:17:23 +0200 Subject: [PATCH 03/42] JAVA-3587 Update Jackson version in the main pom --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f56006713a..fb2c140992 100644 --- a/pom.xml +++ b/pom.xml @@ -1408,7 +1408,7 @@ 1.2 2.3.1 1.2 - 2.11.1 + 2.12.4 1.4 1.2.0 5.2.0 From de5c114c227765da06b8d363f7382822b089dd82 Mon Sep 17 00:00:00 2001 From: mikr Date: Wed, 25 Aug 2021 23:00:50 +0200 Subject: [PATCH 04/42] JAVA-3587 Update Jackson version in the main pom --- jackson-modules/jackson-conversions-2/pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml index 799fcb106a..a498c8b4f8 100644 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ b/jackson-modules/jackson-conversions-2/pom.xml @@ -24,7 +24,7 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - ${jackson-datatype.version} + ${jackson.version} @@ -52,7 +52,6 @@ 3.11.0 - 2.9.8 \ No newline at end of file From 4a8956e7a97de63901360acd2cf137a4d82dda3a Mon Sep 17 00:00:00 2001 From: mikr Date: Thu, 26 Aug 2021 08:18:11 +0200 Subject: [PATCH 05/42] JAVA-3587 Ignore failing test (unrelated to Jackson version change) --- apache-libraries/pom.xml | 5 +++++ .../com/baeldung/apache/beam/intro/WordCountUnitTest.java | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apache-libraries/pom.xml b/apache-libraries/pom.xml index ded10b939f..bca80d9acd 100644 --- a/apache-libraries/pom.xml +++ b/apache-libraries/pom.xml @@ -133,6 +133,11 @@ jackson-databind ${jackson.version} + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + com.jayway.awaitility awaitility diff --git a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java index f2558635dc..805f79742d 100644 --- a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java +++ b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java @@ -9,8 +9,8 @@ import com.baeldung.apache.beam.intro.WordCount; public class WordCountUnitTest { - @Test - // @Ignore +// @Test + @Ignore public void givenInputFile_whenWordCountRuns_thenJobFinishWithoutError() { boolean jobDone = WordCount.wordCount("src/test/resources/wordcount.txt", "target/output"); assertTrue(jobDone); From 638d34924ba3cf06e6d274684f4a4a1a2a6ab720 Mon Sep 17 00:00:00 2001 From: Trixi Turny Date: Sun, 1 Aug 2021 14:28:51 +0100 Subject: [PATCH 06/42] BAEL-5054 make sure all files are added BAEL-5054 organise packages BAEL-5054 move project to correct folder BAEL-5044 remove old folder --- spring-5-reactive-client/pom.xml | 2 +- .../com/baeldung/reactive/Application.java | 12 +++ .../reactive/controller/UploadController.java | 47 ++++++++++++ .../service/ReactiveUploadService.java | 69 +++++++++++++++++ .../src/main/resources/application.properties | 2 +- webclient_upload/pom.xml | 76 ------------------- 6 files changed, 130 insertions(+), 78 deletions(-) create mode 100644 spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java create mode 100644 spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java create mode 100644 spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java delete mode 100644 webclient_upload/pom.xml diff --git a/spring-5-reactive-client/pom.xml b/spring-5-reactive-client/pom.xml index 136f31b49e..6a0a2d6fe3 100644 --- a/spring-5-reactive-client/pom.xml +++ b/spring-5-reactive-client/pom.xml @@ -133,7 +133,7 @@ org.springframework.boot spring-boot-maven-plugin - com.baeldung.Spring5Application + com.baeldung.reactive.Application JAR diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java new file mode 100644 index 0000000000..65e497b519 --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java @@ -0,0 +1,12 @@ +package com.baeldung.reactive; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} + diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java new file mode 100644 index 0000000000..71cea35685 --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java @@ -0,0 +1,47 @@ +package com.baeldung.reactive.controller; + + +import com.baeldung.reactive.service.ReactiveUploadService; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import reactor.core.publisher.Mono; + + +@RestController +public class UploadController { + final ReactiveUploadService uploadService; + + public UploadController(ReactiveUploadService uploadService) { + this.uploadService = uploadService; + } + + @PostMapping(path = "/upload") + @ResponseBody + public Mono uploadPdf(@RequestParam("file") final MultipartFile multipartFile) { + return uploadService.uploadPdf(multipartFile.getResource()); + } + + @PostMapping(path = "/upload/multipart") + @ResponseBody + public Mono uploadMultipart(@RequestParam("file") final MultipartFile multipartFile) { + return uploadService.uploadMultipart(multipartFile); + } + + + /** + * Fake upload endpoint returning "OK" HttpStatus + * @return "OK" HttpStatus + */ + @PostMapping(path = "/external/upload") + @ResponseBody + public HttpStatus externalUpload() { + return HttpStatus.OK; + } + + @GetMapping("/trixi") + public String returnTrixi() { + return "Trixi"; + + } +} diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java new file mode 100644 index 0000000000..e31674282b --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java @@ -0,0 +1,69 @@ +package com.baeldung.reactive.service; + + +import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.MultipartBodyBuilder; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; +import reactor.core.publisher.Mono; + +import java.net.URI; + +@Service +public class ReactiveUploadService { + + private final WebClient webClient; + private static final String EXTERNAL_UPLOAD_URL = "http://localhost:8080/external/upload"; + + public ReactiveUploadService() { + this.webClient = WebClient.create(); + } + + + public Mono uploadPdf(final Resource resource){ + + final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); + Mono httpStatusMono = webClient.post() + .uri(url) + .contentType(MediaType.APPLICATION_PDF) + .body(BodyInserters.fromResource(resource)) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + System.out.println("Failed to upload pdf. " + response.statusCode()); + } + return null; + }); + return httpStatusMono; + } + + + public Mono uploadMultipart(final MultipartFile multipartFile){ + final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); + + final MultipartBodyBuilder builder = new MultipartBodyBuilder(); + builder.part("file", multipartFile.getResource()); + + Mono httpStatusMono = webClient.post() + .uri(url) + .contentType(MediaType.MULTIPART_FORM_DATA) + .body(BodyInserters.fromMultipartData(builder.build())) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + System.out.println("Failed to upload pdf. " + response.statusCode()); + } + return null; + }); + return httpStatusMono; + } + + +} diff --git a/spring-5-reactive-client/src/main/resources/application.properties b/spring-5-reactive-client/src/main/resources/application.properties index 05033054b1..7859537230 100644 --- a/spring-5-reactive-client/src/main/resources/application.properties +++ b/spring-5-reactive-client/src/main/resources/application.properties @@ -1,5 +1,5 @@ logging.level.root=INFO -server.port=8081 +server.port=8080 logging.level.reactor.netty.http.client.HttpClient=DEBUG \ No newline at end of file diff --git a/webclient_upload/pom.xml b/webclient_upload/pom.xml deleted file mode 100644 index 69f7f78cd1..0000000000 --- a/webclient_upload/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - 4.0.0 - - com.baeldung - webclient_upload - 1.0-SNAPSHOT - jar - - - - org.springframework.boot - spring-boot-starter-parent - 2.5.0 - - - webclient_upload Maven Webapp - - 16 - 1.0.1.RELEASE - - - - - - - org.projectreactor - reactor-spring - ${reactor-spring.version} - - - - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-webflux - - - org.projectreactor - reactor-spring - - - org.springframework.boot - spring-boot-starter-test - test - - - io.rest-assured - json-schema-validator - test - - - org.springframework.boot - spring-boot-starter-web - - - - - From 82c3389ba042400766dd94f3223936729fa86533 Mon Sep 17 00:00:00 2001 From: Trixi Turny Date: Sun, 22 Aug 2021 22:08:17 +0100 Subject: [PATCH 07/42] BAEL-5054 throw ServiceException when not OK BAEL-5054 fix test name and tidy indent BAEL-5054 remove unnecessary changes BAEL-5054 restore main class name BAEL-5054 rename test to end with UnitTest --- spring-5-reactive-client/pom.xml | 2 +- .../com/baeldung/reactive/Application.java | 12 ----- .../reactive/controller/UploadController.java | 17 ------ .../reactive/exception/ServiceException.java | 8 +++ .../service/ReactiveUploadService.java | 53 +++++++++---------- .../src/main/resources/application.properties | 2 +- .../ReactiveUploadServiceUnitTest.java | 44 +++++++++++++++ 7 files changed, 79 insertions(+), 59 deletions(-) delete mode 100644 spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java create mode 100644 spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java create mode 100644 spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java diff --git a/spring-5-reactive-client/pom.xml b/spring-5-reactive-client/pom.xml index 6a0a2d6fe3..136f31b49e 100644 --- a/spring-5-reactive-client/pom.xml +++ b/spring-5-reactive-client/pom.xml @@ -133,7 +133,7 @@ org.springframework.boot spring-boot-maven-plugin - com.baeldung.reactive.Application + com.baeldung.Spring5Application JAR diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java deleted file mode 100644 index 65e497b519..0000000000 --- a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/Application.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.reactive; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Application { - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} - diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java index 71cea35685..08d6ff55ef 100644 --- a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java @@ -27,21 +27,4 @@ public class UploadController { public Mono uploadMultipart(@RequestParam("file") final MultipartFile multipartFile) { return uploadService.uploadMultipart(multipartFile); } - - - /** - * Fake upload endpoint returning "OK" HttpStatus - * @return "OK" HttpStatus - */ - @PostMapping(path = "/external/upload") - @ResponseBody - public HttpStatus externalUpload() { - return HttpStatus.OK; - } - - @GetMapping("/trixi") - public String returnTrixi() { - return "Trixi"; - - } } diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java new file mode 100644 index 0000000000..cd639ec1f9 --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java @@ -0,0 +1,8 @@ +package com.baeldung.reactive.exception; + +public class ServiceException extends RuntimeException{ + + public ServiceException(String message) { + super(message); + } +} diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java index e31674282b..11409ce986 100644 --- a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java @@ -1,6 +1,7 @@ package com.baeldung.reactive.service; +import com.baeldung.reactive.exception.ServiceException; import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -20,50 +21,46 @@ public class ReactiveUploadService { private final WebClient webClient; private static final String EXTERNAL_UPLOAD_URL = "http://localhost:8080/external/upload"; - public ReactiveUploadService() { - this.webClient = WebClient.create(); + public ReactiveUploadService(final WebClient webClient) { + this.webClient = webClient; } - public Mono uploadPdf(final Resource resource){ + public Mono uploadPdf(final Resource resource) { final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); Mono httpStatusMono = webClient.post() - .uri(url) - .contentType(MediaType.APPLICATION_PDF) - .body(BodyInserters.fromResource(resource)) - .exchangeToMono(response -> { - if (response.statusCode().equals(HttpStatus.OK)) { - return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); - } else { - System.out.println("Failed to upload pdf. " + response.statusCode()); - } - return null; - }); + .uri(url) + .contentType(MediaType.APPLICATION_PDF) + .body(BodyInserters.fromResource(resource)) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } + }); return httpStatusMono; } - public Mono uploadMultipart(final MultipartFile multipartFile){ + public Mono uploadMultipart(final MultipartFile multipartFile) { final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); final MultipartBodyBuilder builder = new MultipartBodyBuilder(); builder.part("file", multipartFile.getResource()); Mono httpStatusMono = webClient.post() - .uri(url) - .contentType(MediaType.MULTIPART_FORM_DATA) - .body(BodyInserters.fromMultipartData(builder.build())) - .exchangeToMono(response -> { - if (response.statusCode().equals(HttpStatus.OK)) { - return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); - } else { - System.out.println("Failed to upload pdf. " + response.statusCode()); - } - return null; - }); + .uri(url) + .contentType(MediaType.MULTIPART_FORM_DATA) + .body(BodyInserters.fromMultipartData(builder.build())) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } + }); return httpStatusMono; } - - } diff --git a/spring-5-reactive-client/src/main/resources/application.properties b/spring-5-reactive-client/src/main/resources/application.properties index 7859537230..05033054b1 100644 --- a/spring-5-reactive-client/src/main/resources/application.properties +++ b/spring-5-reactive-client/src/main/resources/application.properties @@ -1,5 +1,5 @@ logging.level.root=INFO -server.port=8080 +server.port=8081 logging.level.reactor.netty.http.client.HttpClient=DEBUG \ No newline at end of file diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java new file mode 100644 index 0000000000..0ca59848d7 --- /dev/null +++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java @@ -0,0 +1,44 @@ +package com.baeldung.reactive.service; + +import org.junit.jupiter.api.Test; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class ReactiveUploadServiceUnitTest { + + private static final String BASE_URL = "http://localhost:8080/external/upload"; + + final WebClient webClientMock = WebClient.builder().baseUrl(BASE_URL) + .exchangeFunction(clientRequest -> Mono.just(ClientResponse.create(HttpStatus.OK) + .header("content-type", "application/json") + .build())) + .build(); + + private final ReactiveUploadService tested = new ReactiveUploadService(webClientMock); + + @Test + void givenAPdf_whenUploadingWithWebClient_thenOK() { + final Resource file = mock(Resource.class); + final Mono result = tested.uploadPdf(file); + final HttpStatus status = result.block(); + assertThat(status).isEqualTo(HttpStatus.OK); + } + + @Test + void givenAMultipartPdf_whenUploadingWithWebClient_thenOK() { + final Resource file = mock(Resource.class); + final MultipartFile multipartFile = mock(MultipartFile.class); + when(multipartFile.getResource()).thenReturn(file); + final Mono result = tested.uploadMultipart(multipartFile); + final HttpStatus status = result.block(); + assertThat(status).isEqualTo(HttpStatus.OK); + } +} \ No newline at end of file From 06adaba4bff95db43cd45eac8b7b3ea7a35a8067 Mon Sep 17 00:00:00 2001 From: mikr Date: Tue, 31 Aug 2021 14:54:12 +0200 Subject: [PATCH 08/42] JAVA-6006 Upgrade Spring 5 Webflux module --- spring-5-webflux/pom.xml | 4 -- .../rsocket/client/ClientConfiguration.java | 31 ++++++++-------- .../CustomNettyWebServerFactory.java | 9 ++--- .../MarketDataRSocketControllerLiveTest.java | 37 ++++++++++++------- 4 files changed, 42 insertions(+), 39 deletions(-) diff --git a/spring-5-webflux/pom.xml b/spring-5-webflux/pom.xml index ad1a66943c..b37e93ded8 100644 --- a/spring-5-webflux/pom.xml +++ b/spring-5-webflux/pom.xml @@ -65,8 +65,4 @@ - - 2.3.3.RELEASE - - \ No newline at end of file diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java index abfe2e7807..2e2c309240 100644 --- a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java @@ -1,30 +1,29 @@ package com.baeldung.spring.rsocket.client; -import io.rsocket.RSocket; -import io.rsocket.RSocketFactory; -import io.rsocket.frame.decoder.PayloadDecoder; -import io.rsocket.transport.netty.client.TcpClientTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.rsocket.RSocketRequester; -import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.util.MimeTypeUtils; +import reactor.util.retry.Retry; + +import java.time.Duration; @Configuration public class ClientConfiguration { @Bean - public RSocket rSocket() { - return RSocketFactory.connect() - .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) - .frameDecoder(PayloadDecoder.ZERO_COPY) - .transport(TcpClientTransport.create(7000)) - .start() - .block(); - } + public RSocketRequester getRSocketRequester(){ - @Bean - RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) { - return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); + RSocketRequester.Builder builder = RSocketRequester.builder(); + + return builder + .rsocketConnector( + rSocketConnector -> + rSocketConnector.reconnect( + Retry.fixedDelay(2, Duration.ofSeconds(2)) + ) + ) + .dataMimeType(MimeTypeUtils.APPLICATION_JSON) + .tcp("localhost", 7000); } } diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java b/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java index f9de3b4006..2d11a51160 100644 --- a/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java @@ -25,12 +25,9 @@ public class CustomNettyWebServerFactory { @Override public HttpServer apply(HttpServer httpServer) { - EventLoopGroup parentGroup = new NioEventLoopGroup(); - EventLoopGroup childGroup = new NioEventLoopGroup(); - return httpServer - .tcpConfiguration(tcpServer -> tcpServer.bootstrap( - serverBootstrap -> serverBootstrap.group(parentGroup, childGroup).channel(NioServerSocketChannel.class) - )); + EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + eventLoopGroup.register(new NioServerSocketChannel()); + return httpServer.runOn(eventLoopGroup); } } } diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java index 40ddc732ac..7d8ed1f22d 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java @@ -1,15 +1,8 @@ package com.baeldung.spring.rsocket.server; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; - import com.baeldung.spring.rsocket.model.MarketData; import com.baeldung.spring.rsocket.model.MarketDataRequest; import io.rsocket.RSocket; -import io.rsocket.RSocketFactory; -import io.rsocket.frame.decoder.PayloadDecoder; -import io.rsocket.transport.netty.client.TcpClientTransport; -import java.time.Duration; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +16,12 @@ import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.MimeTypeUtils; +import reactor.util.retry.Retry; + +import java.time.Duration; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; @RunWith(SpringRunner.class) @SpringBootTest @@ -81,12 +80,24 @@ public class MarketDataRSocketControllerLiveTest { @Bean @Lazy public RSocket rSocket() { - return RSocketFactory.connect() - .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) - .frameDecoder(PayloadDecoder.ZERO_COPY) - .transport(TcpClientTransport.create(7000)) - .start() - .block(); + + RSocketRequester.Builder builder = RSocketRequester.builder(); + + return builder + .rsocketConnector( + rSocketConnector -> + rSocketConnector.reconnect(Retry.fixedDelay(2, Duration.ofSeconds(2)))) + .dataMimeType(MimeTypeUtils.APPLICATION_JSON) + .tcp("localhost", 7000) + .rsocket(); +// .connec/t(TcpClientTransport.create(6565)); + +// return RSocketFactory.connect() +// .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) +// .frameDecoder(PayloadDecoder.ZERO_COPY) +// .transport(TcpClientTransport.create(7000)) +// .start() +// .block(); } @Bean From 69d65ee12afde97ba354defb6652703d8c69b677 Mon Sep 17 00:00:00 2001 From: mikr Date: Thu, 2 Sep 2021 09:16:14 +0200 Subject: [PATCH 09/42] JAVA-6006 Remove commented code --- .../server/MarketDataRSocketControllerLiveTest.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java index 7d8ed1f22d..98d604b178 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java @@ -90,14 +90,6 @@ public class MarketDataRSocketControllerLiveTest { .dataMimeType(MimeTypeUtils.APPLICATION_JSON) .tcp("localhost", 7000) .rsocket(); -// .connec/t(TcpClientTransport.create(6565)); - -// return RSocketFactory.connect() -// .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) -// .frameDecoder(PayloadDecoder.ZERO_COPY) -// .transport(TcpClientTransport.create(7000)) -// .start() -// .block(); } @Bean From 0595a3506213ca0c18dd2dbcd2a23d8b85848bce Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Thu, 2 Sep 2021 23:21:16 +0530 Subject: [PATCH 10/42] JAVA-6303: Update "Jackson Inheritance" article --- .../inheritance/SubTypeHandlingUnitTest.java | 41 +++++++++++++------ .../TypeInfoInclusionUnitTest.java | 8 +++- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java index b5b81fa4a3..9c065bcc7c 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java @@ -1,14 +1,22 @@ package com.baeldung.jackson.inheritance; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.junit.Test; -import java.util.List; -import java.util.ArrayList; -import java.io.IOException; - +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Car; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Fleet; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Truck; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Vehicle; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; public class SubTypeHandlingUnitTest { @Test @@ -23,21 +31,30 @@ public class SubTypeHandlingUnitTest { } @Test - public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { + public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() + .allowIfSubType("com.baeldung.jackson.inheritance") + .allowIfSubType("java.util.ArrayList") + .build(); + mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL); + + Car car = new Car("Mercedes-Benz", "S500", 5, 250.0); + Truck truck = new Truck("Isuzu", "NQR", 7500.0); - SubTypeConstructorStructure.Car car = new SubTypeConstructorStructure.Car("Mercedes-Benz", "S500", 5, 250.0); - SubTypeConstructorStructure.Truck truck = new SubTypeConstructorStructure.Truck("Isuzu", "NQR", 7500.0); - - List vehicles = new ArrayList<>(); + List vehicles = new ArrayList<>(); vehicles.add(car); vehicles.add(truck); - SubTypeConstructorStructure.Fleet serializedFleet = new SubTypeConstructorStructure.Fleet(); + Fleet serializedFleet = new Fleet(); serializedFleet.setVehicles(vehicles); String jsonDataString = mapper.writeValueAsString(serializedFleet); - mapper.readValue(jsonDataString, SubTypeConstructorStructure.Fleet.class); + mapper.readValue(jsonDataString, Fleet.class); + + Fleet deserializedFleet = mapper.readValue(jsonDataString, Fleet.class); + + assertThat(deserializedFleet.getVehicles().get(0), instanceOf(Car.class)); + assertThat(deserializedFleet.getVehicles().get(1), instanceOf(Truck.class)); } } \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java index 02297b9ee8..ca057edadc 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java @@ -10,12 +10,18 @@ import java.util.ArrayList; import java.io.IOException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; public class TypeInfoInclusionUnitTest { @Test public void givenTypeInfo_whenAnnotatingGlobally_thenTypesAreCorrectlyRecovered() throws IOException { ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() + .allowIfSubType("com.baeldung.jackson.inheritance") + .allowIfSubType("java.util.ArrayList") + .build(); + mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL); TypeInfoStructure.Car car = new TypeInfoStructure.Car("Mercedes-Benz", "S500", 5, 250.0); TypeInfoStructure.Truck truck = new TypeInfoStructure.Truck("Isuzu", "NQR", 7500.0); From d600970b66f415fc7c2edfa6523e31ea337a522e Mon Sep 17 00:00:00 2001 From: Azhwani Date: Sat, 4 Sep 2021 20:15:52 +0200 Subject: [PATCH 11/42] Add test case --- .../InventoryRepositoryIntegrationTest.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java index 22e2c81739..e4bd3dabff 100644 --- a/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java @@ -3,20 +3,23 @@ package com.baeldung.boot.daos; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.math.BigDecimal; +import java.util.Optional; 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 com.baeldung.Application; import com.baeldung.boot.domain.MerchandiseEntity; @RunWith(SpringRunner.class) -@SpringBootTest(classes=Application.class) +@SpringBootTest(classes = Application.class) public class InventoryRepositoryIntegrationTest { private static final String ORIGINAL_TITLE = "Pair of Pants"; @@ -58,4 +61,28 @@ public class InventoryRepositoryIntegrationTest { assertEquals(BigDecimal.TEN, result.getPrice()); assertEquals(UPDATED_BRAND, result.getBrand()); } + + @Test + @Transactional + public void shouldUpdateExistingEntryInDBWithoutSave() { + MerchandiseEntity pants = new MerchandiseEntity(ORIGINAL_TITLE, BigDecimal.ONE); + pants = repository.save(pants); + + Long originalId = pants.getId(); + + // Update using setters + pants.setTitle(UPDATED_TITLE); + pants.setPrice(BigDecimal.TEN); + pants.setBrand(UPDATED_BRAND); + + Optional resultOp = repository.findById(originalId); + + assertTrue(resultOp.isPresent()); + MerchandiseEntity result = resultOp.get(); + + assertEquals(originalId, result.getId()); + assertEquals(UPDATED_TITLE, result.getTitle()); + assertEquals(BigDecimal.TEN, result.getPrice()); + assertEquals(UPDATED_BRAND, result.getBrand()); + } } From 439848c1659da015d6ed55e18313b0916330b11f Mon Sep 17 00:00:00 2001 From: Trixi Turny Date: Sun, 5 Sep 2021 12:55:26 +0200 Subject: [PATCH 12/42] BAEL-5054 fix indentations --- .../service/ReactiveUploadService.java | 20 +++++++++---------- .../ReactiveUploadServiceUnitTest.java | 8 ++++++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java index 11409ce986..a12d54960a 100644 --- a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java @@ -34,11 +34,11 @@ public class ReactiveUploadService { .contentType(MediaType.APPLICATION_PDF) .body(BodyInserters.fromResource(resource)) .exchangeToMono(response -> { - if (response.statusCode().equals(HttpStatus.OK)) { - return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); - } else { - throw new ServiceException("Error uploading file"); - } + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } }); return httpStatusMono; } @@ -55,11 +55,11 @@ public class ReactiveUploadService { .contentType(MediaType.MULTIPART_FORM_DATA) .body(BodyInserters.fromMultipartData(builder.build())) .exchangeToMono(response -> { - if (response.statusCode().equals(HttpStatus.OK)) { - return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); - } else { - throw new ServiceException("Error uploading file"); - } + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } }); return httpStatusMono; } diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java index 0ca59848d7..40c1e40d92 100644 --- a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java +++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java @@ -18,8 +18,8 @@ class ReactiveUploadServiceUnitTest { final WebClient webClientMock = WebClient.builder().baseUrl(BASE_URL) .exchangeFunction(clientRequest -> Mono.just(ClientResponse.create(HttpStatus.OK) - .header("content-type", "application/json") - .build())) + .header("content-type", "application/json") + .build())) .build(); private final ReactiveUploadService tested = new ReactiveUploadService(webClientMock); @@ -27,8 +27,10 @@ class ReactiveUploadServiceUnitTest { @Test void givenAPdf_whenUploadingWithWebClient_thenOK() { final Resource file = mock(Resource.class); + final Mono result = tested.uploadPdf(file); final HttpStatus status = result.block(); + assertThat(status).isEqualTo(HttpStatus.OK); } @@ -37,8 +39,10 @@ class ReactiveUploadServiceUnitTest { final Resource file = mock(Resource.class); final MultipartFile multipartFile = mock(MultipartFile.class); when(multipartFile.getResource()).thenReturn(file); + final Mono result = tested.uploadMultipart(multipartFile); final HttpStatus status = result.block(); + assertThat(status).isEqualTo(HttpStatus.OK); } } \ No newline at end of file From a7fa2acb20cc91220d4029663f044e230752d497 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Sun, 5 Sep 2021 17:08:06 +0530 Subject: [PATCH 13/42] JAVA-6439: Check PR for spring-security-web-sockets module --- .../spring-security-web-sockets/README.md | 4 ++-- .../spring-security-web-sockets/pom.xml | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-security-modules/spring-security-web-sockets/README.md b/spring-security-modules/spring-security-web-sockets/README.md index 76717e2fe6..12f7a6ad56 100644 --- a/spring-security-modules/spring-security-web-sockets/README.md +++ b/spring-security-modules/spring-security-web-sockets/README.md @@ -10,8 +10,8 @@ This module contains articles about WebSockets with Spring Security ### Running This Project: -To build the project, run the command: mvn clean install. This will build a war file in the target folder that you can deploye on a server like Tomcat. +To build the project, run the command: `mvn clean install`. This will build a war file in the target folder that you can deploye on a server like Tomcat. -Alternatively, run the project from an IDE. +Alternatively, run the project from an IDE, with the maven goal `org.codehaus.cargo:cargo-maven2-plugin:run` To login, use credentials from the data.sql file in src/main/resource, eg: user/password. diff --git a/spring-security-modules/spring-security-web-sockets/pom.xml b/spring-security-modules/spring-security-web-sockets/pom.xml index b1536e88ea..db0d280da8 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -155,11 +155,14 @@ spring-security-web-sockets - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 + org.codehaus.cargo + cargo-maven2-plugin + 1.7.6 - /spring-security-mvc-socket + + tomcat9x + embedded + From 90c48445d32308ef329fb8477ec7c2c66db6b527 Mon Sep 17 00:00:00 2001 From: mikr Date: Tue, 7 Sep 2021 23:27:46 +0200 Subject: [PATCH 14/42] JAVA-6006 Remove @ignore in test --- .../java/com/baeldung/apache/beam/intro/WordCountUnitTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java index 805f79742d..77287066ac 100644 --- a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java +++ b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java @@ -9,8 +9,7 @@ import com.baeldung.apache.beam.intro.WordCount; public class WordCountUnitTest { -// @Test - @Ignore + @Test public void givenInputFile_whenWordCountRuns_thenJobFinishWithoutError() { boolean jobDone = WordCount.wordCount("src/test/resources/wordcount.txt", "target/output"); assertTrue(jobDone); From 540690b06e52beb7d7d878a909a823d60a50e319 Mon Sep 17 00:00:00 2001 From: polomos Date: Wed, 8 Sep 2021 14:59:09 +0200 Subject: [PATCH 15/42] BAEL-4266 Test default cryptography strength (#11155) --- .../CryptographyStrengthUnitTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java diff --git a/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java new file mode 100644 index 0000000000..5d5c30dc34 --- /dev/null +++ b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.cryptography; + +import org.junit.Test; + +import java.security.NoSuchAlgorithmException; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CryptographyStrengthUnitTest { + private static final int UNLIMITED_KEY_SIZE = 2147483647; + + @Test + public void whenDefaultCheck_thenUnlimitedReturned() throws NoSuchAlgorithmException { + int maxKeySize = javax.crypto.Cipher.getMaxAllowedKeyLength("AES"); + assertThat(maxKeySize).isEqualTo(UNLIMITED_KEY_SIZE); + } +} From d85f4ef8b4b1334a609f1b83e22481f6883c1bae Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:31:47 +0800 Subject: [PATCH 16/42] Update README.md --- kubernetes/k8s-admission-controller/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/kubernetes/k8s-admission-controller/README.md b/kubernetes/k8s-admission-controller/README.md index c446ab403d..9c824d76b3 100644 --- a/kubernetes/k8s-admission-controller/README.md +++ b/kubernetes/k8s-admission-controller/README.md @@ -1,3 +1,4 @@ ## Relevant Articles: - [Creating a Kubertes Admission Controller in Java](https://www.baeldung.com/java-kubernetes-admission-controller) +- [Access Control Models](https://www.baeldung.com/java-access-control-models) From 7a0c377fe5bcf2a7d8e47898e63e374e71c3cbfc Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:35:27 +0800 Subject: [PATCH 17/42] Update README.md --- spring-websockets/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-websockets/README.md b/spring-websockets/README.md index 9cc84f0fda..7d69c21b78 100644 --- a/spring-websockets/README.md +++ b/spring-websockets/README.md @@ -6,3 +6,4 @@ This module contains articles about Spring WebSockets. - [Intro to WebSockets with Spring](https://www.baeldung.com/websockets-spring) - [A Quick Example of Spring Websockets’ @SendToUser Annotation](https://www.baeldung.com/spring-websockets-sendtouser) - [Scheduled WebSocket Push with Spring Boot](https://www.baeldung.com/spring-boot-scheduled-websocket) +- [Test WebSocket APIs With Postman](https://www.baeldung.com/postman-websocket-apis) From ba840cd65521e84e519bd2bc9859613d06fb6f5f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:40:12 +0800 Subject: [PATCH 18/42] 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 2e76ab5d51..0dc9ad9f70 100644 --- a/core-java-modules/core-java-networking-3/README.md +++ b/core-java-modules/core-java-networking-3/README.md @@ -8,4 +8,5 @@ This module contains articles about networking in Java - [Downloading Email Attachments in Java](https://www.baeldung.com/java-download-email-attachments) - [Connection Timeout vs. Read Timeout for Java Sockets](https://www.baeldung.com/java-socket-connection-read-timeout) - [Find Whether an IP Address Is in the Specified Range or Not in Java](https://www.baeldung.com/java-check-ip-address-range) +- [Find the IP Address of a Client Connected to a Server](https://www.baeldung.com/java-client-get-ip-address) - [[<-- Prev]](/core-java-modules/core-java-networking-2) From 7fe837abd2a28e96fbda73a3d6311a8ea224c5fa Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 9 Sep 2021 00:43:30 +0800 Subject: [PATCH 19/42] 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 d517c55d7a..202c97a830 100644 --- a/persistence-modules/java-jpa-3/README.md +++ b/persistence-modules/java-jpa-3/README.md @@ -14,3 +14,4 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [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) - [How to Check Field Existence in MongoDB?](https://www.baeldung.com/mongodb-check-field-exists) +- [Connecting to a Specific Schema in JDBC](https://www.baeldung.com/jdbc-connect-to-schema) From e45023ec07307b3f09d5e736957c2b87f40932e1 Mon Sep 17 00:00:00 2001 From: vaibhav007jain <72961247+vaibhav007jain@users.noreply.github.com> Date: Fri, 10 Sep 2021 06:35:29 +0530 Subject: [PATCH 20/42] BAEL-5071 (#11171) * commited initial code for hexagonal architecture * Deleting to check in again * Deleing to check in again * Push first code for Hexagonal Architecture * final code with UT for JSON to Java conversion * removed hexagonal-architecture code from last commit * BEL-5071 updated README * BAEL-5071: Undo README changes and added a nested object in the JSON example. * BAEL-5071: fixed whitespace/indentation in JsonToJavaClassConversion.java Co-authored-by: Vaibhav Jain --- .../JsonToJavaClassConversion.java | 20 +- .../jsontojavaclass/pojo/SamplePojo.java | 53 +++-- .../jsontojavaclass/pojo/Address.java | 119 ++++++++++ .../baeldung/jsontojavaclass/pojo/Input.java | 213 ++++++++++++++++++ json-2/src/main/resources/input.json | 16 ++ .../JsonToJavaClassConversionUnitTest.java | 14 +- .../jsontojavaclass/pojo/SamplePojo.java | 213 ++++++++++++++++++ 7 files changed, 611 insertions(+), 37 deletions(-) create mode 100644 json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java create mode 100644 json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java create mode 100644 json-2/src/main/resources/input.json create mode 100644 json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java index 65eecd0d38..1b18463856 100644 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java +++ b/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java @@ -17,7 +17,22 @@ import com.sun.codemodel.JCodeModel; public class JsonToJavaClassConversion { - public Object convertJsonToJavaClass(URL inputJson, File outputJavaClassDirectory, String packageName, String className) throws IOException { + public static void main(String[] args) { + String packageName = "com.baeldung.jsontojavaclass.pojo"; + String basePath = "src/main/resources"; + File inputJson = new File(basePath + File.separator + "input.json"); + File outputPojoDirectory = new File(basePath + File.separator + "convertedPojo"); + outputPojoDirectory.mkdirs(); + try { + new JsonToJavaClassConversion().convertJsonToJavaClass(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", "")); + } catch (IOException e) { + System.out.println("Encountered issue while converting to pojo: " + e.getMessage()); + e.printStackTrace(); + } + } + + + public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) throws IOException { JCodeModel jcodeModel = new JCodeModel(); GenerationConfig config = new DefaultGenerationConfig() { @@ -33,10 +48,9 @@ public class JsonToJavaClassConversion { }; SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator()); - mapper.generate(jcodeModel, className, packageName, inputJson); + mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl); jcodeModel.build(outputJavaClassDirectory); - return mapper; } } diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java index 4c8a719de0..38ebb8a0f8 100644 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java +++ b/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -5,9 +5,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.annotation.Generated; - import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -16,7 +14,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ "name", "area", "author", "id", "salary", "topics" }) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) @Generated("jsonschema2pojo") public class SamplePojo { @@ -143,40 +148,37 @@ public class SamplePojo { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append(SamplePojo.class.getName()) - .append('@') - .append(Integer.toHexString(System.identityHashCode(this))) - .append('['); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); sb.append("name"); sb.append('='); - sb.append(((this.name == null) ? "" : this.name)); + sb.append(((this.name == null)?"":this.name)); sb.append(','); sb.append("area"); sb.append('='); - sb.append(((this.area == null) ? "" : this.area)); + sb.append(((this.area == null)?"":this.area)); sb.append(','); sb.append("author"); sb.append('='); - sb.append(((this.author == null) ? "" : this.author)); + sb.append(((this.author == null)?"":this.author)); sb.append(','); sb.append("id"); sb.append('='); - sb.append(((this.id == null) ? "" : this.id)); + sb.append(((this.id == null)?"":this.id)); sb.append(','); sb.append("salary"); sb.append('='); - sb.append(((this.salary == null) ? "" : this.salary)); + sb.append(((this.salary == null)?"":this.salary)); sb.append(','); sb.append("topics"); sb.append('='); - sb.append(((this.topics == null) ? "" : this.topics)); + sb.append(((this.topics == null)?"":this.topics)); sb.append(','); sb.append("additionalProperties"); sb.append('='); - sb.append(((this.additionalProperties == null) ? "" : this.additionalProperties)); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); sb.append(','); - if (sb.charAt((sb.length() - 1)) == ',') { - sb.setCharAt((sb.length() - 1), ']'); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); } else { sb.append(']'); } @@ -186,13 +188,13 @@ public class SamplePojo { @Override public int hashCode() { int result = 1; - result = ((result * 31) + ((this.area == null) ? 0 : this.area.hashCode())); - result = ((result * 31) + ((this.author == null) ? 0 : this.author.hashCode())); - result = ((result * 31) + ((this.topics == null) ? 0 : this.topics.hashCode())); - result = ((result * 31) + ((this.name == null) ? 0 : this.name.hashCode())); - result = ((result * 31) + ((this.id == null) ? 0 : this.id.hashCode())); - result = ((result * 31) + ((this.additionalProperties == null) ? 0 : this.additionalProperties.hashCode())); - result = ((result * 31) + ((this.salary == null) ? 0 : this.salary.hashCode())); + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); return result; } @@ -205,10 +207,7 @@ public class SamplePojo { return false; } SamplePojo rhs = ((SamplePojo) other); - return ((((((((this.area == rhs.area) || ((this.area != null) && this.area.equals(rhs.area))) && ((this.author == rhs.author) || ((this.author != null) && this.author.equals(rhs.author)))) - && ((this.topics == rhs.topics) || ((this.topics != null) && this.topics.equals(rhs.topics)))) && ((this.name == rhs.name) || ((this.name != null) && this.name.equals(rhs.name)))) - && ((this.id == rhs.id) || ((this.id != null) && this.id.equals(rhs.id)))) && ((this.additionalProperties == rhs.additionalProperties) || ((this.additionalProperties != null) && this.additionalProperties.equals(rhs.additionalProperties)))) - && ((this.salary == rhs.salary) || ((this.salary != null) && this.salary.equals(rhs.salary)))); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); } } diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java new file mode 100644 index 0000000000..e3d901edf4 --- /dev/null +++ b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java @@ -0,0 +1,119 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "city", + "country" +}) +@Generated("jsonschema2pojo") +public class Address { + + @JsonProperty("city") + private String city; + @JsonProperty("country") + private String country; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("city") + public String getCity() { + return city; + } + + @JsonProperty("city") + public void setCity(String city) { + this.city = city; + } + + public Address withCity(String city) { + this.city = city; + return this; + } + + @JsonProperty("country") + public String getCountry() { + return country; + } + + @JsonProperty("country") + public void setCountry(String country) { + this.country = country; + } + + public Address withCountry(String country) { + this.country = country; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Address withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Address.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("city"); + sb.append('='); + sb.append(((this.city == null)?"":this.city)); + sb.append(','); + sb.append("country"); + sb.append('='); + sb.append(((this.country == null)?"":this.country)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.country == null)? 0 :this.country.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.city == null)? 0 :this.city.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Address) == false) { + return false; + } + Address rhs = ((Address) other); + return ((((this.country == rhs.country)||((this.country!= null)&&this.country.equals(rhs.country)))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.city == rhs.city)||((this.city!= null)&&this.city.equals(rhs.city)))); + } + +} diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java new file mode 100644 index 0000000000..19bee8db4d --- /dev/null +++ b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "topics", + "address" +}) +@Generated("jsonschema2pojo") +public class Input { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonProperty("address") + private Address address; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public Input withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public Input withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public Input withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public Input withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public Input withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonProperty("address") + public Address getAddress() { + return address; + } + + @JsonProperty("address") + public void setAddress(Address address) { + this.address = address; + } + + public Input withAddress(Address address) { + this.address = address; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Input withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Input.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("address"); + sb.append('='); + sb.append(((this.address == null)?"":this.address)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Input) == false) { + return false; + } + Input rhs = ((Input) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address))))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties)))); + } + +} diff --git a/json-2/src/main/resources/input.json b/json-2/src/main/resources/input.json new file mode 100644 index 0000000000..22706ede53 --- /dev/null +++ b/json-2/src/main/resources/input.json @@ -0,0 +1,16 @@ +{ + "name": "Baeldung", + "area": "tech blogs", + "author": "Eugen", + "id": 32134, + "topics": [ + "java", + "kotlin", + "cs", + "linux" + ], + "address": { + "city": "Bucharest", + "country": "Romania" + } +} \ No newline at end of file diff --git a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java b/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java index 8dbfb14b45..f8000fa6fb 100644 --- a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java +++ b/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java @@ -3,6 +3,7 @@ package com.baeldung.jsontojavaclass; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; +import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,17 +22,16 @@ class JsonToJavaClassConversionUnitTest { File inputJson = new File(jsonPath + "sample_input.json"); // create the local directory for generating the Java Class file - String outputPath = "src/main/java/"; + String outputPath = "src/test/resources/"; File outputJavaClassDirectory = new File(outputPath); - outputJavaClassDirectory.mkdirs(); - String className = "SamplePojo"; + String javaClassName = "SamplePojo"; - Object object = jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() - .toURL(), outputJavaClassDirectory, packageName, className); - System.out.println(object); + jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() + .toURL(), outputJavaClassDirectory, packageName, javaClassName); - Assertions.assertNotNull(object); + File outputJavaClassPath = new File(outputPath + packageName.replace(".", "/")); + Assertions.assertTrue(Arrays.stream(outputJavaClassPath.listFiles()).peek(System.out::println).anyMatch(file -> (javaClassName+".java").equalsIgnoreCase(file.getName()))); } diff --git a/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java new file mode 100644 index 0000000000..38ebb8a0f8 --- /dev/null +++ b/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) +@Generated("jsonschema2pojo") +public class SamplePojo { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("salary") + private Integer salary; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public SamplePojo withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public SamplePojo withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public SamplePojo withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public SamplePojo withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("salary") + public Integer getSalary() { + return salary; + } + + @JsonProperty("salary") + public void setSalary(Integer salary) { + this.salary = salary; + } + + public SamplePojo withSalary(Integer salary) { + this.salary = salary; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public SamplePojo withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public SamplePojo withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("salary"); + sb.append('='); + sb.append(((this.salary == null)?"":this.salary)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof SamplePojo) == false) { + return false; + } + SamplePojo rhs = ((SamplePojo) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); + } + +} From 8542ba368a7b462d3d63a7eff4b41bbd2ae86092 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Sat, 11 Sep 2021 14:57:21 +0530 Subject: [PATCH 21/42] JAVA-6303: corrected formatting --- .../jackson/inheritance/SubTypeHandlingUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java index 9c065bcc7c..8d6bc9ad6a 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java @@ -34,9 +34,9 @@ public class SubTypeHandlingUnitTest { public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { ObjectMapper mapper = new ObjectMapper(); PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() - .allowIfSubType("com.baeldung.jackson.inheritance") - .allowIfSubType("java.util.ArrayList") - .build(); + .allowIfSubType("com.baeldung.jackson.inheritance") + .allowIfSubType("java.util.ArrayList") + .build(); mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL); Car car = new Car("Mercedes-Benz", "S500", 5, 250.0); From f8bea1acc2e1d871e6cbdb1148f851d798ed885e Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Sat, 11 Sep 2021 15:05:02 +0530 Subject: [PATCH 22/42] JAVA-6439: review comments incorporated --- spring-security-modules/spring-security-web-sockets/README.md | 2 +- spring-security-modules/spring-security-web-sockets/pom.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-security-modules/spring-security-web-sockets/README.md b/spring-security-modules/spring-security-web-sockets/README.md index 12f7a6ad56..34e06fa832 100644 --- a/spring-security-modules/spring-security-web-sockets/README.md +++ b/spring-security-modules/spring-security-web-sockets/README.md @@ -10,7 +10,7 @@ This module contains articles about WebSockets with Spring Security ### Running This Project: -To build the project, run the command: `mvn clean install`. This will build a war file in the target folder that you can deploye on a server like Tomcat. +To build the project, run the command: `mvn clean install`. This will build a war file in the target folder that you can deploy on a server like Tomcat. Alternatively, run the project from an IDE, with the maven goal `org.codehaus.cargo:cargo-maven2-plugin:run` diff --git a/spring-security-modules/spring-security-web-sockets/pom.xml b/spring-security-modules/spring-security-web-sockets/pom.xml index db0d280da8..7b7a5e4659 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -157,7 +157,7 @@ org.codehaus.cargo cargo-maven2-plugin - 1.7.6 + ${cargo-maven2-plugin.version} tomcat9x @@ -182,6 +182,7 @@ 1.11.3.RELEASE 1.2.3 1.5.10.RELEASE + 1.7.6 \ No newline at end of file From 0c366f322041d311e405fcd1730f2b32dd651e49 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 13 Sep 2021 20:04:10 +0530 Subject: [PATCH 23/42] JAVA-2800 : Upgrade spring-cloud-connectors-heroku to the latest Spring Boot version --- spring-cloud/spring-cloud-connectors-heroku/pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-cloud/spring-cloud-connectors-heroku/pom.xml b/spring-cloud/spring-cloud-connectors-heroku/pom.xml index e02da23f6c..24f9de1fc3 100644 --- a/spring-cloud/spring-cloud-connectors-heroku/pom.xml +++ b/spring-cloud/spring-cloud-connectors-heroku/pom.xml @@ -16,9 +16,10 @@ - + org.springframework.boot spring-boot-starter-cloud-connectors + ${spring-boot-starter-cloud-connectors.version} org.springframework.boot @@ -56,9 +57,9 @@ - 2.2.6.RELEASE + 2.2.6.RELEASE Hoxton.SR4 42.2.10 - \ No newline at end of file + From 141a837679a0e32ca2191ebd1e550b4979a29464 Mon Sep 17 00:00:00 2001 From: Krzysztof Majewski Date: Mon, 13 Sep 2021 17:18:32 +0200 Subject: [PATCH 24/42] BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ (#11209) * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ - add tests * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ - add tests * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ - add tests * BAEL-5061 Joinpoint vs. ProceedingJoinPoint in AspectJ - add tests Co-authored-by: majewsk6 --- .../baeldung/joinpoint/ArticleService.java | 32 ++++++++++ .../JoinPointAfterThrowingAspect.java | 27 +++++++++ .../joinpoint/JoinPointAroundCacheAspect.java | 30 ++++++++++ .../JoinPointAroundExceptionAspect.java | 30 ++++++++++ .../joinpoint/JoinPointBeforeAspect.java | 32 ++++++++++ .../ArticleServiceIntegrationTest.java | 39 ++++++++++++ ...intAfterThrowingAspectIntegrationTest.java | 60 +++++++++++++++++++ ...PointAroundCacheAspectIntegrationTest.java | 35 +++++++++++ ...tAroundExceptionAspectIntegrationTest.java | 60 +++++++++++++++++++ .../JoinPointBeforeAspectIntegrationTest.java | 60 +++++++++++++++++++ 10 files changed, 405 insertions(+) create mode 100644 spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java create mode 100644 spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java create mode 100644 spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java create mode 100644 spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java create mode 100644 spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java create mode 100644 spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java create mode 100644 spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java create mode 100644 spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java create mode 100644 spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java create mode 100644 spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java b/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java new file mode 100644 index 0000000000..5a6b5ce63a --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java @@ -0,0 +1,32 @@ +package com.baeldung.joinpoint; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; + +import static java.util.stream.Collectors.toList; + +@Service +public class ArticleService { + + public List getArticleList() { + return Arrays.asList( + "Article 1", + "Article 2" + ); + } + + public List getArticleList(String startsWithFilter) { + if (StringUtils.isBlank(startsWithFilter)) { + throw new IllegalArgumentException("startsWithFilter can't be blank"); + } + + return getArticleList() + .stream() + .filter(a -> a.startsWith(startsWithFilter)) + .collect(toList()); + } + +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java new file mode 100644 index 0000000000..a1f991e90d --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java @@ -0,0 +1,27 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.logging.Logger; + +@Aspect +@Component +public class JoinPointAfterThrowingAspect { + + private static final java.util.logging.Logger log = Logger.getLogger(JoinPointAfterThrowingAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @AfterThrowing( + pointcut = "articleListPointcut()", + throwing = "e" + ) + public void logExceptions(JoinPoint jp, Exception e) { + log.severe(e.getMessage()); + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java new file mode 100644 index 0000000000..dbf2b2e1e4 --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java @@ -0,0 +1,30 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Aspect +@Component +public class JoinPointAroundCacheAspect { + + public final static Map CACHE = new HashMap<>(); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Around("articleListPointcut()") + public Object aroundAdviceCache(ProceedingJoinPoint pjp) throws Throwable { + Object articles = CACHE.get(pjp.getArgs()); + if (articles == null) { + articles = pjp.proceed(pjp.getArgs()); + CACHE.put(pjp.getArgs(), articles); + } + return articles; + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java new file mode 100644 index 0000000000..8d15de150d --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java @@ -0,0 +1,30 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.logging.Logger; + +@Aspect +@Component +public class JoinPointAroundExceptionAspect { + + private static final java.util.logging.Logger log = Logger.getLogger(JoinPointAroundExceptionAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Around("articleListPointcut()") + public Object aroundAdviceException(ProceedingJoinPoint pjp) throws Throwable { + try { + return pjp.proceed(pjp.getArgs()); + } catch (Throwable e) { + log.severe(e.getMessage()); + log.info("Retrying operation"); + return pjp.proceed(pjp.getArgs()); + } + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java new file mode 100644 index 0000000000..4485363ff9 --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java @@ -0,0 +1,32 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.logging.Logger; + +import static java.lang.String.format; + +@Aspect +@Component +public class JoinPointBeforeAspect { + + private static final Logger log = Logger.getLogger(JoinPointBeforeAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Before("articleListPointcut()") + public void beforeAdvice(JoinPoint joinPoint) { + log.info( + format("Method %s executed with %s arguments", + joinPoint.getStaticPart().getSignature(), + Arrays.toString(joinPoint.getArgs()) + ) + ); + } +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java new file mode 100644 index 0000000000..a67b843262 --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java @@ -0,0 +1,39 @@ +package com.baeldung.joinpoint; + +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.SpringJUnit4ClassRunner; + +import java.util.List; + +import static org.junit.Assert.assertFalse; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +public class ArticleServiceIntegrationTest { + + @Autowired + private ArticleService articleService; + + @Test + public void shouldGetNotEmptyArticleList() { + List articleList = articleService.getArticleList(); + + assertFalse(articleList.isEmpty()); + } + + @Test + public void shouldGetNotEmptyArticleListWithStartsWithFilter() { + List articleList = articleService.getArticleList("Article"); + + assertFalse(articleList.isEmpty()); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionIfStartsWithFilterIsBlank() { + articleService.getArticleList(" "); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java new file mode 100644 index 0000000000..cdef76ac0d --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +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.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAfterThrowingAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointAfterThrowingAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test(expected = IllegalArgumentException.class) + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(" "); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("SEVERE startsWithFilter can't be blank")); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java new file mode 100644 index 0000000000..4bd8f2ad8e --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.joinpoint; + +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.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAroundCacheAspectIntegrationTest { + + @Autowired + private ArticleService articleService; + + @Test + public void shouldPopulateCache() { + assertTrue(JoinPointAroundCacheAspect.CACHE.isEmpty()); + + List articles = articleService.getArticleList(); + + assertFalse(JoinPointAroundCacheAspect.CACHE.isEmpty()); + assertEquals(JoinPointAroundCacheAspect.CACHE.size(), 1); + assertEquals(JoinPointAroundCacheAspect.CACHE.values().iterator().next(), articles); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java new file mode 100644 index 0000000000..dbdda30c15 --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +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.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAroundExceptionAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointAroundExceptionAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test(expected = IllegalArgumentException.class) + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(" "); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("INFO Retrying operation")); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java new file mode 100644 index 0000000000..631852d57f --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +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.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointBeforeAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointBeforeAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("INFO Method List com.baeldung.joinpoint.ArticleService.getArticleList() executed with [] arguments")); + } + +} From 6a638120dc5afe2ad88c8066fbd123987df7e3fe Mon Sep 17 00:00:00 2001 From: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> Date: Tue, 14 Sep 2021 03:01:26 +0200 Subject: [PATCH 25/42] Jira BAEL-4211 (#11193) * Init * Removing mvnw files * Apply eclipse code format * Refactoring * Refactoring * BAEL-4211 Add benchmarks * Delete hexagonal directory * Refactoring based on the feedback * Refactoring based on feedback - package rename * Directory rename Co-authored-by: asia --- .../pom.xml | 40 +++++++++++++++++ .../BenchmarkRunner.java | 11 +++++ .../ObjectsCopyBenchmark.java | 42 ++++++++++++++++++ .../PrimitivesCopyBenchmark.java | 43 +++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java create mode 100644 core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java create mode 100644 core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java diff --git a/core-java-modules/core-java-arrays-operations-advanced/pom.xml b/core-java-modules/core-java-arrays-operations-advanced/pom.xml index 5663a7d1ca..065f1930e2 100644 --- a/core-java-modules/core-java-arrays-operations-advanced/pom.xml +++ b/core-java-modules/core-java-arrays-operations-advanced/pom.xml @@ -26,10 +26,50 @@ ${assertj-core.version} test + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + 3.10.0 + 1.33 + + + + maven-assembly-plugin + + + jar-with-dependencies + + + + com.baeldung.copyarraymethodsperformance.BenchmarkRunner + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java new file mode 100644 index 0000000000..0adbcc1986 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java @@ -0,0 +1,11 @@ +package com.baeldung.copyarraymethodsperformance; + +public class BenchmarkRunner { + + public static void main(String[] args) throws Exception { + + org.openjdk.jmh.Main.main(args); + + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java new file mode 100644 index 0000000000..6a492bf0d1 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.copyarraymethodsperformance; + +import org.openjdk.jmh.annotations.*; + +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 10) +@Fork(1) +@Measurement(iterations = 100) +public class ObjectsCopyBenchmark { + + @Param({ "10", "1000000" }) + public int SIZE; + Integer[] src; + + @Setup + public void setup() { + Random r = new Random(); + src = new Integer[SIZE]; + + for (int i = 0; i < SIZE; i++) { + src[i] = r.nextInt(); + } + } + + @Benchmark + public Integer[] systemArrayCopyBenchmark() { + Integer[] target = new Integer[SIZE]; + System.arraycopy(src, 0, target, 0, SIZE); + return target; + } + + @Benchmark + public Integer[] arraysCopyOfBenchmark() { + return Arrays.copyOf(src, SIZE); + } +} diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java new file mode 100644 index 0000000000..767e91a350 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java @@ -0,0 +1,43 @@ +package com.baeldung.copyarraymethodsperformance; + +import org.openjdk.jmh.annotations.*; + +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 10) +@Fork(1) +@Measurement(iterations = 100) +public class PrimitivesCopyBenchmark { + + @Param({ "10", "1000000" }) + public int SIZE; + + int[] src; + + @Setup + public void setup() { + Random r = new Random(); + src = new int[SIZE]; + + for (int i = 0; i < SIZE; i++) { + src[i] = r.nextInt(); + } + } + + @Benchmark + public int[] systemArrayCopyBenchmark() { + int[] target = new int[SIZE]; + System.arraycopy(src, 0, target, 0, SIZE); + return target; + } + + @Benchmark + public int[] arraysCopyOfBenchmark() { + return Arrays.copyOf(src, SIZE); + } +} From 852268910c420a8e4d95ba49ce0997a7a65139ab Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 15 Sep 2021 11:28:50 +0200 Subject: [PATCH 26/42] JAVA-7055: Rollback to Jackson 2.11.1 --- spring-jersey/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-jersey/pom.xml b/spring-jersey/pom.xml index 08c19f1d3b..64a34074bb 100644 --- a/spring-jersey/pom.xml +++ b/spring-jersey/pom.xml @@ -212,6 +212,7 @@ 2.29.1 + 2.11.1 1.6.1 4.4.9 4.5.5 From b87c7b3d4ca514706c3d51ba1c32c2ed4508bfef Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 15 Sep 2021 21:58:26 +0800 Subject: [PATCH 27/42] Update README.md --- maven-modules/maven-parent-pom-resolution/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-modules/maven-parent-pom-resolution/README.md b/maven-modules/maven-parent-pom-resolution/README.md index 6f72b5e70b..709a5f12ed 100644 --- a/maven-modules/maven-parent-pom-resolution/README.md +++ b/maven-modules/maven-parent-pom-resolution/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [Understanding the "relativePath" Tag - Maven Parent POM Resolution At A Glance](https://www.baeldung.com/maven-relativepath) +- [https://www.baeldung.com/maven-relativepath](https://www.baeldung.com/maven-relativepath) From 188b8fa368442a4389414b25a48a1b52521bc1e4 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 15 Sep 2021 21:59:56 +0800 Subject: [PATCH 28/42] Update README.md --- core-java-modules/core-java-security-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-security-3/README.md b/core-java-modules/core-java-security-3/README.md index 970faaac88..a37719964b 100644 --- a/core-java-modules/core-java-security-3/README.md +++ b/core-java-modules/core-java-security-3/README.md @@ -5,4 +5,5 @@ This module contains articles about core Java Security ### Relevant Articles: - [Secret Key and String Conversion in Java](https://www.baeldung.com/java-secret-key-to-string) +- [Enabling Unlimited Strength Cryptography in Java](https://www.baeldung.com/jce-enable-unlimited-strength) - More articles: [[<-- prev]](/core-java-modules/core-java-security-2) From 3647443986916555f0fc1d755d4cd56c00266e35 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 15 Sep 2021 22:01:49 +0800 Subject: [PATCH 29/42] Update README.md --- json-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/json-2/README.md b/json-2/README.md index 64ca7e6449..aebc42c472 100644 --- a/json-2/README.md +++ b/json-2/README.md @@ -7,3 +7,4 @@ This module contains articles about JSON. - [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) - [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi) - [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data) +- [Generate a Java Class From JSON](https://www.baeldung.com/java-generate-class-from-json) From d1f81f20da81af940bb7b91cf0d972a8cdc2ab1f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 15 Sep 2021 22:03:24 +0800 Subject: [PATCH 30/42] Update README.md --- core-java-modules/core-java-16/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-16/README.md b/core-java-modules/core-java-16/README.md index 760513189f..68215b3964 100644 --- a/core-java-modules/core-java-16/README.md +++ b/core-java-modules/core-java-16/README.md @@ -1,3 +1,4 @@ ### Relevant articles: - [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection) +- [Guide to mapMulti in Stream API](https://www.baeldung.com/java-mapmulti) From 8e92dc0c5ca7b12bb84c2dd3de767152390a7621 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Wed, 15 Sep 2021 22:04:47 +0800 Subject: [PATCH 31/42] Update README.md --- core-java-modules/core-java-arrays-operations-advanced/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-arrays-operations-advanced/README.md b/core-java-modules/core-java-arrays-operations-advanced/README.md index 0e003b5cd9..f0d3d1fd93 100644 --- a/core-java-modules/core-java-arrays-operations-advanced/README.md +++ b/core-java-modules/core-java-arrays-operations-advanced/README.md @@ -10,3 +10,4 @@ This module contains articles about advanced operations on arrays in Java. They - [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection) - [Comparing Arrays in Java](https://www.baeldung.com/java-comparing-arrays) - [Concatenate Two Arrays in Java](https://www.baeldung.com/java-concatenate-arrays) +- [Performance of System.arraycopy() vs. Arrays.copyOf()](https://www.baeldung.com/java-system-arraycopy-arrays-copyof-performance) From 0a2e726f689ff1f68cc899cbec5bad1b65f9de33 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Thu, 16 Sep 2021 20:04:12 +0800 Subject: [PATCH 32/42] Update README.md --- maven-modules/maven-parent-pom-resolution/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven-modules/maven-parent-pom-resolution/README.md b/maven-modules/maven-parent-pom-resolution/README.md index 709a5f12ed..b315b2f626 100644 --- a/maven-modules/maven-parent-pom-resolution/README.md +++ b/maven-modules/maven-parent-pom-resolution/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [https://www.baeldung.com/maven-relativepath](https://www.baeldung.com/maven-relativepath) +- [Understanding Maven’s “relativePath” Tag for a Parent POM](https://www.baeldung.com/maven-relativepath) From 8c7827bebd4d977f2fd6f5cae3bf76513058f432 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 16 Sep 2021 15:41:15 +0300 Subject: [PATCH 33/42] BAEL-5033 close resources, create file --- .../java/io/zip4j/CreateSplitZipFile.java | 7 ++++--- .../baeldung/java/io/zip4j/ExtractAllFile.java | 6 ++++-- .../java/io/zip4j/ExtractSingleFile.java | 6 ++++-- .../com/baeldung/java/io/zip4j/ZipFolder.java | 5 +++-- .../com/baeldung/java/io/zip4j/ZipMultiFile.java | 16 ++++++++++------ .../baeldung/java/io/zip4j/ZipSingleFile.java | 5 +++-- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java index cc39bc9dd2..a7ecd7946e 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java @@ -1,22 +1,23 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; import java.util.Arrays; public class CreateSplitZipFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); - int splitLength = 1024 * 1024 * 10; //10MB + int splitLength = 1024 * 1024 * 10; // 10MB zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength); zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java index 10e7ddd339..924d80a921 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java @@ -1,12 +1,14 @@ package com.baeldung.java.io.zip4j; +import java.io.IOException; + import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; public class ExtractAllFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.extractAll("/destination_directory"); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java index 4cf466d02b..ad79557a37 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java @@ -1,12 +1,14 @@ package com.baeldung.java.io.zip4j; +import java.io.IOException; + import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; public class ExtractSingleFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.extractFile("aFile.txt", "/destination_directory"); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java index 4d89e8665f..ed25494083 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java @@ -1,19 +1,20 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; public class ZipFolder { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.addFolder(new File("/users/folder_to_add"), zipParameters); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java index dcb860ef92..b34eccd7db 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java @@ -1,27 +1,31 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; import java.util.Arrays; import java.util.List; public class ZipMultiFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); - List filesToAdd = Arrays.asList( - new File("aFile.txt"), - new File("bFile.txt") - ); + File firstFile = new File("aFile.txt"); + File secondFile = new File("bFile.txt"); + + firstFile.createNewFile(); + secondFile.createNewFile(); + + List filesToAdd = Arrays.asList(firstFile, secondFile); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.addFiles(filesToAdd, zipParameters); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java index a5f600df47..4d72c71c8d 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java @@ -1,21 +1,22 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; public class ZipSingleFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setCompressionLevel(CompressionLevel.HIGHER); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.addFile(new File("aFile.txt")); + zipFile.close(); } } From 656c697f4c766a11200b25e95776c1768e9ce95a Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 16 Sep 2021 15:50:41 +0300 Subject: [PATCH 34/42] BAEL-5033 create file if it doesn't exist --- .../java/com/baeldung/java/io/zip4j/ZipMultiFile.java | 9 ++++++--- .../java/com/baeldung/java/io/zip4j/ZipSingleFile.java | 7 ++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java index b34eccd7db..081d207294 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java @@ -18,9 +18,12 @@ public class ZipMultiFile { File firstFile = new File("aFile.txt"); File secondFile = new File("bFile.txt"); - - firstFile.createNewFile(); - secondFile.createNewFile(); + if (!firstFile.exists()) { + firstFile.createNewFile(); + } + if (!secondFile.exists()) { + secondFile.createNewFile(); + } List filesToAdd = Arrays.asList(firstFile, secondFile); diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java index 4d72c71c8d..d0947afa2e 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java @@ -16,7 +16,12 @@ public class ZipSingleFile { zipParameters.setCompressionLevel(CompressionLevel.HIGHER); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); - zipFile.addFile(new File("aFile.txt")); + + File fileToAdd = new File("aFile.txt"); + if (!fileToAdd.exists()) { + fileToAdd.createNewFile(); + } + zipFile.addFile(fileToAdd); zipFile.close(); } } From 6ed0aee6a087394a2676695278a37242d526305c Mon Sep 17 00:00:00 2001 From: kwoyke Date: Thu, 16 Sep 2021 19:04:26 +0200 Subject: [PATCH 35/42] JAVA-7133: POM Properties Cleanup (#11229) * JAVA-7133: Use common org.slf4j.version property * JAVA-7133: Use common logback.version property --- apache-libraries/pom.xml | 1 - apache-thrift/pom.xml | 3 +-- core-groovy-2/pom.xml | 1 - deeplearning4j/pom.xml | 5 ++--- ethereum/pom.xml | 4 +--- libraries-data-2/pom.xml | 5 ++--- libraries-data/pom.xml | 3 +-- logging-modules/logback/pom.xml | 1 - micronaut/pom.xml | 3 +-- persistence-modules/hibernate-libraries/pom.xml | 4 +--- restx/pom.xml | 3 +-- spf4j/spf4j-aspects-app/pom.xml | 1 - spf4j/spf4j-core-app/pom.xml | 1 - .../kubernetes-guide/travel-agency-service/pom.xml | 4 ---- spring-security-modules/spring-security-web-sockets/pom.xml | 3 +-- vertx-and-rxjava/pom.xml | 1 - vraptor/pom.xml | 3 +-- 17 files changed, 12 insertions(+), 34 deletions(-) diff --git a/apache-libraries/pom.xml b/apache-libraries/pom.xml index bca80d9acd..b4cf11b07d 100644 --- a/apache-libraries/pom.xml +++ b/apache-libraries/pom.xml @@ -201,7 +201,6 @@ 1.8 1.8 1.8.2 - 1.7.25 2.19.0 3.9.0 1.1.2 diff --git a/apache-thrift/pom.xml b/apache-thrift/pom.xml index 9562ae7dfe..d2623f92e7 100644 --- a/apache-thrift/pom.xml +++ b/apache-thrift/pom.xml @@ -29,7 +29,7 @@ org.slf4j slf4j-simple - ${org.slf4j.slf4j-simple.version} + ${org.slf4j.version} test @@ -61,7 +61,6 @@ 0.10.0 0.1.11 - 1.7.12 3.0.0 diff --git a/core-groovy-2/pom.xml b/core-groovy-2/pom.xml index f8ef654293..89df666333 100644 --- a/core-groovy-2/pom.xml +++ b/core-groovy-2/pom.xml @@ -166,7 +166,6 @@ 2.4.0 1.1-groovy-2.4 1.1.3 - 1.2.3 2.5.7 3.1.0 3.8.0 diff --git a/deeplearning4j/pom.xml b/deeplearning4j/pom.xml index f1f9b9fa7b..c63e67d573 100644 --- a/deeplearning4j/pom.xml +++ b/deeplearning4j/pom.xml @@ -39,12 +39,12 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.slf4j slf4j-log4j12 - ${slf4j.version} + ${org.slf4j.version} @@ -62,7 +62,6 @@ 0.9.1 4.3.5 - 1.7.5 \ No newline at end of file diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 4283714b98..b9a3870702 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -99,7 +99,7 @@ org.slf4j jcl-over-slf4j - ${slf4j.version} + ${org.slf4j.version} ch.qos.logback @@ -204,8 +204,6 @@ 1.5.6.RELEASE 2.21.0 2.4.0 - 1.2.3 - 1.7.25 2.0.4.RELEASE 3.1 diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index cce2e57d22..75b2cc962d 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -104,12 +104,12 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.slf4j slf4j-log4j12 - ${slf4j.version} + ${org.slf4j.version} com.univocity @@ -161,7 +161,6 @@ 4.0.0 1.1.0 3.6.2 - 1.7.25 3.0.0 2.8.4 29.0-jre diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml index 717ee802db..c5ad08448f 100644 --- a/libraries-data/pom.xml +++ b/libraries-data/pom.xml @@ -108,7 +108,7 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.apache.storm @@ -173,7 +173,6 @@ 3.8.4 0.15.0 2.2.0 - 1.7.25 1.6.0.1 diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml index 6d32025d94..512dc9e5a3 100644 --- a/logging-modules/logback/pom.xml +++ b/logging-modules/logback/pom.xml @@ -69,7 +69,6 @@ - 1.2.3 0.1.5 3.3.5 1.4.7 diff --git a/micronaut/pom.xml b/micronaut/pom.xml index 196218d856..e9b5a0409f 100644 --- a/micronaut/pom.xml +++ b/micronaut/pom.xml @@ -61,7 +61,7 @@ ch.qos.logback logback-classic - ${lombok.version} + ${logback.version} runtime @@ -145,7 +145,6 @@ 1.0.0.RC2 1.8 1.3.2 - 1.2.3 3.1.6.RELEASE 3.7.0 3.1.0 diff --git a/persistence-modules/hibernate-libraries/pom.xml b/persistence-modules/hibernate-libraries/pom.xml index 19537156aa..7d552b262d 100644 --- a/persistence-modules/hibernate-libraries/pom.xml +++ b/persistence-modules/hibernate-libraries/pom.xml @@ -77,7 +77,7 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} provided true @@ -174,12 +174,10 @@ 3.27.0-GA 2.3.1 2.0.0 - 1.2.3 3.0.2 3.8.1 3.8.1 8.0.19 - 1.7.30 2.1.3.RELEASE diff --git a/restx/pom.xml b/restx/pom.xml index ee25c88047..ac0ff36376 100644 --- a/restx/pom.xml +++ b/restx/pom.xml @@ -99,7 +99,7 @@ ch.qos.logback logback-classic - ${logback-classic.version} + ${logback.version} io.restx @@ -149,7 +149,6 @@ 0.35-rc4 - 1.2.3 diff --git a/spf4j/spf4j-aspects-app/pom.xml b/spf4j/spf4j-aspects-app/pom.xml index a44ee805fb..c4940b9c97 100644 --- a/spf4j/spf4j-aspects-app/pom.xml +++ b/spf4j/spf4j-aspects-app/pom.xml @@ -99,7 +99,6 @@ 8.9.0 - 1.7.21 3.8.0 3.1.1 diff --git a/spf4j/spf4j-core-app/pom.xml b/spf4j/spf4j-core-app/pom.xml index 1f9be97854..28c104afe1 100644 --- a/spf4j/spf4j-core-app/pom.xml +++ b/spf4j/spf4j-core-app/pom.xml @@ -105,7 +105,6 @@ 8.9.0 - 1.7.21 3.8.0 3.1.1 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 c6c6de94c3..ba5ba93682 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 @@ -62,8 +62,4 @@ - - 1.2.3 - - \ 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 7b7a5e4659..802c894612 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -103,7 +103,7 @@ ch.qos.logback logback-classic - ${logback-classic.version} + ${logback.version} @@ -180,7 +180,6 @@ 5.2.10.Final 1.11.3.RELEASE - 1.2.3 1.5.10.RELEASE 1.7.6 diff --git a/vertx-and-rxjava/pom.xml b/vertx-and-rxjava/pom.xml index fb04ba784c..1793cff1e7 100644 --- a/vertx-and-rxjava/pom.xml +++ b/vertx-and-rxjava/pom.xml @@ -47,7 +47,6 @@ 3.5.0.Beta1 - 1.2.3 \ No newline at end of file diff --git a/vraptor/pom.xml b/vraptor/pom.xml index ab78c0d97a..fad17e7aae 100644 --- a/vraptor/pom.xml +++ b/vraptor/pom.xml @@ -68,7 +68,7 @@ org.slf4j slf4j-log4j12 - ${slf4j-log4j12.version} + ${org.slf4j.version} br.com.caelum.vraptor @@ -117,7 +117,6 @@ 2.1.2.Final 2.2 5.1.1.Final - 1.7.5 4.1.0-RC3 4.0.4 8.0.8-dmr From b441c62f0e7715dc9bc5fc01d63421cd43150d83 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Thu, 16 Sep 2021 19:07:12 +0200 Subject: [PATCH 36/42] JAVA-7177: Upgrade to Spring Boot 2.5.4 (#11218) * JAVA-7177: Upgrade to Spring Boot 2.5.4 * JAVA-7177: Remove overriden Spring Boot version * JAVA-7177: Leave spring-5-security-oauth on Spring Boot 2.5.2 --- parent-boot-2/pom.xml | 2 +- spring-boot-modules/spring-boot-keycloak/pom.xml | 2 -- spring-security-modules/spring-5-security-oauth/pom.xml | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index accbc2df96..2e520640ec 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -81,7 +81,7 @@ 3.3.0 1.0.22.RELEASE - 2.5.1 + 2.5.4 1.9.1 3.4.0 diff --git a/spring-boot-modules/spring-boot-keycloak/pom.xml b/spring-boot-modules/spring-boot-keycloak/pom.xml index 505d486509..b80dbfa191 100644 --- a/spring-boot-modules/spring-boot-keycloak/pom.xml +++ b/spring-boot-modules/spring-boot-keycloak/pom.xml @@ -77,8 +77,6 @@ 13.0.1 - - 2.5.3 \ 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 03e1880431..194ace35b0 100644 --- a/spring-security-modules/spring-5-security-oauth/pom.xml +++ b/spring-security-modules/spring-5-security-oauth/pom.xml @@ -68,6 +68,8 @@ + + 2.5.2 com.baeldung.oauth2.SpringOAuthApplication From 2a68c0e2bb6dabae2155e96dc325e30908d08aea Mon Sep 17 00:00:00 2001 From: Amitabh Tiwari Date: Fri, 17 Sep 2021 07:31:41 +0530 Subject: [PATCH 37/42] Html2pdf using open pdf (#11178) * Added inital changes html to pdf using openPdf * Added changes to pdf for external style * Added chnages via flying saucer * Added changes ti fix the issue * Added inital changes * Simplyfied the core logic * Created a sperate package * Added changes for making it more modular * Added Image attribute update * Added chnages to add images * Added changes * Style validation * Added changes to fix the styles * Review comments updates * Corrected the versions * Fixed the review commit * Added changes to fix the indendation issue Co-authored-by: Amitabh.Tiwari --- pdf/pom.xml | 24 ++++++++ .../pdf/openpdf/CustomElementFactoryImpl.java | 56 ++++++++++++++++++ .../openpdf/Html2PdfUsingFlyingSaucer.java | 53 +++++++++++++++++ .../pdf/openpdf/Html2PdfUsingOpenHtml.java | 55 +++++++++++++++++ pdf/src/main/resources/html2pdf.pdf | Bin 0 -> 15570 bytes pdf/src/main/resources/htmlforopenpdf.html | 26 ++++++++ pdf/src/main/resources/style.css | 6 ++ 7 files changed, 220 insertions(+) create mode 100644 pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java create mode 100644 pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java create mode 100644 pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java create mode 100644 pdf/src/main/resources/html2pdf.pdf create mode 100644 pdf/src/main/resources/htmlforopenpdf.html create mode 100644 pdf/src/main/resources/style.css diff --git a/pdf/pom.xml b/pdf/pom.xml index fb9508156e..6bd1d97402 100644 --- a/pdf/pom.xml +++ b/pdf/pom.xml @@ -71,6 +71,26 @@ flying-saucer-pdf ${flying-saucer-pdf.version} + + org.xhtmlrenderer + flying-saucer-pdf-openpdf + ${flying-saucer-pdf-openpdf.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + com.openhtmltopdf + openhtmltopdf-core + ${open-html-pdf-core.version} + + + com.openhtmltopdf + openhtmltopdf-pdfbox + ${open-html-pdfbox.version} + @@ -93,6 +113,10 @@ 3.15 3.0.11.RELEASE 9.1.20 + 1.0.6 + 1.0.6 + 9.1.22 + 1.14.2 \ No newline at end of file diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java new file mode 100644 index 0000000000..d8256a68f7 --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java @@ -0,0 +1,56 @@ +package com.baeldung.pdf.openpdf; + +import java.io.FileInputStream; +import java.io.InputStream; + +import org.apache.commons.io.IOUtils; +import org.w3c.dom.Element; +import org.xhtmlrenderer.extend.FSImage; +import org.xhtmlrenderer.extend.ReplacedElement; +import org.xhtmlrenderer.extend.ReplacedElementFactory; +import org.xhtmlrenderer.extend.UserAgentCallback; +import org.xhtmlrenderer.layout.LayoutContext; +import org.xhtmlrenderer.pdf.ITextFSImage; +import org.xhtmlrenderer.pdf.ITextImageElement; +import org.xhtmlrenderer.render.BlockBox; +import org.xhtmlrenderer.simple.extend.FormSubmissionListener; + +import com.lowagie.text.Image; + +public class CustomElementFactoryImpl implements ReplacedElementFactory { + @Override + public ReplacedElement createReplacedElement(LayoutContext lc, BlockBox box, UserAgentCallback uac, int cssWidth, int cssHeight) { + Element e = box.getElement(); + String nodeName = e.getNodeName(); + if (nodeName.equals("img")) { + String imagePath = e.getAttribute("src"); + try { + InputStream input = new FileInputStream("src/main/resources/" + imagePath); + byte[] bytes = IOUtils.toByteArray(input); + Image image = Image.getInstance(bytes); + FSImage fsImage = new ITextFSImage(image); + if (cssWidth != -1 || cssHeight != -1) { + fsImage.scale(cssWidth, cssHeight); + } else { + fsImage.scale(2000, 1000); + } + return new ITextImageElement(fsImage); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return null; + } + + @Override + public void reset() { + } + + @Override + public void remove(Element e) { + } + + @Override + public void setFormSubmissionListener(FormSubmissionListener listener) { + } +} \ No newline at end of file diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java new file mode 100644 index 0000000000..927d85a4cb --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java @@ -0,0 +1,53 @@ +package com.baeldung.pdf.openpdf; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.xhtmlrenderer.layout.SharedContext; +import org.xhtmlrenderer.pdf.ITextRenderer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class Html2PdfUsingFlyingSaucer { + + private static final String HTML_INPUT = "src/main/resources/htmlforopenpdf.html"; + private static final String PDF_OUTPUT = "src/main/resources/html2pdf.pdf"; + + public static void main(String[] args) { + try { + Html2PdfUsingFlyingSaucer htmlToPdf = new Html2PdfUsingFlyingSaucer(); + htmlToPdf.generateHtmlToPdf(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void generateHtmlToPdf() throws Exception { + File inputHTML = new File(HTML_INPUT); + Document inputHtml = createWellFormedHtml(inputHTML); + File outputPdf = new File(PDF_OUTPUT); + xhtmlToPdf(inputHtml, outputPdf); + } + + private Document createWellFormedHtml(File inputHTML) throws IOException { + Document document = Jsoup.parse(inputHTML, "UTF-8"); + document.outputSettings() + .syntax(Document.OutputSettings.Syntax.xml); + return document; + } + + private void xhtmlToPdf(Document xhtml, File outputPdf) throws Exception { + try (OutputStream outputStream = new FileOutputStream(outputPdf)) { + ITextRenderer renderer = new ITextRenderer(); + SharedContext sharedContext = renderer.getSharedContext(); + sharedContext.setPrint(true); + sharedContext.setInteractive(false); + sharedContext.setReplacedElementFactory(new CustomElementFactoryImpl()); + renderer.setDocumentFromString(xhtml.html()); + renderer.layout(); + renderer.createPDF(outputStream); + } + } +} diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java new file mode 100644 index 0000000000..bc83da6102 --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java @@ -0,0 +1,55 @@ +package com.baeldung.pdf.openpdf; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.FileSystems; + +import org.jsoup.Jsoup; +import org.jsoup.helper.W3CDom; +import org.jsoup.nodes.Document; + +import com.openhtmltopdf.pdfboxout.PdfRendererBuilder; + +public class Html2PdfUsingOpenHtml { + + private static final String HTML_INPUT = "src/main/resources/htmlforopenpdf.html"; + private static final String PDF_OUTPUT = "src/main/resources/html2pdf.pdf"; + + public static void main(String[] args) { + try { + Html2PdfUsingOpenHtml htmlToPdf = new Html2PdfUsingOpenHtml(); + htmlToPdf.generateHtmlToPdf(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void generateHtmlToPdf() throws IOException { + File inputHTML = new File(HTML_INPUT); + Document doc = createWellFormedHtml(inputHTML); + xhtmlToPdf(doc, PDF_OUTPUT); + } + + private Document createWellFormedHtml(File inputHTML) throws IOException { + Document document = Jsoup.parse(inputHTML, "UTF-8"); + document.outputSettings() + .syntax(Document.OutputSettings.Syntax.xml); + return document; + } + + private void xhtmlToPdf(Document doc, String outputPdf) throws IOException { + try (OutputStream os = new FileOutputStream(outputPdf)) { + String baseUri = FileSystems.getDefault() + .getPath("src/main/resources/") + .toUri() + .toString(); + PdfRendererBuilder builder = new PdfRendererBuilder(); + builder.withUri(outputPdf); + builder.toStream(os); + builder.withW3cDocument(new W3CDom().fromJsoup(doc), baseUri); + builder.run(); + } + } +} diff --git a/pdf/src/main/resources/html2pdf.pdf b/pdf/src/main/resources/html2pdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..877ff4cacd94862e6b9bf5132e3bc548e896435e GIT binary patch literal 15570 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 + + + + + +
+

Hello Baeldung!

+ + +
+

This is the tutorial to convert html to pdf.

+
+
+ + \ No newline at end of file diff --git a/pdf/src/main/resources/style.css b/pdf/src/main/resources/style.css new file mode 100644 index 0000000000..381ffadf00 --- /dev/null +++ b/pdf/src/main/resources/style.css @@ -0,0 +1,6 @@ +.myclass{ + font-family: Helvetica, sans-serif; + font-size:25; + font-weight: normal; + color: blue; +} \ No newline at end of file From 3260466f5b1f545a16325f030bcb0b304a64914b Mon Sep 17 00:00:00 2001 From: Trying something new <50325284+tancafa@users.noreply.github.com> Date: Sat, 18 Sep 2021 08:50:24 +0530 Subject: [PATCH 38/42] Formatting Changes for Java 5074 (#11206) * Formatting Changes for Java 5074 Changed line change indentation to 2 spaces * Rename StreamToListComparisonWithCollectorsToListUnitTest to StreamToListComparisonWithCollectorsToListUnitTest.java --- ...omparisonWithCollectorsToListUnitTest.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java new file mode 100644 index 0000000000..e1330bb4f7 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java @@ -0,0 +1,128 @@ +package com.baeldung.streams; + +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class StreamToListComparisonWithCollectorsToListUnitTest { + + @Test + public void whenAddingtoCollectToList_thenSuccess() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertDoesNotThrow(() -> { + result.add("test"); + }); + } + + @Test + public void whenSortingtoCollectToList_thenSuccess() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertDoesNotThrow(() -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenAddingCollectUnmodifiableToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.add("test"); + }); + } + + @Test + public void whenSortingCollectUnmodifiableToList_thenSortException() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenAddingStreamToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .toList(); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.add("test"); + }); + } + + @Test + public void whenSortingStreamToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .toList(); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenComparingStreamToList_withCollectToList_thenEqual() { + + List streamToList = Stream.of(Locale.getISOCountries()) + .toList(); + List collectToList = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertEquals(streamToList, collectToList); + } + + @Test + public void whenComparingStreamToList_withUnmodifiedCollectToList_thenEqual() { + + List streamToList = Stream.of(Locale.getISOCountries()) + .toList(); + List collectToUnmodifiableList = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertEquals(streamToList, collectToUnmodifiableList); + } + + @Test + public void whenNullCollectorsToList_thenSuccess() { + + Assertions.assertDoesNotThrow(() -> { + Stream.of(null, null) + .collect(Collectors.toList()); + }); + } + + @Test + public void whenNullCollectorsUnmodifiableToList_thenException() { + + Assertions.assertThrows(NullPointerException.class, () -> { + Stream.of(null, null) + .collect(Collectors.toUnmodifiableList()); + }); + } + + @Test + public void whenNullStreamToList_thenSuccess() { + + Assertions.assertDoesNotThrow(() -> { + Stream.of(null, null) + .toList(); + }); + } + +} From 2c837e030fa3555f79e5c9d1fe6c4c0f83238c39 Mon Sep 17 00:00:00 2001 From: mbarriola <85458535+mbarriola@users.noreply.github.com> Date: Sat, 18 Sep 2021 04:43:16 -0400 Subject: [PATCH 39/42] Bael 5119 streaming in g rpc (#11215) * Commit source code to branch * BAEL-5065 improvement of groupBy with complex key * Streaming in gRPC --- grpc/pom.xml | 151 ++++++++------- .../baeldung/grpc/streaming/StockClient.java | 183 ++++++++++++++++++ .../baeldung/grpc/streaming/StockServer.java | 147 ++++++++++++++ grpc/src/main/proto/stock_quote.proto | 31 +++ 4 files changed, 437 insertions(+), 75 deletions(-) create mode 100644 grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java create mode 100644 grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java create mode 100644 grpc/src/main/proto/stock_quote.proto diff --git a/grpc/pom.xml b/grpc/pom.xml index 915777f3bd..77ec9be464 100644 --- a/grpc/pom.xml +++ b/grpc/pom.xml @@ -1,81 +1,82 @@ - 4.0.0 - grpc - 0.0.1-SNAPSHOT - grpc - 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 + grpc + 0.0.1-SNAPSHOT + grpc + jar - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - io.grpc - grpc-netty - ${io.grpc.version} - - - io.grpc - grpc-protobuf - ${io.grpc.version} - - - io.grpc - grpc-stub - ${io.grpc.version} - - - junit - junit - ${junit.version} - test - - - - - - - kr.motd.maven - os-maven-plugin - ${os-maven-plugin.version} - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - ${protobuf-maven-plugin.version} - - - com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier} - - grpc-java - - io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier} - - - - - - compile - compile-custom - - - - - - - - - 1.16.1 - 1.6.1 - 0.6.1 - + + + io.grpc + grpc-netty-shaded + runtime + ${io.grpc.version} + + + io.grpc + grpc-protobuf + ${io.grpc.version} + + + io.grpc + grpc-stub + ${io.grpc.version} + + + junit + junit + ${junit.version} + test + + + javax.annotation + javax.annotation-api + 1.2 + + + + + + kr.motd.maven + os-maven-plugin + ${os-maven-plugin.version} + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + ${protobuf-maven-plugin.version} + + com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier} + grpc-java + io.grpc:protoc-gen-grpc-java:${io.grpc.version}:exe:${os.detected.classifier} + + + + + compile + compile-custom + + + + + + + + 1.40.1 + 3.17.2 + 1.6.2 + 0.6.1 + \ No newline at end of file diff --git a/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java b/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java new file mode 100644 index 0000000000..1850c975a2 --- /dev/null +++ b/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java @@ -0,0 +1,183 @@ +package com.baeldung.grpc.streaming; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.baeldung.grpc.streaming.StockQuoteProviderGrpc.StockQuoteProviderBlockingStub; +import com.baeldung.grpc.streaming.StockQuoteProviderGrpc.StockQuoteProviderStub; + +import io.grpc.Channel; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; +import io.grpc.stub.StreamObserver; + +public class StockClient { + private static final Logger logger = Logger.getLogger(StockClient.class.getName()); + + private final StockQuoteProviderBlockingStub blockingStub; + private final StockQuoteProviderStub nonBlockingStub; + private List stocks; + + public StockClient(Channel channel) { + + blockingStub = StockQuoteProviderGrpc.newBlockingStub(channel); + nonBlockingStub = StockQuoteProviderGrpc.newStub(channel); + initializeStocks(); + } + + public void serverSideStreamingListOfStockPrices() { + + logInfo("######START EXAMPLE######: ServerSideStreaming - list of Stock prices from a given stock"); + Stock request = Stock.newBuilder() + .setTickerSymbol("AU") + .setCompanyName("Austich") + .setDescription("server streaming example") + .build(); + Iterator stockQuotes; + try { + logInfo("REQUEST - ticker symbol {0}", request.getTickerSymbol()); + stockQuotes = blockingStub.serverSideStreamingGetListStockQuotes(request); + for (int i = 1; stockQuotes.hasNext(); i++) { + StockQuote stockQuote = stockQuotes.next(); + logInfo("RESPONSE - Price #" + i + ": {0}", stockQuote.getPrice()); + } + } catch (StatusRuntimeException e) { + logInfo("RPC failed: {0}", e.getStatus()); + } + } + + public void clientSideStreamingGetStatisticsOfStocks() throws InterruptedException { + + logInfo("######START EXAMPLE######: ClientSideStreaming - getStatisticsOfStocks from a list of stocks"); + final CountDownLatch finishLatch = new CountDownLatch(1); + StreamObserver responseObserver = new StreamObserver() { + @Override + public void onNext(StockQuote summary) { + logInfo("RESPONSE, got stock statistics - Average Price: {0}, description: {1}", summary.getPrice(), summary.getDescription()); + } + + @Override + public void onCompleted() { + logInfo("Finished clientSideStreamingGetStatisticsOfStocks"); + finishLatch.countDown(); + } + + @Override + public void onError(Throwable t) { + logWarning("Stock Statistics Failed: {0}", Status.fromThrowable(t)); + finishLatch.countDown(); + } + }; + + StreamObserver requestObserver = nonBlockingStub.clientSideStreamingGetStatisticsOfStocks(responseObserver); + try { + + for (Stock stock : stocks) { + logInfo("REQUEST: {0}, {1}", stock.getTickerSymbol(), stock.getCompanyName()); + requestObserver.onNext(stock); + if (finishLatch.getCount() == 0) { + return; + } + } + } catch (RuntimeException e) { + requestObserver.onError(e); + throw e; + } + requestObserver.onCompleted(); + if (!finishLatch.await(1, TimeUnit.MINUTES)) { + logWarning("clientSideStreamingGetStatisticsOfStocks can not finish within 1 minutes"); + } + } + + public void bidirectionalStreamingGetListsStockQuotes() throws InterruptedException{ + + logInfo("#######START EXAMPLE#######: BidirectionalStreaming - getListsStockQuotes from list of stocks"); + final CountDownLatch finishLatch = new CountDownLatch(1); + StreamObserver responseObserver = new StreamObserver() { + @Override + public void onNext(StockQuote stockQuote) { + logInfo("RESPONSE price#{0} : {1}, description:{2}", stockQuote.getOfferNumber(), stockQuote.getPrice(), stockQuote.getDescription()); + } + + @Override + public void onCompleted() { + logInfo("Finished bidirectionalStreamingGetListsStockQuotes"); + finishLatch.countDown(); + } + + @Override + public void onError(Throwable t) { + logWarning("bidirectionalStreamingGetListsStockQuotes Failed: {0}", Status.fromThrowable(t)); + finishLatch.countDown(); + } + }; + StreamObserver requestObserver = nonBlockingStub.bidirectionalStreamingGetListsStockQuotes(responseObserver); + try { + for (Stock stock : stocks) { + logInfo("REQUEST: {0}, {1}", stock.getTickerSymbol(), stock.getCompanyName()); + requestObserver.onNext(stock); + Thread.sleep(200); + if (finishLatch.getCount() == 0) { + return; + } + } + } catch (RuntimeException e) { + requestObserver.onError(e); + throw e; + } + requestObserver.onCompleted(); + + if (!finishLatch.await(1, TimeUnit.MINUTES)) { + logWarning("bidirectionalStreamingGetListsStockQuotes can not finish within 1 minute"); + } + + } + + public static void main(String[] args) throws InterruptedException { + String target = "localhost:8980"; + if (args.length > 0) { + target = args[0]; + } + + ManagedChannel channel = ManagedChannelBuilder.forTarget(target) + .usePlaintext() + .build(); + try { + StockClient client = new StockClient(channel); + + client.serverSideStreamingListOfStockPrices(); + + client.clientSideStreamingGetStatisticsOfStocks(); + + client.bidirectionalStreamingGetListsStockQuotes(); + + } finally { + channel.shutdownNow() + .awaitTermination(5, TimeUnit.SECONDS); + } + } + + private void initializeStocks() { + + this.stocks = Arrays.asList(Stock.newBuilder().setTickerSymbol("AU").setCompanyName("Auburn Corp").setDescription("Aptitude Intel").build() + , Stock.newBuilder().setTickerSymbol("BAS").setCompanyName("Bassel Corp").setDescription("Business Intel").build() + , Stock.newBuilder().setTickerSymbol("COR").setCompanyName("Corvine Corp").setDescription("Corporate Intel").build() + , Stock.newBuilder().setTickerSymbol("DIA").setCompanyName("Dialogic Corp").setDescription("Development Intel").build() + , Stock.newBuilder().setTickerSymbol("EUS").setCompanyName("Euskaltel Corp").setDescription("English Intel").build()); + } + + private void logInfo(String msg, Object... params) { + logger.log(Level.INFO, msg, params); + } + + private void logWarning(String msg, Object... params) { + logger.log(Level.WARNING, msg, params); + } +} diff --git a/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java b/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java new file mode 100644 index 0000000000..f4dc6c39ac --- /dev/null +++ b/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java @@ -0,0 +1,147 @@ +package com.baeldung.grpc.streaming; + +import java.io.IOException; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import io.grpc.Server; +import io.grpc.ServerBuilder; +import io.grpc.stub.StreamObserver; + +public class StockServer { + + private static final Logger logger = Logger.getLogger(StockServer.class.getName()); + private final int port; + private final Server server; + + public StockServer(int port) throws IOException { + this.port = port; + server = ServerBuilder.forPort(port) + .addService(new StockService()) + .build(); + } + + public void start() throws IOException { + server.start(); + logger.info("Server started, listening on " + port); + Runtime.getRuntime() + .addShutdownHook(new Thread() { + @Override + public void run() { + System.err.println("shutting down server"); + try { + StockServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + System.err.println("server shutted down"); + } + }); + } + + public void stop() throws InterruptedException { + if (server != null) { + server.shutdown() + .awaitTermination(30, TimeUnit.SECONDS); + } + } + + public static void main(String[] args) throws Exception { + StockServer stockServer = new StockServer(8980); + stockServer.start(); + if (stockServer.server != null) { + stockServer.server.awaitTermination(); + } + } + + private static class StockService extends StockQuoteProviderGrpc.StockQuoteProviderImplBase { + + StockService() { + } + + @Override + public void serverSideStreamingGetListStockQuotes(Stock request, StreamObserver responseObserver) { + + for (int i = 1; i <= 5; i++) { + + StockQuote stockQuote = StockQuote.newBuilder() + .setPrice(fetchStockPriceBid(request)) + .setOfferNumber(i) + .setDescription("Price for stock:" + request.getTickerSymbol()) + .build(); + responseObserver.onNext(stockQuote); + } + responseObserver.onCompleted(); + } + + @Override + public StreamObserver clientSideStreamingGetStatisticsOfStocks(final StreamObserver responseObserver) { + return new StreamObserver() { + int count; + double price = 0.0; + StringBuffer sb = new StringBuffer(); + + @Override + public void onNext(Stock stock) { + count++; + price = +fetchStockPriceBid(stock); + sb.append(":") + .append(stock.getTickerSymbol()); + } + + @Override + public void onCompleted() { + responseObserver.onNext(StockQuote.newBuilder() + .setPrice(price / count) + .setDescription("Statistics-" + sb.toString()) + .build()); + responseObserver.onCompleted(); + } + + @Override + public void onError(Throwable t) { + logger.log(Level.WARNING, "error:{0}", t.getMessage()); + } + }; + } + + @Override + public StreamObserver bidirectionalStreamingGetListsStockQuotes(final StreamObserver responseObserver) { + return new StreamObserver() { + @Override + public void onNext(Stock request) { + + for (int i = 1; i <= 5; i++) { + + StockQuote stockQuote = StockQuote.newBuilder() + .setPrice(fetchStockPriceBid(request)) + .setOfferNumber(i) + .setDescription("Price for stock:" + request.getTickerSymbol()) + .build(); + responseObserver.onNext(stockQuote); + } + } + + @Override + public void onCompleted() { + responseObserver.onCompleted(); + } + + @Override + public void onError(Throwable t) { + logger.log(Level.WARNING, "error:{0}", t.getMessage()); + } + }; + } + } + + private static double fetchStockPriceBid(Stock stock) { + + return stock.getTickerSymbol() + .length() + + ThreadLocalRandom.current() + .nextDouble(-0.1d, 0.1d); + } +} \ No newline at end of file diff --git a/grpc/src/main/proto/stock_quote.proto b/grpc/src/main/proto/stock_quote.proto new file mode 100644 index 0000000000..66891a5008 --- /dev/null +++ b/grpc/src/main/proto/stock_quote.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package stockquote; + +option java_multiple_files = true; +option java_package = "com.baeldung.grpc.streaming"; +option java_outer_classname = "StockQuoteProto"; +option objc_class_prefix = "RTG"; + +//basic setup ... + +service StockQuoteProvider { + + rpc serverSideStreamingGetListStockQuotes(Stock) returns (stream StockQuote) {} + + rpc clientSideStreamingGetStatisticsOfStocks(stream Stock) returns (StockQuote) {} + + rpc bidirectionalStreamingGetListsStockQuotes(stream Stock) returns (stream StockQuote) {} +} + +message Stock { + string ticker_symbol = 1; + string company_name = 2; + string description = 3; +} + +message StockQuote { + double price = 1; + int32 offer_number = 2; + string description = 3; +} From da13dd1aafd260ee75aaace7c5b23b036ebcfaa4 Mon Sep 17 00:00:00 2001 From: saikatcse03 <40471715+saikatcse03@users.noreply.github.com> Date: Sat, 18 Sep 2021 22:06:00 +0530 Subject: [PATCH 40/42] Added code to demo expected package error (#11045) * Added code for demo package error * Corrected the package declaration * BAEL-4216 Corrected Formatting and Removed final and Super * Added few comments as per PR * Update Book.java Formatted comments with spaces Co-authored-by: ine12363914 --- .../java/com/baeldung/bookstore/Book.java | 21 +++++++++++++++++++ .../com/baeldung/bookstore/LibraryAdmin.java | 14 +++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java create mode 100644 core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java new file mode 100644 index 0000000000..83ed76bab0 --- /dev/null +++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java @@ -0,0 +1,21 @@ +// The next line is commented out to avoid the code to fail the build. +// package com.baeldung; + +/** +* If the below package declaration is commented out and the above incorrect package +* declaration is uncommented, then the problem will replicate. +*/ +package com.baeldung.bookstore; + +public class Book { + + private String title; + private String author; + private long isbn; + + public Book(String title, String author, long isbn) { + this.title = title; + this.author = author; + this.isbn = isbn; + } +} diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java new file mode 100644 index 0000000000..9abd654589 --- /dev/null +++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java @@ -0,0 +1,14 @@ +package com.baeldung.bookstore; + +import java.util.Random; + +public class LibraryAdmin { + + public Book createBook(String title, String author) { + + final long isbn = new Random().nextLong(); + + return new Book(title, author, isbn); + } + +} \ No newline at end of file From fe7d2af8c0e47c99369cbad13b4829f5a9c7bfa2 Mon Sep 17 00:00:00 2001 From: freelansam <79205526+freelansam@users.noreply.github.com> Date: Mon, 20 Sep 2021 00:04:26 +0530 Subject: [PATCH 41/42] JAVA-7178: Fix formatting of POMs (#11236) * JAVA-7178: Fix formatting of POMs * JAVA-7178: fix failing build --- algorithms-genetic/pom.xml | 2 +- apache-tapestry/pom.xml | 3 - aws-reactive/pom.xml | 2 +- core-java-modules/core-java-12/pom.xml | 104 ++++++++-------- core-java-modules/core-java-14/pom.xml | 4 +- core-java-modules/core-java-16/pom.xml | 90 +++++++------- core-java-modules/core-java-8-2/pom.xml | 2 +- .../core-java-8-datetime-2/pom.xml | 2 +- .../core-java-8-datetime/pom.xml | 2 +- core-java-modules/core-java-8/pom.xml | 2 +- .../core-java-9-new-features/pom.xml | 4 +- .../core-java-arrays-sorting/pom.xml | 1 + core-java-modules/core-java-char/pom.xml | 2 +- .../core-java-collections-2/pom.xml | 2 +- .../core-java-collections-3/pom.xml | 2 +- .../core-java-collections-4/pom.xml | 48 ++++---- .../core-java-collections-maps/pom.xml | 4 +- .../core-java-collections/pom.xml | 2 +- .../core-java-date-operations-1/pom.xml | 1 - .../core-java-exceptions-3/pom.xml | 1 + .../core-java-lang-oop-types/pom.xml | 1 + core-java-modules/pom.xml | 1 + java-lite/pom.xml | 5 - javaxval/pom.xml | 1 + jersey/pom.xml | 6 +- jta/pom.xml | 1 - ksqldb/pom.xml | 7 +- kubernetes/k8s-intro/pom.xml | 1 - mapstruct/pom.xml | 6 +- maven-modules/host-maven-repo-example/pom.xml | 24 ++-- .../aggregator/module1/pom.xml | 3 +- .../aggregator/module2/module3/pom.xml | 3 +- .../aggregator/module2/pom.xml | 3 +- .../aggregator/pom.xml | 3 +- .../maven-parent-pom-resolution/pom.xml | 2 +- maven-modules/maven-printing-plugins/pom.xml | 5 +- maven-modules/maven-properties/pom.xml | 8 +- maven-modules/maven-surefire-plugin/pom.xml | 2 +- maven-modules/pom.xml | 2 +- .../oauth2-authorization-server/pom.xml | 4 +- oauth2-framework-impl/oauth2-client/pom.xml | 4 +- .../oauth2-resource-server/pom.xml | 4 +- oauth2-framework-impl/pom.xml | 4 +- osgi/osgi-intro-sample-client/pom.xml | 2 - .../design-patterns-architectural/pom.xml | 1 - patterns/design-patterns-cloud/pom.xml | 1 - patterns/simplehexagonalexample/pom.xml | 53 +++++---- persistence-modules/deltaspike/pom.xml | 64 +++++----- .../hibernate-enterprise/pom.xml | 6 +- persistence-modules/java-mongodb/pom.xml | 6 +- persistence-modules/redis/pom.xml | 6 +- .../spring-data-arangodb/pom.xml | 5 +- .../spring-data-cassandra-test/pom.xml | 99 +++++++--------- .../spring-data-jpa-crud/pom.xml | 3 +- .../spring-data-mongodb-reactive/pom.xml | 5 +- reactor-core/pom.xml | 2 +- restx/pom.xml | 12 +- spring-5-data-reactive/pom.xml | 5 +- .../parent-multi-module/application/pom.xml | 1 + .../spring-boot-environment/pom.xml | 2 +- .../spring-boot-exceptions/pom.xml | 2 +- .../spring-boot-flowable/pom.xml | 2 +- .../spring-boot-jasypt/pom.xml | 2 +- spring-boot-modules/spring-boot-mvc-2/pom.xml | 2 +- .../spring-boot-mvc-birt/pom.xml | 2 +- .../spring-boot-mvc-jersey/pom.xml | 2 +- spring-boot-modules/spring-boot-mvc/pom.xml | 2 +- .../spring-boot-nashorn/pom.xml | 2 +- .../spring-boot-parent/pom.xml | 2 +- .../spring-boot-performance/pom.xml | 2 +- .../spring-boot-validation/pom.xml | 2 +- spring-caching-2/pom.xml | 16 +-- spring-cloud/pom.xml | 1 - .../extra-configs/pom.xml | 22 ++-- spring-cloud/spring-cloud-aws/pom.xml | 24 ++-- .../spring-cloud-bootstrap/config/pom.xml | 24 ++-- .../spring-cloud-bootstrap/svc-rating/pom.xml | 24 ++-- .../spring-cloud-bootstrap/zipkin/pom.xml | 24 ++-- .../spring-cloud-connectors-heroku/pom.xml | 24 ++-- .../spring-cloud-contract-producer/pom.xml | 1 + .../spring-cloud-dapr/gateway/pom.xml | 22 ++-- .../spring-cloud-dapr/greeting/pom.xml | 21 ++-- spring-cloud/spring-cloud-dapr/pom.xml | 5 +- .../docker-message-server/pom.xml | 2 +- .../readiness-example/pom.xml | 2 - spring-roo/pom.xml | 4 +- spring-security-modules/pom.xml | 2 +- .../spring-security-web-react/pom.xml | 112 ++++-------------- spring-web-modules/spring-mvc-views/pom.xml | 2 +- testing-modules/junit-5-basics/pom.xml | 1 - testing-modules/rest-assured/pom.xml | 1 - 91 files changed, 461 insertions(+), 548 deletions(-) diff --git a/algorithms-genetic/pom.xml b/algorithms-genetic/pom.xml index 1c9224aff2..00c9b88dfe 100644 --- a/algorithms-genetic/pom.xml +++ b/algorithms-genetic/pom.xml @@ -50,4 +50,4 @@ 1.11 - + \ No newline at end of file diff --git a/apache-tapestry/pom.xml b/apache-tapestry/pom.xml index 13ae49b0ba..7a4c2b53b5 100644 --- a/apache-tapestry/pom.xml +++ b/apache-tapestry/pom.xml @@ -32,7 +32,6 @@ - @@ -110,8 +109,6 @@
- - jboss diff --git a/aws-reactive/pom.xml b/aws-reactive/pom.xml index ea1e0c44a4..923e1361ab 100644 --- a/aws-reactive/pom.xml +++ b/aws-reactive/pom.xml @@ -93,5 +93,5 @@ 2.2.1.RELEASE 2.10.27 - + \ No newline at end of file diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml index ce7ec72aeb..931fce820b 100644 --- a/core-java-modules/core-java-12/pom.xml +++ b/core-java-modules/core-java-12/pom.xml @@ -1,60 +1,60 @@ - 4.0.0 - core-java-12 - 0.1.0-SNAPSHOT - core-java-12 - jar - http://maven.apache.org + 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-12 + 0.1.0-SNAPSHOT + core-java-12 + jar + http://maven.apache.org - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + - - - org.assertj - assertj-core - ${assertj.version} - test - - - commons-io - commons-io - 2.11.0 - - + + + org.assertj + assertj-core + ${assertj.version} + test + + + commons-io + commons-io + 2.11.0 + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source.version} - ${maven.compiler.target.version} - --enable-preview - - - - maven-surefire-plugin - - --enable-preview - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source.version} + ${maven.compiler.target.version} + --enable-preview + + + + maven-surefire-plugin + + --enable-preview + + + + - - 12 - 12 - 3.6.1 - + + 12 + 12 + 3.6.1 + \ No newline at end of file diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml index f3382f6577..a03332d8bc 100644 --- a/core-java-modules/core-java-14/pom.xml +++ b/core-java-modules/core-java-14/pom.xml @@ -14,7 +14,7 @@ 1.0.0-SNAPSHOT ../../ - + org.assertj @@ -35,7 +35,7 @@ test - + diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml index a8a84511db..5a78d9a46f 100644 --- a/core-java-modules/core-java-16/pom.xml +++ b/core-java-modules/core-java-16/pom.xml @@ -1,53 +1,53 @@ - 4.0.0 - core-java-16 - 0.1.0-SNAPSHOT - core-java-16 - jar - http://maven.apache.org + 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-16 + 0.1.0-SNAPSHOT + core-java-16 + jar + http://maven.apache.org - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + - - - org.assertj - assertj-core - ${assertj.version} - test - - - org.apache.commons - commons-lang3 - 3.12.0 - - + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source.version} - ${maven.compiler.target.version} - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source.version} + ${maven.compiler.target.version} + + + + - - 16 - 16 - 3.6.1 - + + 16 + 16 + 3.6.1 + \ No newline at end of file diff --git a/core-java-modules/core-java-8-2/pom.xml b/core-java-modules/core-java-8-2/pom.xml index e1a861a63c..f3e60f8d5f 100644 --- a/core-java-modules/core-java-8-2/pom.xml +++ b/core-java-modules/core-java-8-2/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-8-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8-datetime-2/pom.xml b/core-java-modules/core-java-8-datetime-2/pom.xml index 9972122544..a5a0417374 100644 --- a/core-java-modules/core-java-8-datetime-2/pom.xml +++ b/core-java-modules/core-java-8-datetime-2/pom.xml @@ -7,7 +7,7 @@ ${project.parent.version} core-java-8-datetime-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml index 48b2d062b0..a79d5d089b 100644 --- a/core-java-modules/core-java-8-datetime/pom.xml +++ b/core-java-modules/core-java-8-datetime/pom.xml @@ -7,7 +7,7 @@ ${project.parent.version} core-java-8-datetime jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8/pom.xml b/core-java-modules/core-java-8/pom.xml index 13b2fbcf89..a7a2a1a0f8 100644 --- a/core-java-modules/core-java-8/pom.xml +++ b/core-java-modules/core-java-8/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-8 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml index 2f174002bb..00480a28e1 100644 --- a/core-java-modules/core-java-9-new-features/pom.xml +++ b/core-java-modules/core-java-9-new-features/pom.xml @@ -39,7 +39,7 @@ test
- + incubator-features @@ -131,7 +131,7 @@ - + core-java-9-new-features diff --git a/core-java-modules/core-java-arrays-sorting/pom.xml b/core-java-modules/core-java-arrays-sorting/pom.xml index d30e2bfabc..8c55204347 100644 --- a/core-java-modules/core-java-arrays-sorting/pom.xml +++ b/core-java-modules/core-java-arrays-sorting/pom.xml @@ -78,4 +78,5 @@ 28.2-jre 3.10.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-char/pom.xml b/core-java-modules/core-java-char/pom.xml index ef356d9542..23156b5a22 100644 --- a/core-java-modules/core-java-char/pom.xml +++ b/core-java-modules/core-java-char/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-char jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-2/pom.xml b/core-java-modules/core-java-collections-2/pom.xml index 421ba9abac..ad76990af3 100644 --- a/core-java-modules/core-java-collections-2/pom.xml +++ b/core-java-modules/core-java-collections-2/pom.xml @@ -6,7 +6,7 @@ core-java-collections-2 core-java-collections-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-3/pom.xml b/core-java-modules/core-java-collections-3/pom.xml index c7b1284d5c..40f1867738 100644 --- a/core-java-modules/core-java-collections-3/pom.xml +++ b/core-java-modules/core-java-collections-3/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-collections-3 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml index 7eb8222211..9dc26cd5d5 100644 --- a/core-java-modules/core-java-collections-4/pom.xml +++ b/core-java-modules/core-java-collections-4/pom.xml @@ -1,31 +1,31 @@ - 4.0.0 - core-java-collections-4 - 0.1.0-SNAPSHOT - core-java-collections-4 - 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-collections-4 + 0.1.0-SNAPSHOT + core-java-collections-4 + 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.assertj - assertj-core - ${assertj.version} - test - - + + + org.assertj + assertj-core + ${assertj.version} + test + + - - 3.19.0 - + + 3.19.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-collections-maps/pom.xml b/core-java-modules/core-java-collections-maps/pom.xml index 68e5c736cd..855f40c304 100644 --- a/core-java-modules/core-java-collections-maps/pom.xml +++ b/core-java-modules/core-java-collections-maps/pom.xml @@ -33,5 +33,5 @@ 4.1 3.6.1 - - + + \ No newline at end of file diff --git a/core-java-modules/core-java-collections/pom.xml b/core-java-modules/core-java-collections/pom.xml index 81bcdc74aa..38513c889a 100644 --- a/core-java-modules/core-java-collections/pom.xml +++ b/core-java-modules/core-java-collections/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-collections jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-date-operations-1/pom.xml b/core-java-modules/core-java-date-operations-1/pom.xml index 955cd910e9..7b7c68d1b6 100644 --- a/core-java-modules/core-java-date-operations-1/pom.xml +++ b/core-java-modules/core-java-date-operations-1/pom.xml @@ -26,7 +26,6 @@ commons-lang3 ${commons-lang3.version}
- org.assertj assertj-core diff --git a/core-java-modules/core-java-exceptions-3/pom.xml b/core-java-modules/core-java-exceptions-3/pom.xml index 6e35845c6a..c4c3c00b56 100644 --- a/core-java-modules/core-java-exceptions-3/pom.xml +++ b/core-java-modules/core-java-exceptions-3/pom.xml @@ -36,4 +36,5 @@ 3.10.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-types/pom.xml b/core-java-modules/core-java-lang-oop-types/pom.xml index b770caf970..a5b492f5ca 100644 --- a/core-java-modules/core-java-lang-oop-types/pom.xml +++ b/core-java-modules/core-java-lang-oop-types/pom.xml @@ -25,6 +25,7 @@ ${commons-codec.version} + 1.15 diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 13dd20b5da..b272d2aa13 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -137,4 +137,5 @@ 2.22.2 5.6.2 + \ No newline at end of file diff --git a/java-lite/pom.xml b/java-lite/pom.xml index c422e9a421..092063a110 100644 --- a/java-lite/pom.xml +++ b/java-lite/pom.xml @@ -21,13 +21,11 @@ activeweb ${activeweb.version} - mysql mysql-connector-java ${mysql.connector.java.version} - com.sun tools @@ -35,14 +33,12 @@ system ${java.home}/../lib/tools.jar - org.javalite activeweb-testing ${activeweb-testing.version} test - @@ -73,7 +69,6 @@ - org.javalite activejdbc-instrumentation diff --git a/javaxval/pom.xml b/javaxval/pom.xml index d684e9dfe2..f0093e0aa4 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -48,4 +48,5 @@ 5.0.2.RELEASE 3.11.1 + \ No newline at end of file diff --git a/jersey/pom.xml b/jersey/pom.xml index 9f57179065..c8a7de66ae 100644 --- a/jersey/pom.xml +++ b/jersey/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 jersey 0.0.1-SNAPSHOT diff --git a/jta/pom.xml b/jta/pom.xml index 1937f55a20..e9f9364646 100644 --- a/jta/pom.xml +++ b/jta/pom.xml @@ -29,7 +29,6 @@ org.springframework.boot spring-boot-starter - org.hsqldb hsqldb diff --git a/ksqldb/pom.xml b/ksqldb/pom.xml index 13867b16e3..970e8c3788 100644 --- a/ksqldb/pom.xml +++ b/ksqldb/pom.xml @@ -28,34 +28,29 @@ ksqldb-api-client ${ksqldb.version} - org.projectlombok lombok ${lombok.version} - org.awaitility awaitility ${awaitility.version} test - org.assertj assertj-core ${assertj.version} test - org.testcontainers testcontainers ${testcontainers.version} test - org.testcontainers junit-jupiter @@ -71,4 +66,4 @@ 1.15.3 - + \ No newline at end of file diff --git a/kubernetes/k8s-intro/pom.xml b/kubernetes/k8s-intro/pom.xml index 5da137ebb6..61722cb2c8 100644 --- a/kubernetes/k8s-intro/pom.xml +++ b/kubernetes/k8s-intro/pom.xml @@ -17,7 +17,6 @@ client-java 11.0.0 - ch.qos.logback logback-classic diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml index 1e7ce6cbfc..48687a73b9 100644 --- a/mapstruct/pom.xml +++ b/mapstruct/pom.xml @@ -1,7 +1,7 @@ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 mapstruct 1.0 @@ -90,4 +90,4 @@ 3.16.1 - \ No newline at end of file + \ No newline at end of file diff --git a/maven-modules/host-maven-repo-example/pom.xml b/maven-modules/host-maven-repo-example/pom.xml index 9434e4a3b3..bd58dddeda 100644 --- a/maven-modules/host-maven-repo-example/pom.xml +++ b/maven-modules/host-maven-repo-example/pom.xml @@ -1,28 +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 - com.baeldung.maven.plugin host-maven-repo-example 1.0-SNAPSHOT - https://github.com/sgrverma23/host-maven-repo-example.git - - - github - 8 - 8 - - https://github.com/sgrverma23/host-maven-repo-example.git scm:git:git@github.com:sgrverma23/host-maven-repo-example.git scm:git:git@github.com:sgrverma23/host-maven-repo-example.git - - internal.repo @@ -30,6 +19,7 @@ file://${project.build.directory}/mvn-artifact + @@ -95,6 +85,7 @@ + PROJECT-REPO-URL @@ -105,4 +96,11 @@ + + + github + 8 + 8 + + \ No newline at end of file diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml index 01b522748f..e1f411db2f 100644 --- a/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml @@ -4,12 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 module1 + pom + com.baeldung.maven-parent-pom-resolution aggregator 1.0.0-SNAPSHOT - pom diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml index da0193be10..d983f35e3e 100644 --- a/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml @@ -4,6 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 module3 + pom + com.baeldung.maven-parent-pom-resolution aggregator @@ -12,6 +14,5 @@ ../../pom.xml - pom diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml index bf9c89ecf4..48c1ebab9d 100644 --- a/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml @@ -4,6 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 module2 + pom + com.baeldung.maven-parent-pom-resolution module1 @@ -11,7 +13,6 @@ ../module1/pom.xml - pom module3 diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml index 0067dfc009..8f6e3453a5 100644 --- a/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml +++ b/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml @@ -5,13 +5,14 @@ 4.0.0 com.baeldung.maven-parent-pom-resolution aggregator + pom + com.baeldung maven-parent-pom-resolution 1.0.0-SNAPSHOT - pom module1 diff --git a/maven-modules/maven-parent-pom-resolution/pom.xml b/maven-modules/maven-parent-pom-resolution/pom.xml index d5a96c0998..e5340032b7 100644 --- a/maven-modules/maven-parent-pom-resolution/pom.xml +++ b/maven-modules/maven-parent-pom-resolution/pom.xml @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/maven-modules/maven-printing-plugins/pom.xml b/maven-modules/maven-printing-plugins/pom.xml index b68c88dbee..07ddd8d1e8 100644 --- a/maven-modules/maven-printing-plugins/pom.xml +++ b/maven-modules/maven-printing-plugins/pom.xml @@ -53,7 +53,8 @@ Hello, world Embed a line break: ${line.separator} - ArtifactId is ${project.artifactId} + ArtifactId is + ${project.artifactId} INFO /logs/log-echo.txt @@ -76,7 +77,7 @@ log.info('Test message: {}', 'Hello, World!') log.info('Embed a line break {}', System.lineSeparator()) - log.info('ArtifactId is: ${project.artifactId}') + log.info('ArtifactId is: ${project.artifactId}') log.warn('Message only in debug mode') diff --git a/maven-modules/maven-properties/pom.xml b/maven-modules/maven-properties/pom.xml index 9454664c3f..f4c657c2e4 100644 --- a/maven-modules/maven-properties/pom.xml +++ b/maven-modules/maven-properties/pom.xml @@ -13,12 +13,12 @@ 1.0.0-SNAPSHOT ../.. - + junit junit - ${junit.version} + ${junit.version} @@ -46,7 +46,7 @@ ${project.name} property-from-pom - 4.13 + 4.13 - + \ No newline at end of file diff --git a/maven-modules/maven-surefire-plugin/pom.xml b/maven-modules/maven-surefire-plugin/pom.xml index 903adf3c11..98decc69e1 100644 --- a/maven-modules/maven-surefire-plugin/pom.xml +++ b/maven-modules/maven-surefire-plugin/pom.xml @@ -7,11 +7,11 @@ 0.0.1-SNAPSHOT maven-surefire-plugin jar + com.baeldung maven-modules 0.0.1-SNAPSHOT - diff --git a/maven-modules/pom.xml b/maven-modules/pom.xml index fe3bbd2653..9e60e895a0 100644 --- a/maven-modules/pom.xml +++ b/maven-modules/pom.xml @@ -39,4 +39,4 @@ maven-parent-pom-resolution - + \ No newline at end of file diff --git a/oauth2-framework-impl/oauth2-authorization-server/pom.xml b/oauth2-framework-impl/oauth2-authorization-server/pom.xml index f8ced851ba..c206fc2e55 100644 --- a/oauth2-framework-impl/oauth2-authorization-server/pom.xml +++ b/oauth2-framework-impl/oauth2-authorization-server/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-authorization-server oauth2-authorization-server diff --git a/oauth2-framework-impl/oauth2-client/pom.xml b/oauth2-framework-impl/oauth2-client/pom.xml index 814dabc664..715b7e729c 100644 --- a/oauth2-framework-impl/oauth2-client/pom.xml +++ b/oauth2-framework-impl/oauth2-client/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-client oauth2-client diff --git a/oauth2-framework-impl/oauth2-resource-server/pom.xml b/oauth2-framework-impl/oauth2-resource-server/pom.xml index 8f135055a2..d3af2cfd80 100644 --- a/oauth2-framework-impl/oauth2-resource-server/pom.xml +++ b/oauth2-framework-impl/oauth2-resource-server/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-resource-server oauth2-resource-server diff --git a/oauth2-framework-impl/pom.xml b/oauth2-framework-impl/pom.xml index 31983b08ad..5cfcb22fab 100644 --- a/oauth2-framework-impl/pom.xml +++ b/oauth2-framework-impl/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 com.baeldung.oauth2 oauth2-framework-impl diff --git a/osgi/osgi-intro-sample-client/pom.xml b/osgi/osgi-intro-sample-client/pom.xml index b1b04aef78..7e679dd3a7 100644 --- a/osgi/osgi-intro-sample-client/pom.xml +++ b/osgi/osgi-intro-sample-client/pom.xml @@ -37,9 +37,7 @@ ${project.artifactId} ${project.version} com.baeldung.osgi.sample.client.Client - com.baeldung.osgi.sample.client - diff --git a/patterns/design-patterns-architectural/pom.xml b/patterns/design-patterns-architectural/pom.xml index 02716d7a10..11194a9c92 100644 --- a/patterns/design-patterns-architectural/pom.xml +++ b/patterns/design-patterns-architectural/pom.xml @@ -55,7 +55,6 @@ 6.0.6 2.5.3 3.3.0 - \ No newline at end of file diff --git a/patterns/design-patterns-cloud/pom.xml b/patterns/design-patterns-cloud/pom.xml index 950b6efb94..c3e2fcfc39 100644 --- a/patterns/design-patterns-cloud/pom.xml +++ b/patterns/design-patterns-cloud/pom.xml @@ -8,5 +8,4 @@ 1.0.0-SNAPSHOT design-patterns-cloud pom - \ No newline at end of file diff --git a/patterns/simplehexagonalexample/pom.xml b/patterns/simplehexagonalexample/pom.xml index b73e81be44..d9b9b36831 100644 --- a/patterns/simplehexagonalexample/pom.xml +++ b/patterns/simplehexagonalexample/pom.xml @@ -1,31 +1,32 @@ - 4.0.0 - 1.0.0-SNAPSHOT - simple-hexagonal-example - simpleHexagonalExample + 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 + 1.0.0-SNAPSHOT + simple-hexagonal-example + simpleHexagonalExample - - com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../../parent-boot-2 - + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + - - - org.springframework.boot - spring-boot-starter-web - - + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - \ No newline at end of file diff --git a/persistence-modules/deltaspike/pom.xml b/persistence-modules/deltaspike/pom.xml index af02ba76c0..1255e5ab27 100644 --- a/persistence-modules/deltaspike/pom.xml +++ b/persistence-modules/deltaspike/pom.xml @@ -16,6 +16,38 @@ 1.0.0-SNAPSHOT + + + + + org.wildfly.bom + jboss-javaee-7.0-with-tools + ${jboss.bom.version} + pom + import + + + org.wildfly.bom + jboss-javaee-7.0-with-hibernate + ${jboss.bom.version} + pom + import + + + org.apache.deltaspike.distribution + distributions-bom + ${deltaspike.version} + pom + import + + + + @@ -245,38 +277,6 @@ - - - - - org.wildfly.bom - jboss-javaee-7.0-with-tools - ${jboss.bom.version} - pom - import - - - org.wildfly.bom - jboss-javaee-7.0-with-hibernate - ${jboss.bom.version} - pom - import - - - org.apache.deltaspike.distribution - distributions-bom - ${deltaspike.version} - pom - import - - - - 3.7.4 1.8.2 diff --git a/persistence-modules/hibernate-enterprise/pom.xml b/persistence-modules/hibernate-enterprise/pom.xml index dadfa211be..1d9ebfc156 100644 --- a/persistence-modules/hibernate-enterprise/pom.xml +++ b/persistence-modules/hibernate-enterprise/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 hibernate-enterprise 0.0.1-SNAPSHOT diff --git a/persistence-modules/java-mongodb/pom.xml b/persistence-modules/java-mongodb/pom.xml index f708a54f46..03229e72bd 100644 --- a/persistence-modules/java-mongodb/pom.xml +++ b/persistence-modules/java-mongodb/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 java-mongodb 1.0-SNAPSHOT diff --git a/persistence-modules/redis/pom.xml b/persistence-modules/redis/pom.xml index 8079d56cbd..d1cb927c20 100644 --- a/persistence-modules/redis/pom.xml +++ b/persistence-modules/redis/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 redis 0.1-SNAPSHOT diff --git a/persistence-modules/spring-data-arangodb/pom.xml b/persistence-modules/spring-data-arangodb/pom.xml index 562f06ae40..7303316edb 100644 --- a/persistence-modules/spring-data-arangodb/pom.xml +++ b/persistence-modules/spring-data-arangodb/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-data-arangodb spring-data-arangodb @@ -18,7 +18,6 @@ org.springframework.boot spring-boot-starter - com.arangodb arangodb-spring-data diff --git a/persistence-modules/spring-data-cassandra-test/pom.xml b/persistence-modules/spring-data-cassandra-test/pom.xml index f2cbc834de..5d9bcc63c2 100644 --- a/persistence-modules/spring-data-cassandra-test/pom.xml +++ b/persistence-modules/spring-data-cassandra-test/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-data-cassandra-test spring-data-cassandra-test @@ -14,6 +14,50 @@ ../../parent-boot-2 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-cassandra + ${spring-boot-starter-data-cassandra.version} + + + com.datastax.oss + java-driver-core + ${java-driver-core.version} + + + org.projectlombok + lombok + ${lombok.version} + + + com.datastax.oss + native-protocol + ${native-protocol.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + org.testcontainers + testcontainers + ${testcontainers.version} + test + + + org.testcontainers + cassandra + ${testcontainers.version} + test + + + 2.5.3 1.18.18 @@ -23,55 +67,4 @@ 1.5.0 - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-data-cassandra - ${spring-boot-starter-data-cassandra.version} - - - - com.datastax.oss - java-driver-core - ${java-driver-core.version} - - - - org.projectlombok - lombok - ${lombok.version} - - - - com.datastax.oss - native-protocol - ${native-protocol.version} - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.testcontainers - testcontainers - ${testcontainers.version} - test - - - - org.testcontainers - cassandra - ${testcontainers.version} - test - - - \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-crud/pom.xml b/persistence-modules/spring-data-jpa-crud/pom.xml index 8f9a3cc0e8..139632a42a 100644 --- a/persistence-modules/spring-data-jpa-crud/pom.xml +++ b/persistence-modules/spring-data-jpa-crud/pom.xml @@ -1,8 +1,7 @@ + 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-jpa-crud spring-data-jpa-crud diff --git a/persistence-modules/spring-data-mongodb-reactive/pom.xml b/persistence-modules/spring-data-mongodb-reactive/pom.xml index 9fb22b6033..eabcc77352 100644 --- a/persistence-modules/spring-data-mongodb-reactive/pom.xml +++ b/persistence-modules/spring-data-mongodb-reactive/pom.xml @@ -147,10 +147,7 @@ 1.4.200 1.5.23 3.3.1.RELEASE - + 2.2.6.RELEASE diff --git a/reactor-core/pom.xml b/reactor-core/pom.xml index c13dda63d5..420b1b028a 100644 --- a/reactor-core/pom.xml +++ b/reactor-core/pom.xml @@ -45,4 +45,4 @@ 3.6.1 - + \ No newline at end of file diff --git a/restx/pom.xml b/restx/pom.xml index ac0ff36376..83dd2afd58 100644 --- a/restx/pom.xml +++ b/restx/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 restx 0.1-SNAPSHOT @@ -123,10 +123,8 @@ attach-docs - + prepare-package jar @@ -151,4 +149,4 @@ 0.35-rc4 - + \ No newline at end of file diff --git a/spring-5-data-reactive/pom.xml b/spring-5-data-reactive/pom.xml index dffd4be99b..3a9651de39 100644 --- a/spring-5-data-reactive/pom.xml +++ b/spring-5-data-reactive/pom.xml @@ -138,10 +138,7 @@ 1.4.200 1.5.23 3.3.1.RELEASE - + 2.2.6.RELEASE diff --git a/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml b/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml index 948482b21b..1c26ec32d3 100644 --- a/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml +++ b/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml @@ -34,4 +34,5 @@ + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-environment/pom.xml b/spring-boot-modules/spring-boot-environment/pom.xml index 5327825409..d4b260ee3d 100644 --- a/spring-boot-modules/spring-boot-environment/pom.xml +++ b/spring-boot-modules/spring-boot-environment/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-environment - war spring-boot-environment + war Demo project for Spring Boot diff --git a/spring-boot-modules/spring-boot-exceptions/pom.xml b/spring-boot-modules/spring-boot-exceptions/pom.xml index 9866c418be..cec1bab4ff 100644 --- a/spring-boot-modules/spring-boot-exceptions/pom.xml +++ b/spring-boot-modules/spring-boot-exceptions/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-exceptions - jar spring-boot-exceptions + jar Demo project for working with Spring Boot exceptions diff --git a/spring-boot-modules/spring-boot-flowable/pom.xml b/spring-boot-modules/spring-boot-flowable/pom.xml index fee4d9fdfc..320a684880 100644 --- a/spring-boot-modules/spring-boot-flowable/pom.xml +++ b/spring-boot-modules/spring-boot-flowable/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-flowable - war spring-boot-flowable + war Spring Boot Flowable Module diff --git a/spring-boot-modules/spring-boot-jasypt/pom.xml b/spring-boot-modules/spring-boot-jasypt/pom.xml index 1032500de7..0a37c545ac 100644 --- a/spring-boot-modules/spring-boot-jasypt/pom.xml +++ b/spring-boot-modules/spring-boot-jasypt/pom.xml @@ -5,8 +5,8 @@ 4.0.0 com.example.jasypt spring-boot-jasypt - jar spring-boot-jasypt + jar Demo project for Spring Boot diff --git a/spring-boot-modules/spring-boot-mvc-2/pom.xml b/spring-boot-modules/spring-boot-mvc-2/pom.xml index 43e1f12efc..d347b36b3b 100644 --- a/spring-boot-modules/spring-boot-mvc-2/pom.xml +++ b/spring-boot-modules/spring-boot-mvc-2/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-mvc-2 - jar spring-boot-mvc-2 + jar Module For Spring Boot MVC Web Fn diff --git a/spring-boot-modules/spring-boot-mvc-birt/pom.xml b/spring-boot-modules/spring-boot-mvc-birt/pom.xml index 54a5091559..16b07000f8 100644 --- a/spring-boot-modules/spring-boot-mvc-birt/pom.xml +++ b/spring-boot-modules/spring-boot-mvc-birt/pom.xml @@ -5,8 +5,8 @@ 4.0.0 spring-boot-mvc-birt 0.0.1-SNAPSHOT - jar spring-boot-mvc-birt + jar Module For Spring Boot Integration with BIRT 4.0.0 com.baeldung @@ -627,4 +627,4 @@ 1.2.0 - + \ No newline at end of file diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml index 917360dc3e..e482a67a0e 100644 --- a/spring-security-modules/pom.xml +++ b/spring-security-modules/pom.xml @@ -49,4 +49,4 @@ spring-social-login - + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-react/pom.xml b/spring-security-modules/spring-security-web-react/pom.xml index 61df563edd..a31fafc5ad 100644 --- a/spring-security-modules/spring-security-web-react/pom.xml +++ b/spring-security-modules/spring-security-web-react/pom.xml @@ -108,41 +108,17 @@ - - + + org.eclipse.jetty jetty-maven-plugin @@ -152,61 +128,17 @@ - - + + diff --git a/spring-web-modules/spring-mvc-views/pom.xml b/spring-web-modules/spring-mvc-views/pom.xml index 7e48175ff2..ac2215f983 100644 --- a/spring-web-modules/spring-mvc-views/pom.xml +++ b/spring-web-modules/spring-mvc-views/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-views - war spring-mvc-views + war com.baeldung diff --git a/testing-modules/junit-5-basics/pom.xml b/testing-modules/junit-5-basics/pom.xml index 0358f0c29a..cf39068ae7 100644 --- a/testing-modules/junit-5-basics/pom.xml +++ b/testing-modules/junit-5-basics/pom.xml @@ -99,7 +99,6 @@ maven-surefire-plugin ${maven-surefire-plugin.version} - **/*IntegrationTest.java diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index 3bb351f123..0658094efd 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -12,7 +12,6 @@ parent-boot-2 0.0.1-SNAPSHOT ../../parent-boot-2 - From 32e5a9ccb0811672875c9593018486ae315fd440 Mon Sep 17 00:00:00 2001 From: Kayvan Tehrani Date: Mon, 20 Sep 2021 00:25:13 +0430 Subject: [PATCH 42/42] adding new module (#11199) --- .../maven-dependency-management/pom.xml | 45 +++++++++++++++++++ .../src/main/java/com/baeldung/Main.java | 11 +++++ maven-modules/pom.xml | 1 + 3 files changed, 57 insertions(+) create mode 100644 maven-modules/maven-dependency-management/pom.xml create mode 100644 maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java diff --git a/maven-modules/maven-dependency-management/pom.xml b/maven-modules/maven-dependency-management/pom.xml new file mode 100644 index 0000000000..fb2bdfe602 --- /dev/null +++ b/maven-modules/maven-dependency-management/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + com.baeldung + maven-dependency + 1.0.0-SNAPSHOT + pom + + + maven-modules + com.baeldung + 0.0.1-SNAPSHOT + + + + + + + junit + junit + 4.13.2 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + + + + junit + junit + + + org.apache.commons + commons-lang3 + + + \ No newline at end of file diff --git a/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java b/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java new file mode 100644 index 0000000000..ea4451a41b --- /dev/null +++ b/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java @@ -0,0 +1,11 @@ +package com.baeldung; + +import org.apache.commons.lang3.StringUtils; + +public class Main { + + public static void main(String[] args) { + + StringUtils.isBlank(" "); + } +} diff --git a/maven-modules/pom.xml b/maven-modules/pom.xml index 9e60e895a0..3f87c60406 100644 --- a/maven-modules/pom.xml +++ b/maven-modules/pom.xml @@ -37,6 +37,7 @@ plugin-management maven-surefire-plugin maven-parent-pom-resolution + maven-dependency-management \ No newline at end of file