Merge branch 'eugenp:master' into master

This commit is contained in:
edizor 2022-12-15 15:42:03 +08:00 committed by GitHub
commit 974b27305a
254 changed files with 3139 additions and 810 deletions

View File

@ -63,4 +63,4 @@
<surefire.plugin.version>3.0.0-M5</surefire.plugin.version>
</properties>
</project>
</project>

View File

@ -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();
}

View File

@ -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";
}
}

View File

@ -0,0 +1,9 @@
package com.baeldung.instanceofalternative.model;
public class Dinosaur {
public String move() {
return "default movement";
}
}

View File

@ -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";
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.instanceofalternative.visitorspattern;
public interface Dino {
String move(Visitor dinoMove);
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,9 @@
package com.baeldung.instanceofalternative.visitorspattern;
public interface Visitor {
String visit(Anatotitan anatotitan);
String visit(Euraptor euraptor);
}

View File

@ -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();
}
}

View File

@ -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 "";
}
}

View File

@ -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 "";
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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));
}
}

View File

@ -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)

View File

@ -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)

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-jvm-3</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>core-java-jvm-3</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung.core-java-modules</groupId>
<artifactId>core-java-modules</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
</dependencies>
</project>

View File

@ -0,0 +1,10 @@
package com.baeldung.anonymousclass;
public class EmailSenderService implements SenderService {
@Override
public String callSender(Sender sender) {
return sender.send("Email Notification");
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.anonymousclass;
public interface Sender {
String send(final String message);
}

View File

@ -0,0 +1,7 @@
package com.baeldung.anonymousclass;
public interface SenderService {
String callSender(Sender sender);
}

View File

@ -0,0 +1,10 @@
package com.baeldung.anonymousclass;
public class SmsSenderService implements SenderService {
@Override
public String callSender(Sender sender) {
return sender.send("SMS Notification");
}
}

View File

@ -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");
}
}

View File

@ -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;
}
}

View File

@ -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<Cat> 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 <T extends Animal & Comparable<T>> void order(List<T> list) {
list.sort(Comparable::compareTo);
}
}

View File

@ -0,0 +1,41 @@
package com.baeldung.generics;
import java.util.Objects;
class Cat extends Animal implements Comparable<Cat> {
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);
}
}

View File

@ -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 <T> void print(T item) {
System.out.println(item);
}
public static void swap(List<?> list, int src, int des) {
swapHelper(list, src, des);
}
private static <E> void swapHelper(List<E> list, int src, int des) {
list.set(src, list.set(des, list.get(src)));
}
public static <E> List<E> mergeTypeParameter(List<? extends E> listOne, List<? extends E> listTwo) {
return Stream.concat(listOne.stream(), listTwo.stream())
.collect(Collectors.toList());
}
public static <E> List<? extends E> mergeWildcard(List<? extends E> listOne, List<? extends E> listTwo) {
return Stream.concat(listOne.stream(), listTwo.stream())
.collect(Collectors.toList());
}
public static long sum(List<Number> numbers) {
return numbers.stream()
.mapToLong(Number::longValue)
.sum();
}
public static <T extends Number> long sumTypeParameter(List<T> numbers) {
return numbers.stream()
.mapToLong(Number::longValue)
.sum();
}
public static long sumWildcard(List<? extends Number> numbers) {
return numbers.stream()
.mapToLong(Number::longValue)
.sum();
}
public static void addNumber(List<? super Integer> list, Integer number) {
list.add(number);
}
}

View File

@ -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<Number> numbers1 = new ArrayList<>();
numbers1.add(5);
numbers1.add(10L);
List<Number> numbers2 = new ArrayList<>();
numbers2.add(15f);
numbers2.add(20.0);
List<Number> numbersMerged = CollectionUtils.mergeTypeParameter(numbers1, numbers2);
logger.info("Merged numbers: {}", numbersMerged);
List<Number> 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<Integer> 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);
}
}

View File

@ -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";
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -38,4 +38,4 @@
</resources>
</build>
</project>
</project>

View File

