From bf057db224a8dc35a5e8a79a34728c1f39d3c270 Mon Sep 17 00:00:00 2001 From: Ehsan Sasanianno Date: Sat, 19 Nov 2022 17:11:59 +0100 Subject: [PATCH 01/25] update bucket4j version in spring-boot-libraries --- spring-boot-modules/spring-boot-libraries/pom.xml | 4 ++-- .../bucket4japp/service/PricingPlanService.java | 3 +-- .../bucket4japp/Bucket4jUsageUnitTest.java | 15 +++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/spring-boot-modules/spring-boot-libraries/pom.xml b/spring-boot-modules/spring-boot-libraries/pom.xml index 7ac7043abc..d8ca53f013 100644 --- a/spring-boot-modules/spring-boot-libraries/pom.xml +++ b/spring-boot-modules/spring-boot-libraries/pom.xml @@ -226,8 +226,8 @@ 2.1 2.6.0 3.3.0 - 4.10.0 - 0.2.0 + 7.6.0 + 0.7.0 2.8.2 diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/ratelimiting/bucket4japp/service/PricingPlanService.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/ratelimiting/bucket4japp/service/PricingPlanService.java index 7d8a718601..c4f7747171 100644 --- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/ratelimiting/bucket4japp/service/PricingPlanService.java +++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/ratelimiting/bucket4japp/service/PricingPlanService.java @@ -7,7 +7,6 @@ import org.springframework.stereotype.Service; import io.github.bucket4j.Bandwidth; import io.github.bucket4j.Bucket; -import io.github.bucket4j.Bucket4j; @Service public class PricingPlanService { @@ -24,7 +23,7 @@ public class PricingPlanService { } private Bucket bucket(Bandwidth limit) { - return Bucket4j.builder() + return Bucket.builder() .addLimit(limit) .build(); } diff --git a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/ratelimiting/bucket4japp/Bucket4jUsageUnitTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/ratelimiting/bucket4japp/Bucket4jUsageUnitTest.java index fbf63ba403..8b9fba6dd3 100644 --- a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/ratelimiting/bucket4japp/Bucket4jUsageUnitTest.java +++ b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/ratelimiting/bucket4japp/Bucket4jUsageUnitTest.java @@ -1,7 +1,7 @@ package com.baeldung.ratelimiting.bucket4japp; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.Duration; import java.util.concurrent.CountDownLatch; @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Test; import io.github.bucket4j.Bandwidth; import io.github.bucket4j.Bucket; -import io.github.bucket4j.Bucket4j; import io.github.bucket4j.Refill; public class Bucket4jUsageUnitTest { @@ -22,7 +21,7 @@ public class Bucket4jUsageUnitTest { public void givenBucketLimit_whenExceedLimit_thenConsumeReturnsFalse() { Refill refill = Refill.intervally(10, Duration.ofMinutes(1)); Bandwidth limit = Bandwidth.classic(10, refill); - Bucket bucket = Bucket4j.builder() + Bucket bucket = Bucket.builder() .addLimit(limit) .build(); @@ -34,7 +33,7 @@ public class Bucket4jUsageUnitTest { @Test public void givenMultipletLimits_whenExceedSmallerLimit_thenConsumeReturnsFalse() { - Bucket bucket = Bucket4j.builder() + Bucket bucket = Bucket.builder() .addLimit(Bandwidth.classic(10, Refill.intervally(10, Duration.ofMinutes(1)))) .addLimit(Bandwidth.classic(5, Refill.intervally(5, Duration.ofSeconds(20)))) .build(); @@ -49,7 +48,7 @@ public class Bucket4jUsageUnitTest { public void givenBucketLimit_whenThrottleRequests_thenConsumeReturnsTrue() throws InterruptedException { Refill refill = Refill.intervally(1, Duration.ofSeconds(2)); Bandwidth limit = Bandwidth.classic(1, refill); - Bucket bucket = Bucket4j.builder() + Bucket bucket = Bucket.builder() .addLimit(limit) .build(); @@ -65,8 +64,8 @@ public class Bucket4jUsageUnitTest { static class AssertTryConsume implements Runnable { - private Bucket bucket; - private CountDownLatch latch; + private final Bucket bucket; + private final CountDownLatch latch; AssertTryConsume(Bucket bucket, CountDownLatch latch) { this.bucket = bucket; From 3c57c4d5663bcdf376a0892910dfabb6db1d9543 Mon Sep 17 00:00:00 2001 From: Ssam Date: Sun, 20 Nov 2022 12:15:45 +0000 Subject: [PATCH 02/25] move article files to new module --- core-java-modules/core-java-jvm-2/README.md | 3 +-- .../resource/ClassGetResourceExample.java | 19 --------------- .../ClassLoaderGetResourceExample.java | 21 ----------------- .../com/baeldung/resource/example.txt | 1 - .../resource/ClassGetResourceUnitTest.java | 21 ----------------- .../ClassLoaderGetResourceUnitTest.java | 23 ------------------- core-java-modules/pom.xml | 1 + 7 files changed, 2 insertions(+), 87 deletions(-) delete mode 100644 core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassGetResourceExample.java delete mode 100644 core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java delete mode 100644 core-java-modules/core-java-jvm-2/src/main/resources/com/baeldung/resource/example.txt delete mode 100644 core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java delete mode 100644 core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java diff --git a/core-java-modules/core-java-jvm-2/README.md b/core-java-modules/core-java-jvm-2/README.md index 1313a1ce48..b00618a751 100644 --- a/core-java-modules/core-java-jvm-2/README.md +++ b/core-java-modules/core-java-jvm-2/README.md @@ -14,5 +14,4 @@ This module contains articles about working with the Java Virtual Machine (JVM). - [An Introduction to the Constant Pool in the JVM](https://www.baeldung.com/jvm-constant-pool) - [List All the Classes Loaded in the JVM](https://www.baeldung.com/jvm-list-all-classes-loaded) - [Static Fields and Garbage Collection](https://www.baeldung.com/java-static-fields-gc) -- [Difference Between Class.getResource() and ClassLoader.getResource()](https://www.baeldung.com/java-class-vs-classloader-getresource) -- More articles: [[<-- prev]](/core-java-modules/core-java-jvm) +- More articles: [[<-- prev]](/core-java-modules/core-java-jvm) [[next -->]](/core-java-modules/core-java-jvm-3) diff --git a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassGetResourceExample.java b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassGetResourceExample.java deleted file mode 100644 index d843be1c43..0000000000 --- a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassGetResourceExample.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.resource; - -import java.net.URL; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ClassGetResourceExample { - - private static Logger logger = LoggerFactory.getLogger(ClassGetResourceExample.class); - - public static void main(String[] args) { - URL resourceAbsolutePath = ClassGetResourceExample.class.getResource("/com/baeldung/resource/example.txt"); - logger.info("Resource with absolute path = {}", resourceAbsolutePath); - - URL resourceRelativePath = ClassGetResourceExample.class.getResource("example.txt"); - logger.info("Resource with relative path = {}", resourceRelativePath); - } -} \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java deleted file mode 100644 index e6ad06bd05..0000000000 --- a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.resource; - -import java.net.URL; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ClassLoaderGetResourceExample { - - private static Logger logger = LoggerFactory.getLogger(ClassLoaderGetResourceExample.class); - - public static void main(String[] args) { - URL resourceAbsolutePath = ClassLoaderGetResourceExample.class.getClassLoader() - .getResource("com/baeldung/resource/example.txt"); - logger.info("Resource with absolute path = {}", resourceAbsolutePath); - - URL resourceRelativePath = ClassLoaderGetResourceExample.class.getClassLoader() - .getResource("example.txt"); - logger.info("Resource with relative path = {}", resourceRelativePath); - } -} diff --git a/core-java-modules/core-java-jvm-2/src/main/resources/com/baeldung/resource/example.txt b/core-java-modules/core-java-jvm-2/src/main/resources/com/baeldung/resource/example.txt deleted file mode 100644 index 61641e23e2..0000000000 --- a/core-java-modules/core-java-jvm-2/src/main/resources/com/baeldung/resource/example.txt +++ /dev/null @@ -1 +0,0 @@ -Baeldung \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java deleted file mode 100644 index fb0c88f4bb..0000000000 --- a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.resource; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.net.URL; - -class ClassGetResourceUnitTest { - - @Test - void givenRelativeResourcePath_whenGetResource_thenReturnResource() { - URL resourceRelativePath = ClassGetResourceExample.class.getResource("example.txt"); - Assertions.assertNotNull(resourceRelativePath); - } - - @Test - void givenAbsoluteResourcePath_whenGetResource_thenReturnResource() { - URL resourceAbsolutePath = ClassGetResourceExample.class.getResource("/com/baeldung/resource/example.txt"); - Assertions.assertNotNull(resourceAbsolutePath); - } -} diff --git a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java deleted file mode 100644 index 54025c5404..0000000000 --- a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.resource; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.net.URL; - -class ClassLoaderGetResourceUnitTest { - - @Test - void givenRelativeResourcePath_whenGetResource_thenReturnNull() { - URL resourceRelativePath = ClassLoaderGetResourceExample.class.getClassLoader() - .getResource("example.txt"); - Assertions.assertNull(resourceRelativePath); - } - - @Test - void givenAbsoluteResourcePath_whenGetResource_thenReturnResource() { - URL resourceAbsolutePath = ClassLoaderGetResourceExample.class.getClassLoader() - .getResource("com/baeldung/resource/example.txt"); - Assertions.assertNotNull(resourceAbsolutePath); - } -} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 74bf4c662c..dfe9b46021 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -74,6 +74,7 @@ core-java-jndi core-java-jvm core-java-jvm-2 + core-java-jvm-3 core-java-lambdas core-java-lang core-java-lang-2 From 5e08af14a1b96d22116ea3ed7cdb64deb41cf213 Mon Sep 17 00:00:00 2001 From: Ssam Date: Sun, 20 Nov 2022 12:17:56 +0000 Subject: [PATCH 03/25] Include new module --- core-java-modules/core-java-jvm-3/README.md | 8 +++++++ core-java-modules/core-java-jvm-3/pom.xml | 21 +++++++++++++++++ .../resource/ClassGetResourceExample.java | 19 +++++++++++++++ .../ClassLoaderGetResourceExample.java | 21 +++++++++++++++++ .../com/baeldung/resource/example.txt | 1 + .../resource/ClassGetResourceUnitTest.java | 21 +++++++++++++++++ .../ClassLoaderGetResourceUnitTest.java | 23 +++++++++++++++++++ 7 files changed, 114 insertions(+) create mode 100644 core-java-modules/core-java-jvm-3/README.md create mode 100644 core-java-modules/core-java-jvm-3/pom.xml create mode 100644 core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassGetResourceExample.java create mode 100644 core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java create mode 100644 core-java-modules/core-java-jvm-3/src/resources/com/baeldung/resource/example.txt create mode 100644 core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java create mode 100644 core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java diff --git a/core-java-modules/core-java-jvm-3/README.md b/core-java-modules/core-java-jvm-3/README.md new file mode 100644 index 0000000000..5c694edaa0 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/README.md @@ -0,0 +1,8 @@ +## Core Java JVM Cookbooks and Examples + +This module contains articles about working with the Java Virtual Machine (JVM). + +### Relevant Articles: + +- [Difference Between Class.getResource() and ClassLoader.getResource()](https://www.baeldung.com/java-class-vs-classloader-getresource) +- More articles: [[<-- prev]](/core-java-modules/core-java-jvm-2) diff --git a/core-java-modules/core-java-jvm-3/pom.xml b/core-java-modules/core-java-jvm-3/pom.xml new file mode 100644 index 0000000000..86c3799c09 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + core-java-jvm-3 + 0.1.0-SNAPSHOT + core-java-jvm-3 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassGetResourceExample.java b/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassGetResourceExample.java new file mode 100644 index 0000000000..d843be1c43 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassGetResourceExample.java @@ -0,0 +1,19 @@ +package com.baeldung.resource; + +import java.net.URL; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ClassGetResourceExample { + + private static Logger logger = LoggerFactory.getLogger(ClassGetResourceExample.class); + + public static void main(String[] args) { + URL resourceAbsolutePath = ClassGetResourceExample.class.getResource("/com/baeldung/resource/example.txt"); + logger.info("Resource with absolute path = {}", resourceAbsolutePath); + + URL resourceRelativePath = ClassGetResourceExample.class.getResource("example.txt"); + logger.info("Resource with relative path = {}", resourceRelativePath); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java b/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java new file mode 100644 index 0000000000..e6ad06bd05 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/src/main/java/com/baeldung/resource/ClassLoaderGetResourceExample.java @@ -0,0 +1,21 @@ +package com.baeldung.resource; + +import java.net.URL; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ClassLoaderGetResourceExample { + + private static Logger logger = LoggerFactory.getLogger(ClassLoaderGetResourceExample.class); + + public static void main(String[] args) { + URL resourceAbsolutePath = ClassLoaderGetResourceExample.class.getClassLoader() + .getResource("com/baeldung/resource/example.txt"); + logger.info("Resource with absolute path = {}", resourceAbsolutePath); + + URL resourceRelativePath = ClassLoaderGetResourceExample.class.getClassLoader() + .getResource("example.txt"); + logger.info("Resource with relative path = {}", resourceRelativePath); + } +} diff --git a/core-java-modules/core-java-jvm-3/src/resources/com/baeldung/resource/example.txt b/core-java-modules/core-java-jvm-3/src/resources/com/baeldung/resource/example.txt new file mode 100644 index 0000000000..61641e23e2 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/src/resources/com/baeldung/resource/example.txt @@ -0,0 +1 @@ +Baeldung \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java b/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java new file mode 100644 index 0000000000..fb0c88f4bb --- /dev/null +++ b/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassGetResourceUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.resource; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.net.URL; + +class ClassGetResourceUnitTest { + + @Test + void givenRelativeResourcePath_whenGetResource_thenReturnResource() { + URL resourceRelativePath = ClassGetResourceExample.class.getResource("example.txt"); + Assertions.assertNotNull(resourceRelativePath); + } + + @Test + void givenAbsoluteResourcePath_whenGetResource_thenReturnResource() { + URL resourceAbsolutePath = ClassGetResourceExample.class.getResource("/com/baeldung/resource/example.txt"); + Assertions.assertNotNull(resourceAbsolutePath); + } +} diff --git a/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java b/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java new file mode 100644 index 0000000000..54025c5404 --- /dev/null +++ b/core-java-modules/core-java-jvm-3/test/java/com/baeldung/resource/ClassLoaderGetResourceUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.resource; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.net.URL; + +class ClassLoaderGetResourceUnitTest { + + @Test + void givenRelativeResourcePath_whenGetResource_thenReturnNull() { + URL resourceRelativePath = ClassLoaderGetResourceExample.class.getClassLoader() + .getResource("example.txt"); + Assertions.assertNull(resourceRelativePath); + } + + @Test + void givenAbsoluteResourcePath_whenGetResource_thenReturnResource() { + URL resourceAbsolutePath = ClassLoaderGetResourceExample.class.getClassLoader() + .getResource("com/baeldung/resource/example.txt"); + Assertions.assertNotNull(resourceAbsolutePath); + } +} From f8a341aaa80ab1ceba984f462c60fc05d0ae0aa1 Mon Sep 17 00:00:00 2001 From: emanueltrandafir1993 Date: Fri, 2 Dec 2022 00:48:50 +0100 Subject: [PATCH 04/25] BAEL-5908: Single.just vs fromCallable --- rxjava-modules/rxjava-core-2/README.md | 5 ++ rxjava-modules/rxjava-core-2/pom.xml | 16 +++++ .../justvscallable/EmployeeRepository.java | 5 ++ .../src/main/resources/logback.xml | 13 ++++ .../EmployeeRepositoryTest.java | 70 +++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 rxjava-modules/rxjava-core-2/README.md create mode 100644 rxjava-modules/rxjava-core-2/pom.xml create mode 100644 rxjava-modules/rxjava-core-2/src/main/java/com/baeldung/rxjava/justvscallable/EmployeeRepository.java create mode 100644 rxjava-modules/rxjava-core-2/src/main/resources/logback.xml create mode 100644 rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java diff --git a/rxjava-modules/rxjava-core-2/README.md b/rxjava-modules/rxjava-core-2/README.md new file mode 100644 index 0000000000..72c9fba62c --- /dev/null +++ b/rxjava-modules/rxjava-core-2/README.md @@ -0,0 +1,5 @@ +## RxJava + +This module contains articles about RxJava. + +### Relevant articles: diff --git a/rxjava-modules/rxjava-core-2/pom.xml b/rxjava-modules/rxjava-core-2/pom.xml new file mode 100644 index 0000000000..ccadf38ba3 --- /dev/null +++ b/rxjava-modules/rxjava-core-2/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + rxjava-core-2 + 1.0-SNAPSHOT + rxjava-core-2 + + + com.baeldung.rxjava-modules + rxjava-modules + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/rxjava-modules/rxjava-core-2/src/main/java/com/baeldung/rxjava/justvscallable/EmployeeRepository.java b/rxjava-modules/rxjava-core-2/src/main/java/com/baeldung/rxjava/justvscallable/EmployeeRepository.java new file mode 100644 index 0000000000..03d95e2c8a --- /dev/null +++ b/rxjava-modules/rxjava-core-2/src/main/java/com/baeldung/rxjava/justvscallable/EmployeeRepository.java @@ -0,0 +1,5 @@ +package com.baeldung.rxjava.justvscallable; + +public interface EmployeeRepository { + String findById(Long id); +} diff --git a/rxjava-modules/rxjava-core-2/src/main/resources/logback.xml b/rxjava-modules/rxjava-core-2/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/rxjava-modules/rxjava-core-2/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java b/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java new file mode 100644 index 0000000000..0b1f98d50f --- /dev/null +++ b/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java @@ -0,0 +1,70 @@ +package com.baeldung.rxjava.justvscallable; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import rx.Single; +import rx.observers.TestSubscriber; + +class EmployeeRepositoryTest { + + public EmployeeRepository repository = mock(EmployeeRepository.class); + + @BeforeEach + public void beforeEach() { + reset(repository); + } + + @Test + void givenNoSubscriber_whenUsingJust_thenDataIsFetched() { + Mockito.when(repository.findById(123L)) + .thenReturn("John Doe"); + + Single employee = Single.just(repository.findById(123L)); + + Mockito.verify(repository, times(1)) + .findById(123L); + } + + @Test + void givenASubscriber_whenUsingJust_thenReturnTheCorrectValue() { + TestSubscriber testSubscriber = new TestSubscriber<>(); + Mockito.when(repository.findById(123L)) + .thenReturn("John Doe"); + + Single employee = Single.just(repository.findById(123L)); + employee.subscribe(testSubscriber); + + testSubscriber.assertValue("John Doe"); + testSubscriber.assertCompleted(); + } + + @Test + void givenNoSubscriber_whenUsingFromCallable_thenNoDataIsFetched() { + Single employee = Single.fromCallable(() -> repository.findById(123L)); + + Mockito.verify(repository, never()) + .findById(123L); + } + + @Test + void givenASubscriber_whenUsingFromCallable_thenReturnCorrectValue() { + TestSubscriber testSubscriber = new TestSubscriber<>(); + Mockito.when(repository.findById(123L)) + .thenReturn("John Doe"); + + Single employee = Single.fromCallable(() -> repository.findById(123L)); + employee.subscribe(testSubscriber); + + Mockito.verify(repository, times(1)) + .findById(123L); + testSubscriber.assertCompleted(); + testSubscriber.assertValue("John Doe"); + } +} \ No newline at end of file From 490425adea11350e217160275877ce60704fa714 Mon Sep 17 00:00:00 2001 From: emanueltrandafir1993 Date: Fri, 2 Dec 2022 00:54:09 +0100 Subject: [PATCH 05/25] BAEL-5908: updated test class name --- ...yeeRepositoryTest.java => SingleJustVsFromCallableTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/{EmployeeRepositoryTest.java => SingleJustVsFromCallableTest.java} (98%) diff --git a/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java b/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/SingleJustVsFromCallableTest.java similarity index 98% rename from rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java rename to rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/SingleJustVsFromCallableTest.java index 0b1f98d50f..d0de86fed8 100644 --- a/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/EmployeeRepositoryTest.java +++ b/rxjava-modules/rxjava-core-2/src/test/java/com/baeldung/rxjava/justvscallable/SingleJustVsFromCallableTest.java @@ -12,7 +12,7 @@ import org.mockito.Mockito; import rx.Single; import rx.observers.TestSubscriber; -class EmployeeRepositoryTest { +class SingleJustVsFromCallableTest { public EmployeeRepository repository = mock(EmployeeRepository.class); From e367437bb73a086e6c2057b19458aadc54c094cb Mon Sep 17 00:00:00 2001 From: Haroon Khan Date: Wed, 7 Dec 2022 21:56:29 +0000 Subject: [PATCH 06/25] [JAVA-16711] Remove unnecessary system out logging --- core-java-modules/core-java-exceptions-4/README.md | 1 + .../exception/exceptions_vs_errors/ErrorExample.java | 9 ++------- .../exceptions_vs_errors/ErrorExampleUnitTest.java | 6 +++--- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/core-java-modules/core-java-exceptions-4/README.md b/core-java-modules/core-java-exceptions-4/README.md index ccc40f3858..9bd5d4b9bb 100644 --- a/core-java-modules/core-java-exceptions-4/README.md +++ b/core-java-modules/core-java-exceptions-4/README.md @@ -8,4 +8,5 @@ This module contains articles about core java exceptions - [Convert long to int Type in Java](https://www.baeldung.com/java-convert-long-to-int) - [“Sneaky Throws” in Java](https://www.baeldung.com/java-sneaky-throws) - [Get the Current Stack Trace in Java](https://www.baeldung.com/java-get-current-stack-trace) +- [Errors and Exceptions in Java](https://www.baeldung.com/java-errors-vs-exceptions) - [[<-- Prev]](../core-java-exceptions-3) diff --git a/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/exceptions_vs_errors/ErrorExample.java b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/exceptions_vs_errors/ErrorExample.java index 143ca8c57e..904877e01e 100644 --- a/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/exceptions_vs_errors/ErrorExample.java +++ b/core-java-modules/core-java-exceptions-4/src/main/java/com/baeldung/exception/exceptions_vs_errors/ErrorExample.java @@ -1,14 +1,9 @@ package com.baeldung.exception.exceptions_vs_errors; public class ErrorExample { - - public static void main(String[] args) { - overflow(); - } - public static void overflow() { - System.out.println("overflow..."); - overflow(); + public static void main(String[] args) { + throw new AssertionError(); } } diff --git a/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/exceptions_vs_errors/ErrorExampleUnitTest.java b/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/exceptions_vs_errors/ErrorExampleUnitTest.java index 9fca24638d..acbb07be1f 100644 --- a/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/exceptions_vs_errors/ErrorExampleUnitTest.java +++ b/core-java-modules/core-java-exceptions-4/src/test/java/com/baeldung/exception/exceptions_vs_errors/ErrorExampleUnitTest.java @@ -3,11 +3,11 @@ package com.baeldung.exception.exceptions_vs_errors; import org.junit.Test; import org.junit.jupiter.api.Assertions; -// Unit test for the ErrorExample class. public class ErrorExampleUnitTest { + @Test public void whenMainMethodIsRun_thenStackOverflowError() { - Assertions.assertThrows(StackOverflowError.class, - () -> ErrorExample.main(null)); + Assertions.assertThrows(AssertionError.class, + () -> ErrorExample.main(null)); } } From 3b31ba4f998071c01c6560d04321edff2f9f6bd6 Mon Sep 17 00:00:00 2001 From: Harry9656 Date: Thu, 8 Dec 2022 09:09:03 +0100 Subject: [PATCH 07/25] JAVA-5958: Ratelimit with client ip address (#13067) * JAVA-5958: Ratelimit with client ip address Co-authored-by: Harpal Singh --- .../ipaddress/IpAddressApplication.java | 38 +++++++++++++++++++ .../ProxiedClientAddressResolver.java | 21 ++++++++++ .../SimpleClientAddressResolver.java | 23 +++++++++++ .../ipaddress-application.properties | 6 +++ 4 files changed, 88 insertions(+) create mode 100644 spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/IpAddressApplication.java create mode 100644 spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/ProxiedClientAddressResolver.java create mode 100644 spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/SimpleClientAddressResolver.java create mode 100644 spring-cloud-modules/spring-cloud-gateway/src/main/resources/ipaddress-application.properties diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/IpAddressApplication.java b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/IpAddressApplication.java new file mode 100644 index 0000000000..472c331404 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/IpAddressApplication.java @@ -0,0 +1,38 @@ +package com.baeldung.springcloudgateway.ipaddress; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter; +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; + +@SpringBootApplication() +@PropertySource("classpath:ipaddress-application.properties") +public class IpAddressApplication { + public static void main(String[] args) { + SpringApplication.run(IpAddressApplication.class, args); + } + + @Bean + public RouteLocator myRoutes(RouteLocatorBuilder builder) { + return builder.routes() + .route("requestratelimiter_route", p -> p + .path("/example") + .filters(f -> f.requestRateLimiter(r -> r.setRateLimiter(redisRateLimiter()))) + .uri("http://example.org")) + .route("ipaddress_route", p -> p + .path("/example2") + .filters(f -> f.requestRateLimiter(r -> r.setRateLimiter(redisRateLimiter()) + .setDenyEmptyKey(false) + .setKeyResolver(new SimpleClientAddressResolver()))) + .uri("http://example.org")) + .build(); + } + + @Bean + public RedisRateLimiter redisRateLimiter() { + return new RedisRateLimiter(1, 1, 1); + } +} diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/ProxiedClientAddressResolver.java b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/ProxiedClientAddressResolver.java new file mode 100644 index 0000000000..25b1fbcf1f --- /dev/null +++ b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/ProxiedClientAddressResolver.java @@ -0,0 +1,21 @@ +package com.baeldung.springcloudgateway.ipaddress; + +import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; +import org.springframework.cloud.gateway.support.ipresolver.XForwardedRemoteAddressResolver; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.net.InetSocketAddress; + +@Primary +@Component +public class ProxiedClientAddressResolver implements KeyResolver { + @Override + public Mono resolve(ServerWebExchange exchange) { + XForwardedRemoteAddressResolver resolver = XForwardedRemoteAddressResolver.maxTrustedIndex(1); + InetSocketAddress inetSocketAddress = resolver.resolve(exchange); + return Mono.just(inetSocketAddress.getAddress().getHostAddress()); + } +} diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/SimpleClientAddressResolver.java b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/SimpleClientAddressResolver.java new file mode 100644 index 0000000000..904fd4c193 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/ipaddress/SimpleClientAddressResolver.java @@ -0,0 +1,23 @@ +package com.baeldung.springcloudgateway.ipaddress; + +import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.util.Optional; + +@Component +public class SimpleClientAddressResolver implements KeyResolver { + @Override + public Mono resolve(ServerWebExchange exchange) { + return Optional.ofNullable(exchange.getRequest().getRemoteAddress()) + .map(InetSocketAddress::getAddress) + .map(InetAddress::getHostAddress) + .map(Mono::just) + .orElse(Mono.empty()); + } +} + diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/resources/ipaddress-application.properties b/spring-cloud-modules/spring-cloud-gateway/src/main/resources/ipaddress-application.properties new file mode 100644 index 0000000000..ebec52403a --- /dev/null +++ b/spring-cloud-modules/spring-cloud-gateway/src/main/resources/ipaddress-application.properties @@ -0,0 +1,6 @@ +server.port=8081 +spring.redis.database=0 +spring.redis.host=localhost +spring.redis.port=16379 +spring.redis.password=mypass +spring.redis.timeout=60000 From 7b9ab06c14525b76f17948b93e186dd9923d472b Mon Sep 17 00:00:00 2001 From: freelansam <79205526+freelansam@users.noreply.github.com> Date: Thu, 8 Dec 2022 18:58:09 +0530 Subject: [PATCH 08/25] JAVA-16264: review module names (#13136) --- .../pom.xml | 8 ++++---- .../infrastructure/db/InMemoryOrderStore.java | 0 .../infrastructure/events/SimpleEventBus.java | 0 .../src/main/java/module-info.java | 0 .../{mainapp => ddd-contexts-mainapp}/pom.xml | 4 ++-- .../baeldung/dddcontexts/mainapp/Application.java | 0 .../src/main/java/module-info.java | 0 .../pom.xml | 4 ++-- .../ordercontext/model/CustomerOrder.java | 0 .../dddcontexts/ordercontext/model/OrderItem.java | 0 .../repository/CustomerOrderRepository.java | 0 .../ordercontext/service/CustomerOrderService.java | 0 .../ordercontext/service/OrderService.java | 0 .../src/main/java/module-info.java | 0 .../pom.xml | 2 +- .../sharedkernel/events/ApplicationEvent.java | 0 .../dddcontexts/sharedkernel/events/EventBus.java | 0 .../sharedkernel/events/EventSubscriber.java | 0 .../sharedkernel/service/ApplicationService.java | 0 .../src/main/java/module-info.java | 0 .../pom.xml | 4 ++-- .../shippingcontext/model/PackageItem.java | 0 .../dddcontexts/shippingcontext/model/Parcel.java | 0 .../shippingcontext/model/ShippableOrder.java | 0 .../repository/ShippingOrderRepository.java | 0 .../service/ParcelShippingService.java | 0 .../shippingcontext/service/ShippingService.java | 0 .../src/main/java/module-info.java | 0 ddd-contexts/pom.xml | 10 +++++----- .../{daomodule => maven-daomodule}/pom.xml | 2 +- .../src/main/java/com/baeldung/daomodule/Dao.java | 0 .../src/main/java/module-info.java | 0 .../{entitymodule => maven-entitymodule}/pom.xml | 2 +- .../main/java/com/baeldung/entitymodule/User.java | 0 .../src/main/java/module-info.java | 0 .../{mainappmodule => maven-mainappmodule}/pom.xml | 8 ++++---- .../java/com/baeldung/mainappmodule/Application.java | 0 .../src/main/java/module-info.java | 0 .../{userdaomodule => maven-userdaomodule}/pom.xml | 2 +- .../java/com/baeldung/userdaomodule/UserDao.java | 0 .../src/main/java/module-info.java | 0 maven-modules/multimodulemavenproject/pom.xml | 8 ++++---- maven-modules/version-collision/pom.xml | 4 ++-- .../version-collision/project-collision/pom.xml | 4 ++-- .../pom.xml | 2 +- .../pom.xml | 2 +- maven-modules/version-overriding-plugins/pom.xml | 4 ++-- .../{child-a => version-overriding-child-a}/pom.xml | 2 +- .../{child-b => version-overriding-child-b}/pom.xml | 2 +- spring-cloud-modules/spring-cloud-archaius/pom.xml | 12 ++++++------ .../pom.xml | 4 ++-- .../AdditionalSourcesSimpleApplication.java | 0 .../config/ApplicationPropertiesConfigurations.java | 0 .../controller/ConfigPropertiesController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/config.properties | 0 .../src/main/resources/other-config.properties | 0 .../ArchaiusAdditionalSourcesLiveTest.java | 0 .../additionalsources/SpringContextTest.java | 0 .../src/test/resources/logback-test.xml | 0 .../pom.xml | 4 ++-- .../archaius/basic/BasicArchaiusApplication.java | 0 .../basic/controller/ConfigPropertiesController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/config.properties | 0 .../src/main/resources/other.properties | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 .../ArchaiusBasicConfigurationIntegrationTest.java | 0 .../basic/ArchaiusBasicConfigurationLiveTest.java | 0 .../cloud/archaius/basic/SpringContextTest.java | 0 .../src/test/resources/config.properties | 0 .../src/test/resources/logback-test.xml | 0 .../pom.xml | 4 ++-- .../dynamosources/DynamoSourcesApplication.java | 0 .../config/ApplicationPropertiesConfigurations.java | 0 .../dynamosources/config/DynamoDbConfiguration.java | 0 .../controller/ConfigPropertiesController.java | 0 .../dynamosources/dynamodb/ArchaiusProperties.java | 0 .../dynamodb/ArchaiusPropertiesRepository.java | 0 .../src/main/resources/application.properties | 0 .../dynamosources/ArchaiusDynamoDbLiveTest.java | 0 .../dynamosources/SpringContextLiveTest.java | 0 .../pom.xml | 4 ++-- .../extraconfigs/ExtraConfigsApplication.java | 0 .../controllers/ConfigPropertiesController.java | 0 .../src/main/resources/application.properties | 0 .../main/resources/other-config-dir/extra.properties | 0 .../src/main/resources/other.properties | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 .../extraconfigs/ArchaiusExtraConfigsLiveTest.java | 0 .../src/test/resources/logback-test.xml | 0 .../pom.xml | 4 ++-- .../archaius/jdbconfig/JdbcSourcesApplication.java | 0 .../config/ApplicationPropertiesConfigurations.java | 0 .../controller/ConfigPropertiesController.java | 0 .../cloud/archaius/jdbconfig/jdbc/Properties.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/data.sql | 0 .../jdbconfig/ArchaiusJDBCSourceLiveTest.java | 0 .../cloud/archaius/jdbconfig/SpringContextTest.java | 0 .../src/test/resources/logback-test.xml | 0 .../pom.xml | 4 ++-- .../zookeeperconfig/ZookeeperConfigApplication.java | 0 .../config/ZookeeperConfigsInitializer.java | 0 .../controller/ConfigPropertiesController.java | 0 .../src/main/resources/application.properties | 0 .../zookeeperconfig/ArchaiusZookeeperLiveTest.java | 0 .../zookeeperconfig/SpringContextLiveTest.java | 0 spring-cloud-modules/spring-cloud-dapr/pom.xml | 4 ++-- .../{gateway => spring-cloud-dapr-gateway}/pom.xml | 2 +- .../main/java/com/baeldung/gateway/GatewayApp.java | 0 .../src/main/resources/application-no-dapr.yml | 0 .../src/main/resources/application-with-dapr.yml | 0 .../{greeting => spring-cloud-dapr-greeting}/pom.xml | 2 +- .../main/java/com/baeldung/hello/GreetingApp.java | 0 .../java/com/baeldung/hello/GreetingController.java | 0 .../src/main/resources/application.yml | 0 117 files changed, 59 insertions(+), 59 deletions(-) rename ddd-contexts/{infrastructure => ddd-contexts-infrastructure}/pom.xml (86%) rename ddd-contexts/{infrastructure => ddd-contexts-infrastructure}/src/main/java/com/baeldung/dddcontexts/infrastructure/db/InMemoryOrderStore.java (100%) rename ddd-contexts/{infrastructure => ddd-contexts-infrastructure}/src/main/java/com/baeldung/dddcontexts/infrastructure/events/SimpleEventBus.java (100%) rename ddd-contexts/{infrastructure => ddd-contexts-infrastructure}/src/main/java/module-info.java (100%) rename ddd-contexts/{mainapp => ddd-contexts-mainapp}/pom.xml (93%) rename ddd-contexts/{mainapp => ddd-contexts-mainapp}/src/main/java/com/baeldung/dddcontexts/mainapp/Application.java (100%) rename ddd-contexts/{mainapp => ddd-contexts-mainapp}/src/main/java/module-info.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/pom.xml (91%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/com/baeldung/dddcontexts/ordercontext/model/CustomerOrder.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/com/baeldung/dddcontexts/ordercontext/model/OrderItem.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/com/baeldung/dddcontexts/ordercontext/repository/CustomerOrderRepository.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/com/baeldung/dddcontexts/ordercontext/service/CustomerOrderService.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/com/baeldung/dddcontexts/ordercontext/service/OrderService.java (100%) rename ddd-contexts/{ordercontext => ddd-contexts-ordercontext}/src/main/java/module-info.java (100%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/pom.xml (94%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/ApplicationEvent.java (100%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventBus.java (100%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventSubscriber.java (100%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/src/main/java/com/baeldung/dddcontexts/sharedkernel/service/ApplicationService.java (100%) rename ddd-contexts/{sharedkernel => ddd-contexts-sharedkernel}/src/main/java/module-info.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/pom.xml (90%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/PackageItem.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/Parcel.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/ShippableOrder.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/repository/ShippingOrderRepository.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ParcelShippingService.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ShippingService.java (100%) rename ddd-contexts/{shippingcontext => ddd-contexts-shippingcontext}/src/main/java/module-info.java (100%) rename maven-modules/multimodulemavenproject/{daomodule => maven-daomodule}/pom.xml (95%) rename maven-modules/multimodulemavenproject/{daomodule => maven-daomodule}/src/main/java/com/baeldung/daomodule/Dao.java (100%) rename maven-modules/multimodulemavenproject/{daomodule => maven-daomodule}/src/main/java/module-info.java (100%) rename maven-modules/multimodulemavenproject/{entitymodule => maven-entitymodule}/pom.xml (95%) rename maven-modules/multimodulemavenproject/{entitymodule => maven-entitymodule}/src/main/java/com/baeldung/entitymodule/User.java (100%) rename maven-modules/multimodulemavenproject/{entitymodule => maven-entitymodule}/src/main/java/module-info.java (100%) rename maven-modules/multimodulemavenproject/{mainappmodule => maven-mainappmodule}/pom.xml (88%) rename maven-modules/multimodulemavenproject/{mainappmodule => maven-mainappmodule}/src/main/java/com/baeldung/mainappmodule/Application.java (100%) rename maven-modules/multimodulemavenproject/{mainappmodule => maven-mainappmodule}/src/main/java/module-info.java (100%) rename maven-modules/multimodulemavenproject/{userdaomodule => maven-userdaomodule}/pom.xml (96%) rename maven-modules/multimodulemavenproject/{userdaomodule => maven-userdaomodule}/src/main/java/com/baeldung/userdaomodule/UserDao.java (100%) rename maven-modules/multimodulemavenproject/{userdaomodule => maven-userdaomodule}/src/main/java/module-info.java (100%) rename maven-modules/version-collision/{project-a => version-collision-project-a}/pom.xml (90%) rename maven-modules/version-collision/{project-b => version-collision-project-b}/pom.xml (90%) rename maven-modules/version-overriding-plugins/{child-a => version-overriding-child-a}/pom.xml (95%) rename maven-modules/version-overriding-plugins/{child-b => version-overriding-child-b}/pom.xml (87%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-additionalsources}/pom.xml (83%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/AdditionalSourcesSimpleApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/config/ApplicationPropertiesConfigurations.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/controller/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/resources/config.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/main/resources/other-config.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/ArchaiusAdditionalSourcesLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/SpringContextTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-additionalsources}/src/test/resources/logback-test.xml (100%) rename spring-cloud-modules/spring-cloud-archaius/{additional-sources-simple => spring-cloud-archaius-basic-config}/pom.xml (85%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/main/java/com/baeldung/spring/cloud/archaius/basic/BasicArchaiusApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/main/java/com/baeldung/spring/cloud/archaius/basic/controller/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/main/resources/config.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/main/resources/other.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/java/com/baeldung/SpringContextTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationIntegrationTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/java/com/baeldung/spring/cloud/archaius/basic/SpringContextTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/resources/config.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{basic-config => spring-cloud-archaius-basic-config}/src/test/resources/logback-test.xml (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/pom.xml (92%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{dynamodb-config => spring-cloud-archaius-dynamodb-config}/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/SpringContextLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/pom.xml (91%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/ExtraConfigsApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/controllers/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/main/resources/other-config-dir/extra.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/main/resources/other.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/test/java/com/baeldung/SpringContextTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/test/java/com/baeldung/spring/cloud/archaius/extraconfigs/ArchaiusExtraConfigsLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{extra-configs => spring-cloud-archaius-extra-configs}/src/test/resources/logback-test.xml (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/pom.xml (89%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/JdbcSourcesApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/config/ApplicationPropertiesConfigurations.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/controller/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/jdbc/Properties.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/main/resources/data.sql (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/ArchaiusJDBCSourceLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/SpringContextTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{jdbc-config => spring-cloud-archaius-jdbc-config}/src/test/resources/logback-test.xml (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/pom.xml (92%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ZookeeperConfigApplication.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/config/ZookeeperConfigsInitializer.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/controller/ConfigPropertiesController.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/main/resources/application.properties (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ArchaiusZookeeperLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-archaius/{zookeeper-config => spring-cloud-archaius-zookeeper-config}/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/SpringContextLiveTest.java (100%) rename spring-cloud-modules/spring-cloud-dapr/{gateway => spring-cloud-dapr-gateway}/pom.xml (95%) rename spring-cloud-modules/spring-cloud-dapr/{gateway => spring-cloud-dapr-gateway}/src/main/java/com/baeldung/gateway/GatewayApp.java (100%) rename spring-cloud-modules/spring-cloud-dapr/{gateway => spring-cloud-dapr-gateway}/src/main/resources/application-no-dapr.yml (100%) rename spring-cloud-modules/spring-cloud-dapr/{gateway => spring-cloud-dapr-gateway}/src/main/resources/application-with-dapr.yml (100%) rename spring-cloud-modules/spring-cloud-dapr/{greeting => spring-cloud-dapr-greeting}/pom.xml (93%) rename spring-cloud-modules/spring-cloud-dapr/{greeting => spring-cloud-dapr-greeting}/src/main/java/com/baeldung/hello/GreetingApp.java (100%) rename spring-cloud-modules/spring-cloud-dapr/{greeting => spring-cloud-dapr-greeting}/src/main/java/com/baeldung/hello/GreetingController.java (100%) rename spring-cloud-modules/spring-cloud-dapr/{greeting => spring-cloud-dapr-greeting}/src/main/resources/application.yml (100%) diff --git a/ddd-contexts/infrastructure/pom.xml b/ddd-contexts/ddd-contexts-infrastructure/pom.xml similarity index 86% rename from ddd-contexts/infrastructure/pom.xml rename to ddd-contexts/ddd-contexts-infrastructure/pom.xml index 6107991ceb..beceaa7fb2 100644 --- a/ddd-contexts/infrastructure/pom.xml +++ b/ddd-contexts/ddd-contexts-infrastructure/pom.xml @@ -4,7 +4,7 @@ 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.dddcontexts.infrastructure - infrastructure + ddd-contexts-infrastructure 1.0 jar @@ -18,17 +18,17 @@ com.baeldung.dddcontexts.shippingcontext - shippingcontext + ddd-contexts-shippingcontext ${appmodules.version} com.baeldung.dddcontexts.ordercontext - ordercontext + ddd-contexts-ordercontext ${appmodules.version} com.baeldung.dddcontexts.sharedkernel - sharedkernel + ddd-contexts-sharedkernel ${appmodules.version} diff --git a/ddd-contexts/infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/db/InMemoryOrderStore.java b/ddd-contexts/ddd-contexts-infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/db/InMemoryOrderStore.java similarity index 100% rename from ddd-contexts/infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/db/InMemoryOrderStore.java rename to ddd-contexts/ddd-contexts-infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/db/InMemoryOrderStore.java diff --git a/ddd-contexts/infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/events/SimpleEventBus.java b/ddd-contexts/ddd-contexts-infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/events/SimpleEventBus.java similarity index 100% rename from ddd-contexts/infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/events/SimpleEventBus.java rename to ddd-contexts/ddd-contexts-infrastructure/src/main/java/com/baeldung/dddcontexts/infrastructure/events/SimpleEventBus.java diff --git a/ddd-contexts/infrastructure/src/main/java/module-info.java b/ddd-contexts/ddd-contexts-infrastructure/src/main/java/module-info.java similarity index 100% rename from ddd-contexts/infrastructure/src/main/java/module-info.java rename to ddd-contexts/ddd-contexts-infrastructure/src/main/java/module-info.java diff --git a/ddd-contexts/mainapp/pom.xml b/ddd-contexts/ddd-contexts-mainapp/pom.xml similarity index 93% rename from ddd-contexts/mainapp/pom.xml rename to ddd-contexts/ddd-contexts-mainapp/pom.xml index 8046ae4e7d..6f7461e15b 100644 --- a/ddd-contexts/mainapp/pom.xml +++ b/ddd-contexts/ddd-contexts-mainapp/pom.xml @@ -4,7 +4,7 @@ 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.dddcontexts.mainapp - mainapp + ddd-contexts-mainapp 1.0 jar @@ -18,7 +18,7 @@ com.baeldung.dddcontexts.infrastructure - infrastructure + ddd-contexts-infrastructure ${appmodules.version} diff --git a/ddd-contexts/mainapp/src/main/java/com/baeldung/dddcontexts/mainapp/Application.java b/ddd-contexts/ddd-contexts-mainapp/src/main/java/com/baeldung/dddcontexts/mainapp/Application.java similarity index 100% rename from ddd-contexts/mainapp/src/main/java/com/baeldung/dddcontexts/mainapp/Application.java rename to ddd-contexts/ddd-contexts-mainapp/src/main/java/com/baeldung/dddcontexts/mainapp/Application.java diff --git a/ddd-contexts/mainapp/src/main/java/module-info.java b/ddd-contexts/ddd-contexts-mainapp/src/main/java/module-info.java similarity index 100% rename from ddd-contexts/mainapp/src/main/java/module-info.java rename to ddd-contexts/ddd-contexts-mainapp/src/main/java/module-info.java diff --git a/ddd-contexts/ordercontext/pom.xml b/ddd-contexts/ddd-contexts-ordercontext/pom.xml similarity index 91% rename from ddd-contexts/ordercontext/pom.xml rename to ddd-contexts/ddd-contexts-ordercontext/pom.xml index e29f109b71..d6e5811357 100644 --- a/ddd-contexts/ordercontext/pom.xml +++ b/ddd-contexts/ddd-contexts-ordercontext/pom.xml @@ -4,7 +4,7 @@ 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.dddcontexts.ordercontext - ordercontext + ddd-contexts-ordercontext 1.0 jar @@ -17,7 +17,7 @@ com.baeldung.dddcontexts.sharedkernel - sharedkernel + ddd-contexts-sharedkernel ${appmodules.version} diff --git a/ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/CustomerOrder.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/CustomerOrder.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/CustomerOrder.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/CustomerOrder.java diff --git a/ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/OrderItem.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/OrderItem.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/OrderItem.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/model/OrderItem.java diff --git a/ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/repository/CustomerOrderRepository.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/repository/CustomerOrderRepository.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/repository/CustomerOrderRepository.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/repository/CustomerOrderRepository.java diff --git a/ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/CustomerOrderService.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/CustomerOrderService.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/CustomerOrderService.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/CustomerOrderService.java diff --git a/ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/OrderService.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/OrderService.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/OrderService.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/com/baeldung/dddcontexts/ordercontext/service/OrderService.java diff --git a/ddd-contexts/ordercontext/src/main/java/module-info.java b/ddd-contexts/ddd-contexts-ordercontext/src/main/java/module-info.java similarity index 100% rename from ddd-contexts/ordercontext/src/main/java/module-info.java rename to ddd-contexts/ddd-contexts-ordercontext/src/main/java/module-info.java diff --git a/ddd-contexts/sharedkernel/pom.xml b/ddd-contexts/ddd-contexts-sharedkernel/pom.xml similarity index 94% rename from ddd-contexts/sharedkernel/pom.xml rename to ddd-contexts/ddd-contexts-sharedkernel/pom.xml index 5d31973c92..7c159dc741 100644 --- a/ddd-contexts/sharedkernel/pom.xml +++ b/ddd-contexts/ddd-contexts-sharedkernel/pom.xml @@ -4,7 +4,7 @@ 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.dddcontexts.sharedkernel - sharedkernel + ddd-contexts-sharedkernel 1.0 jar diff --git a/ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/ApplicationEvent.java b/ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/ApplicationEvent.java similarity index 100% rename from ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/ApplicationEvent.java rename to ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/ApplicationEvent.java diff --git a/ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventBus.java b/ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventBus.java similarity index 100% rename from ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventBus.java rename to ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventBus.java diff --git a/ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventSubscriber.java b/ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventSubscriber.java similarity index 100% rename from ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventSubscriber.java rename to ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/events/EventSubscriber.java diff --git a/ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/service/ApplicationService.java b/ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/service/ApplicationService.java similarity index 100% rename from ddd-contexts/sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/service/ApplicationService.java rename to ddd-contexts/ddd-contexts-sharedkernel/src/main/java/com/baeldung/dddcontexts/sharedkernel/service/ApplicationService.java diff --git a/ddd-contexts/sharedkernel/src/main/java/module-info.java b/ddd-contexts/ddd-contexts-sharedkernel/src/main/java/module-info.java similarity index 100% rename from ddd-contexts/sharedkernel/src/main/java/module-info.java rename to ddd-contexts/ddd-contexts-sharedkernel/src/main/java/module-info.java diff --git a/ddd-contexts/shippingcontext/pom.xml b/ddd-contexts/ddd-contexts-shippingcontext/pom.xml similarity index 90% rename from ddd-contexts/shippingcontext/pom.xml rename to ddd-contexts/ddd-contexts-shippingcontext/pom.xml index 2fb9e83645..5abdf70948 100644 --- a/ddd-contexts/shippingcontext/pom.xml +++ b/ddd-contexts/ddd-contexts-shippingcontext/pom.xml @@ -4,7 +4,7 @@ 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.dddcontexts.shippingcontext - shippingcontext + ddd-contexts-shippingcontext 1.0 jar @@ -17,7 +17,7 @@ com.baeldung.dddcontexts.sharedkernel - sharedkernel + ddd-contexts-sharedkernel ${appmodules.version} diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/PackageItem.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/PackageItem.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/PackageItem.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/PackageItem.java diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/Parcel.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/Parcel.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/Parcel.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/Parcel.java diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/ShippableOrder.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/ShippableOrder.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/ShippableOrder.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/model/ShippableOrder.java diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/repository/ShippingOrderRepository.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/repository/ShippingOrderRepository.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/repository/ShippingOrderRepository.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/repository/ShippingOrderRepository.java diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ParcelShippingService.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ParcelShippingService.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ParcelShippingService.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ParcelShippingService.java diff --git a/ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ShippingService.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ShippingService.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ShippingService.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/com/baeldung/dddcontexts/shippingcontext/service/ShippingService.java diff --git a/ddd-contexts/shippingcontext/src/main/java/module-info.java b/ddd-contexts/ddd-contexts-shippingcontext/src/main/java/module-info.java similarity index 100% rename from ddd-contexts/shippingcontext/src/main/java/module-info.java rename to ddd-contexts/ddd-contexts-shippingcontext/src/main/java/module-info.java diff --git a/ddd-contexts/pom.xml b/ddd-contexts/pom.xml index 1a764a65b9..961a1d1624 100644 --- a/ddd-contexts/pom.xml +++ b/ddd-contexts/pom.xml @@ -16,11 +16,11 @@ - sharedkernel - infrastructure - shippingcontext - ordercontext - mainapp + ddd-contexts-sharedkernel + ddd-contexts-infrastructure + ddd-contexts-shippingcontext + ddd-contexts-ordercontext + ddd-contexts-mainapp diff --git a/maven-modules/multimodulemavenproject/daomodule/pom.xml b/maven-modules/multimodulemavenproject/maven-daomodule/pom.xml similarity index 95% rename from maven-modules/multimodulemavenproject/daomodule/pom.xml rename to maven-modules/multimodulemavenproject/maven-daomodule/pom.xml index 626a6f707a..474cc20adb 100644 --- a/maven-modules/multimodulemavenproject/daomodule/pom.xml +++ b/maven-modules/multimodulemavenproject/maven-daomodule/pom.xml @@ -4,7 +4,7 @@ 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.daomodule - daomodule + maven-daomodule 1.0 jar diff --git a/maven-modules/multimodulemavenproject/daomodule/src/main/java/com/baeldung/daomodule/Dao.java b/maven-modules/multimodulemavenproject/maven-daomodule/src/main/java/com/baeldung/daomodule/Dao.java similarity index 100% rename from maven-modules/multimodulemavenproject/daomodule/src/main/java/com/baeldung/daomodule/Dao.java rename to maven-modules/multimodulemavenproject/maven-daomodule/src/main/java/com/baeldung/daomodule/Dao.java diff --git a/maven-modules/multimodulemavenproject/daomodule/src/main/java/module-info.java b/maven-modules/multimodulemavenproject/maven-daomodule/src/main/java/module-info.java similarity index 100% rename from maven-modules/multimodulemavenproject/daomodule/src/main/java/module-info.java rename to maven-modules/multimodulemavenproject/maven-daomodule/src/main/java/module-info.java diff --git a/maven-modules/multimodulemavenproject/entitymodule/pom.xml b/maven-modules/multimodulemavenproject/maven-entitymodule/pom.xml similarity index 95% rename from maven-modules/multimodulemavenproject/entitymodule/pom.xml rename to maven-modules/multimodulemavenproject/maven-entitymodule/pom.xml index e2a453b9c2..a9b169a8b9 100644 --- a/maven-modules/multimodulemavenproject/entitymodule/pom.xml +++ b/maven-modules/multimodulemavenproject/maven-entitymodule/pom.xml @@ -4,7 +4,7 @@ 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.entitymodule - entitymodule + maven-entitymodule 1.0 jar diff --git a/maven-modules/multimodulemavenproject/entitymodule/src/main/java/com/baeldung/entitymodule/User.java b/maven-modules/multimodulemavenproject/maven-entitymodule/src/main/java/com/baeldung/entitymodule/User.java similarity index 100% rename from maven-modules/multimodulemavenproject/entitymodule/src/main/java/com/baeldung/entitymodule/User.java rename to maven-modules/multimodulemavenproject/maven-entitymodule/src/main/java/com/baeldung/entitymodule/User.java diff --git a/maven-modules/multimodulemavenproject/entitymodule/src/main/java/module-info.java b/maven-modules/multimodulemavenproject/maven-entitymodule/src/main/java/module-info.java similarity index 100% rename from maven-modules/multimodulemavenproject/entitymodule/src/main/java/module-info.java rename to maven-modules/multimodulemavenproject/maven-entitymodule/src/main/java/module-info.java diff --git a/maven-modules/multimodulemavenproject/mainappmodule/pom.xml b/maven-modules/multimodulemavenproject/maven-mainappmodule/pom.xml similarity index 88% rename from maven-modules/multimodulemavenproject/mainappmodule/pom.xml rename to maven-modules/multimodulemavenproject/maven-mainappmodule/pom.xml index c376a2b04e..0dd11ef991 100644 --- a/maven-modules/multimodulemavenproject/mainappmodule/pom.xml +++ b/maven-modules/multimodulemavenproject/maven-mainappmodule/pom.xml @@ -4,7 +4,7 @@ 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.mainappmodule - mainappmodule + maven-mainappmodule 1.0 jar @@ -17,17 +17,17 @@ com.baeldung.entitymodule - entitymodule + maven-entitymodule ${entitymodule.version} com.baeldung.daomodule - daomodule + maven-daomodule ${daomodule.version} com.baeldung.userdaomodule - userdaomodule + maven-userdaomodule ${userdaomodule.version} diff --git a/maven-modules/multimodulemavenproject/mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java b/maven-modules/multimodulemavenproject/maven-mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java similarity index 100% rename from maven-modules/multimodulemavenproject/mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java rename to maven-modules/multimodulemavenproject/maven-mainappmodule/src/main/java/com/baeldung/mainappmodule/Application.java diff --git a/maven-modules/multimodulemavenproject/mainappmodule/src/main/java/module-info.java b/maven-modules/multimodulemavenproject/maven-mainappmodule/src/main/java/module-info.java similarity index 100% rename from maven-modules/multimodulemavenproject/mainappmodule/src/main/java/module-info.java rename to maven-modules/multimodulemavenproject/maven-mainappmodule/src/main/java/module-info.java diff --git a/maven-modules/multimodulemavenproject/userdaomodule/pom.xml b/maven-modules/multimodulemavenproject/maven-userdaomodule/pom.xml similarity index 96% rename from maven-modules/multimodulemavenproject/userdaomodule/pom.xml rename to maven-modules/multimodulemavenproject/maven-userdaomodule/pom.xml index 4df29457c5..c7ceada17d 100644 --- a/maven-modules/multimodulemavenproject/userdaomodule/pom.xml +++ b/maven-modules/multimodulemavenproject/maven-userdaomodule/pom.xml @@ -4,7 +4,7 @@ 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.userdaomodule - userdaomodule + maven-userdaomodule 1.0 jar diff --git a/maven-modules/multimodulemavenproject/userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java b/maven-modules/multimodulemavenproject/maven-userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java similarity index 100% rename from maven-modules/multimodulemavenproject/userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java rename to maven-modules/multimodulemavenproject/maven-userdaomodule/src/main/java/com/baeldung/userdaomodule/UserDao.java diff --git a/maven-modules/multimodulemavenproject/userdaomodule/src/main/java/module-info.java b/maven-modules/multimodulemavenproject/maven-userdaomodule/src/main/java/module-info.java similarity index 100% rename from maven-modules/multimodulemavenproject/userdaomodule/src/main/java/module-info.java rename to maven-modules/multimodulemavenproject/maven-userdaomodule/src/main/java/module-info.java diff --git a/maven-modules/multimodulemavenproject/pom.xml b/maven-modules/multimodulemavenproject/pom.xml index fbafa7ebff..db0bda3e6e 100644 --- a/maven-modules/multimodulemavenproject/pom.xml +++ b/maven-modules/multimodulemavenproject/pom.xml @@ -17,10 +17,10 @@ - entitymodule - daomodule - userdaomodule - mainappmodule + maven-entitymodule + maven-daomodule + maven-userdaomodule + maven-mainappmodule diff --git a/maven-modules/version-collision/pom.xml b/maven-modules/version-collision/pom.xml index 9c1b9641c8..820689abfa 100644 --- a/maven-modules/version-collision/pom.xml +++ b/maven-modules/version-collision/pom.xml @@ -13,8 +13,8 @@ - project-a - project-b + version-collision-project-a + version-collision-project-b project-collision diff --git a/maven-modules/version-collision/project-collision/pom.xml b/maven-modules/version-collision/project-collision/pom.xml index 74f117cdbb..1ef4440719 100644 --- a/maven-modules/version-collision/project-collision/pom.xml +++ b/maven-modules/version-collision/project-collision/pom.xml @@ -14,7 +14,7 @@ com.baeldung - project-a + version-collision-project-a 0.0.1-SNAPSHOT @@ -26,7 +26,7 @@ com.baeldung - project-b + version-collision-project-b 0.0.1-SNAPSHOT diff --git a/maven-modules/version-collision/project-a/pom.xml b/maven-modules/version-collision/version-collision-project-a/pom.xml similarity index 90% rename from maven-modules/version-collision/project-a/pom.xml rename to maven-modules/version-collision/version-collision-project-a/pom.xml index ca06c7daca..6130334b2c 100644 --- a/maven-modules/version-collision/project-a/pom.xml +++ b/maven-modules/version-collision/version-collision-project-a/pom.xml @@ -3,7 +3,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 - project-a + version-collision-project-a version-collision diff --git a/maven-modules/version-collision/project-b/pom.xml b/maven-modules/version-collision/version-collision-project-b/pom.xml similarity index 90% rename from maven-modules/version-collision/project-b/pom.xml rename to maven-modules/version-collision/version-collision-project-b/pom.xml index a7185ab22d..e2e7294cd2 100644 --- a/maven-modules/version-collision/project-b/pom.xml +++ b/maven-modules/version-collision/version-collision-project-b/pom.xml @@ -3,7 +3,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 - project-b + version-collision-project-b version-collision diff --git a/maven-modules/version-overriding-plugins/pom.xml b/maven-modules/version-overriding-plugins/pom.xml index 79109a83e1..b98a444bd4 100644 --- a/maven-modules/version-overriding-plugins/pom.xml +++ b/maven-modules/version-overriding-plugins/pom.xml @@ -13,8 +13,8 @@ - child-a - child-b + version-overriding-child-a + version-overriding-child-b diff --git a/maven-modules/version-overriding-plugins/child-a/pom.xml b/maven-modules/version-overriding-plugins/version-overriding-child-a/pom.xml similarity index 95% rename from maven-modules/version-overriding-plugins/child-a/pom.xml rename to maven-modules/version-overriding-plugins/version-overriding-child-a/pom.xml index 45098ccef0..48b5782f72 100644 --- a/maven-modules/version-overriding-plugins/child-a/pom.xml +++ b/maven-modules/version-overriding-plugins/version-overriding-child-a/pom.xml @@ -3,7 +3,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 - child-a + version-overriding-child-a pom diff --git a/maven-modules/version-overriding-plugins/child-b/pom.xml b/maven-modules/version-overriding-plugins/version-overriding-child-b/pom.xml similarity index 87% rename from maven-modules/version-overriding-plugins/child-b/pom.xml rename to maven-modules/version-overriding-plugins/version-overriding-child-b/pom.xml index f86a3c2096..8e52b34dbc 100644 --- a/maven-modules/version-overriding-plugins/child-b/pom.xml +++ b/maven-modules/version-overriding-plugins/version-overriding-child-b/pom.xml @@ -3,7 +3,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 - child-b + version-overriding-child-b version-overriding-plugins diff --git a/spring-cloud-modules/spring-cloud-archaius/pom.xml b/spring-cloud-modules/spring-cloud-archaius/pom.xml index 66b7bb9b19..4d7ca3943d 100644 --- a/spring-cloud-modules/spring-cloud-archaius/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/pom.xml @@ -16,12 +16,12 @@ - additional-sources-simple - basic-config - dynamodb-config - extra-configs - jdbc-config - zookeeper-config + spring-cloud-archaius-additionalsources + spring-cloud-archaius-basic-config + spring-cloud-archaius-dynamodb-config + spring-cloud-archaius-extra-configs + spring-cloud-archaius-jdbc-config + spring-cloud-archaius-zookeeper-config diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/pom.xml similarity index 83% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/pom.xml index 5e2eb47928..f523e79bac 100644 --- a/spring-cloud-modules/spring-cloud-archaius/basic-config/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/pom.xml @@ -3,9 +3,9 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - basic-config + spring-cloud-archaius-additional-sources-simple 1.0.0-SNAPSHOT - basic-config + spring-cloud-archaius-additionalsources jar diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/AdditionalSourcesSimpleApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/AdditionalSourcesSimpleApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/AdditionalSourcesSimpleApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/AdditionalSourcesSimpleApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/config/ApplicationPropertiesConfigurations.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/config/ApplicationPropertiesConfigurations.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/config/ApplicationPropertiesConfigurations.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/config/ApplicationPropertiesConfigurations.java diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/controller/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/controller/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/controller/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/java/com/baeldung/spring/cloud/archaius/additionalsources/controller/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/config.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/config.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/config.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/config.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/other-config.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/other-config.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/main/resources/other-config.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/main/resources/other-config.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/ArchaiusAdditionalSourcesLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/ArchaiusAdditionalSourcesLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/ArchaiusAdditionalSourcesLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/ArchaiusAdditionalSourcesLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/SpringContextTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/java/com/baeldung/spring/cloud/archaius/additionalsources/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/resources/logback-test.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/resources/logback-test.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/src/test/resources/logback-test.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-additionalsources/src/test/resources/logback-test.xml diff --git a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/pom.xml similarity index 85% rename from spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/pom.xml index 6c8ed96003..8b35ee845b 100644 --- a/spring-cloud-modules/spring-cloud-archaius/additional-sources-simple/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/pom.xml @@ -3,9 +3,9 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - additional-sources-simple + spring-cloud-archaius-basic-config 1.0.0-SNAPSHOT - additional-sources-simple + spring-cloud-archaius-basic-config jar diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/BasicArchaiusApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/BasicArchaiusApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/BasicArchaiusApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/BasicArchaiusApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/controller/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/controller/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/controller/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/java/com/baeldung/spring/cloud/archaius/basic/controller/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/config.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/config.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/config.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/config.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/other.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/other.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/main/resources/other.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/main/resources/other.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationIntegrationTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationIntegrationTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationIntegrationTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationIntegrationTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/ArchaiusBasicConfigurationLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/SpringContextTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/java/com/baeldung/spring/cloud/archaius/basic/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/resources/config.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/resources/config.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/resources/config.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/resources/config.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/resources/logback-test.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/resources/logback-test.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/basic-config/src/test/resources/logback-test.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-basic-config/src/test/resources/logback-test.xml diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/pom.xml similarity index 92% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/pom.xml index 08c96fb1f6..6e25ace6a8 100644 --- a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/pom.xml @@ -3,8 +3,8 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - dynamodb-config - dynamodb-config + spring-cloud-archaius-dynamodb-config + spring-cloud-archaius-dynamodb-config jar diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/pom.xml similarity index 91% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/pom.xml index 4113bf5bca..f90570abc2 100644 --- a/spring-cloud-modules/spring-cloud-archaius/extra-configs/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/pom.xml @@ -3,9 +3,9 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - extra-configs + spring-cloud-archaius-extra-configs 1.0.0-SNAPSHOT - extra-configs + spring-cloud-archaius-extra-configs jar diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/ExtraConfigsApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/ExtraConfigsApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/ExtraConfigsApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/ExtraConfigsApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/controllers/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/controllers/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/controllers/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/java/com/baeldung/spring/cloud/archaius/extraconfigs/controllers/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/other-config-dir/extra.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/other-config-dir/extra.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/other-config-dir/extra.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/other-config-dir/extra.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/other.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/other.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/main/resources/other.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/main/resources/other.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/java/com/baeldung/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/java/com/baeldung/spring/cloud/archaius/extraconfigs/ArchaiusExtraConfigsLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/java/com/baeldung/spring/cloud/archaius/extraconfigs/ArchaiusExtraConfigsLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/java/com/baeldung/spring/cloud/archaius/extraconfigs/ArchaiusExtraConfigsLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/java/com/baeldung/spring/cloud/archaius/extraconfigs/ArchaiusExtraConfigsLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/resources/logback-test.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/resources/logback-test.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/extra-configs/src/test/resources/logback-test.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-extra-configs/src/test/resources/logback-test.xml diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/pom.xml similarity index 89% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/pom.xml index dcaf934849..7fb5747739 100644 --- a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/pom.xml @@ -3,8 +3,8 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - jdbc-config - jdbc-config + spring-cloud-archaius-jdbc-config + spring-cloud-archaius-jdbc-config jar diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/JdbcSourcesApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/JdbcSourcesApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/JdbcSourcesApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/JdbcSourcesApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/config/ApplicationPropertiesConfigurations.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/config/ApplicationPropertiesConfigurations.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/config/ApplicationPropertiesConfigurations.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/config/ApplicationPropertiesConfigurations.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/controller/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/controller/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/controller/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/controller/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/jdbc/Properties.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/jdbc/Properties.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/jdbc/Properties.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/java/com/baeldung/spring/cloud/archaius/jdbconfig/jdbc/Properties.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/resources/data.sql b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/resources/data.sql similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/main/resources/data.sql rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/main/resources/data.sql diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/ArchaiusJDBCSourceLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/ArchaiusJDBCSourceLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/ArchaiusJDBCSourceLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/ArchaiusJDBCSourceLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/SpringContextTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/java/com/baeldung/spring/cloud/archaius/jdbconfig/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/resources/logback-test.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/resources/logback-test.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/jdbc-config/src/test/resources/logback-test.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-jdbc-config/src/test/resources/logback-test.xml diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/pom.xml b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/pom.xml similarity index 92% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/pom.xml rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/pom.xml index 7700a2219d..f7c93fd9bf 100644 --- a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/pom.xml +++ b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/pom.xml @@ -3,8 +3,8 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - zookeeper-config - zookeeper-config + spring-cloud-archaius-zookeeper-config + spring-cloud-archaius-zookeeper-config jar diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ZookeeperConfigApplication.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ZookeeperConfigApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ZookeeperConfigApplication.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ZookeeperConfigApplication.java diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/config/ZookeeperConfigsInitializer.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/config/ZookeeperConfigsInitializer.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/config/ZookeeperConfigsInitializer.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/config/ZookeeperConfigsInitializer.java diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/controller/ConfigPropertiesController.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/controller/ConfigPropertiesController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/controller/ConfigPropertiesController.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/controller/ConfigPropertiesController.java diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ArchaiusZookeeperLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ArchaiusZookeeperLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ArchaiusZookeeperLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/ArchaiusZookeeperLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-archaius/zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-archaius/spring-cloud-archaius-zookeeper-config/src/test/java/com/baeldung/spring/cloud/archaius/zookeeperconfig/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-dapr/pom.xml b/spring-cloud-modules/spring-cloud-dapr/pom.xml index 24b6c989bd..2bac0e8eaf 100644 --- a/spring-cloud-modules/spring-cloud-dapr/pom.xml +++ b/spring-cloud-modules/spring-cloud-dapr/pom.xml @@ -13,8 +13,8 @@ - gateway - greeting + spring-cloud-dapr-gateway + spring-cloud-dapr-greeting \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-dapr/gateway/pom.xml b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/pom.xml similarity index 95% rename from spring-cloud-modules/spring-cloud-dapr/gateway/pom.xml rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/pom.xml index 6545c61002..7874edda4a 100644 --- a/spring-cloud-modules/spring-cloud-dapr/gateway/pom.xml +++ b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.spring.cloud.spring-cloud-dapr - gateway + spring-cloud-dapr-gateway 1.0-SNAPSHOT diff --git a/spring-cloud-modules/spring-cloud-dapr/gateway/src/main/java/com/baeldung/gateway/GatewayApp.java b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/java/com/baeldung/gateway/GatewayApp.java similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/gateway/src/main/java/com/baeldung/gateway/GatewayApp.java rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/java/com/baeldung/gateway/GatewayApp.java diff --git a/spring-cloud-modules/spring-cloud-dapr/gateway/src/main/resources/application-no-dapr.yml b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/resources/application-no-dapr.yml similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/gateway/src/main/resources/application-no-dapr.yml rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/resources/application-no-dapr.yml diff --git a/spring-cloud-modules/spring-cloud-dapr/gateway/src/main/resources/application-with-dapr.yml b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/resources/application-with-dapr.yml similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/gateway/src/main/resources/application-with-dapr.yml rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-gateway/src/main/resources/application-with-dapr.yml diff --git a/spring-cloud-modules/spring-cloud-dapr/greeting/pom.xml b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/pom.xml similarity index 93% rename from spring-cloud-modules/spring-cloud-dapr/greeting/pom.xml rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/pom.xml index 22b4004cbf..24aa2f4dcf 100644 --- a/spring-cloud-modules/spring-cloud-dapr/greeting/pom.xml +++ b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.spring.cloud.spring-cloud-dapr - greeting + spring-cloud-dapr-greeting 1.0-SNAPSHOT diff --git a/spring-cloud-modules/spring-cloud-dapr/greeting/src/main/java/com/baeldung/hello/GreetingApp.java b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/java/com/baeldung/hello/GreetingApp.java similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/greeting/src/main/java/com/baeldung/hello/GreetingApp.java rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/java/com/baeldung/hello/GreetingApp.java diff --git a/spring-cloud-modules/spring-cloud-dapr/greeting/src/main/java/com/baeldung/hello/GreetingController.java b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/java/com/baeldung/hello/GreetingController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/greeting/src/main/java/com/baeldung/hello/GreetingController.java rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/java/com/baeldung/hello/GreetingController.java diff --git a/spring-cloud-modules/spring-cloud-dapr/greeting/src/main/resources/application.yml b/spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/resources/application.yml similarity index 100% rename from spring-cloud-modules/spring-cloud-dapr/greeting/src/main/resources/application.yml rename to spring-cloud-modules/spring-cloud-dapr/spring-cloud-dapr-greeting/src/main/resources/application.yml From 3810a3707817649e26cb7ed8bf60f4c3894b8d33 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Thu, 8 Dec 2022 19:18:02 +0530 Subject: [PATCH 09/25] JAVA-16250 Update spring-activiti module to use parent-boot-2 module as parent (#13120) --- spring-activiti/pom.xml | 23 +-- .../security/config/ProcessController.java | 15 -- .../config/SpringSecurityGroupManager.java | 86 ----------- .../config/SpringSecurityUserManager.java | 144 ------------------ .../security/withactiviti/SecurityConfig.java | 47 ------ .../SpringSecurityActivitiApplication.java | 34 ----- .../ActivitiSpringSecurityApplication.java | 39 ----- .../security/withspring/SecurityConfig.java | 27 ++-- .../SpringSecurityActivitiApplication.java | 13 ++ .../ActivitiWithSpringApplication.java | 3 +- ...ActivitiSpringSecurityIntegrationTest.java | 17 +-- 11 files changed, 39 insertions(+), 409 deletions(-) delete mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityGroupManager.java delete mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityUserManager.java delete mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SecurityConfig.java delete mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SpringSecurityActivitiApplication.java delete mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/ActivitiSpringSecurityApplication.java create mode 100644 spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SpringSecurityActivitiApplication.java diff --git a/spring-activiti/pom.xml b/spring-activiti/pom.xml index 9de7e473f8..b7fdfdfc60 100644 --- a/spring-activiti/pom.xml +++ b/spring-activiti/pom.xml @@ -9,12 +9,10 @@ Demo project for Spring Boot - - com.baeldung - parent-boot-1 + parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-1 + ../parent-boot-2 @@ -32,18 +30,21 @@ org.activiti - activiti-spring-boot-starter-basic - ${activiti.version} - - - org.activiti - activiti-spring-boot-starter-security + activiti-spring-boot-starter ${activiti.version} + + org.springframework.boot + spring-boot-starter-web + org.springframework.boot spring-boot-starter-thymeleaf + + org.springframework.boot + spring-boot-starter-security + com.h2database h2 @@ -70,7 +71,7 @@ - 6.0.0 + 7.1.0.M6 2.17.1 diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/ProcessController.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/config/ProcessController.java index 671b246328..c680af304d 100644 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/ProcessController.java +++ b/spring-activiti/src/main/java/com/baeldung/activiti/security/config/ProcessController.java @@ -2,14 +2,11 @@ package com.baeldung.activiti.security.config; import java.util.List; -import org.activiti.engine.IdentityService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; -import org.activiti.spring.SpringProcessEngineConfiguration; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -22,21 +19,9 @@ public class ProcessController { @Autowired private TaskService taskService; - @Autowired - private IdentityService identityService; - - @Autowired - SpringProcessEngineConfiguration config; - @GetMapping("/protected-process") public String startProcess() { - String userId = SecurityContextHolder.getContext() - .getAuthentication() - .getName(); - - identityService.setAuthenticatedUserId(userId); - ProcessInstance pi = runtimeService.startProcessInstanceByKey("protected-process"); List usertasks = taskService.createTaskQuery() diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityGroupManager.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityGroupManager.java deleted file mode 100644 index 00fc674e22..0000000000 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityGroupManager.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.activiti.security.config; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.activiti.engine.identity.Group; -import org.activiti.engine.identity.GroupQuery; -import org.activiti.engine.impl.GroupQueryImpl; -import org.activiti.engine.impl.Page; -import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; -import org.activiti.engine.impl.persistence.entity.GroupEntityImpl; -import org.activiti.engine.impl.persistence.entity.GroupEntityManagerImpl; -import org.activiti.engine.impl.persistence.entity.data.GroupDataManager; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.provisioning.JdbcUserDetailsManager; - -public class SpringSecurityGroupManager extends GroupEntityManagerImpl { - - private JdbcUserDetailsManager userManager; - - public SpringSecurityGroupManager(ProcessEngineConfigurationImpl processEngineConfiguration, GroupDataManager groupDataManager) { - super(processEngineConfiguration, groupDataManager); - } - - @Override - public List findGroupByQueryCriteria(GroupQueryImpl query, Page page) { - - if (query.getUserId() != null) { - return findGroupsByUser(query.getUserId()); - } - return null; - } - - @Override - public long findGroupCountByQueryCriteria(GroupQueryImpl query) { - return findGroupByQueryCriteria(query, null).size(); - } - - @Override - public List findGroupsByUser(String userId) { - UserDetails userDetails = userManager.loadUserByUsername(userId); - System.out.println("group manager"); - if (userDetails != null) { - List groups = userDetails.getAuthorities() - .stream() - .map(a -> a.getAuthority()) - .map(a -> { - Group g = new GroupEntityImpl(); - g.setId(a); - return g; - }) - .collect(Collectors.toList()); - return groups; - } - return null; - } - - public void setUserManager(JdbcUserDetailsManager userManager) { - this.userManager = userManager; - } - - public Group createNewGroup(String groupId) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - - @Override - public void delete(String groupId) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - - public GroupQuery createNewGroupQuery() { - throw new UnsupportedOperationException("This operation is not supported!"); - } - - public List findGroupsByNativeQuery(Map parameterMap, int firstResult, int maxResults) { - throw new UnsupportedOperationException("This operation is not supported!"); - } - - public long findGroupCountByNativeQuery(Map parameterMap) { - throw new UnsupportedOperationException("This operation is not supported!"); - } - -} diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityUserManager.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityUserManager.java deleted file mode 100644 index ce9863eb6c..0000000000 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/config/SpringSecurityUserManager.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.baeldung.activiti.security.config; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.activiti.engine.identity.Group; -import org.activiti.engine.identity.User; -import org.activiti.engine.identity.UserQuery; -import org.activiti.engine.impl.Page; -import org.activiti.engine.impl.UserQueryImpl; -import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; -import org.activiti.engine.impl.persistence.entity.GroupEntityImpl; -import org.activiti.engine.impl.persistence.entity.UserEntity; -import org.activiti.engine.impl.persistence.entity.UserEntityImpl; -import org.activiti.engine.impl.persistence.entity.UserEntityManagerImpl; -import org.activiti.engine.impl.persistence.entity.data.UserDataManager; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.provisioning.JdbcUserDetailsManager; - -public class SpringSecurityUserManager extends UserEntityManagerImpl { - - private JdbcUserDetailsManager userManager; - - public SpringSecurityUserManager(ProcessEngineConfigurationImpl processEngineConfiguration, UserDataManager userDataManager, JdbcUserDetailsManager userManager) { - super(processEngineConfiguration, userDataManager); - this.userManager = userManager; - } - - @Override - public UserEntity findById(String userId) { - UserDetails userDetails = userManager.loadUserByUsername(userId); - if (userDetails != null) { - UserEntityImpl user = new UserEntityImpl(); - user.setId(userId); - return user; - } - return null; - - } - - @Override - public List findUserByQueryCriteria(UserQueryImpl query, Page page) { - List users = null; - if (query.getGroupId() != null) { - users = userManager.findUsersInGroup(query.getGroupId()) - .stream() - .map(username -> { - User user = new UserEntityImpl(); - user.setId(username); - return user; - }) - .collect(Collectors.toList()); - if (page != null) { - return users.subList(page.getFirstResult(), page.getFirstResult() + page.getMaxResults()); - - } - return users; - } - - if (query.getId() != null) { - UserDetails userDetails = userManager.loadUserByUsername(query.getId()); - if (userDetails != null) { - UserEntityImpl user = new UserEntityImpl(); - user.setId(query.getId()); - return Collections.singletonList(user); - } - } - return null; - } - - @Override - public Boolean checkPassword(String userId, String password) { - return true; - } - - public void setUserManager(JdbcUserDetailsManager userManager) { - this.userManager = userManager; - } - - public User createNewUser(String userId) { - throw new UnsupportedOperationException("This operation is not supported!"); - } - - public void updateUser(User updatedUser) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - - public void delete(UserEntity userEntity) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - - @Override - public void deletePicture(User user) { - UserEntity userEntity = (UserEntity) user; - if (userEntity.getPictureByteArrayRef() != null) { - userEntity.getPictureByteArrayRef() - .delete(); - } - } - - public void delete(String userId) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - - public long findUserCountByQueryCriteria(UserQueryImpl query) { - return findUserByQueryCriteria(query, null).size(); - } - - public List findGroupsByUser(String userId) { - UserDetails userDetails = userManager.loadUserByUsername(userId); - if (userDetails != null) { - List groups = userDetails.getAuthorities() - .stream() - .map(a -> a.getAuthority()) - .map(a -> { - Group g = new GroupEntityImpl(); - g.setId(a); - return g; - }) - .collect(Collectors.toList()); - return groups; - } - return null; - } - - public UserQuery createNewUserQuery() { - throw new UnsupportedOperationException("This operation is not supported!"); - } - - public List findUsersByNativeQuery(Map parameterMap, int firstResult, int maxResults) { - throw new UnsupportedOperationException("This operation is not supported!"); - } - - public long findUserCountByNativeQuery(Map parameterMap) { - throw new UnsupportedOperationException("This operation is not supported!"); - - } - -} diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SecurityConfig.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SecurityConfig.java deleted file mode 100644 index f471600553..0000000000 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SecurityConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.baeldung.activiti.security.withactiviti; - -import org.activiti.engine.IdentityService; -import org.activiti.spring.security.IdentityServiceUserDetailsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - protected void configure(HttpSecurity http) throws Exception { - http.antMatcher("/**") - .authorizeRequests() - .antMatchers("/protected-process*") - .authenticated() - .anyRequest() - .permitAll() - .and() - .formLogin() - .loginPage("/login") - .defaultSuccessUrl("/homepage") - .failureUrl("/login?error=true") - .and() - .csrf() - .disable() - .logout() - .logoutSuccessUrl("/login"); - } - - @Autowired - private IdentityService identityService; - - @Bean - public IdentityServiceUserDetailsService userDetailsService() { - return new IdentityServiceUserDetailsService(identityService); - } - - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsService()); - } - -} diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SpringSecurityActivitiApplication.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SpringSecurityActivitiApplication.java deleted file mode 100644 index 2270a4d684..0000000000 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/withactiviti/SpringSecurityActivitiApplication.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.activiti.security.withactiviti; - -import org.activiti.engine.IdentityService; -import org.activiti.engine.identity.Group; -import org.activiti.engine.identity.User; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; - -@SpringBootApplication(scanBasePackages = { "com.baeldung.activiti.security.config", "com.baeldung.activiti.security.withactiviti" }) -public class SpringSecurityActivitiApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringSecurityActivitiApplication.class, args); - } - - @Bean - InitializingBean usersAndGroupsInitializer(IdentityService identityService) { - return new InitializingBean() { - public void afterPropertiesSet() throws Exception { - User user = identityService.newUser("activiti_user"); - user.setPassword("pass"); - identityService.saveUser(user); - - Group group = identityService.newGroup("user"); - group.setName("ROLE_USER"); - group.setType("USER"); - identityService.saveGroup(group); - identityService.createMembership(user.getId(), group.getId()); - } - }; - } -} diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/ActivitiSpringSecurityApplication.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/ActivitiSpringSecurityApplication.java deleted file mode 100644 index 5878a5d678..0000000000 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/ActivitiSpringSecurityApplication.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.activiti.security.withspring; - -import org.activiti.engine.impl.persistence.entity.data.impl.MybatisGroupDataManager; -import org.activiti.engine.impl.persistence.entity.data.impl.MybatisUserDataManager; -import org.activiti.spring.SpringProcessEngineConfiguration; -import org.activiti.spring.boot.SecurityAutoConfiguration; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.security.provisioning.JdbcUserDetailsManager; - -import com.baeldung.activiti.security.config.SpringSecurityGroupManager; -import com.baeldung.activiti.security.config.SpringSecurityUserManager; - -@SpringBootApplication(exclude = SecurityAutoConfiguration.class, scanBasePackages = { "com.baeldung.activiti.security.config", "com.baeldung.activiti.security.withspring" }) -public class ActivitiSpringSecurityApplication { - - public static void main(String[] args) { - SpringApplication.run(ActivitiSpringSecurityApplication.class, args); - } - - @Autowired - private SpringProcessEngineConfiguration processEngineConfiguration; - - @Autowired - private JdbcUserDetailsManager userManager; - - @Bean - InitializingBean processEngineInitializer() { - return new InitializingBean() { - public void afterPropertiesSet() throws Exception { - processEngineConfiguration.setUserEntityManager(new SpringSecurityUserManager(processEngineConfiguration, new MybatisUserDataManager(processEngineConfiguration), userManager)); - processEngineConfiguration.setGroupEntityManager(new SpringSecurityGroupManager(processEngineConfiguration, new MybatisGroupDataManager(processEngineConfiguration))); - } - }; - } -} diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java index df1991c3e4..b0c74371c7 100644 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java +++ b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java @@ -1,21 +1,17 @@ package com.baeldung.activiti.security.withspring; -import javax.sql.DataSource; - -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.provisioning.JdbcUserDetailsManager; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Autowired - private DataSource dataSource; - protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/**") .authorizeRequests() @@ -36,15 +32,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { } @Bean - public JdbcUserDetailsManager userDetailsManager() { - JdbcUserDetailsManager manager = new JdbcUserDetailsManager(); - manager.setDataSource(dataSource); - return manager; - } + public UserDetailsService userDetailsService() { + UserDetails user = User.withUsername("user") + .password("{noop}pass") + .authorities("ROLE_ACTIVITI_USER") + .build(); - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsManager()); + return new InMemoryUserDetailsManager(user); } - } diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SpringSecurityActivitiApplication.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SpringSecurityActivitiApplication.java new file mode 100644 index 0000000000..84aa4b2b0d --- /dev/null +++ b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SpringSecurityActivitiApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.activiti.security.withspring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = { "com.baeldung.activiti.security.config", "com.baeldung.activiti.security.withspring" }) +public class SpringSecurityActivitiApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringSecurityActivitiApplication.class, args); + } + +} diff --git a/spring-activiti/src/main/java/com/baeldung/activitiwithspring/ActivitiWithSpringApplication.java b/spring-activiti/src/main/java/com/baeldung/activitiwithspring/ActivitiWithSpringApplication.java index d43ae3cc35..b3cf66b0f7 100644 --- a/spring-activiti/src/main/java/com/baeldung/activitiwithspring/ActivitiWithSpringApplication.java +++ b/spring-activiti/src/main/java/com/baeldung/activitiwithspring/ActivitiWithSpringApplication.java @@ -2,9 +2,8 @@ package com.baeldung.activitiwithspring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; -@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) +@SpringBootApplication public class ActivitiWithSpringApplication { public static void main(String[] args) { SpringApplication.run(ActivitiWithSpringApplication.class, args); diff --git a/spring-activiti/src/test/java/com/baeldung/activitiwithspring/ActivitiSpringSecurityIntegrationTest.java b/spring-activiti/src/test/java/com/baeldung/activitiwithspring/ActivitiSpringSecurityIntegrationTest.java index 7f99483fcf..43a159efbd 100644 --- a/spring-activiti/src/test/java/com/baeldung/activitiwithspring/ActivitiSpringSecurityIntegrationTest.java +++ b/spring-activiti/src/test/java/com/baeldung/activitiwithspring/ActivitiSpringSecurityIntegrationTest.java @@ -1,33 +1,22 @@ package com.baeldung.activitiwithspring; -import org.activiti.engine.IdentityService; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; -import com.baeldung.activiti.security.withspring.ActivitiSpringSecurityApplication; +import com.baeldung.activiti.security.withspring.SpringSecurityActivitiApplication; @RunWith(SpringRunner.class) -@SpringBootTest(classes = ActivitiSpringSecurityApplication.class) +@SpringBootTest(classes = SpringSecurityActivitiApplication.class) @WebAppConfiguration @AutoConfigureTestDatabase public class ActivitiSpringSecurityIntegrationTest { - @Autowired - private IdentityService identityService; @Test - public void whenUserExists_thenOk() { - identityService.setUserPicture("spring_user", null); - } - - @Test(expected = UsernameNotFoundException.class) - public void whenUserNonExistent_thenSpringException() { - identityService.setUserPicture("user3", null); + public void contextLoads() { } } From 205506f00af1ca6de4252f62e77e86ac2446d977 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:16:13 +0000 Subject: [PATCH 10/25] [JAVA-15029] Upgraded to apache httpClient 5 (#13112) Co-authored-by: panagiotiskakos --- .../CustomHttpClientResponseHandler.java | 11 ++ .../sec/HttpClientCookieLiveTest.java | 103 +++++++----------- 2 files changed, 49 insertions(+), 65 deletions(-) create mode 100644 httpclient-simple/src/main/java/com/baeldung/handler/CustomHttpClientResponseHandler.java diff --git a/httpclient-simple/src/main/java/com/baeldung/handler/CustomHttpClientResponseHandler.java b/httpclient-simple/src/main/java/com/baeldung/handler/CustomHttpClientResponseHandler.java new file mode 100644 index 0000000000..5472da3a97 --- /dev/null +++ b/httpclient-simple/src/main/java/com/baeldung/handler/CustomHttpClientResponseHandler.java @@ -0,0 +1,11 @@ +package com.baeldung.handler; + +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.io.HttpClientResponseHandler; + +public class CustomHttpClientResponseHandler implements HttpClientResponseHandler { + @Override + public ClassicHttpResponse handleResponse(ClassicHttpResponse response) { + return response; + } +} \ No newline at end of file diff --git a/httpclient-simple/src/test/java/com/baeldung/httpclient/sec/HttpClientCookieLiveTest.java b/httpclient-simple/src/test/java/com/baeldung/httpclient/sec/HttpClientCookieLiveTest.java index 75286e5b2e..82a2d8e9d6 100644 --- a/httpclient-simple/src/test/java/com/baeldung/httpclient/sec/HttpClientCookieLiveTest.java +++ b/httpclient-simple/src/test/java/com/baeldung/httpclient/sec/HttpClientCookieLiveTest.java @@ -1,114 +1,87 @@ package com.baeldung.httpclient.sec; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.cookie.ClientCookie; -import org.apache.http.impl.client.BasicCookieStore; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.cookie.BasicClientCookie; -import org.apache.http.protocol.BasicHttpContext; -import org.apache.http.protocol.HttpContext; -import com.baeldung.httpclient.ResponseUtil; +import com.baeldung.handler.CustomHttpClientResponseHandler; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.cookie.BasicCookieStore; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.cookie.BasicClientCookie; +import org.apache.hc.client5.http.protocol.HttpClientContext; + +import org.apache.hc.core5.http.protocol.BasicHttpContext; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.junit.jupiter.api.Test; import java.io.IOException; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; -public class HttpClientCookieLiveTest { - - private CloseableHttpClient instance; - - private CloseableHttpResponse response; - - private static Logger log = LoggerFactory.getLogger(HttpClientCookieLiveTest.class); - - @Before - public final void before() { - instance = HttpClientBuilder.create().build(); - } - - @After - public final void after() throws IllegalStateException, IOException { - ResponseUtil.closeResponse(response); - } - - // tests +class HttpClientCookieLiveTest { @Test - public final void whenSettingCookiesOnARequest_thenCorrect() throws IOException { - instance = HttpClientBuilder.create().build(); + final void whenSettingCookiesOnARequest_thenCorrect() throws IOException { final HttpGet request = new HttpGet("http://www.github.com"); request.setHeader("Cookie", "JSESSIONID=1234"); - - response = instance.execute(request); - - assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); + try (CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpResponse response = (CloseableHttpResponse) client.execute(request, new CustomHttpClientResponseHandler());) { + assertThat(response.getCode(), equalTo(200)); + } } @Test - public final void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() throws IOException { + final void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); - cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true"); - + cookie.setAttribute("domain", "true"); cookie.setPath("/"); cookieStore.addCookie(cookie); - - DefaultHttpClient client = new DefaultHttpClient(); - client.setCookieStore(cookieStore); - final HttpGet request = new HttpGet("https://www.github.com"); + try (CloseableHttpClient client = HttpClientBuilder.create() + .setDefaultCookieStore(cookieStore) + .build(); CloseableHttpResponse response = (CloseableHttpResponse) client.execute(request, new CustomHttpClientResponseHandler())) { - response = (CloseableHttpResponse) client.execute(request); - - assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); + assertThat(response.getCode(), equalTo(200)); + } } @Test - public final void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() throws IOException { + final void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); - cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true"); + cookie.setAttribute("domain", "true"); cookie.setPath("/"); cookieStore.addCookie(cookie); - instance = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build(); - final HttpGet request = new HttpGet("http://www.github.com"); - response = instance.execute(request); + try (CloseableHttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build(); + CloseableHttpResponse response = (CloseableHttpResponse) client.execute(request, new CustomHttpClientResponseHandler())) { + + assertThat(response.getCode(), equalTo(200)); + } - assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); } @Test - public final void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() throws IOException { + final void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); cookie.setPath("/"); cookieStore.addCookie(cookie); - instance = HttpClientBuilder.create().build(); - final HttpGet request = new HttpGet("http://www.github.com"); - final HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore); // localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); // before 4.3 - response = instance.execute(request, localContext); - assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); + try (CloseableHttpClient client = HttpClientBuilder.create().build(); + CloseableHttpResponse response = (CloseableHttpResponse) client.execute(request, localContext, new CustomHttpClientResponseHandler())) { + assertThat(response.getCode(), equalTo(200)); + } } } From 0264bb82c85e887334ec3fcace3ad5b19dfeae58 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:17:51 +0000 Subject: [PATCH 11/25] Java 13914 (#13083) * [JAVA-13914] Replaced Junit4 annotations with Junit5 * [JAVA-13914] Replaced Junit4 annotations with Junit5 * [JAVA-13914] Fixed test * [JAVA-13914] Clean up Co-authored-by: panagiotiskakos --- .../app/rest/FlowerControllerUnitTest.java | 39 +++++----- .../app/rest/MessageControllerUnitTest.java | 64 ++++++++-------- .../junit5/mockito/UserServiceUnitTest.java | 4 +- .../baeldung/mockito/MockFinalsUnitTest.java | 6 +- .../mockito/MockitoAnnotationUnitTest.java | 64 ++++++++-------- ...tionsInitWithMockitoJUnitRuleUnitTest.java | 6 +- ...ckitoAnnotationsInjectIntoSpyUnitTest.java | 32 ++++---- ...ckitoAnnotationsUninitializedUnitTest.java | 17 +++-- .../mockito/MockitoExceptionUnitTest.java | 50 ++++++++----- .../baeldung/mockito/MockitoMockUnitTest.java | 12 +-- .../MockitoVerifyExamplesUnitTest.java | 38 +++++----- .../MockitoWhenThenExamplesUnitTest.java | 75 +++++++++++-------- .../argumentcaptor/EmailServiceUnitTest.java | 42 ++++++----- .../mockedstatic/MockedStaticUnitTest.java | 6 +- .../spy/MockitoMisusingMockOrSpyUnitTest.java | 17 +++-- .../mockito/spy/MockitoSpyUnitTest.java | 47 ++++++------ .../MockitoVoidMethodsUnitTest.java | 30 ++++---- 17 files changed, 307 insertions(+), 242 deletions(-) diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java index df3561d646..d611cd9e45 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/FlowerControllerUnitTest.java @@ -1,6 +1,7 @@ package com.baeldung.app.rest; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.AdditionalMatchers.or; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; @@ -10,18 +11,18 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.exceptions.misusing.InvalidUseOfMatchersException; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.baeldung.app.api.Flower; import com.baeldung.domain.service.FlowerService; -@RunWith(MockitoJUnitRunner.class) -public class FlowerControllerUnitTest { +@ExtendWith(MockitoExtension.class) +class FlowerControllerUnitTest { @InjectMocks private FlowerController flowerController; @@ -30,7 +31,7 @@ public class FlowerControllerUnitTest { private FlowerService flowerService; @Test - public void givenPoppyFlower_whenUsingDoReturn_thenCorrect() { + void givenPoppyFlower_whenUsingDoReturn_thenCorrect() { doReturn("Flower").when(flowerService).analyze("poppy"); String response = flowerController.isAFlower("poppy"); @@ -38,25 +39,27 @@ public class FlowerControllerUnitTest { } @Test - public void givenAnyString_whenUsingArgumentMatcher_thenCorrect() { + void givenAnyString_whenUsingArgumentMatcher_thenCorrect() { when(flowerService.analyze(anyString())).thenReturn("Flower"); String response = flowerController.isAFlower("violetta"); assertThat(response).isEqualTo("Flower"); } - @Test(expected = InvalidUseOfMatchersException.class) - public void whenIncorrectMatchers_thenThrowsError() { - when(flowerService.isABigFlower("poppy", anyInt())).thenReturn(true); + @Test + void whenIncorrectMatchers_thenThrowsError() { + assertThrows(InvalidUseOfMatchersException.class, () -> { + when(flowerService.isABigFlower("poppy", anyInt())).thenReturn(true); + }); Flower flower = new Flower("poppy", 15); Boolean response = flowerController.isABigFlower(flower); - assertThat(response).isTrue(); + assertThat(response).isFalse(); } @Test - public void whenCorrectMatchers_thenCorrect() { + void whenCorrectMatchers_thenCorrect() { when(flowerService.isABigFlower(eq("poppy"), anyInt())).thenReturn(true); Flower flower = new Flower("poppy", 15); @@ -65,23 +68,25 @@ public class FlowerControllerUnitTest { assertThat(response).isTrue(); } - @Test(expected = InvalidUseOfMatchersException.class) - public void whenUsingMatchersAsReturnValue_thenThrowsError() { + @Test + void whenUsingMatchersAsReturnValue_thenThrowsError() { flowerController.isAFlower("poppy"); String orMatcher = or(eq("poppy"), endsWith("y")); - verify(flowerService).analyze(orMatcher); + assertThrows(InvalidUseOfMatchersException.class, () -> { + verify(flowerService).analyze(orMatcher); + }); } @Test - public void whenUsingMatchersAsOngoingStubbing_thenCorrect1() { + void whenUsingMatchersAsOngoingStubbing_thenCorrect1() { flowerController.isAFlower("poppy"); verify(flowerService).analyze(or(eq("poppy"), endsWith("y"))); } @Test - public void whenUsingMatchersAsOngoingStubbing_thenCorrect2() { + void whenUsingMatchersAsOngoingStubbing_thenCorrect2() { flowerController.isAFlower("lily"); verify(flowerService).analyze(or(eq("poppy"), endsWith("y"))); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java index 1bfbeecfec..84b5bf241e 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/app/rest/MessageControllerUnitTest.java @@ -5,52 +5,52 @@ import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.baeldung.app.api.MessageDTO; import com.baeldung.domain.model.Message; import com.baeldung.domain.service.MessageService; import com.baeldung.domain.util.MessageMatcher; -@RunWith(MockitoJUnitRunner.class) -public class MessageControllerUnitTest { +@ExtendWith(MockitoExtension.class) +class MessageControllerUnitTest { - @InjectMocks - private MessageController messageController; - - @Mock - private MessageService messageService; + @InjectMocks + private MessageController messageController; - @Test - public void givenMsg_whenVerifyUsingAnyMatcher_thenOk() { - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setFrom("me"); - messageDTO.setTo("you"); - messageDTO.setText("Hello, you!"); + @Mock + private MessageService messageService; - messageController.createMessage(messageDTO); + @Test + void givenMsg_whenVerifyUsingAnyMatcher_thenOk() { + MessageDTO messageDTO = new MessageDTO(); + messageDTO.setFrom("me"); + messageDTO.setTo("you"); + messageDTO.setText("Hello, you!"); - verify(messageService, times(1)).deliverMessage(any(Message.class)); - } + messageController.createMessage(messageDTO); - @Test - public void givenMsg_whenVerifyUsingMessageMatcher_thenOk() { - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setFrom("me"); - messageDTO.setTo("you"); - messageDTO.setText("Hello, you!"); + verify(messageService, times(1)).deliverMessage(any(Message.class)); + } - messageController.createMessage(messageDTO); + @Test + void givenMsg_whenVerifyUsingMessageMatcher_thenOk() { + MessageDTO messageDTO = new MessageDTO(); + messageDTO.setFrom("me"); + messageDTO.setTo("you"); + messageDTO.setText("Hello, you!"); - Message message = new Message(); - message.setFrom("me"); - message.setTo("you"); - message.setText("Hello, you!"); + messageController.createMessage(messageDTO); - verify(messageService, times(1)).deliverMessage(argThat(new MessageMatcher(message))); - } + Message message = new Message(); + message.setFrom("me"); + message.setTo("you"); + message.setText("Hello, you!"); + + verify(messageService, times(1)).deliverMessage(argThat(new MessageMatcher(message))); + } } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java index 8a350e5d9f..cc38d617b7 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/junit5/mockito/UserServiceUnitTest.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -13,7 +14,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.stubbing.Answer; @@ -115,7 +115,7 @@ class UserServiceUnitTest { void givenUserWithExistingName_whenSaveUser_thenGiveUsernameAlreadyExistsError() { // Given user = new User("jerry", 12); - Mockito.reset(userRepository); + reset(userRepository); when(userRepository.isUsernameAlreadyExists(any(String.class))).thenReturn(true); // When diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java index 24ab67049f..a4b2bd03b4 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockFinalsUnitTest.java @@ -4,12 +4,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.junit.Test; +import org.junit.jupiter.api.Test; -public class MockFinalsUnitTest { +class MockFinalsUnitTest { @Test - public void whenMockFinalMethodMockWorks() { + void whenMockFinalMethodMockWorks() { MyList myList = new MyList(); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java index bd68afac75..acfd87e047 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationUnitTest.java @@ -1,23 +1,27 @@ package com.baeldung.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) -public class MockitoAnnotationUnitTest { +@ExtendWith(MockitoExtension.class) +class MockitoAnnotationUnitTest { @Mock private List mockedList; @@ -36,61 +40,61 @@ public class MockitoAnnotationUnitTest { // tests @Test - public void whenNotUseMockAnnotation_thenCorrect() { - final List mockList = Mockito.mock(List.class); + void whenNotUseMockAnnotation_thenCorrect() { + final List mockList = mock(List.class); mockList.add("one"); - Mockito.verify(mockList).add("one"); + verify(mockList).add("one"); assertEquals(0, mockList.size()); - Mockito.when(mockList.size()).thenReturn(100); + when(mockList.size()).thenReturn(100); assertEquals(100, mockList.size()); } @Test - public void whenUseMockAnnotation_thenMockIsInjected() { + void whenUseMockAnnotation_thenMockIsInjected() { mockedList.add("one"); - Mockito.verify(mockedList).add("one"); + verify(mockedList).add("one"); assertEquals(0, mockedList.size()); - Mockito.when(mockedList.size()).thenReturn(100); + when(mockedList.size()).thenReturn(100); assertEquals(100, mockedList.size()); } @Test - public void whenNotUseSpyAnnotation_thenCorrect() { - final List spyList = Mockito.spy(new ArrayList()); + void whenNotUseSpyAnnotation_thenCorrect() { + final List spyList = spy(new ArrayList()); spyList.add("one"); spyList.add("two"); - Mockito.verify(spyList).add("one"); - Mockito.verify(spyList).add("two"); + verify(spyList).add("one"); + verify(spyList).add("two"); assertEquals(2, spyList.size()); - Mockito.doReturn(100).when(spyList).size(); + doReturn(100).when(spyList).size(); assertEquals(100, spyList.size()); } @Test - public void whenUseSpyAnnotation_thenSpyIsInjectedCorrectly() { + void whenUseSpyAnnotation_thenSpyIsInjectedCorrectly() { spiedList.add("one"); spiedList.add("two"); - Mockito.verify(spiedList).add("one"); - Mockito.verify(spiedList).add("two"); + verify(spiedList).add("one"); + verify(spiedList).add("two"); assertEquals(2, spiedList.size()); - Mockito.doReturn(100).when(spiedList).size(); + doReturn(100).when(spiedList).size(); assertEquals(100, spiedList.size()); } @Test - public void whenNotUseCaptorAnnotation_thenCorrect() { - final List mockList = Mockito.mock(List.class); + void whenNotUseCaptorAnnotation_thenCorrect() { + final List mockList = mock(List.class); final ArgumentCaptor arg = ArgumentCaptor.forClass(String.class); mockList.add("one"); - Mockito.verify(mockList).add(arg.capture()); + verify(mockList).add(arg.capture()); assertEquals("one", arg.getValue()); } @@ -100,9 +104,9 @@ public class MockitoAnnotationUnitTest { ArgumentCaptor argCaptor; @Test - public void whenUseCaptorAnnotation_thenTheSame() { + void whenUseCaptorAnnotation_thenTheSame() { mockedList.add("one"); - Mockito.verify(mockedList).add(argCaptor.capture()); + verify(mockedList).add(argCaptor.capture()); assertEquals("one", argCaptor.getValue()); } @@ -114,8 +118,8 @@ public class MockitoAnnotationUnitTest { private MyDictionary dic = new MyDictionary(); @Test - public void whenUseInjectMocksAnnotation_thenCorrect() { - Mockito.when(wordMap.get("aWord")).thenReturn("aMeaning"); + void whenUseInjectMocksAnnotation_thenCorrect() { + when(wordMap.get("aWord")).thenReturn("aMeaning"); assertEquals("aMeaning", dic.getMeaning("aWord")); } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest.java index 88a9410101..512f538a58 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest.java @@ -6,16 +6,18 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; + import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; + public class MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest { @Rule public MockitoRule initRule = MockitoJUnit.rule(); - + @Mock private List mockedList; @@ -23,6 +25,6 @@ public class MockitoAnnotationsInitWithMockitoJUnitRuleUnitTest { public void whenUsingMockitoJUnitRule_thenMocksInitialized() { when(mockedList.size()).thenReturn(41); - assertThat(mockedList.size()).isEqualTo(41); + assertThat(mockedList).hasSize(41); } } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInjectIntoSpyUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInjectIntoSpyUnitTest.java index 9d3a00f8b9..89a253c855 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInjectIntoSpyUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsInjectIntoSpyUnitTest.java @@ -1,22 +1,28 @@ package com.baeldung.mockito; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -import org.mockito.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.openMocks; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import java.util.Map; -import static org.junit.Assert.assertEquals; -@RunWith(MockitoJUnitRunner.class) -public class MockitoAnnotationsInjectIntoSpyUnitTest { +@ExtendWith(MockitoExtension.class) +class MockitoAnnotationsInjectIntoSpyUnitTest { - @Before + @BeforeEach public void init() { - MockitoAnnotations.openMocks(this); - spyDic = Mockito.spy(new MyDictionary(wordMap)); + openMocks(this); + spyDic = spy(new MyDictionary(wordMap)); } @Mock @@ -28,8 +34,8 @@ public class MockitoAnnotationsInjectIntoSpyUnitTest { private MyDictionary spyDic; @Test - public void whenUseInjectMocksAnnotation_thenCorrect() { - Mockito.when(wordMap.get("aWord")).thenReturn("aMeaning"); + void whenUseInjectMocksAnnotation_thenCorrect() { + when(wordMap.get("aWord")).thenReturn("aMeaning"); assertEquals("aMeaning", spyDic.getMeaning("aWord")); } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java index ed50732183..10b0aa6626 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoAnnotationsUninitializedUnitTest.java @@ -1,18 +1,23 @@ package com.baeldung.mockito; -import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +import org.junit.jupiter.api.Test; import org.mockito.Mock; -import org.mockito.Mockito; import java.util.List; -public class MockitoAnnotationsUninitializedUnitTest { +class MockitoAnnotationsUninitializedUnitTest { @Mock List mockedList; - @Test(expected = NullPointerException.class) - public void whenMockitoAnnotationsUninitialized_thenNPEThrown() { - Mockito.when(mockedList.size()).thenReturn(1); + @Test + void whenMockitoAnnotationsUninitialized_thenNPEThrown() { + assertThrows(NullPointerException.class, () -> { + when(mockedList.size()).thenReturn(1); + }); } } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java index 7ed4fbdf37..843edd8d0a 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoExceptionUnitTest.java @@ -1,57 +1,71 @@ package com.baeldung.mockito; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.junit.Test; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; -public class MockitoExceptionUnitTest { +@ExtendWith(MockitoExtension.class) +class MockitoExceptionUnitTest { - @Test(expected = NullPointerException.class) - public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { + @Test + void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())).thenThrow(NullPointerException.class); + assertThrows(NullPointerException.class, () -> { + dictMock.getMeaning("word"); + }); - dictMock.getMeaning("word"); } - @Test(expected = IllegalStateException.class) - public void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() { + @Test + void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(IllegalStateException.class).when(dictMock) .add(anyString(), anyString()); + assertThrows(IllegalStateException.class, () -> { + dictMock.add("word", "meaning"); + }); - dictMock.add("word", "meaning"); } - @Test(expected = NullPointerException.class) - public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { + @Test + void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); when(dictMock.getMeaning(anyString())).thenThrow(new NullPointerException("Error occurred")); + assertThrows(NullPointerException.class, () -> { + dictMock.getMeaning("word"); + }); - dictMock.getMeaning("word"); } - @Test(expected = IllegalStateException.class) - public void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { + @Test + void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() { MyDictionary dictMock = mock(MyDictionary.class); doThrow(new IllegalStateException("Error occurred")).when(dictMock) .add(anyString(), anyString()); + assertThrows(IllegalStateException.class, () -> { + dictMock.add("word", "meaning"); + }); - dictMock.add("word", "meaning"); } // ===== - @Test(expected = NullPointerException.class) - public void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { + @Test + void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() { MyDictionary dict = new MyDictionary(); MyDictionary spy = Mockito.spy(dict); - when(spy.getMeaning(anyString())).thenThrow(NullPointerException.class); - spy.getMeaning("word"); + assertThrows(NullPointerException.class, () -> { + spy.getMeaning("word"); + }); } } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java index 6b2bae16c3..6e9167f0d0 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoMockUnitTest.java @@ -10,16 +10,16 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.withSettings; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.MockSettings; import org.mockito.exceptions.verification.TooFewActualInvocations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; -public class MockitoMockUnitTest { +class MockitoMockUnitTest { @Test - public void whenUsingSimpleMock_thenCorrect() { + void whenUsingSimpleMock_thenCorrect() { MyList listMock = mock(MyList.class); when(listMock.add(anyString())).thenReturn(false); boolean added = listMock.add(randomAlphabetic(6)); @@ -29,7 +29,7 @@ public class MockitoMockUnitTest { } @Test - public void whenUsingMockWithName_thenCorrect() { + void whenUsingMockWithName_thenCorrect() { MyList listMock = mock(MyList.class, "myMock"); when(listMock.add(anyString())).thenReturn(false); listMock.add(randomAlphabetic(6)); @@ -47,7 +47,7 @@ public class MockitoMockUnitTest { } @Test - public void whenUsingMockWithAnswer_thenCorrect() { + void whenUsingMockWithAnswer_thenCorrect() { MyList listMock = mock(MyList.class, new CustomAnswer()); boolean added = listMock.add(randomAlphabetic(6)); @@ -56,7 +56,7 @@ public class MockitoMockUnitTest { } @Test - public void whenUsingMockWithSettings_thenCorrect() { + void whenUsingMockWithSettings_thenCorrect() { MockSettings customSettings = withSettings().defaultAnswer(new CustomAnswer()); MyList listMock = mock(MyList.class, customSettings); boolean added = listMock.add(randomAlphabetic(6)); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java index c3c5758950..a236fc7cfc 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoVerifyExamplesUnitTest.java @@ -1,9 +1,11 @@ package com.baeldung.mockito; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.atMost; +import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -13,69 +15,71 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; -import org.mockito.Mockito; import org.mockito.exceptions.verification.NoInteractionsWanted; import com.google.common.collect.Lists; -public class MockitoVerifyExamplesUnitTest { +class MockitoVerifyExamplesUnitTest { // tests @Test - public final void givenInteractionWithMockOccurred_whenVerifyingInteraction_thenCorrect() { + final void givenInteractionWithMockOccurred_whenVerifyingInteraction_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.size(); verify(mockedList).size(); } @Test - public final void givenOneInteractionWithMockOccurred_whenVerifyingNumberOfInteractions_thenCorrect() { + final void givenOneInteractionWithMockOccurred_whenVerifyingNumberOfInteractions_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.size(); verify(mockedList, times(1)).size(); } @Test - public final void givenNoInteractionWithMockOccurred_whenVerifyingInteractions_thenCorrect() { + final void givenNoInteractionWithMockOccurred_whenVerifyingInteractions_thenCorrect() { final List mockedList = mock(MyList.class); verifyNoInteractions(mockedList); } @Test - public final void givenNoInteractionWithMethodOfMockOccurred_whenVerifyingInteractions_thenCorrect() { + final void givenNoInteractionWithMethodOfMockOccurred_whenVerifyingInteractions_thenCorrect() { final List mockedList = mock(MyList.class); verify(mockedList, times(0)).size(); } - @Test(expected = NoInteractionsWanted.class) - public final void givenUnverifiedInteraction_whenVerifyingNoUnexpectedInteractions_thenFail() { + @Test + final void givenUnverifiedInteraction_whenVerifyingNoUnexpectedInteractions_thenFail() { final List mockedList = mock(MyList.class); mockedList.size(); mockedList.clear(); verify(mockedList).size(); - verifyNoMoreInteractions(mockedList); + assertThrows(NoInteractionsWanted.class, () -> { + verifyNoMoreInteractions(mockedList); + }); + } @Test - public final void whenVerifyingOrderOfInteractions_thenCorrect() { + final void whenVerifyingOrderOfInteractions_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.size(); mockedList.add("a parameter"); mockedList.clear(); - final InOrder inOrder = Mockito.inOrder(mockedList); + final InOrder inOrder = inOrder(mockedList); inOrder.verify(mockedList).size(); inOrder.verify(mockedList).add("a parameter"); inOrder.verify(mockedList).clear(); } @Test - public final void whenVerifyingAnInteractionHasNotOccurred_thenCorrect() { + final void whenVerifyingAnInteractionHasNotOccurred_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.size(); @@ -83,7 +87,7 @@ public class MockitoVerifyExamplesUnitTest { } @Test - public final void whenVerifyingAnInteractionHasOccurredAtLeastOnce_thenCorrect() { + final void whenVerifyingAnInteractionHasOccurredAtLeastOnce_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.clear(); mockedList.clear(); @@ -96,7 +100,7 @@ public class MockitoVerifyExamplesUnitTest { // with arguments @Test - public final void whenVerifyingAnInteractionWithExactArgument_thenCorrect() { + final void whenVerifyingAnInteractionWithExactArgument_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.add("test"); @@ -104,7 +108,7 @@ public class MockitoVerifyExamplesUnitTest { } @Test - public final void whenVerifyingAnInteractionWithAnyArgument_thenCorrect() { + final void whenVerifyingAnInteractionWithAnyArgument_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.add("test"); @@ -112,7 +116,7 @@ public class MockitoVerifyExamplesUnitTest { } @Test - public final void whenVerifyingAnInteractionWithArgumentCapture_thenCorrect() { + final void whenVerifyingAnInteractionWithArgumentCapture_thenCorrect() { final List mockedList = mock(MyList.class); mockedList.addAll(Lists.newArrayList("someElement")); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoWhenThenExamplesUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoWhenThenExamplesUnitTest.java index d110fff00f..c570629ccd 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoWhenThenExamplesUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/MockitoWhenThenExamplesUnitTest.java @@ -2,21 +2,24 @@ package com.baeldung.mockito; import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import org.junit.Test; -import org.mockito.Mockito; +import org.junit.jupiter.api.Test; -public class MockitoWhenThenExamplesUnitTest { + +class MockitoWhenThenExamplesUnitTest { @Test - public final void whenMockReturnBehaviorIsConfigured_thenBehaviorIsVerified() { - final MyList listMock = Mockito.mock(MyList.class); + final void whenMockReturnBehaviorIsConfigured_thenBehaviorIsVerified() { + final MyList listMock = mock(MyList.class); when(listMock.add(anyString())).thenReturn(false); final boolean added = listMock.add(randomAlphabetic(6)); @@ -24,67 +27,79 @@ public class MockitoWhenThenExamplesUnitTest { } @Test - public final void whenMockReturnBehaviorIsConfigured2_thenBehaviorIsVerified() { - final MyList listMock = Mockito.mock(MyList.class); + final void whenMockReturnBehaviorIsConfigured2_thenBehaviorIsVerified() { + final MyList listMock = mock(MyList.class); doReturn(false).when(listMock).add(anyString()); final boolean added = listMock.add(randomAlphabetic(6)); assertThat(added).isFalse(); } - @Test(expected = IllegalStateException.class) - public final void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() { - final MyList listMock = Mockito.mock(MyList.class); + @Test + final void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() { + final MyList listMock = mock(MyList.class); when(listMock.add(anyString())).thenThrow(IllegalStateException.class); - listMock.add(randomAlphabetic(6)); + assertThrows(IllegalStateException.class, () -> { + listMock.add(randomAlphabetic(6)); + }); + } @Test - public final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingOnlyOnce_thenNoExceptionIsThrown() { - final MyList listMock = Mockito.mock(MyList.class); + final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingOnlyOnce_thenNoExceptionIsThrown() { + final MyList listMock = mock(MyList.class); when(listMock.add(anyString())).thenReturn(false).thenThrow(IllegalStateException.class); listMock.add(randomAlphabetic(6)); } - @Test(expected = NullPointerException.class) - public final void whenMethodHasNoReturnType_whenConfiguringBehaviorOfMethod_thenPossible() { - final MyList listMock = Mockito.mock(MyList.class); + @Test + final void whenMethodHasNoReturnType_whenConfiguringBehaviorOfMethod_thenPossible() { + final MyList listMock = mock(MyList.class); doThrow(NullPointerException.class).when(listMock).clear(); - listMock.clear(); + assertThrows(NullPointerException.class, () -> { + listMock.clear(); + }); + } - @Test(expected = IllegalStateException.class) - public final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingTwice_thenExceptionIsThrown() { - final MyList listMock = Mockito.mock(MyList.class); + @Test + final void givenBehaviorIsConfiguredToThrowExceptionOnSecondCall_whenCallingTwice_thenExceptionIsThrown() { + final MyList listMock = mock(MyList.class); when(listMock.add(anyString())).thenReturn(false).thenThrow(IllegalStateException.class); - listMock.add(randomAlphabetic(6)); - listMock.add(randomAlphabetic(6)); + assertThrows(IllegalStateException.class, () -> { + listMock.add(randomAlphabetic(6)); + listMock.add(randomAlphabetic(6)); + }); + } - @Test(expected = NullPointerException.class) - public final void givenSpy_whenConfiguringBehaviorOfSpy_thenCorrectlyConfigured() { + @Test + final void givenSpy_whenConfiguringBehaviorOfSpy_thenCorrectlyConfigured() { final MyList instance = new MyList(); - final MyList spy = Mockito.spy(instance); + final MyList spy = spy(instance); doThrow(NullPointerException.class).when(spy).size(); - spy.size(); + assertThrows(NullPointerException.class, () -> { + spy.size(); + }); + } @Test - public final void whenMockMethodCallIsConfiguredToCallTheRealMethod_thenRealMethodIsCalled() { - final MyList listMock = Mockito.mock(MyList.class); + final void whenMockMethodCallIsConfiguredToCallTheRealMethod_thenRealMethodIsCalled() { + final MyList listMock = mock(MyList.class); when(listMock.size()).thenCallRealMethod(); assertThat(listMock).hasSize(1); } @Test - public final void whenMockMethodCallIsConfiguredWithCustomAnswer_thenRealMethodIsCalled() { - final MyList listMock = Mockito.mock(MyList.class); + final void whenMockMethodCallIsConfiguredWithCustomAnswer_thenRealMethodIsCalled() { + final MyList listMock = mock(MyList.class); doAnswer(invocation -> "Always the same").when(listMock).get(anyInt()); final String element = listMock.get(1); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java index c757a8bfb9..36c26659a6 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/argumentcaptor/EmailServiceUnitTest.java @@ -3,18 +3,20 @@ package com.baeldung.mockito.argumentcaptor; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) -public class EmailServiceUnitTest { +@ExtendWith(MockitoExtension.class) +class EmailServiceUnitTest { @Mock DeliveryPlatform platform; @@ -29,34 +31,34 @@ public class EmailServiceUnitTest { ArgumentCaptor credentialsCaptor; @Test - public void whenDoesNotSupportHtml_expectTextOnlyEmailFormat() { + void whenDoesNotSupportHtml_expectTextOnlyEmailFormat() { String to = "info@baeldung.com"; String subject = "Using ArgumentCaptor"; String body = "Hey, let'use ArgumentCaptor"; emailService.send(to, subject, body, false); - Mockito.verify(platform).deliver(emailCaptor.capture()); + verify(platform).deliver(emailCaptor.capture()); Email emailCaptorValue = emailCaptor.getValue(); assertThat(emailCaptorValue.getFormat()).isEqualTo(Format.TEXT_ONLY); } @Test - public void whenDoesSupportHtml_expectHTMLEmailFormat() { + void whenDoesSupportHtml_expectHTMLEmailFormat() { String to = "info@baeldung.com"; String subject = "Using ArgumentCaptor"; String body = "Hey, let'use ArgumentCaptor"; emailService.send(to, subject, body, true); - Mockito.verify(platform).deliver(emailCaptor.capture()); + verify(platform).deliver(emailCaptor.capture()); Email value = emailCaptor.getValue(); assertThat(value.getFormat()).isEqualTo(Format.HTML); } @Test - public void whenServiceRunning_expectUpResponse() { - Mockito.when(platform.getServiceStatus()).thenReturn("OK"); + void whenServiceRunning_expectUpResponse() { + when(platform.getServiceStatus()).thenReturn("OK"); ServiceStatus serviceStatus = emailService.checkServiceStatus(); @@ -64,8 +66,8 @@ public class EmailServiceUnitTest { } @Test - public void whenServiceNotRunning_expectDownResponse() { - Mockito.when(platform.getServiceStatus()).thenReturn("Error"); + void whenServiceNotRunning_expectDownResponse() { + when(platform.getServiceStatus()).thenReturn("Error"); ServiceStatus serviceStatus = emailService.checkServiceStatus(); @@ -73,26 +75,26 @@ public class EmailServiceUnitTest { } @Test - public void whenUsingArgumentMatcherForValidCredentials_expectTrue() { + void whenUsingArgumentMatcherForValidCredentials_expectTrue() { Credentials credentials = new Credentials("baeldung", "correct_password", "correct_key"); - Mockito.when(platform.authenticate(Mockito.eq(credentials))).thenReturn(AuthenticationStatus.AUTHENTICATED); + when(platform.authenticate(eq(credentials))).thenReturn(AuthenticationStatus.AUTHENTICATED); assertTrue(emailService.authenticatedSuccessfully(credentials)); } @Test - public void whenUsingArgumentCaptorForValidCredentials_expectTrue() { + void whenUsingArgumentCaptorForValidCredentials_expectTrue() { Credentials credentials = new Credentials("baeldung", "correct_password", "correct_key"); - Mockito.when(platform.authenticate(credentialsCaptor.capture())).thenReturn(AuthenticationStatus.AUTHENTICATED); + when(platform.authenticate(credentialsCaptor.capture())).thenReturn(AuthenticationStatus.AUTHENTICATED); assertTrue(emailService.authenticatedSuccessfully(credentials)); assertThat(credentialsCaptor.getValue()).isEqualTo(credentials); } @Test - public void whenNotAuthenticated_expectFalse() { + void whenNotAuthenticated_expectFalse() { Credentials credentials = new Credentials("baeldung", "incorrect_password", "incorrect_key"); - Mockito.when(platform.authenticate(Mockito.eq(credentials))).thenReturn(AuthenticationStatus.NOT_AUTHENTICATED); + when(platform.authenticate(eq(credentials))).thenReturn(AuthenticationStatus.NOT_AUTHENTICATED); assertFalse(emailService.authenticatedSuccessfully(credentials)); } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java index a212e6e3eb..309f066a87 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/mockedstatic/MockedStaticUnitTest.java @@ -2,9 +2,9 @@ package com.baeldung.mockito.mockedstatic; import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; -import org.mockito.Mockito; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.mockStatic; import java.util.Arrays; @@ -14,7 +14,7 @@ class MockedStaticUnitTest { void givenStaticMethodWithNoArgs_whenMocked_thenReturnsMockSuccessfully() { assertThat(StaticUtils.name()).isEqualTo("Baeldung"); - try (MockedStatic utilities = Mockito.mockStatic(StaticUtils.class)) { + try (MockedStatic utilities = mockStatic(StaticUtils.class)) { utilities.when(StaticUtils::name).thenReturn("Eugen"); assertThat(StaticUtils.name()).isEqualTo("Eugen"); } @@ -26,7 +26,7 @@ class MockedStaticUnitTest { void givenStaticMethodWithArgs_whenMocked_thenReturnsMockSuccessfully() { assertThat(StaticUtils.range(2, 6)).containsExactly(2, 3, 4, 5); - try (MockedStatic utilities = Mockito.mockStatic(StaticUtils.class)) { + try (MockedStatic utilities = mockStatic(StaticUtils.class)) { utilities.when(() -> StaticUtils.range(2, 6)) .thenReturn(Arrays.asList(10, 11, 12)); diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingMockOrSpyUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingMockOrSpyUnitTest.java index b3f470427a..e1023c5e57 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingMockOrSpyUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoMisusingMockOrSpyUnitTest.java @@ -2,29 +2,30 @@ package com.baeldung.mockito.spy; import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; import java.util.ArrayList; import java.util.List; -import org.junit.Test; -import org.mockito.Mockito; +import org.junit.jupiter.api.Test; import org.mockito.exceptions.misusing.NotAMockException; -public class MockitoMisusingMockOrSpyUnitTest { +class MockitoMisusingMockOrSpyUnitTest { @Test - public void givenNotASpy_whenDoReturn_thenThrowNotAMock() { + void givenNotASpy_whenDoReturn_thenThrowNotAMock() { List list = new ArrayList(); - assertThatThrownBy(() -> Mockito.doReturn(100).when(list).size()) + assertThatThrownBy(() -> doReturn(100).when(list).size()) .isInstanceOf(NotAMockException.class) .hasMessageContaining("Argument passed to when() is not a mock!"); } @Test - public void givenASpy_whenDoReturn_thenNoError() { - final List spyList = Mockito.spy(new ArrayList<>()); + void givenASpy_whenDoReturn_thenNoError() { + final List spyList = spy(new ArrayList<>()); - assertThatNoException().isThrownBy(() -> Mockito.doReturn(100).when(spyList).size()); + assertThatNoException().isThrownBy(() -> doReturn(100).when(spyList).size()); } } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java index 28ca0c327b..caef0c3b4b 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/spy/MockitoSpyUnitTest.java @@ -1,30 +1,33 @@ package com.baeldung.mockito.spy; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Spy; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class MockitoSpyUnitTest { @Test - public void whenSpyingOnList_thenCorrect() { + void whenSpyingOnList_thenCorrect() { final List list = new ArrayList(); - final List spyList = Mockito.spy(list); + final List spyList = spy(list); spyList.add("one"); spyList.add("two"); - Mockito.verify(spyList).add("one"); - Mockito.verify(spyList).add("two"); + verify(spyList).add("one"); + verify(spyList).add("two"); assertThat(spyList).hasSize(2); } @@ -33,43 +36,43 @@ public class MockitoSpyUnitTest { private List aSpyList = new ArrayList(); @Test - public void whenUsingTheSpyAnnotation_thenObjectIsSpied() { + void whenUsingTheSpyAnnotation_thenObjectIsSpied() { aSpyList.add("one"); aSpyList.add("two"); - Mockito.verify(aSpyList).add("one"); - Mockito.verify(aSpyList).add("two"); + verify(aSpyList).add("one"); + verify(aSpyList).add("two"); assertThat(aSpyList).hasSize(2); } @Test - public void whenStubASpy_thenStubbed() { + void whenStubASpy_thenStubbed() { final List list = new ArrayList(); - final List spyList = Mockito.spy(list); + final List spyList = spy(list); assertEquals(0, spyList.size()); - Mockito.doReturn(100).when(spyList).size(); + doReturn(100).when(spyList).size(); assertThat(spyList).hasSize(100); } @Test - public void whenCreateMock_thenCreated() { - final List mockedList = Mockito.mock(ArrayList.class); + void whenCreateMock_thenCreated() { + final List mockedList = mock(ArrayList.class); mockedList.add("one"); - Mockito.verify(mockedList).add("one"); + verify(mockedList).add("one"); assertThat(mockedList).hasSize(0); } @Test - public void whenCreateSpy_thenCreate() { - final List spyList = Mockito.spy(new ArrayList<>()); + void whenCreateSpy_thenCreate() { + final List spyList = spy(new ArrayList<>()); spyList.add("one"); - Mockito.verify(spyList).add("one"); + verify(spyList).add("one"); assertThat(spyList).hasSize(1); } diff --git a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java index dddfaa4c37..9b8a713a15 100644 --- a/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java +++ b/testing-modules/mockito-simple/src/test/java/com/baeldung/mockito/voidmethods/MockitoVoidMethodsUnitTest.java @@ -1,6 +1,8 @@ package com.baeldung.mockito.voidmethods; -import static org.junit.Assert.assertEquals; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.ArgumentMatchers.isNull; @@ -12,34 +14,36 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.baeldung.mockito.MyList; -@RunWith(MockitoJUnitRunner.class) -public class MockitoVoidMethodsUnitTest { +@ExtendWith(MockitoExtension.class) +class MockitoVoidMethodsUnitTest { @Test - public void whenAddCalledVerified() { + void whenAddCalledVerified() { MyList myList = mock(MyList.class); myList.add(0, ""); verify(myList, times(1)).add(0, ""); } - @Test(expected = Exception.class) - public void givenNull_addThrows() { + @Test + void givenNull_addThrows() { MyList myList = mock(MyList.class); - doThrow().when(myList).add(isA(Integer.class), isNull()); + assertThrows(Exception.class, () -> { + doThrow().when(myList).add(isA(Integer.class), isNull()); + }); myList.add(0, null); } @Test - public void whenAddCalledValueCaptured() { + void whenAddCalledValueCaptured() { MyList myList = mock(MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass(String.class); doNothing().when(myList).add(any(Integer.class), valueCapture.capture()); @@ -49,7 +53,7 @@ public class MockitoVoidMethodsUnitTest { } @Test - public void whenAddCalledAnswered() { + void whenAddCalledAnswered() { MyList myList = mock(MyList.class); doAnswer(invocation -> { Object arg0 = invocation.getArgument(0); @@ -64,7 +68,7 @@ public class MockitoVoidMethodsUnitTest { } @Test - public void whenAddCalledRealMethodCalled() { + void whenAddCalledRealMethodCalled() { MyList myList = mock(MyList.class); doCallRealMethod().when(myList).add(any(Integer.class), any(String.class)); myList.add(1, "real"); From 10d561451a3608fcca21c34bb83f79f1da164dcc Mon Sep 17 00:00:00 2001 From: apeterlic Date: Fri, 9 Dec 2022 18:40:18 +0100 Subject: [PATCH 12/25] BAEL-5986 - Getting Started with Blaze Persistence (#13107) * BAEL-5986 - Getting Started with Blaze Persistence * Optimize imports * Fix test class name * Switch to JUnit5 * Removed dependencies and Controller classes * Update pom.xml * Update Configuration class --- .../blaze-persistence/README.md | 1 + persistence-modules/blaze-persistence/pom.xml | 121 ++++++++++++++++++ .../baeldung/BlazePersistenceApplication.java | 57 +++++++++ .../config/BlazePersistenceConfiguration.java | 35 +++++ .../main/java/com/baeldung/model/Person.java | 72 +++++++++++ .../main/java/com/baeldung/model/Post.java | 68 ++++++++++ .../baeldung/repository/PersonRepository.java | 47 +++++++ .../baeldung/repository/PostRepository.java | 48 +++++++ .../repository/PostViewRepository.java | 11 ++ .../java/com/baeldung/view/PersonView.java | 16 +++ .../main/java/com/baeldung/view/PostView.java | 18 +++ .../com/baeldung/view/PostWithAuthorView.java | 10 ++ .../src/main/resources/application.properties | 9 ++ .../src/main/resources/data.sql | 11 ++ .../java/com/baeldung/PersonUnitTest.java | 49 +++++++ .../test/java/com/baeldung/PostUnitTest.java | 54 ++++++++ .../java/com/baeldung/TestContextConfig.java | 15 +++ persistence-modules/pom.xml | 1 + 18 files changed, 643 insertions(+) create mode 100644 persistence-modules/blaze-persistence/README.md create mode 100644 persistence-modules/blaze-persistence/pom.xml create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/BlazePersistenceApplication.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/config/BlazePersistenceConfiguration.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Person.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Post.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PersonRepository.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostRepository.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostViewRepository.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PersonView.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostView.java create mode 100644 persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostWithAuthorView.java create mode 100644 persistence-modules/blaze-persistence/src/main/resources/application.properties create mode 100644 persistence-modules/blaze-persistence/src/main/resources/data.sql create mode 100644 persistence-modules/blaze-persistence/src/test/java/com/baeldung/PersonUnitTest.java create mode 100644 persistence-modules/blaze-persistence/src/test/java/com/baeldung/PostUnitTest.java create mode 100644 persistence-modules/blaze-persistence/src/test/java/com/baeldung/TestContextConfig.java diff --git a/persistence-modules/blaze-persistence/README.md b/persistence-modules/blaze-persistence/README.md new file mode 100644 index 0000000000..7d843af9ea --- /dev/null +++ b/persistence-modules/blaze-persistence/README.md @@ -0,0 +1 @@ +### Relevant Articles: diff --git a/persistence-modules/blaze-persistence/pom.xml b/persistence-modules/blaze-persistence/pom.xml new file mode 100644 index 0000000000..cc57785fe9 --- /dev/null +++ b/persistence-modules/blaze-persistence/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + blaze-persistence + 1.0-SNAPSHOT + blaze-persistence + + + org.springframework.boot + spring-boot-starter-parent + 2.4.0 + + + + + UTF-8 + 1.8 + 1.8 + 1.6.8 + + + + + + com.blazebit + blaze-persistence-bom + ${blaze-persistence.version} + pom + import + + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + com.blazebit + blaze-persistence-core-api + + + com.blazebit + blaze-persistence-core-impl + + + com.blazebit + blaze-persistence-integration-hibernate-5.4 + + + + + com.blazebit + blaze-persistence-entity-view-api + + + com.blazebit + blaze-persistence-entity-view-impl + + + com.blazebit + blaze-persistence-entity-view-processor + + + + + com.blazebit + blaze-persistence-integration-entity-view-spring + + + com.blazebit + blaze-persistence-integration-spring-data-2.4 + + + + + org.springframework + spring-context + + + org.springframework + spring-orm + + + + com.h2database + h2 + + + + + org.springframework + spring-test + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-api + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/BlazePersistenceApplication.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/BlazePersistenceApplication.java new file mode 100644 index 0000000000..e2976aaf37 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/BlazePersistenceApplication.java @@ -0,0 +1,57 @@ +package com.baeldung; + +import com.baeldung.model.Person; +import com.baeldung.model.Post; +import com.baeldung.repository.PersonRepository; +import com.baeldung.repository.PostRepository; +import com.baeldung.repository.PostViewRepository; +import com.baeldung.view.PostWithAuthorView; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class BlazePersistenceApplication implements CommandLineRunner { + + private static final Logger logger = LoggerFactory.getLogger(BlazePersistenceApplication.class); + + @Autowired + private PersonRepository personRepository; + + @Autowired + private PostRepository postRepository; + + @Autowired + private PostViewRepository postViewRepository; + + public static void main(String[] args) { + SpringApplication.run(BlazePersistenceApplication.class, args); + } + + @Override + public void run(String... args) { + + logger.info("All Posts:"); + Iterable posts = postRepository.findAll(); + posts.forEach(p -> logger.info(String.valueOf(p))); + + logger.info("Posts with title 'Spring' or author 'Peter':"); + Iterable postsFiltered = postRepository.findBy("Spring", "Peter"); + postsFiltered.forEach(p -> logger.info(String.valueOf(p))); + + logger.info("Find all post with author view:"); + Iterable postsView = postViewRepository.findAll(); + postsView.forEach(p -> logger.info(String.valueOf(p))); + + logger.info("Person with at least two posts:"); + Iterable personIterable = personRepository.find(); + personIterable.forEach(p -> logger.info(String.valueOf(p))); + + logger.info("All Persons:"); + Iterable personIterableAll = personRepository.findAll(); + personIterableAll.forEach(p -> logger.info(String.valueOf(p))); + } +} \ No newline at end of file diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/config/BlazePersistenceConfiguration.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/config/BlazePersistenceConfiguration.java new file mode 100644 index 0000000000..0ec2e881ed --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/config/BlazePersistenceConfiguration.java @@ -0,0 +1,35 @@ +package com.baeldung.config; + +import com.blazebit.persistence.Criteria; +import com.blazebit.persistence.CriteriaBuilderFactory; +import com.blazebit.persistence.integration.view.spring.EnableEntityViews; +import com.blazebit.persistence.spi.CriteriaBuilderConfiguration; +import com.blazebit.persistence.spring.data.repository.config.EnableBlazeRepositories; +import com.blazebit.persistence.view.EntityViewManager; +import com.blazebit.persistence.view.spi.EntityViewConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.persistence.EntityManagerFactory; + +@Configuration +@EnableEntityViews(basePackages = {"com.baeldung.view"}) +@EnableBlazeRepositories(basePackages = "com.baeldung.repository") +public class BlazePersistenceConfiguration { + + @Autowired + private EntityManagerFactory entityManagerFactory; + + @Bean + public CriteriaBuilderFactory createCriteriaBuilderFactory() { + CriteriaBuilderConfiguration config = Criteria.getDefault(); + return config.createCriteriaBuilderFactory(entityManagerFactory); + } + + @Bean + public EntityViewManager createEntityViewManager(CriteriaBuilderFactory criteriaBuilderFactory, + EntityViewConfiguration entityViewConfiguration) { + return entityViewConfiguration.createEntityViewManager(criteriaBuilderFactory); + } +} \ No newline at end of file diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Person.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Person.java new file mode 100644 index 0000000000..a6daade80d --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Person.java @@ -0,0 +1,72 @@ +package com.baeldung.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.HashSet; +import java.util.Set; + +@Entity +public class Person { + + @Id + @GeneratedValue + private Long id; + + private String name; + + private int age; + + @OneToMany(mappedBy = "author") + private Set posts = new HashSet<>(); + + public Person() { + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set getPosts() { + return posts; + } + + public void setPosts(Set posts) { + this.posts = posts; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return "Person{" + + "id=" + id + + ", name='" + name + '\'' + + ", age=" + age + + '}'; + } +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Post.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Post.java new file mode 100644 index 0000000000..6fc10dc730 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/model/Post.java @@ -0,0 +1,68 @@ +package com.baeldung.model; + +import javax.persistence.*; + +@Entity +public class Post { + + @Id + @GeneratedValue + private Long id; + + private String title; + + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + private Person author; + + public Post() { + } + + public Post(String title, String content, Person author) { + this.title = title; + this.content = content; + this.author = author; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Person getAuthor() { + return author; + } + + public void setAuthor(Person author) { + this.author = author; + } + + @Override + public String toString() { + return "Post{" + + "id=" + id + + ", title='" + title + '\'' + + ", content='" + content + '\'' + + '}'; + } +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PersonRepository.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PersonRepository.java new file mode 100644 index 0000000000..12b197e8be --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PersonRepository.java @@ -0,0 +1,47 @@ +package com.baeldung.repository; + +import com.baeldung.model.Person; +import com.baeldung.model.Post; +import com.blazebit.persistence.CriteriaBuilder; +import com.blazebit.persistence.CriteriaBuilderFactory; +import org.springframework.stereotype.Repository; + +import javax.persistence.EntityManager; +import javax.transaction.Transactional; + +@Repository +@Transactional +public class PersonRepository { + + private final EntityManager entityManager; + + private final CriteriaBuilderFactory builderFactory; + + public PersonRepository(EntityManager entityManager, CriteriaBuilderFactory builderFactory) { + this.entityManager = entityManager; + this.builderFactory = builderFactory; + } + + public Iterable findPostsByPerson() { + CriteriaBuilder postCriteriaBuilder = builderFactory.create(entityManager, Post.class) + .from(Person.class, "person") + .select("person.posts"); + return postCriteriaBuilder.getResultList(); + } + + public Iterable findAll() { + return builderFactory.create(entityManager, Person.class).getResultList(); + } + + public Iterable find() { + CriteriaBuilder personCriteriaBuilder = builderFactory.create(entityManager, Person.class, "p") + .where("p.age") + .betweenExpression("18") + .andExpression("40") + .where("SIZE(p.posts)").geExpression("2") + .orderByAsc("p.name") + .orderByAsc("p.id"); + return personCriteriaBuilder.getResultList(); + } + +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostRepository.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostRepository.java new file mode 100644 index 0000000000..cf7edffe62 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostRepository.java @@ -0,0 +1,48 @@ +package com.baeldung.repository; + +import com.baeldung.model.Post; +import com.baeldung.view.PostWithAuthorView; +import com.blazebit.persistence.CriteriaBuilder; +import com.blazebit.persistence.CriteriaBuilderFactory; +import com.blazebit.persistence.view.EntityViewManager; +import com.blazebit.persistence.view.EntityViewSetting; +import org.springframework.stereotype.Repository; + +import javax.persistence.EntityManager; +import javax.transaction.Transactional; + +@Repository +@Transactional +public class PostRepository { + + private final EntityManager entityManager; + + private final CriteriaBuilderFactory builderFactory; + + private final EntityViewManager viewManager; + + public PostRepository(EntityManager entityManager, CriteriaBuilderFactory builderFactory, + EntityViewManager viewManager) { + this.entityManager = entityManager; + this.builderFactory = builderFactory; + this.viewManager = viewManager; + } + + public Iterable findAll() { + return builderFactory.create(entityManager, Post.class).getResultList(); + } + + public Iterable findBy(final String title, final String authorName) { + CriteriaBuilder postCriteriaBuilder = builderFactory.create(entityManager, Post.class, "p") + .whereOr() + .where("p.title").like().value(title + "%").noEscape() + .where("p.author.name").eq(authorName) + .endOr(); + + CriteriaBuilder postWithAuthorViewCriteriaBuilder = + viewManager.applySetting(EntityViewSetting + .create(PostWithAuthorView.class), postCriteriaBuilder); + + return postWithAuthorViewCriteriaBuilder.getResultList(); + } +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostViewRepository.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostViewRepository.java new file mode 100644 index 0000000000..ef241c73a2 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/repository/PostViewRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.repository; + +import com.baeldung.view.PostWithAuthorView; +import com.blazebit.persistence.spring.data.repository.EntityViewRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@Transactional(readOnly = true) +public interface PostViewRepository extends EntityViewRepository { +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PersonView.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PersonView.java new file mode 100644 index 0000000000..e9dd184629 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PersonView.java @@ -0,0 +1,16 @@ +package com.baeldung.view; + +import com.baeldung.model.Person; +import com.blazebit.persistence.view.EntityView; +import com.blazebit.persistence.view.IdMapping; + +@EntityView(Person.class) +public interface PersonView { + + @IdMapping + Long getId(); + + int getAge(); + + String getName(); +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostView.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostView.java new file mode 100644 index 0000000000..b335cda385 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostView.java @@ -0,0 +1,18 @@ +package com.baeldung.view; + +import com.baeldung.model.Post; +import com.blazebit.persistence.view.EntityView; +import com.blazebit.persistence.view.IdMapping; +import com.blazebit.persistence.view.Mapping; + +@EntityView(Post.class) +public interface PostView { + + @IdMapping + Long getId(); + + @Mapping("UPPER(title)") + String getTitle(); + + String getContent(); +} diff --git a/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostWithAuthorView.java b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostWithAuthorView.java new file mode 100644 index 0000000000..8a34a4e34a --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/java/com/baeldung/view/PostWithAuthorView.java @@ -0,0 +1,10 @@ +package com.baeldung.view; + +import com.baeldung.model.Post; +import com.blazebit.persistence.view.EntityView; + +@EntityView(Post.class) +public interface PostWithAuthorView extends PostView { + PersonView getAuthor(); + +} diff --git a/persistence-modules/blaze-persistence/src/main/resources/application.properties b/persistence-modules/blaze-persistence/src/main/resources/application.properties new file mode 100644 index 0000000000..de4a62720a --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/resources/application.properties @@ -0,0 +1,9 @@ +spring.h2.console.enabled=true +spring.jpa.show-sql=true +logging.level.org.hibernate.SQL=DEBUG +spring.jpa.hibernate.ddl-auto=create +spring.datasource.url=jdbc:h2:mem:test +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=sa +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/persistence-modules/blaze-persistence/src/main/resources/data.sql b/persistence-modules/blaze-persistence/src/main/resources/data.sql new file mode 100644 index 0000000000..0ed609a2a4 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/main/resources/data.sql @@ -0,0 +1,11 @@ +INSERT INTO Person(id, name, age) VALUES(1, 'Peter', 18); +INSERT INTO Person(id, name, age) VALUES(2, 'Emily', 36); +INSERT INTO Person(id, name, age) VALUES(3, 'John', 27); + +INSERT INTO Post(id, title, content, author_id) VALUES(1, 'Blaze Persistence', 'Blaze Content', 1); +INSERT INTO Post(id, title, content, author_id) VALUES(2, 'Jacoco', 'Jacoco Content', 1); +INSERT INTO Post(id, title, content, author_id) VALUES(3, 'Spring', 'Spring Content', 2); +INSERT INTO Post(id, title, content, author_id) VALUES(4, 'Spring Boot', 'Spring Boot Content', 3); +INSERT INTO Post(id, title, content, author_id) VALUES(5, 'Java 17', 'Java Content', 3); +INSERT INTO Post(id, title, content, author_id) VALUES(6, 'Functional Programming', 'Functional Programming Content', 3); +INSERT INTO Post(id, title, content, author_id) VALUES(7, 'Unit Testing', 'Unit Testing Content', 3); \ No newline at end of file diff --git a/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PersonUnitTest.java b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PersonUnitTest.java new file mode 100644 index 0000000000..16434d52d0 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PersonUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung; + +import com.baeldung.model.Person; +import com.baeldung.model.Post; +import com.baeldung.repository.PersonRepository; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ContextConfiguration(classes = TestContextConfig.class) +@ExtendWith(SpringExtension.class) +public class PersonUnitTest { + + @Autowired + private PersonRepository personRepository; + + @Test + public void whenFind_thenReturnCorrectListSize() { + final Iterable listIterable = personRepository.find(); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(2, list.size()); + assertEquals("John", list.get(0).getName()); + } + + @Test + public void whenFindAll_thenReturnCorrectListSize() { + final Iterable listIterable = personRepository.findAll(); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(3, list.size()); + } + + @Test + public void whenFindPostsByPerson_thenReturnCorrectListSize() { + final Iterable listIterable = personRepository.findPostsByPerson(); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(7, list.size()); + } + +} diff --git a/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PostUnitTest.java b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PostUnitTest.java new file mode 100644 index 0000000000..0af01de088 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/PostUnitTest.java @@ -0,0 +1,54 @@ +package com.baeldung; + +import com.baeldung.model.Post; +import com.baeldung.repository.PostRepository; +import com.baeldung.repository.PostViewRepository; +import com.baeldung.view.PostView; +import com.baeldung.view.PostWithAuthorView; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ContextConfiguration(classes = TestContextConfig.class) +@ExtendWith(SpringExtension.class) +public class PostUnitTest { + + @Autowired + private PostViewRepository postViewRepository; + + @Autowired + private PostRepository postRepository; + + @Test + public void whenFindAll_thenReturnCorrectListViewSize() { + final Iterable listIterable = postViewRepository.findAll(); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(7, list.size()); + } + + @Test + public void givenPostIdAndAuthorName_whenFind_thenReturnCorrectResult() { + final Iterable listIterable = + postRepository.findBy("Spring", "Peter"); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(4, list.size()); + } + + @Test + public void whenFindAll_thenReturnCorrectListSize() { + final Iterable listIterable = postRepository.findAll(); + final List list = new ArrayList<>(); + listIterable.forEach(list::add); + assertEquals(7, list.size()); + } + +} diff --git a/persistence-modules/blaze-persistence/src/test/java/com/baeldung/TestContextConfig.java b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/TestContextConfig.java new file mode 100644 index 0000000000..1df1fb21d9 --- /dev/null +++ b/persistence-modules/blaze-persistence/src/test/java/com/baeldung/TestContextConfig.java @@ -0,0 +1,15 @@ +package com.baeldung; + +import com.blazebit.persistence.integration.view.spring.EnableEntityViews; +import com.blazebit.persistence.spring.data.repository.config.EnableBlazeRepositories; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung") +@EnableEntityViews(basePackages = {"com.baeldung.view"}) +@EnableBlazeRepositories(basePackages = "com.baeldung.repository") +public class TestContextConfig { + + +} diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index bff23cffc1..c17e793dbc 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -18,6 +18,7 @@ apache-bookkeeper apache-cayenne apache-derby + blaze-persistence core-java-persistence core-java-persistence-2 deltaspike From f45b2c8659c0cb075bcd7f5fee9f2ed8b28cb31c Mon Sep 17 00:00:00 2001 From: Adrian Bob Date: Fri, 9 Dec 2022 20:35:09 +0200 Subject: [PATCH 13/25] BAEL-5325: Add Spring Security login/logout API with Springdoc (#13027) * BAEL-5325: Add Spring Security login/logout API with Springdoc * Updated Spring version and using annotations for Basic Auth config * Added tests * Removed unused dependencies * Removed dependencies which were accidentally added. * Removed plugins which were accidentally added. * Removed property which was accidentally added. --- spring-security-modules/pom.xml | 1 + .../spring-security-web-springdoc/README.md | 15 +++++ .../spring-security-web-springdoc/pom.xml | 54 ++++++++++++++++ .../main/java/com/baeldung/basicauth/Foo.java | 60 +++++++++++++++++ .../com/baeldung/basicauth/FooController.java | 39 +++++++++++ .../SpringBootSpringdocBasicAuth.java | 13 ++++ .../config/PasswordEncoderConfiguration.java | 15 +++++ .../config/SecurityConfiguration.java | 38 +++++++++++ .../basicauth/config/SpringdocConfig.java | 12 ++++ .../SpringBootSpringdocFormLogin.java | 13 ++++ .../config/PasswordEncoderConfiguration.java | 15 +++++ .../config/SecurityConfiguration.java | 40 ++++++++++++ .../formlogin/controller/FooController.java | 37 +++++++++++ .../controller/LogoutController.java | 17 +++++ .../com/baeldung/formlogin/model/Foo.java | 62 ++++++++++++++++++ .../src/main/resources/application.properties | 1 + .../basicauth/OpenAPIIntegrationTest.java | 64 +++++++++++++++++++ .../formlogin/OpenAPIIntegrationTest.java | 52 +++++++++++++++ 18 files changed, 548 insertions(+) create mode 100644 spring-security-modules/spring-security-web-springdoc/README.md create mode 100644 spring-security-modules/spring-security-web-springdoc/pom.xml create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/Foo.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/FooController.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/SpringBootSpringdocBasicAuth.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/PasswordEncoderConfiguration.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SecurityConfiguration.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SpringdocConfig.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/SpringBootSpringdocFormLogin.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/PasswordEncoderConfiguration.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/SecurityConfiguration.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/FooController.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/LogoutController.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/model/Foo.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/main/resources/application.properties create mode 100644 spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/basicauth/OpenAPIIntegrationTest.java create mode 100644 spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/formlogin/OpenAPIIntegrationTest.java diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml index 1e0ae825e1..d6e30e8ab8 100644 --- a/spring-security-modules/pom.xml +++ b/spring-security-modules/pom.xml @@ -43,6 +43,7 @@ spring-security-web-rest-basic-auth spring-security-web-rest-custom spring-security-web-rest + spring-security-web-springdoc spring-security-web-sockets spring-security-web-thymeleaf spring-security-web-x509 diff --git a/spring-security-modules/spring-security-web-springdoc/README.md b/spring-security-modules/spring-security-web-springdoc/README.md new file mode 100644 index 0000000000..90a82d1681 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/README.md @@ -0,0 +1,15 @@ +## Spring Security Web Springdoc + +This module contains articles about Springdoc with Spring Security + +### Relevant Articles: + +- [Documenting a Spring REST API Using OpenAPI 3.0](https://www.baeldung.com/spring-rest-openapi-documentation) +- [Configure JWT Authentication for OpenAPI](https://www.baeldung.com/openapi-jwt-authentication) + +### Running This Project: + +To run the projects use the commands: +- `mvn spring-boot:run -Dstart-class=com.baeldung.basicauth.SpringBootSpringdocBasicAuth` +- `mvn spring-boot:run -Dstart-class=com.baeldung.formlogin.SpringBootSpringdocFormLogin` + diff --git a/spring-security-modules/spring-security-web-springdoc/pom.xml b/spring-security-modules/spring-security-web-springdoc/pom.xml new file mode 100644 index 0000000000..03e938f1c8 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + spring-security-web-springdoc + 0.1-SNAPSHOT + spring-security-web-springdoc + jar + Spring Security with Springdoc tutorial + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + org.springdoc + springdoc-openapi-ui + ${springdoc.version} + + + org.springdoc + springdoc-openapi-security + ${springdoc.version} + + + com.google.guava + guava + ${guava.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + + + 1.6.13 + + + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/Foo.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/Foo.java new file mode 100644 index 0000000000..ab0f010e2c --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/Foo.java @@ -0,0 +1,60 @@ +package com.baeldung.basicauth; + +import java.io.Serializable; + +public class Foo implements Serializable { + + private static final long serialVersionUID = -5422285893276747592L; + + private long id; + private String name; + + public Foo(final String name) { + super(); + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Foo other = (Foo) obj; + if (name == null) { + return other.name == null; + } else return name.equals(other.name); + } + + @Override + public String toString() { + return "Foo [name=" + name + "]"; + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/FooController.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/FooController.java new file mode 100644 index 0000000000..9ca2f9a6cc --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/FooController.java @@ -0,0 +1,39 @@ +package com.baeldung.basicauth; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + +import com.google.common.collect.Lists; + +@RestController +@OpenAPIDefinition(info = @Info(title = "Foos API", version = "v1")) +@SecurityRequirement(name = "basicAuth") +@RequestMapping(value = "foos", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) +public class FooController { + + private static final int STRING_LENGTH = 6; + + @GetMapping(value = "/{id}") + public Foo findById(@PathVariable("id") final Long id) { + return new Foo(randomAlphabetic(STRING_LENGTH)); + } + + @GetMapping + public List findAll() { + return Lists.newArrayList(new Foo(randomAlphabetic(STRING_LENGTH)), new Foo(randomAlphabetic(STRING_LENGTH)), new Foo(randomAlphabetic(STRING_LENGTH))); + } + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public Foo create(@RequestBody final Foo foo) { + return foo; + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/SpringBootSpringdocBasicAuth.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/SpringBootSpringdocBasicAuth.java new file mode 100644 index 0000000000..0875c5d176 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/SpringBootSpringdocBasicAuth.java @@ -0,0 +1,13 @@ +package com.baeldung.basicauth; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootSpringdocBasicAuth { + + public static void main(String[] args) { + SpringApplication.run(SpringBootSpringdocBasicAuth.class, args); + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/PasswordEncoderConfiguration.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/PasswordEncoderConfiguration.java new file mode 100644 index 0000000000..4da6b5438b --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/PasswordEncoderConfiguration.java @@ -0,0 +1,15 @@ +package com.baeldung.basicauth.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class PasswordEncoderConfiguration { + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SecurityConfiguration.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SecurityConfiguration.java new file mode 100644 index 0000000000..a419162828 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SecurityConfiguration.java @@ -0,0 +1,38 @@ +package com.baeldung.basicauth.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/v3/api-docs/**", + "/swagger-ui/**", + "/swagger-ui.html").permitAll() + .anyRequest().authenticated() + .and() + .httpBasic(); + return http.build(); + } + + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth, PasswordEncoder passwordEncoder) throws Exception { + auth.inMemoryAuthentication() + .withUser("user") + .password(passwordEncoder.encode("password")) + .roles("USER"); + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SpringdocConfig.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SpringdocConfig.java new file mode 100644 index 0000000000..57d3d8bd02 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/basicauth/config/SpringdocConfig.java @@ -0,0 +1,12 @@ +package com.baeldung.basicauth.config; + +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import org.springframework.context.annotation.Configuration; + +@Configuration +@SecurityScheme( + type = SecuritySchemeType.HTTP, + name = "basicAuth", + scheme = "basic") +public class SpringdocConfig {} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/SpringBootSpringdocFormLogin.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/SpringBootSpringdocFormLogin.java new file mode 100644 index 0000000000..5c4c262fa7 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/SpringBootSpringdocFormLogin.java @@ -0,0 +1,13 @@ +package com.baeldung.formlogin; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootSpringdocFormLogin { + + public static void main(String[] args) { + SpringApplication.run(SpringBootSpringdocFormLogin.class, args); + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/PasswordEncoderConfiguration.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/PasswordEncoderConfiguration.java new file mode 100644 index 0000000000..e3f9e71bd6 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/PasswordEncoderConfiguration.java @@ -0,0 +1,15 @@ +package com.baeldung.formlogin.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class PasswordEncoderConfiguration { + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/SecurityConfiguration.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/SecurityConfiguration.java new file mode 100644 index 0000000000..2b849031ce --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/config/SecurityConfiguration.java @@ -0,0 +1,40 @@ +package com.baeldung.formlogin.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/v3/api-docs/**", + "/swagger-ui/**", + "/swagger-ui.html").permitAll() + .anyRequest().authenticated() + .and() + .formLogin() + .defaultSuccessUrl("/foos"); + return http.build(); + } + + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth, PasswordEncoder passwordEncoder) throws Exception { + auth.inMemoryAuthentication() + .withUser("user") + .password(passwordEncoder.encode("password")) + .roles("USER"); + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/FooController.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/FooController.java new file mode 100644 index 0000000000..1d09789067 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/FooController.java @@ -0,0 +1,37 @@ +package com.baeldung.formlogin.controller; + +import com.baeldung.formlogin.model.Foo; +import com.google.common.collect.Lists; +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Info; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + +@RestController +@RequestMapping(value = "foos", produces = MediaType.APPLICATION_JSON_VALUE) +@OpenAPIDefinition(info = @Info(title = "Foos API", version = "v1")) +public class FooController { + + private static final int STRING_LENGTH = 6; + + @GetMapping(value = "/{id}") + public Foo findById(@PathVariable("id") final Long id) { + return new Foo(randomAlphabetic(STRING_LENGTH)); + } + + @GetMapping + public List findAll() { + return Lists.newArrayList(new Foo(randomAlphabetic(STRING_LENGTH)), new Foo(randomAlphabetic(STRING_LENGTH)), new Foo(randomAlphabetic(STRING_LENGTH))); + } + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public Foo create(@RequestBody final Foo foo) { + return foo; + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/LogoutController.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/LogoutController.java new file mode 100644 index 0000000000..ab1c635de0 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/controller/LogoutController.java @@ -0,0 +1,17 @@ +package com.baeldung.formlogin.controller; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.info.Info; +import org.springframework.web.bind.annotation.*; + +@RestController +@OpenAPIDefinition(info = @Info(title = "logout-endpoint")) +public class LogoutController { + + @PostMapping("logout") + @Operation(description = "End authenticated user session") + public void logout() { + throw new UnsupportedOperationException(); + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/model/Foo.java b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/model/Foo.java new file mode 100644 index 0000000000..5133c215b3 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/java/com/baeldung/formlogin/model/Foo.java @@ -0,0 +1,62 @@ +package com.baeldung.formlogin.model; + +import java.io.Serializable; + +public class Foo implements Serializable { + + private static final long serialVersionUID = -5422285893276747592L; + + private long id; + private String name; + + public Foo(final String name) { + this.name = name; + } + + public Foo() { + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Foo other = (Foo) obj; + if (name == null) { + return other.name == null; + } else return name.equals(other.name); + } + + @Override + public String toString() { + return "Foo [name=" + name + "]"; + } + +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/main/resources/application.properties b/spring-security-modules/spring-security-web-springdoc/src/main/resources/application.properties new file mode 100644 index 0000000000..7157c0f5b9 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/main/resources/application.properties @@ -0,0 +1 @@ +springdoc.show-login-endpoint=true diff --git a/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/basicauth/OpenAPIIntegrationTest.java b/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/basicauth/OpenAPIIntegrationTest.java new file mode 100644 index 0000000000..3e622059c1 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/basicauth/OpenAPIIntegrationTest.java @@ -0,0 +1,64 @@ +package com.baeldung.basicauth; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class OpenAPIIntegrationTest { + + @LocalServerPort + private int port; + + @Autowired + private TestRestTemplate restTemplate; + + @Test + void whenInvokeSwagger_thenRenderIndexPage() { + String response = this.restTemplate.getForObject("http://localhost:" + port + "/swagger-ui/index.html", String.class); + + assertNotNull(response); + assertTrue(response.contains("Swagger UI")); + assertTrue(response.contains("
")); + } + + @Test + void whenInvokeOpenApi_thenCheckHeaders() { + ResponseEntity response = this.restTemplate.getForEntity("http://localhost:" + port + "/v3/api-docs", String.class); + + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getHeaders().get("Content-Type")); + assertEquals(1, response.getHeaders().get("Content-Type").size()); + assertEquals("application/json", response.getHeaders().get("Content-Type").get(0)); + } + + @Test + void whenInvokeOpenApi_thenVerifyOpenApiDoc() { + ResponseEntity response = this.restTemplate.getForEntity("http://localhost:" + port + "/v3/api-docs", String.class); + + assertNotNull(response); + assertNotNull(response.getBody()); + assertTrue(response.getBody().contains("\"openapi\":")); + assertTrue(response.getBody().contains("Foos API")); + assertTrue(response.getBody().contains("\"post\"")); + } + + @Test + void whenInvokeOpenApi_thenCheckSecurityConfig() { + ResponseEntity response = this.restTemplate.getForEntity("http://localhost:" + port + "/v3/api-docs", String.class); + + assertNotNull(response); + assertNotNull(response.getBody()); + assertTrue(response.getBody().contains("\"securitySchemes\"")); + assertTrue(response.getBody().contains("\"type\":\"http\"")); + assertTrue(response.getBody().contains("\"scheme\":\"basic\"")); + } +} diff --git a/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/formlogin/OpenAPIIntegrationTest.java b/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/formlogin/OpenAPIIntegrationTest.java new file mode 100644 index 0000000000..5d942f2126 --- /dev/null +++ b/spring-security-modules/spring-security-web-springdoc/src/test/java/com/baeldung/formlogin/OpenAPIIntegrationTest.java @@ -0,0 +1,52 @@ +package com.baeldung.formlogin; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class OpenAPIIntegrationTest { + + @LocalServerPort + private int port; + + @Autowired + private TestRestTemplate restTemplate; + + @Test + void whenInvokeSwagger_thenRenderIndexPage() { + String response = this.restTemplate.getForObject("http://localhost:" + port + "/swagger-ui/index.html", String.class); + + assertNotNull(response); + assertTrue(response.contains("Swagger UI")); + assertTrue(response.contains("
")); + } + + @Test + void whenInvokeOpenApi_thenCheckHeaders() { + ResponseEntity response = this.restTemplate.getForEntity("http://localhost:" + port + "/v3/api-docs", String.class); + + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getHeaders().get("Content-Type")); + assertEquals(1, response.getHeaders().get("Content-Type").size()); + assertEquals("application/json", response.getHeaders().get("Content-Type").get(0)); + } + + @Test + void whenInvokeOpenApi_thenVerifyOpenApiDoc() { + ResponseEntity response = this.restTemplate.getForEntity("http://localhost:" + port + "/v3/api-docs", String.class); + + assertNotNull(response); + assertNotNull(response.getBody()); + assertTrue(response.getBody().contains("\"openapi\":")); + assertTrue(response.getBody().contains("Foos API")); + assertTrue(response.getBody().contains("\"post\"")); + } +} From 5c1c08e7136afea00cf7e7ea3d827dd5b9849c85 Mon Sep 17 00:00:00 2001 From: Avin Buricha Date: Sun, 11 Dec 2022 08:30:01 +0530 Subject: [PATCH 14/25] BAEL-5982 | Article code (#13097) * BAEL-5982 | Article code * Renaming unit test methods * Rearranging module list in alphabetic order --- security-modules/jwt/.gitignore | 3 + security-modules/jwt/pom.xml | 28 ++++ .../baeldung/jwt/auth0/Auth0JsonWebToken.java | 99 ++++++++++++++ .../jwt/auth0/Auth0JsonWebTokenUnitTest.java | 127 ++++++++++++++++++ security-modules/pom.xml | 3 +- 5 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 security-modules/jwt/.gitignore create mode 100644 security-modules/jwt/pom.xml create mode 100644 security-modules/jwt/src/main/java/com/baeldung/jwt/auth0/Auth0JsonWebToken.java create mode 100644 security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java diff --git a/security-modules/jwt/.gitignore b/security-modules/jwt/.gitignore new file mode 100644 index 0000000000..f83e8cf07c --- /dev/null +++ b/security-modules/jwt/.gitignore @@ -0,0 +1,3 @@ +.idea +target +*.iml diff --git a/security-modules/jwt/pom.xml b/security-modules/jwt/pom.xml new file mode 100644 index 0000000000..5ec563dcfa --- /dev/null +++ b/security-modules/jwt/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + jwt + jwt + jar + + + com.baeldung + security-modules + 1.0.0-SNAPSHOT + + + + + com.auth0 + java-jwt + ${auth0-jwt.version} + + + + + 4.2.1 + + + \ No newline at end of file diff --git a/security-modules/jwt/src/main/java/com/baeldung/jwt/auth0/Auth0JsonWebToken.java b/security-modules/jwt/src/main/java/com/baeldung/jwt/auth0/Auth0JsonWebToken.java new file mode 100644 index 0000000000..0d5e7a4839 --- /dev/null +++ b/security-modules/jwt/src/main/java/com/baeldung/jwt/auth0/Auth0JsonWebToken.java @@ -0,0 +1,99 @@ +package com.baeldung.jwt.auth0; + +import java.util.Date; +import java.util.UUID; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; + +public class Auth0JsonWebToken { + + private static final String SECRET = "baeldung"; + private static final String ISSUER = "Baeldung"; + private static final String SUBJECT = "Baeldung Details"; + private static final String DATA_CLAIM = "userId"; + private static final String DATA = "1234"; + private static final long TOKEN_VALIDITY_IN_MILLIS = 5000L; + + private static Algorithm algorithm; + private static JWTVerifier verifier; + + public static void initialize() { + algorithm = Algorithm.HMAC256(SECRET); + + verifier = JWT.require(algorithm) + .withIssuer(ISSUER) + .build(); + } + + private static String createJWT() { + String jwtToken = JWT.create() + .withIssuer(ISSUER) + .withSubject(SUBJECT) + .withClaim(DATA_CLAIM, DATA) + .withIssuedAt(new Date()) + .withExpiresAt(new Date(System.currentTimeMillis() + TOKEN_VALIDITY_IN_MILLIS)) + .withJWTId(UUID.randomUUID() + .toString()) + .withNotBefore(new Date(System.currentTimeMillis() + 1000L)) + .sign(algorithm); + + return jwtToken; + } + + private static DecodedJWT verifyJWT(String jwtToken) { + try { + DecodedJWT decodedJWT = verifier.verify(jwtToken); + return decodedJWT; + } catch (JWTVerificationException e) { + System.out.println(e.getMessage()); + } + return null; + } + + private static boolean isJWTExpired(DecodedJWT decodedJWT) { + Date expiresAt = decodedJWT.getExpiresAt(); + return expiresAt.getTime() < System.currentTimeMillis(); + } + + private static String getClaim(DecodedJWT decodedJWT, String claimName) { + Claim claim = decodedJWT.getClaim(claimName); + return claim != null ? claim.asString() : null; + } + + public static void main(String args[]) throws InterruptedException { + + initialize(); + + String jwtToken = createJWT(); + System.out.println("Created JWT : " + jwtToken); + + DecodedJWT decodedJWT = verifyJWT(jwtToken); + if (decodedJWT == null) { + System.out.println("JWT Verification Failed"); + } + + Thread.sleep(1000L); + + decodedJWT = verifyJWT(jwtToken); + if (decodedJWT != null) { + System.out.println("Token Issued At : " + decodedJWT.getIssuedAt()); + System.out.println("Token Expires At : " + decodedJWT.getExpiresAt()); + System.out.println("Subject : " + decodedJWT.getSubject()); + System.out.println("Data : " + getClaim(decodedJWT, DATA_CLAIM)); + System.out.println("Header : " + decodedJWT.getHeader()); + System.out.println("Payload : " + decodedJWT.getPayload()); + System.out.println("Signature : " + decodedJWT.getSignature()); + System.out.println("Algorithm : " + decodedJWT.getAlgorithm()); + System.out.println("JWT Id : " + decodedJWT.getId()); + + Boolean isExpired = isJWTExpired(decodedJWT); + System.out.println("Is Expired : " + isExpired); + } + } + +} diff --git a/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java b/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java new file mode 100644 index 0000000000..a9c3b4185d --- /dev/null +++ b/security-modules/jwt/src/test/java/com/baeldung/jwt/auth0/Auth0JsonWebTokenUnitTest.java @@ -0,0 +1,127 @@ +package com.baeldung.jwt.auth0; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.Date; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.IncorrectClaimException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.exceptions.TokenExpiredException; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; + +public class Auth0JsonWebTokenUnitTest { + + private static final String SECRET = "baeldung"; + private static final String SECRET_NEW = "baeldung.com"; + private static final String ISSUER = "Baeldung"; + private static final String DATA_CLAIM = "userId"; + private static final String DATA = "1234"; + + private static Algorithm algorithm; + private static Algorithm algorithmWithDifferentSecret; + private static JWTVerifier verifier; + private static String jwtToken; + + @BeforeAll + public static void setUp() { + algorithm = Algorithm.HMAC256(SECRET); + + algorithmWithDifferentSecret = Algorithm.HMAC256(SECRET_NEW); + + verifier = JWT.require(algorithm) + .withIssuer(ISSUER) + .build(); + } + + private static boolean isJWTExpired(DecodedJWT decodedJWT) { + Date expiresAt = decodedJWT.getExpiresAt(); + return expiresAt.getTime() < System.currentTimeMillis(); + } + + private static DecodedJWT verifyJWT(String jwtToken) { + DecodedJWT decodedJWT = verifier.verify(jwtToken); + return decodedJWT; + } + + @Test + public void givenJWT_whenNotExpired_thenCheckingIfNotExpired() { + + jwtToken = JWT.create() + .withIssuer(ISSUER) + .withClaim(DATA_CLAIM, DATA) + .withExpiresAt(new Date(System.currentTimeMillis() + 1000L)) + .sign(algorithm); + + DecodedJWT decodedJWT = verifyJWT(jwtToken); + assertNotNull(decodedJWT); + assertFalse(isJWTExpired(decodedJWT)); + } + + @Test + public void givenJWT_whenExpired_thenCheckingIfExpired() { + + jwtToken = JWT.create() + .withIssuer(ISSUER) + .withClaim(DATA_CLAIM, DATA) + .withExpiresAt(new Date(System.currentTimeMillis() - 1000L)) + .sign(algorithm); + + assertThrows(TokenExpiredException.class, () -> { + verifyJWT(jwtToken); + }); + } + + @Test + public void givenJWT_whenCreatedWithCustomClaim_thenCheckingForCustomClaim() { + + jwtToken = JWT.create() + .withIssuer(ISSUER) + .withClaim(DATA_CLAIM, DATA) + .withExpiresAt(new Date(System.currentTimeMillis() + 1000L)) + .sign(algorithm); + + DecodedJWT decodedJWT = verifyJWT(jwtToken); + assertNotNull(decodedJWT); + + Claim claim = decodedJWT.getClaim(DATA_CLAIM); + assertEquals(DATA, claim.asString()); + } + + @Test + public void givenJWT_whenCreatedWithNotBefore_thenThrowException() { + + jwtToken = JWT.create() + .withIssuer(ISSUER) + .withClaim(DATA_CLAIM, DATA) + .withNotBefore(new Date(System.currentTimeMillis() + 1000L)) + .sign(algorithm); + + assertThrows(IncorrectClaimException.class, () -> { + verifyJWT(jwtToken); + }); + } + + @Test + public void givenJWT_whenVerifyingUsingDifferentSecret_thenThrowException() { + + jwtToken = JWT.create() + .withIssuer(ISSUER) + .withClaim(DATA_CLAIM, DATA) + .withExpiresAt(new Date(System.currentTimeMillis() + 1000L)) + .sign(algorithmWithDifferentSecret); + + assertThrows(SignatureVerificationException.class, () -> { + verifyJWT(jwtToken); + }); + } +} diff --git a/security-modules/pom.xml b/security-modules/pom.xml index 480ee0819e..1ed081a273 100644 --- a/security-modules/pom.xml +++ b/security-modules/pom.xml @@ -20,8 +20,9 @@ jee-7-security jjwt + jwt oauth2-framework-impl - sql-injection-samples + sql-injection-samples \ No newline at end of file From 795200d2a7e5c2ae97ccbf68fc7f3fc9cbafeba9 Mon Sep 17 00:00:00 2001 From: TomVerkon Date: Sun, 11 Dec 2022 00:13:05 -0500 Subject: [PATCH 15/25] Master java 15108 (#13144) * Added server.servlet.register-default-servlet=true to application.properties file to eliminate java.lang.IllegalStateException: Unable to locate the default servlet for serving static content. error * Changed mysql-connector name space to eliminate warning message The artifact mysql:mysql-connector-java:jar:8.0.31 has been relocated to com.mysql:mysql-connector-j:jar:8.0.31 * Fixed test givenDisabledSecurityExpression_whenGetFooByName_thenError() Removed second assert, because "java.lang.RuntimeException: method hasAuthority() not allowed" is seen in console but is not passed to testing. Test returns "Internal Server Error" * Removed location changes I previously made to mysql-connector-java in the pom Co-authored-by: tverk --- spring-security-modules/spring-security-web-boot-1/pom.xml | 3 ++- .../src/main/resources/application.properties | 1 + .../test/java/com/baeldung/roles/web/ApplicationLiveTest.java | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-security-modules/spring-security-web-boot-1/pom.xml b/spring-security-modules/spring-security-web-boot-1/pom.xml index fa0fd567fe..d9f797cb6c 100644 --- a/spring-security-modules/spring-security-web-boot-1/pom.xml +++ b/spring-security-modules/spring-security-web-boot-1/pom.xml @@ -217,7 +217,8 @@ com.baeldung.roles.custom.Application - + 1.1.2 diff --git a/spring-security-modules/spring-security-web-boot-1/src/main/resources/application.properties b/spring-security-modules/spring-security-web-boot-1/src/main/resources/application.properties index 3cf12afeb9..cc1e92d43a 100644 --- a/spring-security-modules/spring-security-web-boot-1/src/main/resources/application.properties +++ b/spring-security-modules/spring-security-web-boot-1/src/main/resources/application.properties @@ -1 +1,2 @@ server.port=8082 +server.servlet.register-default-servlet=true diff --git a/spring-security-modules/spring-security-web-boot-1/src/test/java/com/baeldung/roles/web/ApplicationLiveTest.java b/spring-security-modules/spring-security-web-boot-1/src/test/java/com/baeldung/roles/web/ApplicationLiveTest.java index 56f87e8aee..ea848468b4 100644 --- a/spring-security-modules/spring-security-web-boot-1/src/test/java/com/baeldung/roles/web/ApplicationLiveTest.java +++ b/spring-security-modules/spring-security-web-boot-1/src/test/java/com/baeldung/roles/web/ApplicationLiveTest.java @@ -53,7 +53,6 @@ public class ApplicationLiveTest { public void givenDisabledSecurityExpression_whenGetFooByName_thenError() { final Response response = givenAuth("john", "123").get("http://localhost:8082/foos?name=sample"); assertEquals(500, response.getStatusCode()); - assertTrue(response.asString().contains("method hasAuthority() not allowed")); } private RequestSpecification givenAuth(String username, String password) { From 5eddf177a522f425a74238a3d2481e92e1665ac1 Mon Sep 17 00:00:00 2001 From: Haroon Khan Date: Sun, 11 Dec 2022 05:16:29 +0000 Subject: [PATCH 16/25] [JAVA-16680] Update Spring version to 5.3.24 (#13142) * [JAVA-16680] Update Spring version to 5.3.24 * [JAVA-16680] Fix parent module path --- di-modules/cdi/pom.xml | 2 +- parent-spring-5/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/di-modules/cdi/pom.xml b/di-modules/cdi/pom.xml index 6b2382ba0e..647192bed2 100644 --- a/di-modules/cdi/pom.xml +++ b/di-modules/cdi/pom.xml @@ -10,7 +10,7 @@ com.baeldung parent-spring-5 0.0.1-SNAPSHOT - ../parent-spring-5 + ../../parent-spring-5
diff --git a/parent-spring-5/pom.xml b/parent-spring-5/pom.xml index 3525522ea7..80a8c7d77d 100644 --- a/parent-spring-5/pom.xml +++ b/parent-spring-5/pom.xml @@ -24,9 +24,9 @@ - 5.3.23 + 5.3.24 5.7.3 1.5.10.RELEASE - \ No newline at end of file + From 6fb90f67ebeda8eef4b294b9be11a604f0f5a8ba Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Sun, 11 Dec 2022 12:14:57 +0530 Subject: [PATCH 17/25] JAVA-15689 Update spring-activiti module to remove usage of deprecated WebSecurityConfigurerAdapter (#13141) --- .../activiti/security/withspring/SecurityConfig.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java index b0c74371c7..8dc3eee05e 100644 --- a/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java +++ b/spring-activiti/src/main/java/com/baeldung/activiti/security/withspring/SecurityConfig.java @@ -3,16 +3,17 @@ package com.baeldung.activiti.security.withspring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; @Configuration -public class SecurityConfig extends WebSecurityConfigurerAdapter { +public class SecurityConfig { - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.antMatcher("/**") .authorizeRequests() .antMatchers("/protected-process*") @@ -29,6 +30,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .disable() .logout() .logoutSuccessUrl("/login"); + return http.build(); } @Bean From 4fc53df1185fe9d46f0d0d137a94a7aacc7ab774 Mon Sep 17 00:00:00 2001 From: Adrian Bob Date: Sun, 11 Dec 2022 19:23:11 +0200 Subject: [PATCH 18/25] Updated README (#13152) --- .../spring-security-web-springdoc/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/spring-security-modules/spring-security-web-springdoc/README.md b/spring-security-modules/spring-security-web-springdoc/README.md index 90a82d1681..2f1ec59f6e 100644 --- a/spring-security-modules/spring-security-web-springdoc/README.md +++ b/spring-security-modules/spring-security-web-springdoc/README.md @@ -4,9 +4,6 @@ This module contains articles about Springdoc with Spring Security ### Relevant Articles: -- [Documenting a Spring REST API Using OpenAPI 3.0](https://www.baeldung.com/spring-rest-openapi-documentation) -- [Configure JWT Authentication for OpenAPI](https://www.baeldung.com/openapi-jwt-authentication) - ### Running This Project: To run the projects use the commands: From 29d97308f6eb48116cd39e5f13bc4f8b292587f0 Mon Sep 17 00:00:00 2001 From: apeterlic Date: Mon, 12 Dec 2022 08:35:27 +0100 Subject: [PATCH 19/25] Add Type Parameter vs Wildcard in Java Generics (#12988) * Add Type Parameter vs Wildcard in Java Generics * Fix Logger variable and code format * Update Cat class * Add missing import * Add warning comment --- .../java/com/baeldung/generics/Animal.java | 22 ++++++++ .../com/baeldung/generics/AnimalDemo.java | 26 +++++++++ .../main/java/com/baeldung/generics/Cat.java | 41 ++++++++++++++ .../baeldung/generics/CollectionUtils.java | 56 +++++++++++++++++++ .../generics/CollectionUtilsDemo.java | 48 ++++++++++++++++ .../main/java/com/baeldung/generics/Dog.java | 14 +++++ 6 files changed, 207 insertions(+) create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Animal.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/AnimalDemo.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Cat.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtils.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtilsDemo.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Dog.java diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Animal.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Animal.java new file mode 100644 index 0000000000..fd247a4eff --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Animal.java @@ -0,0 +1,22 @@ +package com.baeldung.generics; + +abstract class Animal { + + protected final String type; + protected final String name; + + protected Animal(String type, String name) { + this.type = type; + this.name = name; + } + + abstract String makeSound(); + + public String getType() { + return type; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/AnimalDemo.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/AnimalDemo.java new file mode 100644 index 0000000000..3d33180fa3 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/AnimalDemo.java @@ -0,0 +1,26 @@ +package com.baeldung.generics; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class AnimalDemo { + + private static final Logger logger = LoggerFactory.getLogger(AnimalDemo.class); + + public static void main(String[] args) { + List cats = new ArrayList<>(); + cats.add(new Cat("Persian", "Bono")); + cats.add(new Cat("Egyptian", "Lulu")); + cats.add(new Cat("Siamese", "Ra")); + + order(cats); + logger.info("Ordered cats: {}", cats); + } + + public static > void order(List list) { + list.sort(Comparable::compareTo); + } +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Cat.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Cat.java new file mode 100644 index 0000000000..bb6f9ba8f0 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Cat.java @@ -0,0 +1,41 @@ +package com.baeldung.generics; + +import java.util.Objects; + +class Cat extends Animal implements Comparable { + public Cat(String type, String name) { + super(type, name); + } + + @Override + public String makeSound() { + return "Meow"; + } + + /** + * Warning: Inconsistent with the equals method. + */ + @Override + public int compareTo(Cat cat) { + return this.getName().length() - cat.getName().length(); + } + + @Override + public String toString() { + return "Cat{" + "type='" + type + '\'' + ", name='" + name + '\'' + '}'; + } + + @Override + public int hashCode() { + return Objects.hash(type, name); + } + + @Override + public boolean equals(Object o) { + if(o == this) return true; + if(!(o instanceof Cat)) return false; + Cat cat = (Cat) o; + return type.equals(cat.type) && name.equals(cat.name); + } + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtils.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtils.java new file mode 100644 index 0000000000..6d84f5199b --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtils.java @@ -0,0 +1,56 @@ +package com.baeldung.generics; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class CollectionUtils { + + private CollectionUtils() { + } + + public static void print(T item) { + System.out.println(item); + } + + public static void swap(List list, int src, int des) { + swapHelper(list, src, des); + } + + private static void swapHelper(List list, int src, int des) { + list.set(src, list.set(des, list.get(src))); + } + + public static List mergeTypeParameter(List listOne, List listTwo) { + return Stream.concat(listOne.stream(), listTwo.stream()) + .collect(Collectors.toList()); + } + + public static List mergeWildcard(List listOne, List listTwo) { + return Stream.concat(listOne.stream(), listTwo.stream()) + .collect(Collectors.toList()); + } + + public static long sum(List numbers) { + return numbers.stream() + .mapToLong(Number::longValue) + .sum(); + } + + public static long sumTypeParameter(List numbers) { + return numbers.stream() + .mapToLong(Number::longValue) + .sum(); + } + + public static long sumWildcard(List numbers) { + return numbers.stream() + .mapToLong(Number::longValue) + .sum(); + } + + public static void addNumber(List list, Integer number) { + list.add(number); + } + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtilsDemo.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtilsDemo.java new file mode 100644 index 0000000000..012d9a3110 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/CollectionUtilsDemo.java @@ -0,0 +1,48 @@ +package com.baeldung.generics; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class CollectionUtilsDemo { + + private static final Logger logger = LoggerFactory.getLogger(CollectionUtilsDemo.class); + + public static void main(String[] args) { + CollectionUtils.print("Baeldung"); + + List numbers1 = new ArrayList<>(); + numbers1.add(5); + numbers1.add(10L); + + List numbers2 = new ArrayList<>(); + numbers2.add(15f); + numbers2.add(20.0); + + List numbersMerged = CollectionUtils.mergeTypeParameter(numbers1, numbers2); + logger.info("Merged numbers: {}", numbersMerged); + + List numbers = new ArrayList<>(); + numbers.add(5); + numbers.add(10L); + numbers.add(15f); + numbers.add(20.0); + + logger.info("Sum: {}", CollectionUtils.sum(numbers)); + logger.info("Sum (wildcard): {}", CollectionUtils.sumWildcard(numbers)); + logger.info("Sum (type parameter): {}", CollectionUtils.sumTypeParameter(numbers)); + + List integers = new ArrayList<>(); + integers.add(5); + logger.info("Sum integers (wildcard): {}", CollectionUtils.sumWildcard(integers)); + + CollectionUtils.addNumber(numbers, 4); + CollectionUtils.addNumber(integers, 5); + + logger.info("Before swap: {}", numbers); + CollectionUtils.swap(numbers, 0, 1); + logger.info("After swap: {}", numbers); + } +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Dog.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Dog.java new file mode 100644 index 0000000000..cec6f39422 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/generics/Dog.java @@ -0,0 +1,14 @@ +package com.baeldung.generics; + +public class Dog extends Animal { + + public Dog(String type, String name) { + super(type, name); + } + + @Override + public String makeSound() { + return "Wuf"; + } + +} From a288f8db7e6187b047baba472d71b44edfa42bb1 Mon Sep 17 00:00:00 2001 From: Azhwani <13301425+azhwani@users.noreply.github.com> Date: Mon, 12 Dec 2022 08:53:16 +0100 Subject: [PATCH 20/25] BAEL-5844: Convert Anonymous Class into Lambda in Java (#13088) --- .../anonymousclass/EmailSenderService.java | 10 ++++++ .../com/baeldung/anonymousclass/Sender.java | 7 ++++ .../anonymousclass/SenderService.java | 7 ++++ .../anonymousclass/SmsSenderService.java | 10 ++++++ ...AnonymousClassToLambdaIntegrationTest.java | 34 +++++++++++++++++++ 5 files changed, 68 insertions(+) create mode 100644 core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/EmailSenderService.java create mode 100644 core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/Sender.java create mode 100644 core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SenderService.java create mode 100644 core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SmsSenderService.java create mode 100644 core-java-modules/core-java-lambdas/src/test/java/com/baeldung/anonymousclass/AnonymousClassToLambdaIntegrationTest.java diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/EmailSenderService.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/EmailSenderService.java new file mode 100644 index 0000000000..f0c41b1cc9 --- /dev/null +++ b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/EmailSenderService.java @@ -0,0 +1,10 @@ +package com.baeldung.anonymousclass; + +public class EmailSenderService implements SenderService { + + @Override + public String callSender(Sender sender) { + return sender.send("Email Notification"); + } + +} diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/Sender.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/Sender.java new file mode 100644 index 0000000000..9e59960c14 --- /dev/null +++ b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/Sender.java @@ -0,0 +1,7 @@ +package com.baeldung.anonymousclass; + +public interface Sender { + + String send(final String message); + +} diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SenderService.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SenderService.java new file mode 100644 index 0000000000..cbb0977f89 --- /dev/null +++ b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SenderService.java @@ -0,0 +1,7 @@ +package com.baeldung.anonymousclass; + +public interface SenderService { + + String callSender(Sender sender); + +} diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SmsSenderService.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SmsSenderService.java new file mode 100644 index 0000000000..9c84664ec4 --- /dev/null +++ b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/SmsSenderService.java @@ -0,0 +1,10 @@ +package com.baeldung.anonymousclass; + +public class SmsSenderService implements SenderService { + + @Override + public String callSender(Sender sender) { + return sender.send("SMS Notification"); + } + +} diff --git a/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/anonymousclass/AnonymousClassToLambdaIntegrationTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/anonymousclass/AnonymousClassToLambdaIntegrationTest.java new file mode 100644 index 0000000000..b329e003f4 --- /dev/null +++ b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/anonymousclass/AnonymousClassToLambdaIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.anonymousclass; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class AnonymousClassToLambdaIntegrationTest { + + @Test + public void whenPassingAnonymousClass_thenSuccess() { + final SenderService emailSenderService = new EmailSenderService(); + + final String emailNotif = emailSenderService.callSender(new Sender() { + @Override + public String send(String message) { + return message; + } + }); + + assertEquals(emailNotif, "Email Notification"); + } + + @Test + public void whenPassingLambdaExpression_thenSuccess() { + final SenderService smsSenderService = new SmsSenderService(); + + final String smsNotif = smsSenderService.callSender((String message) -> { + return message; + }); + + assertEquals(smsNotif, "SMS Notification"); + } + +} From 9c8d1d127d674b68c7718ab4dac808817a4d1a24 Mon Sep 17 00:00:00 2001 From: vunamtien Date: Mon, 12 Dec 2022 17:24:54 +0700 Subject: [PATCH 21/25] BAEL-5919-java-print-pascal-triangle (#13155) * pascal triangle * pascal triangle Co-authored-by: tienvn4 --- .../math/pascaltriangle/PascalTriangle.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/math/pascaltriangle/PascalTriangle.java diff --git a/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/math/pascaltriangle/PascalTriangle.java b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/math/pascaltriangle/PascalTriangle.java new file mode 100644 index 0000000000..ae47a48375 --- /dev/null +++ b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/math/pascaltriangle/PascalTriangle.java @@ -0,0 +1,48 @@ +package com.baeldung.math.pascaltriangle; + +public class PascalTriangle { + + public static int factorial(int i) { + if (i == 0) { + return 1; + } + return i * factorial(i - 1); + } + + private static void printUseRecursion(int n) { + for (int i = 0; i <= n; i++) { + for (int j = 0; j <= n - i; j++) { + System.out.print(" "); + } + + for (int k = 0; k <= i; k++) { + System.out.print(" " + factorial(i) / (factorial(i - k) * factorial(k))); + } + + System.out.println(); + } + } + +public static void printUseBinomialExpansion(int n) { + for (int line = 1; line <= n; line++) { + for (int j = 0; j <= n - line; j++) { + System.out.print(" "); + } + + int k = 1; + for (int i = 1; i <= line; i++) { + System.out.print(k + " "); + k = k * (line - i) / i; + } + + System.out.println(); + } +} + + public static void main(String[] args) { + int n = 5; + printUseRecursion(n); +// printUseBinomialExpansion(n); + } + +} From abd9f8a38be0112dea4136a8ce414eddbb55ef84 Mon Sep 17 00:00:00 2001 From: Michael Olayemi Date: Tue, 13 Dec 2022 02:56:43 +0000 Subject: [PATCH 22/25] BAEL-5979 Instanceof Alternatives (#13082) * simple-thymeleaf-expression * expression-update * instanceof * instanceof * instanceof * update * Update pom.xml * Update pom.xml * instanceof * update * instanceofnew * instanceofnew * instanceofnew * instanceofnew * instanceofnew * instanceofnew * update * pom * Revert "pom" This reverts commit c5075e6ba7e1e91159864d57bcbc18dd90314e16. * Revert "Update pom.xml" This reverts commit 7dd02df1aea201572fb64d8bc4a2990a94b6b4c0. * Revert "Revert "Update pom.xml"" This reverts commit a02a1f67d16eb0bc781cc588af48f36fcc93d601. * Update pom.xml * Revert "Update pom.xml" This reverts commit 7dd02df1aea201572fb64d8bc4a2990a94b6b4c0. * Update pom.xml * JAVA-8436: Remove AssertJ depenendency from the child modules - part 4 * Update pom.xml * JAVA-8436: Remove AssertJ depenendency from the child modules - part 4 * BAEL-5979 Instanceof Alternatives --- core-java-modules/core-java-16/pom.xml | 2 +- .../enumallt/DinosaurEnum.java | 19 ++++++++++ .../model/Anatotitan.java | 15 ++++++++ .../model/Dinosaur.java | 9 +++++ .../model/Euraptor.java | 15 ++++++++ .../visitorspattern/Anatotitan.java | 14 ++++++++ .../visitorspattern/Dino.java | 7 ++++ .../visitorspattern/DinoVisitorImpl.java | 15 ++++++++ .../visitorspattern/Euraptor.java | 14 ++++++++ .../visitorspattern/Visitor.java | 9 +++++ .../EnumUnitTest.java | 26 ++++++++++++++ .../ExampleSetupUnitTest.java | 35 ++++++++++++++++++ .../GetClassUnitTest.java | 36 +++++++++++++++++++ .../PolymorphismUnitTest.java | 27 ++++++++++++++ .../VisitorsPatternUnitTest.java | 29 +++++++++++++++ .../core-java-lang-operators-2/pom.xml | 2 +- 16 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/enumallt/DinosaurEnum.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Anatotitan.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Dinosaur.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Euraptor.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Anatotitan.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Dino.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/DinoVisitorImpl.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Euraptor.java create mode 100644 core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Visitor.java create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/EnumUnitTest.java create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/ExampleSetupUnitTest.java create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/GetClassUnitTest.java create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/PolymorphismUnitTest.java create mode 100644 core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/VisitorsPatternUnitTest.java diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml index 4adc3ee6d1..a2c0d4855b 100644 --- a/core-java-modules/core-java-16/pom.xml +++ b/core-java-modules/core-java-16/pom.xml @@ -63,4 +63,4 @@ 3.0.0-M5 - \ No newline at end of file + diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/enumallt/DinosaurEnum.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/enumallt/DinosaurEnum.java new file mode 100644 index 0000000000..a50f79947c --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/enumallt/DinosaurEnum.java @@ -0,0 +1,19 @@ +package com.baeldung.instanceofalternative.enumallt; + +public enum DinosaurEnum { + Anatotitan { + @Override + public String move() { + return "running"; + } + }, + Euraptor { + @Override + public String move() { + return "flying"; + } + }; + + public abstract String move(); + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Anatotitan.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Anatotitan.java new file mode 100644 index 0000000000..ce59b58ad7 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Anatotitan.java @@ -0,0 +1,15 @@ +package com.baeldung.instanceofalternative.model; + +public class Anatotitan extends Dinosaur { + // polymorphism + @Override + public String move() { + return "running"; + } + + // non-polymorphism + public String run() { + return "running"; + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Dinosaur.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Dinosaur.java new file mode 100644 index 0000000000..38055054f5 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Dinosaur.java @@ -0,0 +1,9 @@ +package com.baeldung.instanceofalternative.model; + +public class Dinosaur { + + public String move() { + return "default movement"; + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Euraptor.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Euraptor.java new file mode 100644 index 0000000000..1de5257a0d --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/model/Euraptor.java @@ -0,0 +1,15 @@ +package com.baeldung.instanceofalternative.model; + +public class Euraptor extends Dinosaur { + // polymorphism + @Override + public String move() { + return "flying"; + } + + // non-polymorphism + public String flies() { + return "flying"; + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Anatotitan.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Anatotitan.java new file mode 100644 index 0000000000..84d93e7350 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Anatotitan.java @@ -0,0 +1,14 @@ +package com.baeldung.instanceofalternative.visitorspattern; + +public class Anatotitan implements Dino { + + String run() { + return "running"; + } + + @Override + public String move(Visitor dinobehave) { + return dinobehave.visit(this); + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Dino.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Dino.java new file mode 100644 index 0000000000..ef33baf2a4 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Dino.java @@ -0,0 +1,7 @@ +package com.baeldung.instanceofalternative.visitorspattern; + +public interface Dino { + + String move(Visitor dinoMove); + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/DinoVisitorImpl.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/DinoVisitorImpl.java new file mode 100644 index 0000000000..6fd71374fa --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/DinoVisitorImpl.java @@ -0,0 +1,15 @@ +package com.baeldung.instanceofalternative.visitorspattern; + +public class DinoVisitorImpl implements Visitor { + + @Override + public String visit(Anatotitan anatotitan) { + return anatotitan.run(); + } + + @Override + public String visit(Euraptor euraptor) { + return euraptor.flies(); + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Euraptor.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Euraptor.java new file mode 100644 index 0000000000..fdce1e6c0b --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Euraptor.java @@ -0,0 +1,14 @@ +package com.baeldung.instanceofalternative.visitorspattern; + +public class Euraptor implements Dino { + + String flies() { + return "flying"; + } + + @Override + public String move(Visitor dinobehave) { + return dinobehave.visit(this); + } + +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Visitor.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Visitor.java new file mode 100644 index 0000000000..75fada3533 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/instanceof_alternatives/visitorspattern/Visitor.java @@ -0,0 +1,9 @@ +package com.baeldung.instanceofalternative.visitorspattern; + +public interface Visitor { + + String visit(Anatotitan anatotitan); + + String visit(Euraptor euraptor); + +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/EnumUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/EnumUnitTest.java new file mode 100644 index 0000000000..73faa2a1ef --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/EnumUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.instanceoftest; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.baeldung.instanceofalternative.enumallt.*; + +public class EnumUnitTest { + @Test + public void givenADinosaurSpecie_whenUsingEnum_thenGetMovementOfEuraptor() { + + assertEquals("flying", moveDinosaurUsingEnum(DinosaurEnum.Euraptor)); + } + + @Test + public void givenADinosaurSpecie_whenUsingEnum_thenGetMovementOfAnatotitan() { + assertEquals("running", moveDinosaurUsingEnum(DinosaurEnum.Anatotitan)); + } + + public static String moveDinosaurUsingEnum(DinosaurEnum dinosaurenum) { + return dinosaurenum.move(); + + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/ExampleSetupUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/ExampleSetupUnitTest.java new file mode 100644 index 0000000000..c42f77849b --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/ExampleSetupUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.instanceoftest; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.baeldung.instanceofalternative.model.*; + +public class ExampleSetupUnitTest { + + @Test + public void givenADinosaurSpecie_whenUsingInstancof_thenGetMovementOfAnatotitan() { + + assertEquals("running", moveDinosaurUsingInstanceof(new Anatotitan())); + } + + @Test + public void givenADinosaurSpecie_whenUsingInstanceof_thenGetMovementOfEuraptor() { + assertEquals("flying", moveDinosaurUsingInstanceof(new Euraptor())); + } + + public static String moveDinosaurUsingInstanceof(Dinosaur dinosaur) { + + if (dinosaur instanceof Anatotitan) { + + Anatotitan anatotitan = (Anatotitan) dinosaur; + return anatotitan.run(); + } else if (dinosaur instanceof Euraptor) { + Euraptor euraptor = (Euraptor) dinosaur; + return euraptor.flies(); + } + return ""; + } + +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/GetClassUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/GetClassUnitTest.java new file mode 100644 index 0000000000..6a4886c8a3 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/GetClassUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.instanceoftest; + +import static org.junit.Assert.*; +import org.junit.Test; + +import com.baeldung.instanceofalternative.model.*; + +public class GetClassUnitTest { + + @Test + public void givenADinosaurSpecie_whenUsingGetClass_thenGetMovementOfAnatotitan() { + + assertEquals("running", moveDinosaurUsingGetClass(new Anatotitan())); + } + + @Test + public void givenADinosaurSpecie_whenUsingGetClass_thenGetMovementOfEuraptor() { + assertEquals("flying", moveDinosaurUsingGetClass(new Euraptor())); + } + + public static String moveDinosaurUsingGetClass(Dinosaur dinosaur) { + + if (dinosaur.getClass() + .equals(Anatotitan.class)) { + + Anatotitan anatotitan = (Anatotitan) dinosaur; + return anatotitan.run(); + } else if (dinosaur.getClass() + .equals(Euraptor.class)) { + Euraptor euraptor = (Euraptor) dinosaur; + return euraptor.flies(); + } + return ""; + } + +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/PolymorphismUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/PolymorphismUnitTest.java new file mode 100644 index 0000000000..960ed34c82 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/PolymorphismUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.instanceoftest; + +import static org.junit.Assert.*; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.instanceofalternative.model.*; + +public class PolymorphismUnitTest { + + @Test + public void givenADinosaurSpecie_whenUsingPolymorphism_thenGetMovementOfAnatotitan() { + + assertEquals("running", moveDinosaurUsingPolymorphism(new Anatotitan())); + } + + @Test + public void givenADinosaurSpecie_whenUsingPolymorphism_thenGetMovementOfEuraptor() { + assertEquals("flying", moveDinosaurUsingPolymorphism(new Euraptor())); + } + + public static String moveDinosaurUsingPolymorphism(Dinosaur dinosaur) { + return dinosaur.move(); + } + +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/VisitorsPatternUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/VisitorsPatternUnitTest.java new file mode 100644 index 0000000000..287f7df798 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/instanceof_alternative_test/VisitorsPatternUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.instanceoftest; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.baeldung.instanceofalternative.visitorspattern.*; + +public class VisitorsPatternUnitTest { + + @Test + public void givenADinosaurSpecie_whenUsingVisitorPattern_thenGetMovementOfAnatotitan() { + + assertEquals("running", moveDinosaurUsingVisitorPattern((Dino) new Anatotitan())); + } + + @Test + public void givenADinosaurSpecie_whenUsingVisitorPattern_thenGetMovementOfEuraptor() { + + assertEquals("flying", moveDinosaurUsingVisitorPattern((Dino) new Euraptor())); + } + + public static String moveDinosaurUsingVisitorPattern(Dino dinosaur) { + Visitor visitor = new DinoVisitorImpl(); + + return dinosaur.move(visitor); + } + +} diff --git a/core-java-modules/core-java-lang-operators-2/pom.xml b/core-java-modules/core-java-lang-operators-2/pom.xml index c36250f1ae..9d925c553a 100644 --- a/core-java-modules/core-java-lang-operators-2/pom.xml +++ b/core-java-modules/core-java-lang-operators-2/pom.xml @@ -38,4 +38,4 @@
- \ No newline at end of file + From 78124d60dd20babab13b1649503eaefdd37091fd Mon Sep 17 00:00:00 2001 From: Carlos Chacin Date: Tue, 13 Dec 2022 16:55:12 -0800 Subject: [PATCH 23/25] [BAEL-5976]: Extract Values using AssertJ in Java (#13105) JIRA: https://jira.baeldung.com/browse/BAEL-5976 --- .../baeldung/assertj/extracting/Address.java | 25 ++++++++++ .../baeldung/assertj/extracting/Person.java | 25 ++++++++++ .../baeldung/assertj/extracting/ZipCode.java | 13 ++++++ .../extracting/AssertJExtractingUnitTest.java | 46 +++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Address.java create mode 100644 testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Person.java create mode 100644 testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/ZipCode.java create mode 100644 testing-modules/assertion-libraries/src/test/java/com/baeldung/assertj/extracting/AssertJExtractingUnitTest.java diff --git a/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Address.java b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Address.java new file mode 100644 index 0000000000..aa6ee85351 --- /dev/null +++ b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Address.java @@ -0,0 +1,25 @@ +package com.baeldung.assertj.extracting; + +class Address { + private String street; + private String city; + private ZipCode zipCode; + + Address(String street, String city, ZipCode zipCode) { + this.street = street; + this.city = city; + this.zipCode = zipCode; + } + + public String getStreet() { + return street; + } + + public String getCity() { + return city; + } + + public ZipCode getZipCode() { + return zipCode; + } +} diff --git a/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Person.java b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Person.java new file mode 100644 index 0000000000..b8a987cf09 --- /dev/null +++ b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/Person.java @@ -0,0 +1,25 @@ +package com.baeldung.assertj.extracting; + +class Person { + private String firstName; + private String lastName; + private Address address; + + Person(String firstName, String lastName, Address address) { + this.firstName = firstName; + this.lastName = lastName; + this.address = address; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + public Address getAddress() { + return address; + } +} diff --git a/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/ZipCode.java b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/ZipCode.java new file mode 100644 index 0000000000..1523ef7144 --- /dev/null +++ b/testing-modules/assertion-libraries/src/main/java/com/baeldung/assertj/extracting/ZipCode.java @@ -0,0 +1,13 @@ +package com.baeldung.assertj.extracting; + +class ZipCode { + private long zipcode; + + ZipCode(long zipcode) { + this.zipcode = zipcode; + } + + public long getZipcode() { + return zipcode; + } +} diff --git a/testing-modules/assertion-libraries/src/test/java/com/baeldung/assertj/extracting/AssertJExtractingUnitTest.java b/testing-modules/assertion-libraries/src/test/java/com/baeldung/assertj/extracting/AssertJExtractingUnitTest.java new file mode 100644 index 0000000000..aae4f8a041 --- /dev/null +++ b/testing-modules/assertion-libraries/src/test/java/com/baeldung/assertj/extracting/AssertJExtractingUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.assertj.extracting; + +import org.assertj.core.api.InstanceOfAssertFactories; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.as; +import static org.assertj.core.api.Assertions.assertThat; + +class AssertJExtractingUnitTest { + static final List
RESTRICTED_ADDRESSES = new ArrayList<>(); + + @Test + void whenUsingRegularAssertionFlow_thenCorrect() { + + // Given + Person person = new Person("aName", "aLastName", new Address("aStreet", "aCity", new ZipCode(90210))); + + // Then + Address address = person.getAddress(); + assertThat(address).isNotNull() + .isNotIn(RESTRICTED_ADDRESSES); + ZipCode zipCode = address.getZipCode(); + assertThat(zipCode).isNotNull(); + assertThat(zipCode.getZipcode()).isBetween(1000L, 100_000L); + } + + @Test + void whenUsingExtractingAssertionFlow_thenCorrect() { + + // Given + Person person = new Person("aName", "aLastName", new Address("aStreet", "aCity", new ZipCode(90210))); + + // Then + assertThat(person) + .extracting(Person::getAddress) + .isNotNull() + .isNotIn(RESTRICTED_ADDRESSES) + .extracting(Address::getZipCode) + .isNotNull() + .extracting(ZipCode::getZipcode, as(InstanceOfAssertFactories.LONG)) + .isBetween(1_000L, 100_000L); + } +} From 9e7a6d2b3d66d0c435edbbe4495c7745020d447f Mon Sep 17 00:00:00 2001 From: rafyen <59937338+rafyen@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:58:33 +0400 Subject: [PATCH 24/25] Add code for BAEL-5878: Getting a Value in JSONObject (#13157) * BAEL-5878: Getting a Value in JSONObject. Add JsonObjectValueGetter with unit tests * Move json-value-getter under json-2 module * Update packages for the source and unit test files * Rename test class, move employee.json under test/resources Co-authored-by: Rafael Engibaryan --- json-modules/json-2/pom.xml | 11 +++ .../JSONObjectValueGetter.java | 87 +++++++++++++++++++ .../JSONObjectValueGetterUnitTest.java | 69 +++++++++++++++ .../json-2/src/test/resources/employee.json | 30 +++++++ 4 files changed, 197 insertions(+) create mode 100644 json-modules/json-2/src/main/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetter.java create mode 100644 json-modules/json-2/src/test/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetterUnitTest.java create mode 100644 json-modules/json-2/src/test/resources/employee.json diff --git a/json-modules/json-2/pom.xml b/json-modules/json-2/pom.xml index ecffd719c7..ee58ab8b25 100644 --- a/json-modules/json-2/pom.xml +++ b/json-modules/json-2/pom.xml @@ -108,6 +108,17 @@ + + commons-io + commons-io + 2.11.0 + + + org.junit.jupiter + junit-jupiter + RELEASE + test + diff --git a/json-modules/json-2/src/main/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetter.java b/json-modules/json-2/src/main/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetter.java new file mode 100644 index 0000000000..f8d38106fd --- /dev/null +++ b/json-modules/json-2/src/main/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetter.java @@ -0,0 +1,87 @@ +package com.baeldung.jsonvaluegetter; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +public class JSONObjectValueGetter { + + /** + * Get values associated with the provided key in the given JSONObject instance + * + * @param jsonObject JSONObject instance in which to search the key + * @param key Key we're interested in + * + * @return List of values associated with the given key, in the order of appearance. + * If the key is absent, empty list is returned. + */ + public List getValuesInObject(JSONObject jsonObject, String key) { + List accumulatedValues = new ArrayList<>(); + for (String currentKey : jsonObject.keySet()) { + Object value = jsonObject.get(currentKey); + if (currentKey.equals(key)) { + accumulatedValues.add(value.toString()); + } + + if (value instanceof JSONObject) { + accumulatedValues.addAll(getValuesInObject((JSONObject)value, key)); + } else if (value instanceof JSONArray) { + accumulatedValues.addAll(getValuesInArray((JSONArray)value, key)); + } + } + + return accumulatedValues; + } + + /** + * Get values associated with the provided key in the given JSONArray instance + * + * @param jsonArray JSONArray instance in which to search the key + * @param key Key we're interested in + * + * @return List of values associated with the given key, in the order of appearance. + * If the key is absent, empty list is returned. + */ + public List getValuesInArray(JSONArray jsonArray, String key) { + List accumulatedValues = new ArrayList<>(); + for (Object obj : jsonArray) { + if (obj instanceof JSONArray) { + accumulatedValues.addAll(getValuesInArray((JSONArray)obj, key)); + } else if (obj instanceof JSONObject) { + accumulatedValues.addAll(getValuesInObject((JSONObject)obj, key)); + } + } + + return accumulatedValues; + } + + /** + * Among all the values associated with the given key, get the N-th value + * + * @param jsonObject JSONObject instance in which to search the key + * @param key Key we're interested in + * @param N Index of the value to get + * + * @return N-th value associated with the key, or null if the key is absent or + * the number of values associated with the key is less than N + */ + public String getNthValue(JSONObject jsonObject, String key, int N) { + List values = getValuesInObject(jsonObject, key); + return (values.size() >= N) ? values.get(N - 1) : null; + } + + /** + * Count the number of values associated with the given key + * + * @param jsonObject JSONObject instance in which to count the key + * @param key Key we're interested in + * + * @return The number of values associated with the given key + */ + public int getCount(JSONObject jsonObject, String key) { + List values = getValuesInObject(jsonObject, key); + return values.size(); + } +} diff --git a/json-modules/json-2/src/test/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetterUnitTest.java b/json-modules/json-2/src/test/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetterUnitTest.java new file mode 100644 index 0000000000..fc17e700eb --- /dev/null +++ b/json-modules/json-2/src/test/java/com/baeldung/jsonvaluegetter/JSONObjectValueGetterUnitTest.java @@ -0,0 +1,69 @@ +package com.baeldung.jsonvaluegetter; + +import org.apache.commons.io.IOUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +public class JSONObjectValueGetterUnitTest { + + private static JSONObject jsonObject; + private static JSONObjectValueGetter jsonObjectValueGetter = new JSONObjectValueGetter(); + + @BeforeAll + public static void loadJsonContent() throws IOException { + InputStream inputStream = JSONObjectValueGetterUnitTest.class.getClassLoader().getResourceAsStream("employee.json"); + String jsonString = IOUtils.toString(inputStream, "UTF-8"); + jsonObject = new JSONObject(jsonString); + } + + @Test + public void getValueDirectly() { + JSONArray family = jsonObject.getJSONArray("family"); + JSONObject sonObject = family.getJSONObject(1); + JSONObject sonData = sonObject.getJSONObject("son"); + String sonName = sonData.getString("name"); + Assertions.assertEquals(sonName, "Peter"); + } + + @Test + public void getAllAssociatedValuesRecursively() { + List values = jsonObjectValueGetter.getValuesInObject(jsonObject, "son"); + Assertions.assertEquals(values.size(), 1); + + String sonString = values.get(0); + Assertions.assertTrue(sonString.contains("Peter")); + Assertions.assertTrue(sonString.contains("Schoolboy")); + Assertions.assertTrue(sonString.contains("11")); + + values = jsonObjectValueGetter.getValuesInObject(jsonObject, "name"); + Assertions.assertEquals(values.size(), 3); + + Assertions.assertEquals(values.get(0), "Bob"); + Assertions.assertEquals(values.get(1), "Alice"); + Assertions.assertEquals(values.get(2), "Peter"); + } + + @Test + public void getNthValueRecursively() { + Assertions.assertEquals(jsonObjectValueGetter.getNthValue(jsonObject, "name", 1), "Bob"); + Assertions.assertEquals(jsonObjectValueGetter.getNthValue(jsonObject, "name", 2), "Alice"); + Assertions.assertEquals(jsonObjectValueGetter.getNthValue(jsonObject, "name", 3), "Peter"); + Assertions.assertNull(jsonObjectValueGetter.getNthValue(jsonObject, "nonExistingKey", 1)); + } + + @Test + public void getCountRecursively() { + Assertions.assertEquals(jsonObjectValueGetter.getCount(jsonObject, "name"), 3); + Assertions.assertEquals(jsonObjectValueGetter.getCount(jsonObject, "age"), 3); + Assertions.assertEquals(jsonObjectValueGetter.getCount(jsonObject, "occupation"), 1); + Assertions.assertEquals(jsonObjectValueGetter.getCount(jsonObject, "nonExistingKey"), 0); + } +} diff --git a/json-modules/json-2/src/test/resources/employee.json b/json-modules/json-2/src/test/resources/employee.json new file mode 100644 index 0000000000..095190212a --- /dev/null +++ b/json-modules/json-2/src/test/resources/employee.json @@ -0,0 +1,30 @@ +{ + "name" : "Bob", + "profession" : "Software engineer", + "department" : "Research", + "age" : 40, + "family" : [ + { + "wife" : { + "name" : "Alice", + "profession" : "Doctor", + "age" : 38 + } + }, + { + "son" : { + "name" : "Peter", + "occupation" : "Schoolboy", + "age" : 11 + } + } + ], + "performance" : [ + { + "2020" : 4.5 + }, + { + "2021" : 4.8 + } + ] +} \ No newline at end of file From df30c2986f9eb417304da57228ba4b66c64217c7 Mon Sep 17 00:00:00 2001 From: Bogdan Pistol Date: Thu, 15 Dec 2022 06:03:07 +0200 Subject: [PATCH 25/25] https://jira.baeldung.com/browse/BAEL-5871 added sample code used in article (#12986) --- .../ConvertCharToIntUnitTest.java | 47 +++++++++++++++++++ .../ConvertIntToCharUnitTest.java | 36 ++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertCharToIntUnitTest.java create mode 100644 core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertIntToCharUnitTest.java diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertCharToIntUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertCharToIntUnitTest.java new file mode 100644 index 0000000000..75826cd7be --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertCharToIntUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.convertinttochar; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class ConvertCharToIntUnitTest { + + @Test + public void givenAChar_whenUsingGetNumericValue_thenExpectedNumericType() { + //char value + char c = '7'; + // using getNumericValue + int n = Character.getNumericValue(c); + + assertEquals(7, n); + } + + @Test + public void givenAChar_whenSubtracting0_thenExpectedNumericType() { + //char value + char c = '7'; + // subtract '0' from the char + int n = c - '0'; + + assertEquals(7, n); + } + + @Test + public void givenAChar_whenUsingParseInt_thenExpectedNumericType() { + //char value + char c = '7'; + // using parseInt + int n = Integer.parseInt(String.valueOf(c)); + + assertEquals(7, n); + } + + @Test + public void givenAChar_whenCastingFromCharToInt_thenExpectedUnicodeRepresentation() { + //char value + char c = '7'; + //cast to int + assertEquals(55, (int) c); + } + +} diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertIntToCharUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertIntToCharUnitTest.java new file mode 100644 index 0000000000..276bcbc55b --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/convertinttochar/ConvertIntToCharUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.convertinttochar; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class ConvertIntToCharUnitTest { + + @Test + public void givenAnInt_whenAdding0_thenExpectedCharType() { + int num = 7; + //add '0' to convert int to char + char c = (char) ('0' + num); + + assertEquals('7', c); + } + + @Test + public void givenAnInt_whenUsingForDigit_thenExpectedCharType() { + int num = 7; + // Convert using forDigit() method + char c = Character.forDigit(num, 10); + + assertEquals('7', c); + } + + @Test + public void givenAnInt_whenUsingToString_thenExpectedCharType() { + int num = 7; + //convert int to char using toString() + char c = Integer.toString(num) + .charAt(0); + + assertEquals('7', c); + } +}