@ -73,6 +73,7 @@
<module>core-java-jndi</module>
<module>core-java-jvm</module>
<module>core-java-jvm-2</module>
<module>core-java-jvm-3</module>
<module>core-java-lambdas</module>
<module>core-java-lang</module>
<module>core-java-lang-2</module>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.dddcontexts.infrastructure</groupId>
<artifactId>infrastructure</artifactId>
<artifactId>ddd-contexts-infrastructure</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
@ -18,17 +18,17 @@
<dependencies>
<dependency>
<groupId>com.baeldung.dddcontexts.shippingcontext</groupId>
<artifactId>shippingcontext</artifactId>
<artifactId>ddd-contexts-shippingcontext</artifactId>
<version>${appmodules.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.dddcontexts.ordercontext</groupId>
<artifactId>ordercontext</artifactId>
<artifactId>ddd-contexts-ordercontext</artifactId>
<version>${appmodules.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.dddcontexts.sharedkernel</groupId>
<artifactId>sharedkernel</artifactId>
<artifactId>ddd-contexts-sharedkernel</artifactId>
<version>${appmodules.version}</version>
</dependency>
</dependencies>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.dddcontexts.mainapp</groupId>
<artifactId>mainapp</artifactId>
<artifactId>ddd-contexts-mainapp</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
@ -18,7 +18,7 @@
<dependencies>
<dependency>
<groupId>com.baeldung.dddcontexts.infrastructure</groupId>
<artifactId>infrastructure</artifactId>
<artifactId>ddd-contexts-infrastructure</artifactId>
<version>${appmodules.version}</version>
</dependency>
</dependencies>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.dddcontexts.ordercontext</groupId>
<artifactId>ordercontext</artifactId>
<artifactId>ddd-contexts-ordercontext</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
@ -17,7 +17,7 @@
<dependencies>
<dependency>
<groupId>com.baeldung.dddcontexts.sharedkernel</groupId>
<artifactId>sharedkernel</artifactId>
<artifactId>ddd-contexts-sharedkernel</artifactId>
<version>${appmodules.version}</version>
</dependency>
</dependencies>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.dddcontexts.sharedkernel</groupId>
<artifactId>sharedkernel</artifactId>
<artifactId>ddd-contexts-sharedkernel</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.dddcontexts.shippingcontext</groupId>
<artifactId>shippingcontext</artifactId>
<artifactId>ddd-contexts-shippingcontext</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
@ -17,7 +17,7 @@
<dependencies>
<dependency>
<groupId>com.baeldung.dddcontexts.sharedkernel</groupId>
<artifactId>sharedkernel</artifactId>
<artifactId>ddd-contexts-sharedkernel</artifactId>
<version>${appmodules.version}</version>
</dependency>
</dependencies>

View File

@ -16,11 +16,11 @@
</parent>
<modules>
<module>sharedkernel</module>
<module>infrastructure</module>
<module>shippingcontext</module>
<module>ordercontext</module>
<module>mainapp</module>
<module>ddd-contexts-sharedkernel</module>
<module>ddd-contexts-infrastructure</module>
<module>ddd-contexts-shippingcontext</module>
<module>ddd-contexts-ordercontext</module>
<module>ddd-contexts-mainapp</module>
</modules>
<dependencyManagement>

View File

@ -10,7 +10,7 @@
<groupId>com.baeldung</groupId>
<artifactId>parent-spring-5</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent-spring-5</relativePath>
<relativePath>../../parent-spring-5</relativePath>
</parent>
<dependencies>

View File

@ -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<ClassicHttpResponse> {
@Override
public ClassicHttpResponse handleResponse(ClassicHttpResponse response) {
return response;
}
}

View File

@ -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));
}
}
}

View File

@ -108,6 +108,17 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>

View File

@ -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<String> getValuesInObject(JSONObject jsonObject, String key) {
List<String> 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<String> getValuesInArray(JSONArray jsonArray, String key) {
List<String> 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<String> 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<String> values = getValuesInObject(jsonObject, key);
return values.size();
}
}

View File

@ -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<String> 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);
}
}

View File

@ -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
}
]
}

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.daomodule</groupId>
<artifactId>daomodule</artifactId>
<artifactId>maven-daomodule</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.entitymodule</groupId>
<artifactId>entitymodule</artifactId>
<artifactId>maven-entitymodule</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.mainappmodule</groupId>
<artifactId>mainappmodule</artifactId>
<artifactId>maven-mainappmodule</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
@ -17,17 +17,17 @@
<dependencies>
<dependency>
<groupId>com.baeldung.entitymodule</groupId>
<artifactId>entitymodule</artifactId>
<artifactId>maven-entitymodule</artifactId>
<version>${entitymodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.daomodule</groupId>
<artifactId>daomodule</artifactId>
<artifactId>maven-daomodule</artifactId>
<version>${daomodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.userdaomodule</groupId>
<artifactId>userdaomodule</artifactId>
<artifactId>maven-userdaomodule</artifactId>
<version>${userdaomodule.version}</version>
</dependency>
</dependencies>

View File

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.userdaomodule</groupId>
<artifactId>userdaomodule</artifactId>
<artifactId>maven-userdaomodule</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

View File

@ -17,10 +17,10 @@
</parent>
<modules>
<module>entitymodule</module>
<module>daomodule</module>
<module>userdaomodule</module>
<module>mainappmodule</module>
<module>maven-entitymodule</module>
<module>maven-daomodule</module>
<module>maven-userdaomodule</module>
<module>maven-mainappmodule</module>
</modules>
<build>

View File

@ -13,8 +13,8 @@
</parent>
<modules>
<module>project-a</module>
<module>project-b</module>
<module>version-collision-project-a</module>
<module>version-collision-project-b</module>
<module>project-collision</module>
</modules>

View File

@ -14,7 +14,7 @@
<dependencies>
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>project-a</artifactId>
<artifactId>version-collision-project-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- uncomment to exclude guava transitive artifact from module -->
<!-- <exclusions> -->
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>project-b</artifactId>
<artifactId>version-collision-project-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@ -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">
<modelVersion>4.0.0</modelVersion>
<artifactId>project-a</artifactId>
<artifactId>version-collision-project-a</artifactId>
<parent>
<artifactId>version-collision</artifactId>

View File

@ -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">
<modelVersion>4.0.0</modelVersion>
<artifactId>project-b</artifactId>
<artifactId>version-collision-project-b</artifactId>
<parent>
<artifactId>version-collision</artifactId>

View File

@ -13,8 +13,8 @@
</parent>
<modules>
<module>child-a</module>
<module>child-b</module>
<module>version-overriding-child-a</module>
<module>version-overriding-child-b</module>
</modules>
<build>

View File

@ -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">
<modelVersion>4.0.0</modelVersion>
<artifactId>child-a</artifactId>
<artifactId>version-overriding-child-a</artifactId>
<packaging>pom</packaging>
<parent>

View File

@ -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">
<modelVersion>4.0.0</modelVersion>
<artifactId>child-b</artifactId>
<artifactId>version-overriding-child-b</artifactId>
<parent>
<artifactId>version-overriding-plugins</artifactId>

View File

@ -24,9 +24,9 @@
</dependencies>
<properties>
<spring.version>5.3.23</spring.version>
<spring.version>5.3.24</spring.version>
<spring-security.version>5.7.3</spring-security.version>
<spring-boot-starter-test.version>1.5.10.RELEASE</spring-boot-starter-test.version>
</properties>
</project>
</project>

View File

@ -0,0 +1 @@
### Relevant Articles:

View File

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<artifactId>blaze-persistence</artifactId>
<version>1.0-SNAPSHOT</version>
<name>blaze-persistence</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<blaze-persistence.version>1.6.8</blaze-persistence.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-bom</artifactId>
<version>${blaze-persistence.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Core dependencies -->
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-core-api</artifactId>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-core-impl</artifactId>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-integration-hibernate-5.4</artifactId>
</dependency>
<!-- Entity View dependencies -->
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-entity-view-api</artifactId>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-entity-view-impl</artifactId>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-entity-view-processor</artifactId>
</dependency>
<!-- Spring integration dependencies -->
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-integration-entity-view-spring</artifactId>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-integration-spring-data-2.4</artifactId>
</dependency>
<!-- Spring dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

Some files were not shown because too many files have changed in this diff Show More