diff --git a/.gitignore b/.gitignore index 2edea19340..be3bc420c5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ bin/ *.class # Package Files # +*.jar *.war *.ear diff --git a/algorithms-miscellaneous-1/.gitignore b/algorithms-miscellaneous-1/.gitignore deleted file mode 100644 index 30b2b7442c..0000000000 --- a/algorithms-miscellaneous-1/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target/ -.settings/ -.classpath -.project \ No newline at end of file diff --git a/algorithms-miscellaneous-1/README.md b/algorithms-miscellaneous-1/README.md index 479c2792f6..57f5a5d478 100644 --- a/algorithms-miscellaneous-1/README.md +++ b/algorithms-miscellaneous-1/README.md @@ -1,18 +1,9 @@ ## Relevant articles: -- [Validating Input With Finite Automata in Java](http://www.baeldung.com/java-finite-automata) -- [Example of Hill Climbing Algorithm](http://www.baeldung.com/java-hill-climbing-algorithm) -- [Monte Carlo Tree Search for Tic-Tac-Toe Game](http://www.baeldung.com/java-monte-carlo-tree-search) -- [Binary Search Algorithm in Java](http://www.baeldung.com/java-binary-search) -- [Introduction to Minimax Algorithm](http://www.baeldung.com/java-minimax-algorithm) -- [How to Calculate Levenshtein Distance in Java?](http://www.baeldung.com/java-levenshtein-distance) -- [How to Find the Kth Largest Element in Java](http://www.baeldung.com/java-kth-largest-element) -- [Multi-Swarm Optimization Algorithm in Java](http://www.baeldung.com/java-multi-swarm-algorithm) -- [String Search Algorithms for Large Texts](http://www.baeldung.com/java-full-text-search-algorithms) -- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters) -- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element) -- [Calculate Factorial in Java](https://www.baeldung.com/java-calculate-factorial) -- [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) -- [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) -- [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) -- [Generate Combinations in Java](https://www.baeldung.com/java-combinations-algorithm) +- [Validating Input With Finite Automata in Java](https://www.baeldung.com/java-finite-automata) +- [Example of Hill Climbing Algorithm](https://www.baeldung.com/java-hill-climbing-algorithm) +- [Monte Carlo Tree Search for Tic-Tac-Toe Game](https://www.baeldung.com/java-monte-carlo-tree-search) +- [Binary Search Algorithm in Java](https://www.baeldung.com/java-binary-search) +- [Introduction to Minimax Algorithm](https://www.baeldung.com/java-minimax-algorithm) +- [How to Calculate Levenshtein Distance in Java?](https://www.baeldung.com/java-levenshtein-distance) +- [How to Find the Kth Largest Element in Java](https://www.baeldung.com/java-kth-largest-element) \ No newline at end of file diff --git a/algorithms-miscellaneous-4/README.md b/algorithms-miscellaneous-4/README.md new file mode 100644 index 0000000000..fabb4d29b8 --- /dev/null +++ b/algorithms-miscellaneous-4/README.md @@ -0,0 +1,9 @@ +## Relevant articles: + +- [Multi-Swarm Optimization Algorithm in Java](https://www.baeldung.com/java-multi-swarm-algorithm) +- [String Search Algorithms for Large Texts](https://www.baeldung.com/java-full-text-search-algorithms) +- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters) +- [Find the Middle Element of a Linked List](https://www.baeldung.com/java-linked-list-middle-element) +- [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings) +- [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters) +- [Permutations of an Array in Java](https://www.baeldung.com/java-array-permutations) \ No newline at end of file diff --git a/algorithms-miscellaneous-4/pom.xml b/algorithms-miscellaneous-4/pom.xml new file mode 100644 index 0000000000..8fd8f807ba --- /dev/null +++ b/algorithms-miscellaneous-4/pom.xml @@ -0,0 +1,51 @@ + + 4.0.0 + algorithms-miscellaneous-4 + 0.0.1-SNAPSHOT + algorithms-miscellaneous-4 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + com.google.guava + guava + ${guava.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + 3.9.0 + 27.0.1-jre + + + \ No newline at end of file diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/permutation/Permutation.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/permutation/Permutation.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/permutation/Permutation.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/permutation/Permutation.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/SubstringPalindrome.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/SubstringPalindrome.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/SubstringPalindrome.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/SubstringPalindrome.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java b/algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java similarity index 100% rename from algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java rename to algorithms-miscellaneous-4/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java diff --git a/algorithms-miscellaneous-4/src/main/resources/logback.xml b/algorithms-miscellaneous-4/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/algorithms-miscellaneous-4/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/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/SubstringPalindromeUnitTest.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/SubstringPalindromeUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/SubstringPalindromeUnitTest.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/string/SubstringPalindromeUnitTest.java diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/support/MayFailRule.java b/algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/support/MayFailRule.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/support/MayFailRule.java rename to algorithms-miscellaneous-4/src/test/java/com/baeldung/algorithms/support/MayFailRule.java diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java similarity index 57% rename from algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java index 4d885a6b3a..002d4997f4 100644 --- a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java +++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorter.java @@ -2,6 +2,7 @@ package com.baeldung.bucketsort; import java.util.ArrayList; import java.util.Comparator; +import java.util.LinkedList; import java.util.List; public class IntegerBucketSorter implements Sorter { @@ -28,43 +29,40 @@ public class IntegerBucketSorter implements Sorter { } private List concatenateSortedBuckets(List> buckets){ - List sortedArray = new ArrayList<>(); - int index = 0; + List sortedArray = new LinkedList<>(); for(List bucket : buckets){ - for(int number : bucket){ - sortedArray.add(index++, number); - } + sortedArray.addAll(bucket); } return sortedArray; } private List> splitIntoUnsortedBuckets(List initialList){ - final int[] codes = createHashes(initialList); + final int max = findMax(initialList); + final int numberOfBuckets = (int) Math.sqrt(initialList.size()); - List> buckets = new ArrayList<>(codes[1]); - for(int i = 0; i < codes[1]; i++) buckets.add(new ArrayList<>()); + List> buckets = new ArrayList<>(); + for(int i = 0; i < numberOfBuckets; i++) buckets.add(new ArrayList<>()); //distribute the data for (int i : initialList) { - buckets.get(hash(i, codes)).add(i); + buckets.get(hash(i, max, numberOfBuckets)).add(i); } return buckets; } - private int[] createHashes(List input){ - int m = input.get(0); - for (int i = 1; i < input.size(); i++) { - if (m < input.get(i)) { - m = input.get(i); - } + private int findMax(List input){ + int m = Integer.MIN_VALUE; + for (int i : input){ + m = Math.max(i, m); } - return new int[]{m, (int) Math.sqrt(input.size())}; + return m; } - private static int hash(int i, int[] code) { - return (int) ((double) i / code[0] * (code[1] - 1)); + private static int hash(int i, int max, int numberOfBuckets) { + return (int) ((double) i / max * (numberOfBuckets - 1)); } + } diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/bucketsort/Sorter.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/bucketsort/Sorter.java similarity index 100% rename from algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/bucketsort/Sorter.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/bucketsort/Sorter.java diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorterUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorterUnitTest.java similarity index 100% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorterUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/bucketsort/IntegerBucketSorterUnitTest.java diff --git a/bazel/bazelapp/pom.xml b/bazel/bazelapp/pom.xml index 9c9fb59619..e56cc06ef4 100644 --- a/bazel/bazelapp/pom.xml +++ b/bazel/bazelapp/pom.xml @@ -16,14 +16,17 @@ com.baeldung bazelgreeting - 1.0.0-SNAPSHOT + ${bazelgreeting.version} org.apache.commons commons-lang3 - 3.9 + ${commons-lang3.version} + + 1.0.0-SNAPSHOT + \ No newline at end of file diff --git a/core-java-modules/core-java-io-files/.gitignore b/core-java-modules/core-java-io-files/.gitignore new file mode 100644 index 0000000000..c61d35324d --- /dev/null +++ b/core-java-modules/core-java-io-files/.gitignore @@ -0,0 +1,5 @@ +0.* + +# Files generated by integration tests +# *.txt +/temp \ No newline at end of file diff --git a/core-java-modules/core-java-io-files/README.md b/core-java-modules/core-java-io-files/README.md new file mode 100644 index 0000000000..80c0dc941e --- /dev/null +++ b/core-java-modules/core-java-io-files/README.md @@ -0,0 +1,6 @@ +========= + +## Core Java IO Files Cookbooks and Examples + +### Relevant Articles: +- [How to Avoid the Java FileNotFoundException When Loading Resources](https://www.baeldung.com/java-classpath-resource-cannot-be-opened) \ No newline at end of file diff --git a/core-java-modules/core-java-io-files/pom.xml b/core-java-modules/core-java-io-files/pom.xml new file mode 100644 index 0000000000..0f4b5eea1d --- /dev/null +++ b/core-java-modules/core-java-io-files/pom.xml @@ -0,0 +1,296 @@ + + 4.0.0 + core-java-io-files + 0.1.0-SNAPSHOT + core-java-io-files + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + + net.sourceforge.collections + collections-generic + ${collections-generic.version} + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + commons-io + commons-io + ${commons-io.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + org.decimal4j + decimal4j + ${decimal4j.version} + + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + + + org.unix4j + unix4j-command + ${unix4j.version} + + + com.googlecode.grep4j + grep4j + ${grep4j.version} + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + log4j + log4j + ${log4j.version} + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + org.assertj + assertj-core + ${assertj.version} + test + + + com.jayway.awaitility + awaitility + ${avaitility.version} + test + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.javamoney + moneta + ${moneta.version} + + + org.owasp.esapi + esapi + ${esapi.version} + + + com.sun.messaging.mq + fscontext + ${fscontext.version} + + + com.codepoetics + protonpack + ${protonpack.version} + + + one.util + streamex + ${streamex.version} + + + io.vavr + vavr + ${vavr.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator-annprocess.version} + + + org.hsqldb + hsqldb + ${hsqldb.version} + runtime + + + + org.asynchttpclient + async-http-client + ${async-http-client.version} + + + com.opencsv + opencsv + ${opencsv.version} + test + + + + org.apache.tika + tika-core + ${tika.version} + + + net.sf.jmimemagic + jmimemagic + ${jmime-magic.version} + + + + + core-java-io-files + + + src/main/resources + true + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + java + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + -Xmx300m + -XX:+UseParallelGC + -classpath + + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven-jar-plugin.version} + + + + true + com.baeldung.resource.MyResourceLoader + + + + + + + + + + integration + + + + org.codehaus.mojo + exec-maven-plugin + + + + run-benchmarks + + none + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + + + + + + 1.55 + 1.10 + 3.6.1 + 1.0.3 + 4.1 + 4.01 + 0.4 + 1.8.7 + 4.6-b01 + 1.13 + 0.6.5 + 0.9.0 + 4.1 + + 3.6.1 + 1.7.0 + + + 3.0.0-M1 + 2.4.0 + 2.1.0.1 + 1.19 + 2.4.5 + + 1.18 + 0.1.5 + 3.1.0 + + + + diff --git a/core-java-modules/core-java-io-files/src/main/java/com/baeldung/resource/MyResourceLoader.java b/core-java-modules/core-java-io-files/src/main/java/com/baeldung/resource/MyResourceLoader.java new file mode 100644 index 0000000000..7512b177df --- /dev/null +++ b/core-java-modules/core-java-io-files/src/main/java/com/baeldung/resource/MyResourceLoader.java @@ -0,0 +1,42 @@ +package com.baeldung.resource; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.stream.Collectors; + +public class MyResourceLoader { + + private void loadFileWithReader() throws IOException { + + try (FileReader fileReader = new FileReader("src/main/resources/input.txt"); + BufferedReader reader = new BufferedReader(fileReader)) { + String contents = reader.lines() + .collect(Collectors.joining(System.lineSeparator())); + System.out.println(contents); + } + + } + + private void loadFileAsResource() throws IOException { + + try (InputStream inputStream = getClass().getResourceAsStream("/input.txt"); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String contents = reader.lines() + .collect(Collectors.joining(System.lineSeparator())); + System.out.println(contents); + } + } + + public static void main(String[] args) throws IOException { + + MyResourceLoader resourceLoader = new MyResourceLoader(); + + resourceLoader.loadFileAsResource(); + resourceLoader.loadFileWithReader(); + + } + +} diff --git a/core-java-modules/core-java-io-files/src/main/resources/input.txt b/core-java-modules/core-java-io-files/src/main/resources/input.txt new file mode 100644 index 0000000000..650da894e8 --- /dev/null +++ b/core-java-modules/core-java-io-files/src/main/resources/input.txt @@ -0,0 +1,45 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. In lacus enim, scelerisque id sapien ut, semper euismod quam. Nunc ullamcorper semper blandit. Praesent quis quam mollis, iaculis lectus a, fringilla leo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis vitae auctor mauris. Pellentesque eu pellentesque lorem, vel ultricies libero. Pellentesque vestibulum sagittis eros. In vestibulum lacus elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. + +Vivamus pharetra lacus fringilla nisl molestie eleifend. Donec et dolor non quam mattis mattis. Proin malesuada maximus elit id semper. Donec facilisis dolor ut feugiat auctor. Proin accumsan semper consectetur. Vivamus facilisis odio vel bibendum imperdiet. Sed rutrum nisi nec nisi interdum fringilla. Aliquam laoreet velit ullamcorper egestas ultrices. Aliquam ultricies sem sed orci interdum, eu porta purus malesuada. Sed accumsan, nunc ut maximus rhoncus, arcu ante pretium ex, non ultrices magna nisi et velit. Pellentesque tempor mi quis lacus consectetur, quis imperdiet enim efficitur. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + +Nunc sed maximus erat. Aenean imperdiet finibus massa ac aliquam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis dignissim cursus purus, eu tempus urna. Nunc sed mauris scelerisque, luctus eros ut, viverra nisi. Maecenas congue sed ligula in eleifend. Praesent nec dignissim enim, dictum efficitur massa. Nullam eros dui, rutrum quis aliquam accumsan, sollicitudin cursus eros. Phasellus euismod, lorem vitae vehicula ullamcorper, leo lorem vestibulum magna, vitae malesuada libero ipsum id lorem. Aenean finibus turpis facilisis tortor bibendum, vitae dignissim dolor dictum. Ut quis ornare nisi, non rutrum sapien. + +Etiam placerat, est eget placerat imperdiet, neque urna tristique est, a dictum nisl dolor vitae leo. Vivamus porttitor mi vitae volutpat ultrices. Quisque at ante porta mauris ultricies iaculis. Phasellus iaculis sollicitudin urna nec facilisis. Suspendisse dapibus vulputate scelerisque. Fusce felis diam, eleifend in tristique in, malesuada a purus. Suspendisse euismod ipsum sed urna imperdiet, quis venenatis lacus dapibus. Maecenas vitae est vel sem fringilla ornare at ut mi. Quisque porta, nulla at rutrum fringilla, mi ligula egestas libero, ac convallis elit diam et sapien. Vestibulum purus tortor, ornare ut enim sed, mattis lobortis erat. Maecenas ac ante tincidunt, euismod mauris a, fermentum diam. Nullam arcu est, consequat sed enim in, bibendum aliquet velit. Donec bibendum magna ac augue sagittis vehicula. Curabitur nec mauris eu augue bibendum volutpat. Fusce fringilla varius fringilla. + +Aliquam faucibus massa non orci accumsan, porta consectetur diam vulputate. Nullam nec erat mollis, imperdiet libero nec, tincidunt neque. Aenean varius purus nec est auctor, sed vulputate libero varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vel neque elit. Donec vulputate fermentum nulla, ut aliquam neque tempor in. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec vel venenatis est. Suspendisse luctus elit quis dui dapibus, id sodales dolor cursus. Curabitur ut vehicula dui. Fusce aliquet est et ante feugiat, et tempus ex congue. Nunc eget dapibus leo. Nunc eu accumsan diam. Suspendisse risus eros, rutrum et volutpat in, consequat in nulla. Suspendisse id felis a orci accumsan iaculis. + +Duis tincidunt diam eget tortor aliquet sodales. Etiam sodales purus ac urna mollis, et cursus enim porttitor. Nulla viverra ligula nunc, ornare condimentum felis posuere sed. Fusce aliquet pretium sagittis. Sed ac mi elementum massa dictum ornare. Integer quis dapibus lectus. Curabitur in rhoncus justo, et vulputate justo. Integer eget efficitur felis. + +Sed finibus vel tortor ac egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vestibulum nulla mi, blandit efficitur sapien fermentum eu. Integer sed turpis eros. Phasellus sed aliquam ligula. Etiam dictum quam in dapibus mattis. Donec et tristique quam. Pellentesque gravida luctus dolor, eu ornare sapien. Donec justo ante, lacinia non sem et, ultricies dignissim nibh. Vivamus eu nisl et magna pulvinar efficitur. Sed at vehicula lectus, sit amet luctus sem. Morbi vehicula sapien nisi, nec sagittis orci vestibulum et. + +Praesent non finibus diam. Quisque sit amet nisl vitae augue lobortis commodo. Morbi ullamcorper, tortor id ornare maximus, erat ipsum ullamcorper ipsum, in imperdiet diam sem vel erat. Sed pellentesque quis ex sed volutpat. Vestibulum volutpat diam ac dignissim sollicitudin. Praesent at luctus ex, at volutpat dui. Nunc nulla dui, lobortis et pharetra quis, efficitur in turpis. Donec sodales auctor purus id mollis. Sed auctor eu erat eget bibendum. Mauris tincidunt ornare neque id consequat. Suspendisse non massa ante. Quisque velit enim, rhoncus at erat eget, scelerisque placerat elit. Donec finibus luctus dolor. In sed eleifend lorem. Sed tempor ullamcorper lorem nec tristique. Fusce nec volutpat neque, id elementum est. + +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum mattis elementum tellus, vitae maximus nulla eleifend ut. Vestibulum eu nibh vulputate, posuere felis eget, aliquet ex. Nullam leo ex, lacinia a ante ac, accumsan efficitur ligula. Vestibulum ornare gravida tempus. Proin rhoncus felis sit amet dolor commodo facilisis. Integer aliquet, diam sed pharetra feugiat, sem massa mollis orci, eget pretium libero nunc at quam. Ut rhoncus quam vitae massa hendrerit, ornare condimentum odio varius. Donec odio sapien, tristique eget libero ac, interdum facilisis odio. Phasellus nec mauris vel dolor semper mattis et quis ligula. Donec nec porttitor nunc. Integer maximus quam vitae sem gravida, ut commodo ex porttitor. + +Sed cursus nisi turpis, vel laoreet massa blandit ut. Cras posuere velit nulla, nec pellentesque ipsum dignissim eget. Donec pharetra, ex et commodo viverra, leo dolor dapibus tellus, vel dignissim est sem ac lectus. Quisque a arcu dapibus, aliquet magna sed, rhoncus neque. Integer suscipit, nulla ac varius lacinia, orci metus scelerisque neque, a laoreet nibh risus vitae dolor. Pellentesque felis metus, pulvinar vel cursus id, ultrices non purus. Donec mi lectus, faucibus sit amet nunc at, sagittis pretium lectus. Fusce nec purus arcu. Mauris neque neque, blandit eget mi at, auctor tempus orci. Mauris sapien lorem, luctus nec tellus non, porttitor aliquam dui. + +Mauris non ex risus. Aliquam imperdiet in eros eget placerat. Sed congue sed sapien porta sollicitudin. Phasellus tempor hendrerit metus vitae tincidunt. Suspendisse congue nisi sed augue dapibus, at pretium ante mollis. Cras non posuere nulla. Proin malesuada finibus magna vel iaculis. Cras in dapibus lorem. Pellentesque volutpat dolor sit amet magna tincidunt mollis. Nunc et lectus sodales, accumsan est vitae, ornare augue. Maecenas malesuada arcu leo, eget blandit lectus porttitor et. Nam aliquam sapien sit amet purus consequat lobortis. Aenean varius, augue porta dignissim efficitur, felis velit dapibus leo, tincidunt ultricies magna felis id ligula. Duis hendrerit, lectus eu elementum euismod, elit lectus consequat mi, sit amet egestas justo massa ut urna. Proin eleifend interdum ultrices. + +Donec lacinia orci pharetra ornare tincidunt. Nulla facilisi. Maecenas malesuada dui ac elit sagittis tincidunt id dictum dolor. Quisque lobortis purus ac metus volutpat viverra. Proin finibus sapien ut odio semper consectetur. Sed gravida luctus egestas. Mauris pretium volutpat elit, at commodo arcu sagittis nec. Ut condimentum fringilla urna ac dignissim. Cras aliquam metus pulvinar, pulvinar nibh at, placerat arcu. Nulla ornare tortor sed lectus mollis, vitae fringilla tellus egestas. Vivamus efficitur tincidunt sapien, sed finibus mi congue eu. Nullam magna velit, lacinia vitae ligula eget, molestie consectetur felis. Suspendisse varius turpis orci, ac laoreet arcu accumsan sed. Fusce quis fermentum lacus, nec varius libero. Pellentesque ac odio ut justo lobortis elementum sit amet vehicula lorem. Nulla interdum nulla eget mi tristique, vitae egestas nunc egestas. + +Curabitur commodo libero eu elit tincidunt, quis placerat risus vehicula. Vestibulum vehicula id nunc iaculis fermentum. Aenean semper, tellus ac semper rutrum, justo lorem feugiat leo, quis vulputate neque dui non ligula. Etiam egestas, enim eget tempor porta, nunc est tristique ante, vel suscipit massa lorem vel diam. Donec faucibus ante id turpis rhoncus congue. Nullam laoreet, diam efficitur scelerisque consequat, ligula leo ultrices est, non fermentum elit mauris ut dolor. Morbi non porttitor lorem. Sed volutpat sapien et lorem porttitor, ultricies ultricies tellus congue. Mauris sodales, tortor nec sagittis finibus, dui odio aliquet nibh, in luctus sapien massa eu risus. Nulla in est sed ante molestie vehicula vel nec lectus. Fusce maximus a quam eget aliquam. Vivamus pulvinar quis nisi a maximus. Proin cursus lacus sapien, et hendrerit elit pretium a. Donec tellus lectus, consectetur id dolor a, luctus rutrum libero. Suspendisse auctor scelerisque dui, nec pellentesque felis viverra nec. Cras elit ex, varius sed pulvinar sed, suscipit ultrices lacus. + +Vivamus eu luctus lectus. Maecenas congue magna orci, quis semper nulla blandit vel. Phasellus dignissim risus placerat lacinia sagittis. Praesent at gravida nisi, at pulvinar diam. Nulla egestas lectus sed felis facilisis egestas. Curabitur posuere gravida urna eu vestibulum. Pellentesque at dolor gravida, placerat quam sit amet, fermentum ligula. Morbi fringilla, mi eget mollis dictum, neque dolor ullamcorper leo, a rutrum libero ipsum eget orci. Curabitur consectetur iaculis vestibulum. Suspendisse ultricies ligula et neque lacinia luctus. Sed dignissim neque id eros sollicitudin pellentesque. + +Donec et magna quis lectus pharetra finibus a fringilla sapien. Phasellus accumsan, erat eu sodales cursus, tortor elit dapibus risus, ut ornare neque arcu in tellus. Nam ac vehicula diam, at aliquam nisl. Cras in sem eget nisi ultrices rutrum sit amet eu velit. Sed molestie tellus eget ante scelerisque, sit amet pulvinar neque fringilla. Nunc volutpat facilisis egestas. Cras sodales dui ac massa egestas, in mattis leo rhoncus. Pellentesque vitae urna vehicula ipsum sodales suscipit. Sed commodo tempus fringilla. + +Etiam egestas elit vitae mi maximus fringilla quis eget libero. Fusce finibus ultrices tellus at molestie. Pellentesque posuere blandit elementum. Etiam eu erat eu urna hendrerit euismod. Nulla quis lectus rhoncus, ultricies urna eget, pretium neque. Cras sit amet ipsum sit amet purus rutrum ultricies nec vitae tortor. Sed tempor dapibus augue in pulvinar. Ut pretium sapien in malesuada accumsan. Donec eget ultrices erat, ut efficitur ligula. Sed posuere mauris est, nec convallis ipsum tempus non. + +Duis a ullamcorper ante. Quisque eu ultricies metus, at aliquet odio. Nullam tempus molestie augue ut varius. Fusce purus eros, dictum nec finibus sed, sodales et diam. Suspendisse sed mi purus. Donec eleifend ipsum diam, nec fringilla enim laoreet non. Phasellus condimentum, magna sit amet porttitor suscipit, arcu risus lobortis dolor, ac fringilla nibh nisl vel purus. Phasellus facilisis posuere orci sit amet tempus. Nam nec enim maximus, rhoncus felis a, rutrum diam. + +Suspendisse potenti. Donec vel tempor neque. In aliquet nulla in eleifend bibendum. Sed sapien sem, finibus in sodales vitae, euismod in sem. Phasellus nec elit a erat pulvinar semper. Aliquam luctus nisl in libero molestie aliquam. Nunc ac ornare felis. Ut non mauris ut ipsum rhoncus pretium. Curabitur tristique lacus a sagittis aliquam. Morbi vel volutpat tellus. Maecenas volutpat, lacus sed tempus imperdiet, eros tellus volutpat nisi, a egestas augue nulla quis arcu. In sollicitudin imperdiet efficitur. Suspendisse viverra aliquet nisi, congue ultrices arcu hendrerit in. + +Maecenas vitae vestibulum nunc. Nullam semper faucibus tincidunt. Etiam sed hendrerit risus. Proin gravida, urna nec tincidunt tempus, nulla sapien porttitor nibh, porttitor lobortis nunc quam et tortor. Praesent ut varius lacus, ut hendrerit enim. Ut nec turpis ac felis imperdiet bibendum. Phasellus porttitor enim odio, et vehicula mi convallis vel. Quisque porta scelerisque sagittis. Praesent dignissim sagittis vulputate. Aenean non justo ac est volutpat bibendum. Aliquam mattis, sapien dapibus pellentesque semper, velit urna malesuada diam, nec varius nibh eros at erat. Proin leo ante, ultricies id velit ut, faucibus porta nibh. Sed nec fermentum urna, sed mollis leo. Aliquam erat volutpat. + +Donec condimentum, urna sed hendrerit vestibulum, ante nibh lacinia dui, in tincidunt odio sem eget orci. In hac habitasse platea dictumst. Mauris id ex id ante tempus finibus eu sagittis erat. Quisque interdum urna risus, vel varius nibh euismod non. Nulla eget pellentesque quam. Aliquam vestibulum ac tortor non lobortis. Sed vitae erat sed libero dignissim dictum nec in turpis. Vivamus id ornare elit, ut facilisis lectus. Morbi dictum purus eget ipsum dignissim porttitor. Sed at vehicula purus, nec rhoncus quam. Nunc a nisl quis arcu blandit fermentum vel quis odio. Vivamus rhoncus, sapien sed lacinia hendrerit, velit urna fermentum dolor, id feugiat magna ligula sed urna. Proin euismod efficitur libero, eget porttitor lacus tempus quis. Duis tincidunt quis est a laoreet. Nam sit amet tristique nisl, sit amet mattis mi. + +Aenean id dictum nulla, sed laoreet magna. Morbi consectetur in turpis at aliquam. Maecenas rutrum feugiat metus, at ullamcorper augue fermentum ut. Vivamus in magna pretium nibh dictum rhoncus luctus at orci. In hac habitasse platea dictumst. Fusce convallis, nulla nec hendrerit suscipit, ipsum diam lobortis sem, vitae elementum lectus erat sit amet magna. Quisque sollicitudin fringilla purus, ac molestie justo congue vitae. Nulla sapien leo, ullamcorper ac tellus in, cursus rhoncus enim. Suspendisse rutrum magna non ex elementum elementum id vitae enim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse ornare libero eu molestie pulvinar. Phasellus faucibus, magna eget rutrum porta, lorem turpis blandit lectus, eu viverra massa risus et ex. + +Ut consectetur eros lacus, ac ullamcorper lacus mattis a. Cras congue justo ut erat interdum, et scelerisque nisi malesuada. Quisque sed sapien sollicitudin purus tincidunt finibus vestibulum vel dolor. Cras iaculis bibendum erat, a dictum urna viverra et. Integer non neque vulputate, tincidunt purus nec, rutrum arcu. Aliquam nec magna non sem semper laoreet quis at quam. Mauris dui lectus, convallis eu efficitur at, facilisis nec lorem. Cras felis sem, egestas ac rutrum vel, mollis et ex. Aenean semper egestas libero, nec commodo mi blandit efficitur. Duis nec quam in massa dignissim sagittis vel vitae leo. Nam molestie hendrerit auctor. + +Sed suscipit egestas tellus sed cursus. Donec vel massa sit amet dui condimentum accumsan. Phasellus libero eros, lobortis a nisi id, porttitor maximus lectus. Praesent consectetur diam urna, id viverra turpis elementum in. Vivamus vitae pretium justo, nec tempor felis. Vivamus volutpat ultricies magna. Suspendisse vulputate lectus ac orci volutpat ullamcorper. Nulla eu leo pretium, commodo arcu accumsan, tempor nisl. Fusce sit amet tellus a ipsum vehicula laoreet sed vitae mauris. Duis porttitor massa mattis nibh placerat consequat. Fusce rutrum commodo tortor eget pellentesque. Suspendisse tempor enim libero, consequat dictum nibh dictum varius. Pellentesque feugiat sit amet urna sed facilisis. Curabitur a sagittis augue. \ No newline at end of file diff --git a/core-java-modules/core-java-io-files/src/test/resources/.gitignore b/core-java-modules/core-java-io-files/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-modules/core-java-io-files/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-2/README.md b/core-java-modules/core-java-lang-oop-2/README.md index 7fee77d4bb..c43c9f02dc 100644 --- a/core-java-modules/core-java-lang-oop-2/README.md +++ b/core-java-modules/core-java-lang-oop-2/README.md @@ -10,6 +10,6 @@ - [Java ‘private’ Access Modifier](https://www.baeldung.com/java-private-keyword) - [Marker Interfaces in Java](https://www.baeldung.com/java-marker-interfaces) - [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts) -- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object) -- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](http://www.baeldung.com/java-inheritance-composition) +- [Immutable Objects in Java](https://www.baeldung.com/java-immutable-object) +- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](https://www.baeldung.com/java-inheritance-composition) - [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors) diff --git a/core-java-modules/core-java-lang-oop-3/.gitignore b/core-java-modules/core-java-lang-oop-3/.gitignore deleted file mode 100644 index 3de4cc647e..0000000000 --- a/core-java-modules/core-java-lang-oop-3/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -*.txt -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-3/README.md b/core-java-modules/core-java-lang-oop-3/README.md index 57df2c1769..15876d124f 100644 --- a/core-java-modules/core-java-lang-oop-3/README.md +++ b/core-java-modules/core-java-lang-oop-3/README.md @@ -3,9 +3,9 @@ ## Core Java Lang OOP 3 Cookbooks and Examples ### Relevant Articles: -- [Pass-By-Value as a Parameter Passing Mechanism in Java](http://www.baeldung.com/java-pass-by-value-or-pass-by-reference) -- [Access Modifiers in Java](http://www.baeldung.com/java-access-modifiers) -- [Guide to the super Java Keyword](http://www.baeldung.com/java-super) -- [Guide to the this Java Keyword](http://www.baeldung.com/java-this) +- [Pass-By-Value as a Parameter Passing Mechanism in Java](https://www.baeldung.com/java-pass-by-value-or-pass-by-reference) +- [Access Modifiers in Java](https://www.baeldung.com/java-access-modifiers) +- [Guide to the super Java Keyword](https://www.baeldung.com/java-super) +- [Guide to the this Java Keyword](https://www.baeldung.com/java-this) - [Java Public Access Modifier](https://www.baeldung.com/java-public-keyword) - [Composition, Aggregation and Association in Java](https://www.baeldung.com/java-composition-aggregation-association) \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop/README.md b/core-java-modules/core-java-lang-oop/README.md index 1751da8b3e..2e7fa4d689 100644 --- a/core-java-modules/core-java-lang-oop/README.md +++ b/core-java-modules/core-java-lang-oop/README.md @@ -3,13 +3,13 @@ ## Core Java Lang OOP Cookbooks and Examples ### Relevant Articles: -- [Guide to hashCode() in Java](http://www.baeldung.com/java-hashcode) -- [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static) -- [Polymorphism in Java](http://www.baeldung.com/java-polymorphism) -- [Method Overloading and Overriding in Java](http://www.baeldung.com/java-method-overload-override) -- [How to Make a Deep Copy of an Object in Java](http://www.baeldung.com/java-deep-copy) -- [Guide to Inheritance in Java](http://www.baeldung.com/java-inheritance) -- [Object Type Casting in Java](http://www.baeldung.com/java-type-casting) -- [The “final” Keyword in Java](http://www.baeldung.com/java-final) -- [Type Erasure in Java Explained](http://www.baeldung.com/java-type-erasure) -- [Variable and Method Hiding in Java](http://www.baeldung.com/java-variable-method-hiding) +- [Guide to hashCode() in Java](https://www.baeldung.com/java-hashcode) +- [A Guide to the Static Keyword in Java](https://www.baeldung.com/java-static) +- [Polymorphism in Java](https://www.baeldung.com/java-polymorphism) +- [Method Overloading and Overriding in Java](https://www.baeldung.com/java-method-overload-override) +- [How to Make a Deep Copy of an Object in Java](https://www.baeldung.com/java-deep-copy) +- [Guide to Inheritance in Java](https://www.baeldung.com/java-inheritance) +- [Object Type Casting in Java](https://www.baeldung.com/java-type-casting) +- [The “final” Keyword in Java](https://www.baeldung.com/java-final) +- [Type Erasure in Java Explained](https://www.baeldung.com/java-type-erasure) +- [Variable and Method Hiding in Java](https://www.baeldung.com/java-variable-method-hiding) diff --git a/java-dates/README.md b/java-dates/README.md index ef4cffe6d8..d56e16eafd 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -22,3 +22,4 @@ - [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) - [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) - [Introduction to Joda-Time](http://www.baeldung.com/joda-time) +- [Comparing Dates in Java](https://www.baeldung.com/java-comparing-dates) diff --git a/java-dates/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java b/java-dates/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java new file mode 100644 index 0000000000..4d732df795 --- /dev/null +++ b/java-dates/src/main/java/com/baeldung/date/comparison/DateTimeComparisonUtils.java @@ -0,0 +1,35 @@ +package com.baeldung.date.comparison; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import static java.time.temporal.ChronoUnit.*; + +public class DateTimeComparisonUtils { + + public static boolean isSameDay(LocalDateTime timestamp, LocalDate localDateToCompare) { + return timestamp.toLocalDate().isEqual(localDateToCompare); + } + + public static boolean isSameDay(LocalDateTime timestamp, LocalDateTime timestampToCompare) { + return timestamp.truncatedTo(DAYS).isEqual(timestampToCompare.truncatedTo(DAYS)); + } + + public static boolean isSameHour(LocalDateTime timestamp, LocalDateTime timestampToCompare) { + return timestamp.truncatedTo(HOURS).isEqual(timestampToCompare.truncatedTo(HOURS)); + } + + public static boolean isSameMinute(LocalDateTime timestamp, LocalDateTime timestampToCompare) { + return timestamp.truncatedTo(MINUTES).isEqual(timestampToCompare.truncatedTo(MINUTES)); + } + + public static boolean isSameHour(ZonedDateTime zonedTimestamp, ZonedDateTime zonedTimestampToCompare) { + return zonedTimestamp.truncatedTo(HOURS).isEqual(zonedTimestampToCompare.truncatedTo(HOURS)); + } + + public static boolean isSameHour(ZonedDateTime zonedDateTime, LocalDateTime localDateTime, ZoneId zoneId) { + return isSameHour(zonedDateTime, localDateTime.atZone(zoneId)); + } +} diff --git a/java-dates/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java b/java-dates/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java new file mode 100644 index 0000000000..9519bc316a --- /dev/null +++ b/java-dates/src/main/java/com/baeldung/date/comparison/LegacyDateComparisonUtils.java @@ -0,0 +1,17 @@ +package com.baeldung.date.comparison; + +import org.apache.commons.lang3.time.DateUtils; + +import java.util.Calendar; +import java.util.Date; + +public class LegacyDateComparisonUtils { + + public static boolean isSameDay(Date date, Date dateToCompare) { + return DateUtils.isSameDay(date, dateToCompare); + } + + public static boolean isSameHour(Date date, Date dateToCompare) { + return DateUtils.truncatedEquals(date, dateToCompare, Calendar.HOUR); + } +} diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java b/java-dates/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java new file mode 100644 index 0000000000..0db0d1e8d7 --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/date/comparison/DateTimeComparisonUtilsUnitTest.java @@ -0,0 +1,75 @@ +package com.baeldung.date.comparison; + +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +class DateTimeComparisonUtilsUnitTest { + + @Test + void givenLocalDateTimes_whenIsSameDay_thenCompareTrue() { + LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 11, 00, 0); + LocalDateTime secondTimestamp = firstTimestamp.plusHours(5); + LocalDateTime thirdTimestamp = firstTimestamp.plusDays(1); + + assertThat(DateTimeComparisonUtils.isSameDay(firstTimestamp, secondTimestamp), is(true)); + + assertThat(DateTimeComparisonUtils.isSameDay(secondTimestamp, thirdTimestamp), is(false)); + } + + @Test + void givenLocalDateAndLocalDateTime_whenIsSameDay_thenCompareTrue() { + LocalDate localDate = LocalDate.of(2019, 8, 10); + LocalDateTime localDateTime = LocalDateTime.of(2019, 8, 10, 11, 30, 0); + + assertThat(DateTimeComparisonUtils.isSameDay(localDateTime, localDate), is(true)); + } + + @Test + void givenLocalDateTimes_whenIsSameHour_thenCompareTrue() { + LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 8, 00, 0); + LocalDateTime secondTimestamp = firstTimestamp.plusMinutes(15); + LocalDateTime thirdTimestamp = firstTimestamp.plusHours(2); + + assertThat(DateTimeComparisonUtils.isSameHour(firstTimestamp, secondTimestamp), is(true)); + + assertThat(DateTimeComparisonUtils.isSameHour(secondTimestamp, thirdTimestamp), is(false)); + } + + @Test + void givenLocalDateTimes_whenIsSameMinute_thenCompareTrue() { + LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 8, 15, 0); + LocalDateTime secondTimestamp = firstTimestamp.plusSeconds(30); + LocalDateTime thirdTimestamp = firstTimestamp.plusMinutes(5); + + assertThat(DateTimeComparisonUtils.isSameMinute(firstTimestamp, secondTimestamp), is(true)); + + assertThat(DateTimeComparisonUtils.isSameMinute(secondTimestamp, thirdTimestamp), is(false)); + } + + @Test + void givenZonedDateTimes_whenIsSameHour_thenCompareTrue() { + ZonedDateTime zonedTimestamp = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 30, + ZoneId.of("America/New_York")); + ZonedDateTime zonedTimestampToCompare = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0, + ZoneId.of("Europe/Berlin")); + + assertThat(DateTimeComparisonUtils.isSameHour(zonedTimestamp, zonedTimestampToCompare), is(true)); + } + + @Test + void givenZonedDateTimeAndLocalDateTime_whenIsSameHour_thenCompareTrue() { + ZonedDateTime zonedTimestamp = ZonedDateTime.of(2019, 8, 10, 8, 15, 0, 0, + ZoneId.of("America/New_York")); + LocalDateTime localTimestamp = LocalDateTime.of(2019, 8, 10, 14, 20, 0); + ZoneId zoneId = ZoneId.of("Europe/Berlin"); + + assertThat(DateTimeComparisonUtils.isSameHour(zonedTimestamp, localTimestamp, zoneId), is(true)); + } +} \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java b/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java new file mode 100644 index 0000000000..ff51476e7c --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/date/comparison/Java8DateTimeApiGeneralComparisonsUnitTest.java @@ -0,0 +1,83 @@ +package com.baeldung.date.comparison; + +import org.junit.Test; + +import java.time.*; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class Java8DateTimeApiGeneralComparisonsUnitTest { + + @Test + public void givenLocalDates_whenComparing_thenAssertsPass() { + LocalDate firstDate = LocalDate.of(2019, 8, 10); + LocalDate secondDate = LocalDate.of(2019, 7, 1); + LocalDate thirdDate = LocalDate.of(2019, 7, 1); // same date as secondDate + + assertThat(firstDate.isAfter(secondDate), is(true)); + assertThat(firstDate.isBefore(secondDate), is(false)); + + assertThat(firstDate.isEqual(secondDate), is(false)); + assertThat(firstDate.equals(secondDate), is(false)); + + assertThat(firstDate.compareTo(secondDate), is(1)); + assertThat(secondDate.compareTo(firstDate), is(-1)); + + assertThat(secondDate.isAfter(thirdDate), is(false)); + assertThat(secondDate.isBefore(thirdDate), is(false)); + assertThat(secondDate.isEqual(thirdDate), is(true)); + assertThat(secondDate.equals(thirdDate), is(true)); + assertThat(secondDate.compareTo(thirdDate), is(0)); + } + + @Test + public void givenLocalDateTimes_whenComparing_thenAssertsPass() { + LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 11, 30, 0); + LocalDateTime secondTimestamp = LocalDateTime.of(2019, 8, 10, 11, 15, 0); + LocalDateTime thirdTimestamp = LocalDateTime.of(2019, 8, 10, 11, 15, 0); // same as secondTimestamp + + assertThat(firstTimestamp.isAfter(secondTimestamp), is(true)); + assertThat(firstTimestamp.isBefore(secondTimestamp), is(false)); + + assertThat(firstTimestamp.isEqual(secondTimestamp), is(false)); + assertThat(firstTimestamp.equals(secondTimestamp), is(false)); + + assertThat(firstTimestamp.compareTo(secondTimestamp), is(1)); + assertThat(secondTimestamp.compareTo(firstTimestamp), is(-1)); + + assertThat(secondTimestamp.isAfter(thirdTimestamp), is(false)); + assertThat(secondTimestamp.isBefore(thirdTimestamp), is(false)); + assertThat(secondTimestamp.isEqual(thirdTimestamp), is(true)); + assertThat(secondTimestamp.compareTo(thirdTimestamp), is(0)); + } + + @Test + public void givenZonedDateTimes_whenComparing_thenAssertsPass() { + ZonedDateTime timeInNewYork = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 0, + ZoneId.of("America/New_York")); + ZonedDateTime timeInBerlin = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0, + ZoneId.of("Europe/Berlin")); + + assertThat(timeInNewYork.isAfter(timeInBerlin), is(false)); + assertThat(timeInNewYork.isBefore(timeInBerlin), is(false)); + + assertThat(timeInNewYork.isEqual(timeInBerlin), is(true)); + assertThat(timeInNewYork.equals(timeInBerlin), is(false)); + + assertThat(timeInNewYork.compareTo(timeInBerlin), is(-1)); + } + + @Test + public void givenLocalTimes_whenComparing_thenAssertsPass() { + LocalTime firstTime = LocalTime.of(8, 30); + LocalTime secondTime = LocalTime.of(9, 45); + + assertThat(firstTime.isAfter(secondTime), is(false)); + assertThat(firstTime.isBefore(secondTime), is(true)); + + assertThat(firstTime.equals(secondTime), is(false)); + + assertThat(firstTime.compareTo(secondTime), is(-1)); + } +} \ No newline at end of file diff --git a/java-dates/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java b/java-dates/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java new file mode 100644 index 0000000000..a501cb8888 --- /dev/null +++ b/java-dates/src/test/java/com/baeldung/date/comparison/LegacyDateComparisonUtilsUnitTest.java @@ -0,0 +1,54 @@ +package com.baeldung.date.comparison; + +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +class LegacyDateComparisonUtilsUnitTest { + + private Date toDate(LocalDateTime localDateTime) { + return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + } + + @Test + void givenDatesWithDifferentHours_whenIsSameDay_thenReturnsTrue() { + Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 00, 00)); + Date secondDate = toDate(LocalDateTime.of(2019, 8, 10, 12, 00, 00)); + Date thirdDate = toDate(LocalDateTime.of(2019, 8, 15, 12, 00, 00)); + + assertThat(LegacyDateComparisonUtils.isSameDay(firstDate, secondDate), is(true)); + assertThat(LegacyDateComparisonUtils.isSameDay(secondDate, thirdDate), is(false)); + } + + @Test + void givenDatesWithingSameHour_whenIsSameHour_thenReturnsTrue() { + Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 00, 00)); + Date secondDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 15, 00)); + Date thirdDate = toDate(LocalDateTime.of(2019, 8, 10, 12, 00, 00)); + + assertThat(LegacyDateComparisonUtils.isSameHour(firstDate, secondDate), is(true)); + assertThat(LegacyDateComparisonUtils.isSameHour(secondDate, thirdDate), is(false)); + } + + @Test + void givenDates__whenComparing_thenAssertsPass() { + Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 0, 00, 00)); + Date secondDate = toDate(LocalDateTime.of(2019, 8, 15, 0, 00, 00)); + Date thirdDate = toDate(LocalDateTime.of(2019, 8, 15, 0, 00, 00)); // same date as secondDate + + assertThat(firstDate.after(secondDate), is(false)); + assertThat(firstDate.before(secondDate), is(true)); + assertThat(firstDate.compareTo(secondDate), is(-1)); + assertThat(firstDate.equals(secondDate), is(false)); + + assertThat(thirdDate.after(secondDate), is(false)); + assertThat(thirdDate.before(secondDate), is(false)); + assertThat(thirdDate.compareTo(secondDate), is(0)); + assertThat(thirdDate.equals(secondDate), is(true)); + } +} \ No newline at end of file diff --git a/kotlin-libraries/pom.xml b/kotlin-libraries/pom.xml index e252329426..5299b5029e 100644 --- a/kotlin-libraries/pom.xml +++ b/kotlin-libraries/pom.xml @@ -100,7 +100,7 @@ io.arrow-kt arrow-core - 0.7.3 + ${arrow-core.version} @@ -117,7 +117,7 @@ nl.komponents.kovenant kovenant - 3.3.0 + ${kovenant.version} pom @@ -132,13 +132,13 @@ com.google.guava guava - 27.1-jre + ${guava.version} org.jetbrains.kotlinx kotlinx-collections-immutable - 0.1 + ${kotlinx-collections-immutable.version} @@ -151,26 +151,26 @@ net.bytebuddy byte-buddy - 1.8.13 + ${byte-buddy.version} compile net.bytebuddy byte-buddy-agent - 1.8.13 + ${byte-buddy.version} compile org.objenesis objenesis - 2.6 + ${objenesis.version} compile io.reactivex.rxjava2 rxkotlin - 2.3.0 + ${rxkotlin.version} @@ -186,6 +186,13 @@ 3.10.0 0.10.4 1.9.3 + 27.1-jre + 3.3.0 + 1.8.13 + 2.6 + 2.3.0 + 0.1 + 0.7.3 diff --git a/libraries-testing/README.md b/libraries-testing/README.md index b4010056f7..fb2c7123a3 100644 --- a/libraries-testing/README.md +++ b/libraries-testing/README.md @@ -6,5 +6,4 @@ - [Serenity BDD with Spring and JBehave](http://www.baeldung.com/serenity-spring-jbehave) - [Introduction to Awaitlity](http://www.baeldung.com/awaitlity-testing) - [Introduction to Hoverfly in Java](http://www.baeldung.com/hoverfly) -- [Hamcrest File Matchers](https://www.baeldung.com/hamcrest-file-matchers) -- [Hamcrest Text Matchers](http://www.baeldung.com/hamcrest-text-matchers) \ No newline at end of file +- [Testing with Hamcrest](http://www.baeldung.com/java-junit-hamcrest-guide) \ No newline at end of file diff --git a/libraries-testing/src/test/java/com/baeldung/hamcrest/README.md b/libraries-testing/src/test/java/com/baeldung/hamcrest/README.md deleted file mode 100644 index 7266ecda3a..0000000000 --- a/libraries-testing/src/test/java/com/baeldung/hamcrest/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [Testing with Hamcrest](http://www.baeldung.com/java-junit-hamcrest-guide) diff --git a/libraries/pom.xml b/libraries/pom.xml index a8ded19a1e..9511563817 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -579,7 +579,7 @@ org.asciidoctor asciidoctor-maven-plugin - 1.5.7.1 + ${asciidoctor-maven-plugin.version} @@ -789,6 +789,7 @@ 2.7.1 3.6 0.9.11 + 1.5.7.1 diff --git a/oauth2-framework-impl/oauth2-authorization-server/pom.xml b/oauth2-framework-impl/oauth2-authorization-server/pom.xml index 6ab7a60f72..25927c9f1a 100644 --- a/oauth2-framework-impl/oauth2-authorization-server/pom.xml +++ b/oauth2-framework-impl/oauth2-authorization-server/pom.xml @@ -18,23 +18,26 @@ 1.4.199 9080 9443 + 7.3 + 1.62 + 1.62 com.nimbusds nimbus-jose-jwt - 7.3 + ${nimbus-jose-jwt.version} org.bouncycastle bcprov-jdk15on - 1.62 + ${bcprov-jdk15on.version} org.bouncycastle bcpkix-jdk15on - 1.62 + ${bcpkix-jdk15on.version} diff --git a/oauth2-framework-impl/oauth2-resource-server/pom.xml b/oauth2-framework-impl/oauth2-resource-server/pom.xml index e6bc860c67..5e5cd087ed 100644 --- a/oauth2-framework-impl/oauth2-resource-server/pom.xml +++ b/oauth2-framework-impl/oauth2-resource-server/pom.xml @@ -18,13 +18,14 @@ 8643 http://localhost:9080 http://localhost:9280 + 1.1 org.eclipse.microprofile.jwt microprofile-jwt-auth-api - 1.1 + ${microprofile-jwt-auth-api.version} provided diff --git a/oauth2-framework-impl/pom.xml b/oauth2-framework-impl/pom.xml index 47d42eaaea..fd1a2c926f 100644 --- a/oauth2-framework-impl/pom.xml +++ b/oauth2-framework-impl/pom.xml @@ -15,19 +15,21 @@ false RELEASE 2.6.4 + 8.0 + 1.3 javax javaee-web-api - 8.0 + ${javaee-web-api.version} provided org.eclipse.microprofile.config microprofile-config-api - 1.3 + ${microprofile-config-api.version} provided diff --git a/optaplanner/pom.xml b/optaplanner/pom.xml index 93b1e68264..bcf7080a1e 100644 --- a/optaplanner/pom.xml +++ b/optaplanner/pom.xml @@ -16,8 +16,12 @@ org.optaplanner optaplanner-core - 7.9.0.Final + ${optaplanner-core.version} + + 7.9.0.Final + + \ No newline at end of file diff --git a/persistence-modules/java-jpa/pom.xml b/persistence-modules/java-jpa/pom.xml index ced049d281..7ce8262ba5 100644 --- a/persistence-modules/java-jpa/pom.xml +++ b/persistence-modules/java-jpa/pom.xml @@ -57,7 +57,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 + ${maven-compiler-plugin.version} -proc:none @@ -65,7 +65,7 @@ org.bsc.maven maven-processor-plugin - 3.3.3 + ${maven-processor-plugin.version} process @@ -86,7 +86,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + ${build-helper-maven-plugin.version} add-source @@ -110,6 +110,8 @@ 2.7.4-RC1 42.2.5 2.2 + 3.3.3 + 3.0.0 \ No newline at end of file diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 5dd0611f41..0c22267192 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -59,7 +59,7 @@ spring-jpa spring-persistence-simple jpa-hibernate-cascade-type - r2dbc + r2dbc spring-boot-jdbi diff --git a/persistence-modules/r2dbc/pom.xml b/persistence-modules/r2dbc/pom.xml index 388abafdaf..fd48a47f12 100644 --- a/persistence-modules/r2dbc/pom.xml +++ b/persistence-modules/r2dbc/pom.xml @@ -17,6 +17,7 @@ 1.8 + 0.8.0.M8 @@ -41,7 +42,7 @@ io.r2dbc r2dbc-h2 - 0.8.0.M8 + ${r2dbc-h2.version} diff --git a/persistence-modules/sirix/pom.xml b/persistence-modules/sirix/pom.xml index 677c5b8f3a..8de961120f 100644 --- a/persistence-modules/sirix/pom.xml +++ b/persistence-modules/sirix/pom.xml @@ -20,7 +20,7 @@ io.sirix sirix-core - 0.9.3 + ${sirix-core.version} @@ -48,5 +48,6 @@ UTF-8 11 + 0.9.3 diff --git a/persistence-modules/spring-boot-jdbi/.gitignore b/persistence-modules/spring-boot-jdbi/.gitignore deleted file mode 100644 index a2a3040aa8..0000000000 --- a/persistence-modules/spring-boot-jdbi/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ diff --git a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/MavenWrapperDownloader.java b/persistence-modules/spring-boot-jdbi/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index 72308aa479..0000000000 --- a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,114 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.util.Properties; - -public class MavenWrapperDownloader { - - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: : " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.jar b/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 01e6799737..0000000000 Binary files a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.properties b/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index cd0d451ccd..0000000000 --- a/persistence-modules/spring-boot-jdbi/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/persistence-modules/spring-boot-jdbi/HELP.md b/persistence-modules/spring-boot-jdbi/HELP.md new file mode 100644 index 0000000000..d5a5463718 --- /dev/null +++ b/persistence-modules/spring-boot-jdbi/HELP.md @@ -0,0 +1,9 @@ +# Getting Started + +### Reference Documentation +For further reference, please consider the following sections: + +* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) +* [Spring Boot DevTools](https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using-boot-devtools) +* [Spring Configuration Processor](https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#configuration-metadata-annotation-processor) + diff --git a/persistence-modules/spring-boot-jdbi/mvnw b/persistence-modules/spring-boot-jdbi/mvnw deleted file mode 100644 index 8b9da3b8b6..0000000000 --- a/persistence-modules/spring-boot-jdbi/mvnw +++ /dev/null @@ -1,286 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - wget "$jarUrl" -O "$wrapperJarPath" - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - curl -o "$wrapperJarPath" "$jarUrl" - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/persistence-modules/spring-boot-jdbi/mvnw.cmd b/persistence-modules/spring-boot-jdbi/mvnw.cmd deleted file mode 100644 index fef5a8f7f9..0000000000 --- a/persistence-modules/spring-boot-jdbi/mvnw.cmd +++ /dev/null @@ -1,161 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% -) else ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" - echo Finished downloading %WRAPPER_JAR% -) -@REM End of extension - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/persistence-modules/spring-boot-jdbi/pom.xml b/persistence-modules/spring-boot-jdbi/pom.xml index 26a0b94275..3f9bc8ab10 100644 --- a/persistence-modules/spring-boot-jdbi/pom.xml +++ b/persistence-modules/spring-boot-jdbi/pom.xml @@ -27,7 +27,7 @@ org.springframework.boot spring-boot-dependencies - 2.1.7.RELEASE + 2.1.8.RELEASE pom import diff --git a/persistence-modules/spring-boot-mysql/pom.xml b/persistence-modules/spring-boot-mysql/pom.xml index 6be58332aa..29374ec116 100644 --- a/persistence-modules/spring-boot-mysql/pom.xml +++ b/persistence-modules/spring-boot-mysql/pom.xml @@ -17,7 +17,6 @@ org.springframework.boot spring-boot-starter-web - 2.1.5.RELEASE org.springframework.boot diff --git a/persistence-modules/spring-persistence-simple/pom.xml b/persistence-modules/spring-persistence-simple/pom.xml index d0b3f5fe29..f0cf8e49d5 100644 --- a/persistence-modules/spring-persistence-simple/pom.xml +++ b/persistence-modules/spring-persistence-simple/pom.xml @@ -116,7 +116,7 @@ com.mysema.maven apt-maven-plugin - 1.1.3 + ${apt-maven-plugin.version} generate-sources @@ -148,6 +148,7 @@ 21.0 3.8.0 + 1.1.3 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 52a5922273..128320951c 100644 --- a/pom.xml +++ b/pom.xml @@ -339,6 +339,7 @@ algorithms-miscellaneous-1 algorithms-miscellaneous-2 algorithms-miscellaneous-3 + algorithms-miscellaneous-4 algorithms-miscellaneous-5 algorithms-sorting animal-sniffer-mvn-plugin @@ -402,6 +403,7 @@ core-java-modules/core-java-concurrency-basic core-java-modules/core-java-concurrency-collections core-java-modules/core-java-io + core-java-modules/core-java-io-files core-java-modules/core-java-nio core-java-modules/core-java-security core-java-modules/core-java-lang-syntax @@ -1075,6 +1077,7 @@ algorithms-miscellaneous-1 algorithms-miscellaneous-2 algorithms-miscellaneous-3 + algorithms-miscellaneous-4 algorithms-miscellaneous-5 algorithms-sorting animal-sniffer-mvn-plugin @@ -1134,6 +1137,7 @@ core-java-modules/core-java-concurrency-basic core-java-modules/core-java-concurrency-collections core-java-modules/core-java-io + core-java-modules/core-java-io-files core-java-modules/core-java-nio core-java-modules/core-java-security core-java-modules/core-java-lang-syntax diff --git a/spring-5-data-reactive/README.md b/spring-5-data-reactive/README.md index 4c2347dc77..982704e11c 100644 --- a/spring-5-data-reactive/README.md +++ b/spring-5-data-reactive/README.md @@ -1,5 +1,7 @@ ## Spring Data Reactive Project +This module contains articles about reactive Spring 5 Data + ### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java index 917bcfdaa8..4e5bf9d5dc 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java @@ -2,8 +2,9 @@ package com.baeldung.couchbase; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = MongoAutoConfiguration.class) public class ReactiveCouchbaseApplication { public static void main(String[] args) { diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java index 480c96e986..81f19eebd6 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java @@ -1,12 +1,15 @@ package com.baeldung.couchbase.configuration; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; import java.util.Collections; import java.util.List; @Configuration +@PropertySource("classpath:couchbase.properties") public class CouchbaseProperties { private final List bootstrapHosts; diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java index 2f3b5486d8..a51b19ee22 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java @@ -2,7 +2,11 @@ package com.baeldung.couchbase.configuration; import com.couchbase.client.java.env.CouchbaseEnvironment; import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; + +import org.springframework.context.annotation.Bean; import org.springframework.data.couchbase.config.AbstractReactiveCouchbaseConfiguration; +import org.springframework.data.couchbase.config.BeanNames; +import org.springframework.data.couchbase.repository.support.IndexManager; import java.util.List; @@ -36,4 +40,9 @@ public abstract class ReactiveCouchbaseConfiguration extends AbstractReactiveCou .bootstrapHttpDirectPort(couchbaseProperties.getPort()) .build(); } + + @Bean(name = BeanNames.COUCHBASE_INDEX_MANAGER) + public IndexManager couchbaseIndexManager() { + return new IndexManager(true, true, false); + } } diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java index 28a7ec1b78..06c47c2393 100644 --- a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java +++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java @@ -13,7 +13,7 @@ import java.util.UUID; @ViewIndexed(designDoc = ViewPersonRepository.DESIGN_DOCUMENT) public interface ViewPersonRepository extends ReactiveCrudRepository { - String DESIGN_DOCUMENT = "persons"; + String DESIGN_DOCUMENT = "person"; @View(designDocument = ViewPersonRepository.DESIGN_DOCUMENT) Flux findByFirstName(String firstName); diff --git a/spring-5-data-reactive/src/main/resources/couchbase.properties b/spring-5-data-reactive/src/main/resources/couchbase.properties new file mode 100644 index 0000000000..53fad807fe --- /dev/null +++ b/spring-5-data-reactive/src/main/resources/couchbase.properties @@ -0,0 +1,4 @@ +spring.couchbase.bucket.name=default +spring.couchbase.bootstrap-hosts=localhost +spring.couchbase.port=8091 +spring.couchbase.bucket.password=123456 \ No newline at end of file diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java index 0c1b6bde6c..c8dbbf429e 100644 --- a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java +++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java @@ -12,7 +12,7 @@ import reactor.test.StepVerifier; import java.util.UUID; @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration"}) public class N1QLPersonRepositoryLiveTest { @Autowired private N1QLPersonRepository personRepository; diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java index 4ba2206e0a..8c6ce137f1 100644 --- a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java +++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java @@ -13,7 +13,7 @@ import reactor.test.StepVerifier; import java.util.UUID; @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration"}) public class N1QLSortingPersonRepositoryLiveTest { @Autowired private N1QLSortingPersonRepository personRepository; diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java index 712e7b0d37..15688e1b80 100644 --- a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java +++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java @@ -8,6 +8,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -16,7 +17,8 @@ import reactor.test.StepVerifier; import java.util.UUID; @RunWith(SpringRunner.class) -@SpringBootTest(properties = { "spring.couchbase.port=10010" }, classes = { ViewReactiveCouchbaseConfiguration.class, CouchbaseProperties.class, CouchbaseMockConfiguration.class }) +@SpringBootTest(properties = { "spring.couchbase.port=10010", "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration" }, + classes = { CouchbaseMockConfiguration.class, ViewReactiveCouchbaseConfiguration.class, CouchbaseProperties.class }) public class ViewPersonRepositoryIntegrationTest { @Autowired private ViewPersonRepository personRepository; diff --git a/spring-5-mvc/README.md b/spring-5-mvc/README.md index 063945281f..2b57df3b71 100644 --- a/spring-5-mvc/README.md +++ b/spring-5-mvc/README.md @@ -1,3 +1,7 @@ +## Spring 5 MVC + +This module contains articles about Spring 5 model-view-controller (MVC) pattern + ### Relevant Articles: - [Spring Boot and Kotlin](http://www.baeldung.com/spring-boot-kotlin) - [Spring MVC Streaming and SSE Request Processing](https://www.baeldung.com/spring-mvc-sse-streams) diff --git a/spring-5-reactive-2/README.md b/spring-5-reactive-2/README.md index 7aec8f94bf..a8204932f7 100644 --- a/spring-5-reactive-2/README.md +++ b/spring-5-reactive-2/README.md @@ -1,2 +1,5 @@ ## Spring 5 Reactive Project + +This module contains articles about reactive Spring 5 + - [Spring WebClient vs. RestTemplate](https://www.baeldung.com/spring-webclient-resttemplate) diff --git a/spring-5-reactive-client/README.md b/spring-5-reactive-client/README.md index 0df2bdd339..90d12cad1c 100644 --- a/spring-5-reactive-client/README.md +++ b/spring-5-reactive-client/README.md @@ -1,5 +1,7 @@ ## Spring REST Example Project +This module contains articles about reactive Spring 5 WebClient + ### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring diff --git a/spring-5-reactive-oauth/README.md b/spring-5-reactive-oauth/README.md index ec5176670b..3fddbf4a36 100644 --- a/spring-5-reactive-oauth/README.md +++ b/spring-5-reactive-oauth/README.md @@ -1,3 +1,7 @@ +## Spring 5 Reactive OAuth + +This module contains articles about reactive Spring 5 OAuth + ### Relevant Articles: - [Spring Security OAuth Login with WebFlux](https://www.baeldung.com/spring-oauth-login-webflux) diff --git a/spring-5-reactive-security/README.md b/spring-5-reactive-security/README.md index 845d07cd7f..ebb107645b 100644 --- a/spring-5-reactive-security/README.md +++ b/spring-5-reactive-security/README.md @@ -1,5 +1,7 @@ ## Spring 5 Reactive Security Examples +This module contains articles about reactive Spring Security 5 + ### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring diff --git a/spring-5-reactive/README.md b/spring-5-reactive/README.md index 538a15c879..b782f817ad 100644 --- a/spring-5-reactive/README.md +++ b/spring-5-reactive/README.md @@ -1,5 +1,7 @@ ## Spring 5 Reactive Project +This module contains articles about reactive Spring 5 + ### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring @@ -20,3 +22,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Testing Reactive Streams Using StepVerifier and TestPublisher](https://www.baeldung.com/reactive-streams-step-verifier-test-publisher) - [Debugging Reactive Streams in Spring 5](https://www.baeldung.com/spring-debugging-reactive-streams) - [Static Content in Spring WebFlux](https://www.baeldung.com/spring-webflux-static-content) +- [more...](/spring-5-reactive-2) diff --git a/spring-5-security-oauth/README.md b/spring-5-security-oauth/README.md index a5cec370c7..4e080fc517 100644 --- a/spring-5-security-oauth/README.md +++ b/spring-5-security-oauth/README.md @@ -1,3 +1,7 @@ +## Spring 5 Security OAuth + +This module contains articles about Spring 5 OAuth Security + ## Relevant articles: - [Spring Security 5 – OAuth2 Login](http://www.baeldung.com/spring-security-5-oauth2-login) diff --git a/spring-5-security/README.md b/spring-5-security/README.md index 37dc8b0f28..23b46f4dc9 100644 --- a/spring-5-security/README.md +++ b/spring-5-security/README.md @@ -1,3 +1,7 @@ +## Spring 5 Security + +This module contains articles about Spring Security 5 + ## Relevant articles: - [Extra Login Fields with Spring Security](http://www.baeldung.com/spring-security-extra-login-fields) diff --git a/spring-5-webflux/README.md b/spring-5-webflux/README.md index 87d9ae0dd3..55ab0b8af4 100644 --- a/spring-5-webflux/README.md +++ b/spring-5-webflux/README.md @@ -1,3 +1,7 @@ +## Spring 5 WebFlux + +This module contains articles about Spring 5 WebFlux + ## Relevant articles: - [Spring Boot Reactor Netty Configuration](https://www.baeldung.com/spring-boot-reactor-netty) diff --git a/spring-boot-admin/pom.xml b/spring-boot-admin/pom.xml index 23852dee57..b2ced767eb 100644 --- a/spring-boot-admin/pom.xml +++ b/spring-boot-admin/pom.xml @@ -30,7 +30,7 @@ - 1.5.8.RELEASE + 2.1.7.RELEASE \ No newline at end of file diff --git a/spring-boot-admin/spring-boot-admin-client/pom.xml b/spring-boot-admin/spring-boot-admin-client/pom.xml index 7563a01172..aa2daf8d45 100644 --- a/spring-boot-admin/spring-boot-admin-client/pom.xml +++ b/spring-boot-admin/spring-boot-admin-client/pom.xml @@ -18,7 +18,7 @@ org.springframework.boot - spring-boot-starter + spring-boot-starter-web org.springframework.boot @@ -59,7 +59,7 @@ - 1.5.4 + 2.1.6 2.0.4.RELEASE diff --git a/spring-boot-admin/spring-boot-admin-client/src/main/resources/application.properties b/spring-boot-admin/spring-boot-admin-client/src/main/resources/application.properties index 58c178ecd9..ff4b1e3255 100644 --- a/spring-boot-admin/spring-boot-admin-client/src/main/resources/application.properties +++ b/spring-boot-admin/spring-boot-admin-client/src/main/resources/application.properties @@ -1,16 +1,20 @@ #basic auth creddentials -security.user.name=client -security.user.password=client +spring.security.user.name=client +spring.security.user.password=client #configs to connect to a secured server -spring.boot.admin.url=http://localhost:8080 -spring.boot.admin.username=admin -spring.boot.admin.password=admin +spring.boot.admin.client.url=http://localhost:8080 +#spring.boot.admin.client.instance.service-base-url=http://localhost:8081 +spring.boot.admin.client.username=admin +spring.boot.admin.client.password=admin #configs to give secured server info -spring.boot.admin.client.metadata.user.name=${security.user.name} -spring.boot.admin.client.metadata.user.password=${security.user.password} +spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name} +spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password} #app config spring.application.name=spring-boot-admin-client -server.port=8081 \ No newline at end of file +server.port=8081 + +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always \ No newline at end of file diff --git a/spring-boot-admin/spring-boot-admin-server/pom.xml b/spring-boot-admin/spring-boot-admin-server/pom.xml index d429d9289f..142cf420f4 100644 --- a/spring-boot-admin/spring-boot-admin-server/pom.xml +++ b/spring-boot-admin/spring-boot-admin-server/pom.xml @@ -18,18 +18,14 @@ org.springframework.boot - spring-boot-starter + spring-boot-starter-web + de.codecentric - spring-boot-admin-server - ${spring-boot-admin-server.version} - - - de.codecentric - spring-boot-admin-server-ui + spring-boot-admin-starter-server ${spring-boot-admin-server.version} @@ -37,7 +33,7 @@ de.codecentric spring-boot-admin-server-ui-login - ${spring-boot-admin-server.version} + ${spring-boot-admin-server-ui-login.version} org.springframework.boot @@ -47,6 +43,7 @@ com.hazelcast hazelcast + de.codecentric @@ -82,8 +79,9 @@ - 1.5.4 - 1.5.4 + 2.1.6 + 2.1.6 + 1.5.7 2.0.4.RELEASE diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/SpringBootAdminServerApplication.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/SpringBootAdminServerApplication.java index d1fb4e769b..e934086cf4 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/SpringBootAdminServerApplication.java +++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/SpringBootAdminServerApplication.java @@ -1,6 +1,6 @@ package com.baeldung.springbootadminserver; -import de.codecentric.boot.admin.config.EnableAdminServer; +import de.codecentric.boot.admin.server.config.EnableAdminServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/HazelcastConfig.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/HazelcastConfig.java index b19b7820af..d38b0e933c 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/HazelcastConfig.java +++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/HazelcastConfig.java @@ -2,8 +2,14 @@ package com.baeldung.springbootadminserver.configs; import com.hazelcast.config.Config; import com.hazelcast.config.EvictionPolicy; -import com.hazelcast.config.ListConfig; +import com.hazelcast.config.InMemoryFormat; import com.hazelcast.config.MapConfig; +import com.hazelcast.config.MergePolicyConfig; +import com.hazelcast.config.TcpIpConfig; +import com.hazelcast.map.merge.PutIfAbsentMapMergePolicy; + +import java.util.Collections; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,13 +18,30 @@ public class HazelcastConfig { @Bean public Config hazelcast() { - return new Config() - .setProperty("hazelcast.jmx", "true") - .addMapConfig(new MapConfig("spring-boot-admin-application-store") + MapConfig eventStoreMap = new MapConfig("spring-boot-admin-event-store").setInMemoryFormat(InMemoryFormat.OBJECT) .setBackupCount(1) - .setEvictionPolicy(EvictionPolicy.NONE)) - .addListConfig(new ListConfig("spring-boot-admin-event-store") + .setEvictionPolicy(EvictionPolicy.NONE) + .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMapMergePolicy.class.getName(), 100)); + + MapConfig sentNotificationsMap = new MapConfig("spring-boot-admin-application-store").setInMemoryFormat(InMemoryFormat.OBJECT) .setBackupCount(1) - .setMaxSize(1000)); + .setEvictionPolicy(EvictionPolicy.LRU) + .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMapMergePolicy.class.getName(), 100)); + + Config config = new Config(); + config.addMapConfig(eventStoreMap); + config.addMapConfig(sentNotificationsMap); + config.setProperty("hazelcast.jmx", "true"); + + config.getNetworkConfig() + .getJoin() + .getMulticastConfig() + .setEnabled(false); + TcpIpConfig tcpIpConfig = config.getNetworkConfig() + .getJoin() + .getTcpIpConfig(); + tcpIpConfig.setEnabled(true); + tcpIpConfig.setMembers(Collections.singletonList("127.0.0.1")); + return config; } } diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java index 10a31464ab..d43f4b430a 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java +++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/NotifierConfiguration.java @@ -1,42 +1,40 @@ package com.baeldung.springbootadminserver.configs; -import de.codecentric.boot.admin.notify.LoggingNotifier; -import de.codecentric.boot.admin.notify.RemindingNotifier; -import de.codecentric.boot.admin.notify.filter.FilteringNotifier; +import java.time.Duration; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import java.util.concurrent.TimeUnit; +import de.codecentric.boot.admin.server.domain.entities.InstanceRepository; +import de.codecentric.boot.admin.server.notify.LoggingNotifier; +import de.codecentric.boot.admin.server.notify.RemindingNotifier; +import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier; @Configuration -@EnableScheduling public class NotifierConfiguration { + @Autowired + private InstanceRepository repository; - // @Autowired private Notifier notifier; + // @Autowired private Notifier notifier; @Bean public LoggingNotifier notifier() { - return new LoggingNotifier(); + return new LoggingNotifier(repository); } @Bean public FilteringNotifier filteringNotifier() { - return new FilteringNotifier(notifier()); + return new FilteringNotifier(notifier(), repository); } - @Bean @Primary + @Bean(initMethod = "start", destroyMethod = "stop") public RemindingNotifier remindingNotifier() { - RemindingNotifier remindingNotifier = new RemindingNotifier(filteringNotifier()); - remindingNotifier.setReminderPeriod(TimeUnit.MINUTES.toMillis(5)); + RemindingNotifier remindingNotifier = new RemindingNotifier(filteringNotifier(), repository); + remindingNotifier.setReminderPeriod(Duration.ofMinutes(5)); + remindingNotifier.setCheckReminderInverval(Duration.ofSeconds(60)); return remindingNotifier; } - - @Scheduled(fixedRate = 60_000L) - public void remind() { - remindingNotifier().sendReminders(); - } } diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java index 4a7c8330b7..ee37d2f0b3 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java +++ b/spring-boot-admin/spring-boot-admin-server/src/main/java/com/baeldung/springbootadminserver/configs/WebSecurityConfig.java @@ -1,33 +1,56 @@ package com.baeldung.springbootadminserver.configs; +import java.util.UUID; + import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import de.codecentric.boot.admin.server.config.AdminServerProperties; @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + private final AdminServerProperties adminServer; + + public WebSecurityConfig(AdminServerProperties adminServer) { + this.adminServer = adminServer; + } @Override protected void configure(HttpSecurity http) throws Exception { - http - .formLogin() - .loginPage("/login.html") - .loginProcessingUrl("/login") - .permitAll(); - http - .logout() - .logoutUrl("/logout"); - http - .csrf() - .disable(); - http - .authorizeRequests() - .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**") - .permitAll(); - http - .authorizeRequests() - .antMatchers("/**") - .authenticated(); - http.httpBasic(); + SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); + successHandler.setTargetUrlParameter("redirectTo"); + successHandler.setDefaultTargetUrl(this.adminServer.getContextPath() + "/"); + + http.authorizeRequests() + .antMatchers(this.adminServer.getContextPath() + "/assets/**") + .permitAll() + .antMatchers(this.adminServer.getContextPath() + "/login") + .permitAll() + .anyRequest() + .authenticated() + .and() + .formLogin() + .loginPage(this.adminServer.getContextPath() + "/login") + .successHandler(successHandler) + .and() + .logout() + .logoutUrl(this.adminServer.getContextPath() + "/logout") + .and() + .httpBasic() + .and() + .csrf() + .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) + .ignoringRequestMatchers(new AntPathRequestMatcher(this.adminServer.getContextPath() + "/instances", HttpMethod.POST.toString()), new AntPathRequestMatcher(this.adminServer.getContextPath() + "/instances/*", HttpMethod.DELETE.toString()), + new AntPathRequestMatcher(this.adminServer.getContextPath() + "/actuator/**")) + .and() + .rememberMe() + .key(UUID.randomUUID() + .toString()) + .tokenValiditySeconds(1209600); } } diff --git a/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties b/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties index 362f6428e8..ba7a7de2a0 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties +++ b/spring-boot-admin/spring-boot-admin-server/src/main/resources/application.properties @@ -1,16 +1,19 @@ spring.application.name=spring-boot-admin-server -security.user.name=admin -security.user.password=admin +spring.security.user.name=admin +spring.security.user.password=admin #configs to connect to self register the admin server as a client -spring.boot.admin.url=http://localhost:8080 -spring.boot.admin.username=${security.user.name} -spring.boot.admin.password=${security.user.password} +spring.boot.admin.client.url=http://localhost:8080 +spring.boot.admin.client.username=${spring.security.user.name} +spring.boot.admin.client.password=${spring.security.user.password} #configs to give secured server info -spring.boot.admin.client.metadata.user.name=${security.user.name} -spring.boot.admin.client.metadata.user.password=${security.user.password} +spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name} +spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password} + +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always #mail notifications #spring.mail.host=smtp.gmail.com diff --git a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java index 465d079ac3..fc8acc4e4d 100644 --- a/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java +++ b/spring-boot-admin/spring-boot-admin-server/src/test/java/com/baeldung/springbootadminserver/NotifierConfigurationIntegrationTest.java @@ -1,9 +1,11 @@ package com.baeldung.springbootadminserver; import com.baeldung.springbootadminserver.configs.NotifierConfiguration; -import de.codecentric.boot.admin.notify.Notifier; -import de.codecentric.boot.admin.notify.RemindingNotifier; -import de.codecentric.boot.admin.notify.filter.FilteringNotifier; + +import de.codecentric.boot.admin.server.notify.Notifier; +import de.codecentric.boot.admin.server.notify.RemindingNotifier; +import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml index 1e4ee698c6..74e786be99 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml @@ -44,7 +44,7 @@ org.springframework.boot spring-boot-starter-test - 1.5.10.RELEASE + ${spring-boot.version} test diff --git a/spring-boot-data/pom.xml b/spring-boot-data/pom.xml index 9c11e09f4a..4af0acc3c0 100644 --- a/spring-boot-data/pom.xml +++ b/spring-boot-data/pom.xml @@ -18,25 +18,22 @@ org.springframework.boot spring-boot-starter-data-redis - 2.1.6.RELEASE org.springframework.boot spring-boot-starter-data-mongodb - 2.1.6.RELEASE org.springframework.boot spring-boot-starter-data-jpa - 2.1.6.RELEASE com.h2database h2 - 1.4.197 + ${h2.version} diff --git a/spring-boot-kotlin/src/main/kotlin/com/baeldung/nonblockingcoroutines/controller/ProductControllerCoroutines.kt b/spring-boot-kotlin/src/main/kotlin/com/baeldung/nonblockingcoroutines/controller/ProductControllerCoroutines.kt index d70d352cda..363090abac 100644 --- a/spring-boot-kotlin/src/main/kotlin/com/baeldung/nonblockingcoroutines/controller/ProductControllerCoroutines.kt +++ b/spring-boot-kotlin/src/main/kotlin/com/baeldung/nonblockingcoroutines/controller/ProductControllerCoroutines.kt @@ -5,6 +5,8 @@ import com.baeldung.nonblockingcoroutines.repository.ProductRepositoryCoroutines import kotlinx.coroutines.Deferred import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.async import kotlinx.coroutines.flow.Flow import org.springframework.beans.factory.annotation.Autowired @@ -28,17 +30,17 @@ class ProductControllerCoroutines { } @GetMapping("/{id}/stock") - suspend fun findOneInStock(@PathVariable id: Int): ProductStockView { - val product: Deferred = GlobalScope.async { + suspend fun findOneInStock(@PathVariable id: Int): ProductStockView = coroutineScope { + val product: Deferred = async(start = CoroutineStart.LAZY) { productRepository.getProductById(id) } - val quantity: Deferred = GlobalScope.async { + val quantity: Deferred = async(start = CoroutineStart.LAZY) { webClient.get() .uri("/stock-service/product/$id/quantity") .accept(APPLICATION_JSON) .awaitExchange().awaitBody() } - return ProductStockView(product.await()!!, quantity.await()) + ProductStockView(product.await()!!, quantity.await()) } @FlowPreview diff --git a/spring-boot-logging-log4j2/pom.xml b/spring-boot-logging-log4j2/pom.xml index 64696969ca..8e4bf60f91 100644 --- a/spring-boot-logging-log4j2/pom.xml +++ b/spring-boot-logging-log4j2/pom.xml @@ -37,7 +37,7 @@ org.projectlombok lombok - 1.18.4 + ${lombok.version} provided @@ -79,5 +79,6 @@ com.baeldung.springbootlogging.SpringBootLoggingApplication 1.3.8.RELEASE 1.1.16 + 1.18.4 diff --git a/spring-boot-management/pom.xml b/spring-boot-management/pom.xml index 2b3e8f5d06..ca483d2f61 100644 --- a/spring-boot-management/pom.xml +++ b/spring-boot-management/pom.xml @@ -1,47 +1,56 @@ - - 4.0.0 - - com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../parent-boot-2 - - com.baeldung - spring-boot-management - 0.0.1-SNAPSHOT - spring-boot-management + + 4.0.0 + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 + + com.baeldung + spring-boot-management + 0.0.1-SNAPSHOT + spring-boot-management - - 1.8 - + + com.baeldung.spring.boot.management.logging.LoggingApplication + 1.8 + 2.1.6 + - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + de.codecentric + spring-boot-admin-starter-client + ${spring-boot-admin-starter-client.version} + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java new file mode 100644 index 0000000000..6371ac4c64 --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.boot.management.logging; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class LoggingApplication { + public static void main(String[] args) { + SpringApplication.run(LoggingApplication.class); + } +} diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java new file mode 100644 index 0000000000..5bd15be10c --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java @@ -0,0 +1,24 @@ +package com.baeldung.spring.boot.management.logging; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/log") +public class LoggingController { + private Log log = LogFactory.getLog(LoggingController.class); + + @GetMapping + public String log() { + log.trace("This is a TRACE level message"); + log.debug("This is a DEBUG level message"); + log.info("This is an INFO level message"); + log.warn("This is a WARN level message"); + log.error("This is an ERROR level message"); + + return "See the log for details"; + } +} diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java new file mode 100644 index 0000000000..45cc1ebb33 --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java @@ -0,0 +1,14 @@ +package com.baeldung.spring.boot.management.logging; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +public class SecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf() + .ignoringAntMatchers("/actuator/**"); + } +} diff --git a/spring-boot-management/src/main/resources/application.properties b/spring-boot-management/src/main/resources/application.properties index 835ca64eac..338251cf9b 100644 --- a/spring-boot-management/src/main/resources/application.properties +++ b/spring-boot-management/src/main/resources/application.properties @@ -1,3 +1,22 @@ -management.endpoints.web.exposure.include=httptrace +management.endpoints.web.exposure.include=httptrace,loggers,health,info,metrics management.trace.http.include=RESPONSE_HEADERS +management.endpoint.loggers.enabled=true + +#basic auth creddentials +spring.security.user.name=client +spring.security.user.password=client + +#configs to connect to a secured server +spring.boot.admin.client.url=http://localhost:8080 +spring.boot.admin.client.username=admin +spring.boot.admin.client.password=admin + +#configs to give secured server info +spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name} +spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password} + +#app config +spring.application.name=spring-boot-management +server.port=8081 + diff --git a/spring-boot-management/src/main/resources/logback.xml b/spring-boot-management/src/main/resources/logback.xml new file mode 100644 index 0000000000..36314cbeeb --- /dev/null +++ b/spring-boot-management/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/spring-boot-mvc-birt/pom.xml b/spring-boot-mvc-birt/pom.xml index bf6bbbf71d..3532b20c15 100644 --- a/spring-boot-mvc-birt/pom.xml +++ b/spring-boot-mvc-birt/pom.xml @@ -48,19 +48,19 @@ com.innoventsolutions.birt.runtime org.eclipse.birt.runtime_4.8.0-20180626 - 4.8.0 + ${eclipse.birt.runtime.version} log4j log4j - 1.2.17 + ${log4j.version} org.projectlombok lombok - 1.18.6 + ${lombok.version} provided @@ -80,6 +80,7 @@ com.baeldung.birt.engine.ReportEngineApplication 1.8 1.8 + 4.8.0 diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml index 13ad18810e..18bc426364 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml @@ -18,6 +18,8 @@ 1.8 Greenwich.SR1 + 4.0.0 + 1.8.2 @@ -41,19 +43,19 @@ io.confluent kafka-avro-serializer - 4.0.0 + ${kafka-avro-serializer.version} org.apache.avro avro-compiler - 1.8.2 + ${avro.version} org.apache.avro avro-maven-plugin - 1.8.2 + ${avro.version} diff --git a/spring-core-2/README.md b/spring-core-2/README.md index 4c9e3b9ddf..113bbe9c83 100644 --- a/spring-core-2/README.md +++ b/spring-core-2/README.md @@ -1,3 +1,6 @@ ## Relevant Articles: - [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) +- [Exploring the Spring BeanFactory API](http://www.baeldung.com/spring-beanfactory) +- [How to use the Spring FactoryBean?](http://www.baeldung.com/spring-factorybean) +- [Spring – Injecting Collections](http://www.baeldung.com/spring-injecting-collections) diff --git a/spring-core-2/pom.xml b/spring-core-2/pom.xml index d68beda64a..c9334e3d38 100644 --- a/spring-core-2/pom.xml +++ b/spring-core-2/pom.xml @@ -14,6 +14,11 @@ + + org.springframework + spring-test + ${spring.version} + org.springframework spring-beans diff --git a/spring-core/src/main/java/com/baeldung/beanfactory/Employee.java b/spring-core-2/src/main/java/com/baeldung/beanfactory/Employee.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/beanfactory/Employee.java rename to spring-core-2/src/main/java/com/baeldung/beanfactory/Employee.java diff --git a/spring-core/src/main/java/com/baeldung/collection/BaeldungBean.java b/spring-core-2/src/main/java/com/baeldung/collection/BaeldungBean.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/collection/BaeldungBean.java rename to spring-core-2/src/main/java/com/baeldung/collection/BaeldungBean.java diff --git a/spring-core/src/main/java/com/baeldung/collection/CollectionConfig.java b/spring-core-2/src/main/java/com/baeldung/collection/CollectionConfig.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/collection/CollectionConfig.java rename to spring-core-2/src/main/java/com/baeldung/collection/CollectionConfig.java diff --git a/spring-core/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java b/spring-core-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java rename to spring-core-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java diff --git a/spring-core/src/main/java/com/baeldung/collection/CollectionsBean.java b/spring-core-2/src/main/java/com/baeldung/collection/CollectionsBean.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/collection/CollectionsBean.java rename to spring-core-2/src/main/java/com/baeldung/collection/CollectionsBean.java diff --git a/spring-core/src/main/java/com/baeldung/factorybean/FactoryBeanAppConfig.java b/spring-core-2/src/main/java/com/baeldung/factorybean/FactoryBeanAppConfig.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/FactoryBeanAppConfig.java rename to spring-core-2/src/main/java/com/baeldung/factorybean/FactoryBeanAppConfig.java diff --git a/spring-core/src/main/java/com/baeldung/factorybean/NonSingleToolFactory.java b/spring-core-2/src/main/java/com/baeldung/factorybean/NonSingleToolFactory.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/NonSingleToolFactory.java rename to spring-core-2/src/main/java/com/baeldung/factorybean/NonSingleToolFactory.java diff --git a/spring-core/src/main/java/com/baeldung/factorybean/README.md b/spring-core-2/src/main/java/com/baeldung/factorybean/README.md similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/README.md rename to spring-core-2/src/main/java/com/baeldung/factorybean/README.md diff --git a/spring-core/src/main/java/com/baeldung/factorybean/SingleToolFactory.java b/spring-core-2/src/main/java/com/baeldung/factorybean/SingleToolFactory.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/SingleToolFactory.java rename to spring-core-2/src/main/java/com/baeldung/factorybean/SingleToolFactory.java diff --git a/spring-core/src/main/java/com/baeldung/factorybean/Tool.java b/spring-core-2/src/main/java/com/baeldung/factorybean/Tool.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/Tool.java rename to spring-core-2/src/main/java/com/baeldung/factorybean/Tool.java diff --git a/spring-core/src/main/java/com/baeldung/factorybean/ToolFactory.java b/spring-core-2/src/main/java/com/baeldung/factorybean/ToolFactory.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/factorybean/ToolFactory.java rename to spring-core-2/src/main/java/com/baeldung/factorybean/ToolFactory.java diff --git a/spring-core/src/test/java/com/baeldung/beanfactory/BeanFactoryWithClassPathResourceIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/beanfactory/BeanFactoryWithClassPathResourceIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/beanfactory/BeanFactoryWithClassPathResourceIntegrationTest.java rename to spring-core-2/src/test/java/com/baeldung/beanfactory/BeanFactoryWithClassPathResourceIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/beanfactory/README.md b/spring-core-2/src/test/java/com/baeldung/beanfactory/README.md similarity index 100% rename from spring-core/src/test/java/com/baeldung/beanfactory/README.md rename to spring-core-2/src/test/java/com/baeldung/beanfactory/README.md diff --git a/spring-core/src/test/java/com/baeldung/factorybean/AbstractFactoryBeanIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/factorybean/AbstractFactoryBeanIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/factorybean/AbstractFactoryBeanIntegrationTest.java rename to spring-core-2/src/test/java/com/baeldung/factorybean/AbstractFactoryBeanIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/factorybean/FactoryBeanJavaConfigIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/factorybean/FactoryBeanJavaConfigIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/factorybean/FactoryBeanJavaConfigIntegrationTest.java rename to spring-core-2/src/test/java/com/baeldung/factorybean/FactoryBeanJavaConfigIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/factorybean/FactoryBeanXmlConfigIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/factorybean/FactoryBeanXmlConfigIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/factorybean/FactoryBeanXmlConfigIntegrationTest.java rename to spring-core-2/src/test/java/com/baeldung/factorybean/FactoryBeanXmlConfigIntegrationTest.java diff --git a/spring-core/README.md b/spring-core/README.md index 111b034bef..3ff3f1ea41 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -1,22 +1,12 @@ ### Relevant Articles: - [Wiring in Spring: @Autowired, @Resource and @Inject](http://www.baeldung.com/spring-annotations-resource-inject-autowire) -- [Exploring the Spring BeanFactory API](http://www.baeldung.com/spring-beanfactory) -- [How to use the Spring FactoryBean?](http://www.baeldung.com/spring-factorybean) -- [Constructor Dependency Injection in Spring](http://www.baeldung.com/constructor-injection-in-spring) - [Constructor Injection in Spring with Lombok](http://www.baeldung.com/spring-injection-lombok) - [Introduction to Spring’s StreamUtils](http://www.baeldung.com/spring-stream-utils) - [XML-Based Injection in Spring](http://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](http://www.baeldung.com/spring-lazy-annotation) -- [Injecting Prototype Beans into a Singleton Instance in Spring](http://www.baeldung.com/spring-inject-prototype-bean-into-singleton) -- [@Lookup Annotation in Spring](http://www.baeldung.com/spring-lookup) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](http://www.baeldung.com/spring-bean-name-factory-aware) -- [Spring – Injecting Collections](http://www.baeldung.com/spring-injecting-collections) - [Access a File from the Classpath in a Spring Application](http://www.baeldung.com/spring-classpath-file-access) -- [Controlling Bean Creation Order with @DependsOn Annotation](http://www.baeldung.com/spring-depends-on) -- [Spring Autowiring of Generic Types](https://www.baeldung.com/spring-autowire-generics) - [Spring Application Context Events](https://www.baeldung.com/spring-context-events) -- [Unsatisfied Dependency in Spring](https://www.baeldung.com/spring-unsatisfied-dependency) - [What is a Spring Bean?](https://www.baeldung.com/spring-bean) - [Spring PostConstruct and PreDestroy Annotations](https://www.baeldung.com/spring-postconstruct-predestroy) -- [Guice vs Spring – Dependency Injection](https://www.baeldung.com/guice-spring-dependency-injection) -- [Circular Dependencies in Spring](http://www.baeldung.com/circular-dependencies-in-spring) + diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java rename to spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java rename to spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java diff --git a/spring-di/README.md b/spring-di/README.md index a61ebe5127..59651751ee 100644 --- a/spring-di/README.md +++ b/spring-di/README.md @@ -1,3 +1,11 @@ ### Relevant Articles - [The Spring @Qualifier Annotation](https://www.baeldung.com/spring-qualifier-annotation) +- [Constructor Dependency Injection in Spring](http://www.baeldung.com/constructor-injection-in-spring) +- [Spring Autowiring of Generic Types](https://www.baeldung.com/spring-autowire-generics) +- [Guice vs Spring – Dependency Injection](https://www.baeldung.com/guice-spring-dependency-injection) +- [Injecting Prototype Beans into a Singleton Instance in Spring](http://www.baeldung.com/spring-inject-prototype-bean-into-singleton) +- [@Lookup Annotation in Spring](http://www.baeldung.com/spring-lookup) +- [Controlling Bean Creation Order with @DependsOn Annotation](http://www.baeldung.com/spring-depends-on) +- [Unsatisfied Dependency in Spring](https://www.baeldung.com/spring-unsatisfied-dependency) +- [Circular Dependencies in Spring](http://www.baeldung.com/circular-dependencies-in-spring) diff --git a/spring-di/pom.xml b/spring-di/pom.xml index f3ad380778..c865815753 100644 --- a/spring-di/pom.xml +++ b/spring-di/pom.xml @@ -9,18 +9,70 @@ spring-di - parent-boot-2 com.baeldung + parent-spring-5 0.0.1-SNAPSHOT - ../parent-boot-2 + ../parent-spring-5 - + + org.springframework + spring-test + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + org.springframework spring-context + ${spring.version} + + javax.inject + javax.inject + ${javax.inject.version} + + + com.google.guava + guava + ${guava.version} + + + org.projectlombok + lombok + ${lombok.version} + + + org.springframework.boot + spring-boot-starter + ${spring-boot.version} + + + org.springframework.boot + spring-boot-test + ${mockito.spring.boot.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + commons-io + commons-io + ${commons.io.version} + + + + + + javax.annotation @@ -28,12 +80,12 @@ ${annotation-api.version} - - - org.springframework - spring-test - test - + + + + + + @@ -66,7 +118,7 @@ org.apache.maven.plugins maven-war-plugin - 3.2.2 + ${maven-war-plugin.version} false @@ -97,6 +149,14 @@ 5.0.6.RELEASE 1.3.2 + + 1.4.4.RELEASE + 1 + 20.0 + 2.5 + 1.5.2.RELEASE + 1.10.19 + 3.12.2 \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java b/spring-di/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java rename to spring-di/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java diff --git a/spring-core/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java b/spring-di/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java rename to spring-di/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java diff --git a/spring-core/src/main/java/com/baeldung/constructordi/Config.java b/spring-di/src/main/java/com/baeldung/constructordi/Config.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/constructordi/Config.java rename to spring-di/src/main/java/com/baeldung/constructordi/Config.java diff --git a/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java b/spring-di/src/main/java/com/baeldung/constructordi/SpringRunner.java similarity index 96% rename from spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java rename to spring-di/src/main/java/com/baeldung/constructordi/SpringRunner.java index bffd35ec59..abbe97a4bd 100644 --- a/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java +++ b/spring-di/src/main/java/com/baeldung/constructordi/SpringRunner.java @@ -1,31 +1,31 @@ -package com.baeldung.constructordi; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.constructordi.domain.Car; - -public class SpringRunner { - public static void main(String[] args) { - Car toyota = getCarFromXml(); - - System.out.println(toyota); - - toyota = getCarFromJavaConfig(); - - System.out.println(toyota); - } - - private static Car getCarFromJavaConfig() { - ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); - - return context.getBean(Car.class); - } - - private static Car getCarFromXml() { - ApplicationContext context = new ClassPathXmlApplicationContext("constructordi.xml"); - - return context.getBean(Car.class); - } -} +package com.baeldung.constructordi; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.constructordi.domain.Car; + +public class SpringRunner { + public static void main(String[] args) { + Car toyota = getCarFromXml(); + + System.out.println(toyota); + + toyota = getCarFromJavaConfig(); + + System.out.println(toyota); + } + + private static Car getCarFromJavaConfig() { + ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); + + return context.getBean(Car.class); + } + + private static Car getCarFromXml() { + ApplicationContext context = new ClassPathXmlApplicationContext("constructordi.xml"); + + return context.getBean(Car.class); + } +} diff --git a/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java b/spring-di/src/main/java/com/baeldung/constructordi/domain/Car.java similarity index 96% rename from spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java rename to spring-di/src/main/java/com/baeldung/constructordi/domain/Car.java index 5c9467fdf4..9f68ba5cd9 100644 --- a/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java +++ b/spring-di/src/main/java/com/baeldung/constructordi/domain/Car.java @@ -1,21 +1,21 @@ -package com.baeldung.constructordi.domain; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Car { - private Engine engine; - private Transmission transmission; - - @Autowired - public Car(Engine engine, Transmission transmission) { - this.engine = engine; - this.transmission = transmission; - } - - @Override - public String toString() { - return String.format("Engine: %s Transmission: %s", engine, transmission); - } -} +package com.baeldung.constructordi.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Car { + private Engine engine; + private Transmission transmission; + + @Autowired + public Car(Engine engine, Transmission transmission) { + this.engine = engine; + this.transmission = transmission; + } + + @Override + public String toString() { + return String.format("Engine: %s Transmission: %s", engine, transmission); + } +} diff --git a/spring-core/src/main/java/com/baeldung/constructordi/domain/Engine.java b/spring-di/src/main/java/com/baeldung/constructordi/domain/Engine.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/constructordi/domain/Engine.java rename to spring-di/src/main/java/com/baeldung/constructordi/domain/Engine.java diff --git a/spring-core/src/main/java/com/baeldung/constructordi/domain/Transmission.java b/spring-di/src/main/java/com/baeldung/constructordi/domain/Transmission.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/constructordi/domain/Transmission.java rename to spring-di/src/main/java/com/baeldung/constructordi/domain/Transmission.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java rename to spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/ArbitraryDependency.java rename to spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java rename to spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/exception/app/PurchaseDeptService.java b/spring-di/src/main/java/com/baeldung/dependency/exception/app/PurchaseDeptService.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/exception/app/PurchaseDeptService.java rename to spring-di/src/main/java/com/baeldung/dependency/exception/app/PurchaseDeptService.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/exception/app/SpringDependenciesExampleApplication.java b/spring-di/src/main/java/com/baeldung/dependency/exception/app/SpringDependenciesExampleApplication.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/exception/app/SpringDependenciesExampleApplication.java rename to spring-di/src/main/java/com/baeldung/dependency/exception/app/SpringDependenciesExampleApplication.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/exception/repository/DressRepository.java b/spring-di/src/main/java/com/baeldung/dependency/exception/repository/DressRepository.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/exception/repository/DressRepository.java rename to spring-di/src/main/java/com/baeldung/dependency/exception/repository/DressRepository.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/exception/repository/InventoryRepository.java b/spring-di/src/main/java/com/baeldung/dependency/exception/repository/InventoryRepository.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/exception/repository/InventoryRepository.java rename to spring-di/src/main/java/com/baeldung/dependency/exception/repository/InventoryRepository.java diff --git a/spring-core/src/main/java/com/baeldung/dependency/exception/repository/ShoeRepository.java b/spring-di/src/main/java/com/baeldung/dependency/exception/repository/ShoeRepository.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependency/exception/repository/ShoeRepository.java rename to spring-di/src/main/java/com/baeldung/dependency/exception/repository/ShoeRepository.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/annotation/CarQualifier.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/annotation/CarQualifier.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/annotation/CarQualifier.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/annotation/CarQualifier.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/app/CustomConfiguration.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/app/CustomConfiguration.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/app/CustomConfiguration.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/app/CustomConfiguration.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Car.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Car.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Car.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Car.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/CarHandler.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/CarHandler.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/CarHandler.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/CarHandler.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Motorcycle.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Motorcycle.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Motorcycle.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Motorcycle.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Vehicle.java b/spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Vehicle.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/model/Vehicle.java rename to spring-di/src/main/java/com/baeldung/dependencyinjectiontypes/model/Vehicle.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/DriverApplication.java b/spring-di/src/main/java/com/baeldung/dependson/DriverApplication.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/DriverApplication.java rename to spring-di/src/main/java/com/baeldung/dependson/DriverApplication.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/config/Config.java b/spring-di/src/main/java/com/baeldung/dependson/config/Config.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/config/Config.java rename to spring-di/src/main/java/com/baeldung/dependson/config/Config.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/file/processor/FileProcessor.java b/spring-di/src/main/java/com/baeldung/dependson/file/processor/FileProcessor.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/file/processor/FileProcessor.java rename to spring-di/src/main/java/com/baeldung/dependson/file/processor/FileProcessor.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/file/reader/FileReader.java b/spring-di/src/main/java/com/baeldung/dependson/file/reader/FileReader.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/file/reader/FileReader.java rename to spring-di/src/main/java/com/baeldung/dependson/file/reader/FileReader.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/file/writer/FileWriter.java b/spring-di/src/main/java/com/baeldung/dependson/file/writer/FileWriter.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/file/writer/FileWriter.java rename to spring-di/src/main/java/com/baeldung/dependson/file/writer/FileWriter.java diff --git a/spring-core/src/main/java/com/baeldung/dependson/shared/File.java b/spring-di/src/main/java/com/baeldung/dependson/shared/File.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/dependson/shared/File.java rename to spring-di/src/main/java/com/baeldung/dependson/shared/File.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/Account.java b/spring-di/src/main/java/com/baeldung/di/spring/Account.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/Account.java rename to spring-di/src/main/java/com/baeldung/di/spring/Account.java index 6d9883bda5..e34f2864e5 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/Account.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/Account.java @@ -1,27 +1,27 @@ -package com.baeldung.di.spring; - -import org.springframework.stereotype.Component; - -@Component -public class Account { - - private String accountNumber; - private String type; - - public String getAccountNumber() { - return accountNumber; - } - - public void setAccountNumber(String accountNumber) { - this.accountNumber = accountNumber; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - -} +package com.baeldung.di.spring; + +import org.springframework.stereotype.Component; + +@Component +public class Account { + + private String accountNumber; + private String type; + + public String getAccountNumber() { + return accountNumber; + } + + public void setAccountNumber(String accountNumber) { + this.accountNumber = accountNumber; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AccountService.java b/spring-di/src/main/java/com/baeldung/di/spring/AccountService.java similarity index 93% rename from spring-core/src/main/java/com/baeldung/di/spring/AccountService.java rename to spring-di/src/main/java/com/baeldung/di/spring/AccountService.java index 75ba6bb3eb..388c8c03db 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/AccountService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/AccountService.java @@ -1,5 +1,5 @@ -package com.baeldung.di.spring; - -public interface AccountService { - -} +package com.baeldung.di.spring; + +public interface AccountService { + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java b/spring-di/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java similarity index 95% rename from spring-core/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java rename to spring-di/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java index 4a4baf7d92..6a3e4619f3 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/AccountServiceImpl.java @@ -1,8 +1,8 @@ -package com.baeldung.di.spring; - -import org.springframework.stereotype.Component; - -@Component -public class AccountServiceImpl implements AccountService { - -} +package com.baeldung.di.spring; + +import org.springframework.stereotype.Component; + +@Component +public class AccountServiceImpl implements AccountService { + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AudioBookService.java b/spring-di/src/main/java/com/baeldung/di/spring/AudioBookService.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/AudioBookService.java rename to spring-di/src/main/java/com/baeldung/di/spring/AudioBookService.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AudioBookServiceImpl.java b/spring-di/src/main/java/com/baeldung/di/spring/AudioBookServiceImpl.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/AudioBookServiceImpl.java rename to spring-di/src/main/java/com/baeldung/di/spring/AudioBookServiceImpl.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AuthorService.java b/spring-di/src/main/java/com/baeldung/di/spring/AuthorService.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/AuthorService.java rename to spring-di/src/main/java/com/baeldung/di/spring/AuthorService.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/AuthorServiceImpl.java b/spring-di/src/main/java/com/baeldung/di/spring/AuthorServiceImpl.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/AuthorServiceImpl.java rename to spring-di/src/main/java/com/baeldung/di/spring/AuthorServiceImpl.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/BookService.java b/spring-di/src/main/java/com/baeldung/di/spring/BookService.java similarity index 93% rename from spring-core/src/main/java/com/baeldung/di/spring/BookService.java rename to spring-di/src/main/java/com/baeldung/di/spring/BookService.java index 8e693e687d..6b25137ced 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/BookService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/BookService.java @@ -1,5 +1,5 @@ -package com.baeldung.di.spring; - -public interface BookService { - -} +package com.baeldung.di.spring; + +public interface BookService { + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/BookServiceImpl.java b/spring-di/src/main/java/com/baeldung/di/spring/BookServiceImpl.java similarity index 95% rename from spring-core/src/main/java/com/baeldung/di/spring/BookServiceImpl.java rename to spring-di/src/main/java/com/baeldung/di/spring/BookServiceImpl.java index b4ea602234..7cbb7e9b89 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/BookServiceImpl.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/BookServiceImpl.java @@ -1,10 +1,10 @@ -package com.baeldung.di.spring; - -import org.springframework.beans.factory.annotation.Autowired; - -public class BookServiceImpl implements BookService { - - @Autowired(required = false) - private AuthorService authorService; - -} +package com.baeldung.di.spring; + +import org.springframework.beans.factory.annotation.Autowired; + +public class BookServiceImpl implements BookService { + + @Autowired(required = false) + private AuthorService authorService; + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/Foo.java b/spring-di/src/main/java/com/baeldung/di/spring/Foo.java similarity index 93% rename from spring-core/src/main/java/com/baeldung/di/spring/Foo.java rename to spring-di/src/main/java/com/baeldung/di/spring/Foo.java index 9d9b5d0888..6b2ba9b602 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/Foo.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/Foo.java @@ -1,4 +1,4 @@ -package com.baeldung.di.spring; - -public class Foo { -} +package com.baeldung.di.spring; + +public class Foo { +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/FooProcessor.java b/spring-di/src/main/java/com/baeldung/di/spring/FooProcessor.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/FooProcessor.java rename to spring-di/src/main/java/com/baeldung/di/spring/FooProcessor.java index 9baaaef7a3..74f4d3a92b 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/FooProcessor.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/FooProcessor.java @@ -1,6 +1,6 @@ -package com.baeldung.di.spring; - -public class FooProcessor { - - private Foo foo; +package com.baeldung.di.spring; + +public class FooProcessor { + + private Foo foo; } \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/di/spring/IService.java b/spring-di/src/main/java/com/baeldung/di/spring/IService.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/IService.java rename to spring-di/src/main/java/com/baeldung/di/spring/IService.java index 478eea0657..8c27f91589 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/IService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/IService.java @@ -1,5 +1,5 @@ -package com.baeldung.di.spring; - -public interface IService { - public String serve(); -} +package com.baeldung.di.spring; + +public interface IService { + public String serve(); +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/IndexApp.java b/spring-di/src/main/java/com/baeldung/di/spring/IndexApp.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/IndexApp.java rename to spring-di/src/main/java/com/baeldung/di/spring/IndexApp.java index a45970d6b2..d3ca2158cd 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/IndexApp.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/IndexApp.java @@ -1,19 +1,19 @@ -package com.baeldung.di.spring; - -public class IndexApp { - - private IService service; - - public String getServiceValue() { - return service.serve(); - } - - public IService getService() { - return service; - } - - public void setService(IService service) { - this.service = service; - } - -} +package com.baeldung.di.spring; + +public class IndexApp { + + private IService service; + + public String getServiceValue() { + return service.serve(); + } + + public IService getService() { + return service; + } + + public void setService(IService service) { + this.service = service; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/IndexService.java b/spring-di/src/main/java/com/baeldung/di/spring/IndexService.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/IndexService.java rename to spring-di/src/main/java/com/baeldung/di/spring/IndexService.java index ad241f5200..cbd4c28f3c 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/IndexService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/IndexService.java @@ -1,10 +1,10 @@ -package com.baeldung.di.spring; - -public class IndexService implements IService { - - @Override - public String serve() { - return "Hello World"; - } - -} +package com.baeldung.di.spring; + +public class IndexService implements IService { + + @Override + public String serve() { + return "Hello World"; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java b/spring-di/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java similarity index 96% rename from spring-core/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java rename to spring-di/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java index f083504e8f..2cc7ff65ae 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/InstanceServiceFactory.java @@ -1,14 +1,14 @@ -package com.baeldung.di.spring; - -public class InstanceServiceFactory { - public IService getService(int number) { - switch (number) { - case 1: - return new MessageService("Foo"); - case 0: - return new IndexService(); - default: - throw new IllegalArgumentException("Unknown parameter " + number); - } - } -} +package com.baeldung.di.spring; + +public class InstanceServiceFactory { + public IService getService(int number) { + switch (number) { + case 1: + return new MessageService("Foo"); + case 0: + return new IndexService(); + default: + throw new IllegalArgumentException("Unknown parameter " + number); + } + } +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/MessageApp.java b/spring-di/src/main/java/com/baeldung/di/spring/MessageApp.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/MessageApp.java rename to spring-di/src/main/java/com/baeldung/di/spring/MessageApp.java index 1bf6c20b28..bb8188853a 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/MessageApp.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/MessageApp.java @@ -1,14 +1,14 @@ -package com.baeldung.di.spring; - -public class MessageApp { - - private IService iService; - - public MessageApp(IService iService) { - this.iService = iService; - } - - public String getServiceValue() { - return iService.serve(); - } -} +package com.baeldung.di.spring; + +public class MessageApp { + + private IService iService; + + public MessageApp(IService iService) { + this.iService = iService; + } + + public String getServiceValue() { + return iService.serve(); + } +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/MessageService.java b/spring-di/src/main/java/com/baeldung/di/spring/MessageService.java similarity index 94% rename from spring-core/src/main/java/com/baeldung/di/spring/MessageService.java rename to spring-di/src/main/java/com/baeldung/di/spring/MessageService.java index 9b6efaab2a..1bb548bdf6 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/MessageService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/MessageService.java @@ -1,16 +1,16 @@ -package com.baeldung.di.spring; - -public class MessageService implements IService { - - private String message; - - public MessageService(String message) { - this.message = message; - } - - @Override - public String serve() { - return message; - } - -} +package com.baeldung.di.spring; + +public class MessageService implements IService { + + private String message; + + public MessageService(String message) { + this.message = message; + } + + @Override + public String serve() { + return message; + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/PersonDao.java b/spring-di/src/main/java/com/baeldung/di/spring/PersonDao.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/PersonDao.java rename to spring-di/src/main/java/com/baeldung/di/spring/PersonDao.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/PersonDaoImpl.java b/spring-di/src/main/java/com/baeldung/di/spring/PersonDaoImpl.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/PersonDaoImpl.java rename to spring-di/src/main/java/com/baeldung/di/spring/PersonDaoImpl.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/SpringBeansConfig.java b/spring-di/src/main/java/com/baeldung/di/spring/SpringBeansConfig.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/SpringBeansConfig.java rename to spring-di/src/main/java/com/baeldung/di/spring/SpringBeansConfig.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/SpringMainConfig.java b/spring-di/src/main/java/com/baeldung/di/spring/SpringMainConfig.java similarity index 96% rename from spring-core/src/main/java/com/baeldung/di/spring/SpringMainConfig.java rename to spring-di/src/main/java/com/baeldung/di/spring/SpringMainConfig.java index 75066fd539..374a7e8e32 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/SpringMainConfig.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/SpringMainConfig.java @@ -1,18 +1,18 @@ -package com.baeldung.di.spring; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -@Configuration -@Import({ SpringBeansConfig.class }) -@ComponentScan("com.baeldung.di.spring") -public class SpringMainConfig { - - @Bean - public BookService bookServiceGenerator() { - return new BookServiceImpl(); - } - -} +package com.baeldung.di.spring; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import({ SpringBeansConfig.class }) +@ComponentScan("com.baeldung.di.spring") +public class SpringMainConfig { + + @Bean + public BookService bookServiceGenerator() { + return new BookServiceImpl(); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/SpringPersonService.java b/spring-di/src/main/java/com/baeldung/di/spring/SpringPersonService.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/di/spring/SpringPersonService.java rename to spring-di/src/main/java/com/baeldung/di/spring/SpringPersonService.java diff --git a/spring-core/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java b/spring-di/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java similarity index 96% rename from spring-core/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java rename to spring-di/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java index bd70898faf..6ef4c5e9ac 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/StaticServiceFactory.java @@ -1,14 +1,14 @@ -package com.baeldung.di.spring; - -public class StaticServiceFactory { - public static IService getService(int number) { - switch (number) { - case 1: - return new MessageService("Foo"); - case 0: - return new IndexService(); - default: - throw new IllegalArgumentException("Unknown parameter " + number); - } - } -} +package com.baeldung.di.spring; + +public class StaticServiceFactory { + public static IService getService(int number) { + switch (number) { + case 1: + return new MessageService("Foo"); + case 0: + return new IndexService(); + default: + throw new IllegalArgumentException("Unknown parameter " + number); + } + } +} diff --git a/spring-core/src/main/java/com/baeldung/di/spring/UserService.java b/spring-di/src/main/java/com/baeldung/di/spring/UserService.java similarity index 95% rename from spring-core/src/main/java/com/baeldung/di/spring/UserService.java rename to spring-di/src/main/java/com/baeldung/di/spring/UserService.java index 330d7f7448..5ff35cda95 100644 --- a/spring-core/src/main/java/com/baeldung/di/spring/UserService.java +++ b/spring-di/src/main/java/com/baeldung/di/spring/UserService.java @@ -1,20 +1,20 @@ -package com.baeldung.di.spring; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class UserService { - - @Autowired - private AccountService accountService; - - public AccountService getAccountService() { - return accountService; - } - - public void setAccountService(AccountService accountService) { - this.accountService = accountService; - } - -} +package com.baeldung.di.spring; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class UserService { + + @Autowired + private AccountService accountService; + + public AccountService getAccountService() { + return accountService; + } + + public void setAccountService(AccountService accountService) { + this.accountService = accountService; + } + +} diff --git a/spring-di/src/main/java/com/baeldung/methodinjections/AppConfig.java b/spring-di/src/main/java/com/baeldung/methodinjections/AppConfig.java new file mode 100644 index 0000000000..7c1e209383 --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/methodinjections/AppConfig.java @@ -0,0 +1,10 @@ +package com.baeldung.methodinjections; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = "com.baeldung.methodinjections") + +public class AppConfig { +} diff --git a/spring-di/src/main/java/com/baeldung/methodinjections/Grader.java b/spring-di/src/main/java/com/baeldung/methodinjections/Grader.java new file mode 100644 index 0000000000..10dc77484c --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/methodinjections/Grader.java @@ -0,0 +1,19 @@ +package com.baeldung.methodinjections; + +import java.util.Collection; + +import org.springframework.stereotype.Component; + +@Component +public class Grader { + + public String grade(Collection marks) { + + boolean result = marks.stream() + .anyMatch(mark -> mark < 45); + if (result) { + return "FAIL"; + } + return "PASS"; + } +} diff --git a/spring-di/src/main/java/com/baeldung/methodinjections/SchoolNotification.java b/spring-di/src/main/java/com/baeldung/methodinjections/SchoolNotification.java new file mode 100644 index 0000000000..752eb8893f --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/methodinjections/SchoolNotification.java @@ -0,0 +1,45 @@ +package com.baeldung.methodinjections; + +import java.util.ArrayList; +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component("schoolNotification") +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class SchoolNotification { + @Autowired + Grader grader; + + private String name; + private Collection marks; + + public SchoolNotification(String name) { + this.name = name; + this.marks = new ArrayList(); + } + + public String addMark(Integer mark) { + this.marks.add(mark); + return this.grader.grade(this.marks); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Collection getMarks() { + return marks; + } + + public void setMarks(Collection marks) { + this.marks = marks; + } +} diff --git a/spring-di/src/main/java/com/baeldung/methodinjections/Student.java b/spring-di/src/main/java/com/baeldung/methodinjections/Student.java new file mode 100644 index 0000000000..ceeebc3d0d --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/methodinjections/Student.java @@ -0,0 +1,27 @@ +package com.baeldung.methodinjections; + +import org.springframework.beans.factory.annotation.Lookup; +import org.springframework.stereotype.Component; + +@Component("studentBean") +public class Student { + + private String id; + + /** + * Injects a prototype bean SchoolNotification into Singleton student + */ + @Lookup + public SchoolNotification getNotification(String name) { + // spring overrides and returns a SchoolNotification instance + return null; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } +} diff --git a/spring-di/src/main/java/com/baeldung/methodinjections/StudentServices.java b/spring-di/src/main/java/com/baeldung/methodinjections/StudentServices.java new file mode 100644 index 0000000000..20d631b120 --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/methodinjections/StudentServices.java @@ -0,0 +1,21 @@ +package com.baeldung.methodinjections; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Lookup; +import org.springframework.stereotype.Component; + +@Component("studentService") +public abstract class StudentServices { + + private Map notes = new HashMap<>(); + + @Lookup + protected abstract SchoolNotification getNotification(String name); + + public String appendMark(String name, Integer mark) { + SchoolNotification notification = notes.computeIfAbsent(name, exists -> getNotification(name)); + return notification.addMark(mark); + } +} diff --git a/spring-di/src/main/java/org/baeldung/sample/App.java b/spring-di/src/main/java/com/baeldung/sample/App.java similarity index 92% rename from spring-di/src/main/java/org/baeldung/sample/App.java rename to spring-di/src/main/java/com/baeldung/sample/App.java index 17fc49fc8c..f2a017f3e5 100644 --- a/spring-di/src/main/java/org/baeldung/sample/App.java +++ b/spring-di/src/main/java/com/baeldung/sample/App.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.context.annotation.AnnotationConfigApplicationContext; diff --git a/spring-di/src/main/java/org/baeldung/sample/AppConfig.java b/spring-di/src/main/java/com/baeldung/sample/AppConfig.java similarity index 87% rename from spring-di/src/main/java/org/baeldung/sample/AppConfig.java rename to spring-di/src/main/java/com/baeldung/sample/AppConfig.java index 8a177d2611..c948011c69 100644 --- a/spring-di/src/main/java/org/baeldung/sample/AppConfig.java +++ b/spring-di/src/main/java/com/baeldung/sample/AppConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; diff --git a/spring-di/src/main/java/com/baeldung/sample/Bar.java b/spring-di/src/main/java/com/baeldung/sample/Bar.java new file mode 100644 index 0000000000..42302b5563 --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/sample/Bar.java @@ -0,0 +1,5 @@ +package com.baeldung.sample; + +public class Bar { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java b/spring-di/src/main/java/com/baeldung/sample/BarFormatter.java similarity index 86% rename from spring-di/src/main/java/org/baeldung/sample/BarFormatter.java rename to spring-di/src/main/java/com/baeldung/sample/BarFormatter.java index 8396653970..e3e0733627 100644 --- a/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java +++ b/spring-di/src/main/java/com/baeldung/sample/BarFormatter.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.stereotype.Component; diff --git a/spring-di/src/main/java/com/baeldung/sample/Foo.java b/spring-di/src/main/java/com/baeldung/sample/Foo.java new file mode 100644 index 0000000000..b25c9ecfb5 --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/sample/Foo.java @@ -0,0 +1,5 @@ +package com.baeldung.sample; + +public class Foo { + +} diff --git a/spring-di/src/main/java/com/baeldung/sample/FooDAO.java b/spring-di/src/main/java/com/baeldung/sample/FooDAO.java new file mode 100644 index 0000000000..cc8f732bf9 --- /dev/null +++ b/spring-di/src/main/java/com/baeldung/sample/FooDAO.java @@ -0,0 +1,5 @@ +package com.baeldung.sample; + +public class FooDAO { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java b/spring-di/src/main/java/com/baeldung/sample/FooFormatter.java similarity index 86% rename from spring-di/src/main/java/org/baeldung/sample/FooFormatter.java rename to spring-di/src/main/java/com/baeldung/sample/FooFormatter.java index 68cb7f81f2..25a0b9059d 100644 --- a/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java +++ b/spring-di/src/main/java/com/baeldung/sample/FooFormatter.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.stereotype.Component; diff --git a/spring-di/src/main/java/org/baeldung/sample/FooService.java b/spring-di/src/main/java/com/baeldung/sample/FooService.java similarity index 91% rename from spring-di/src/main/java/org/baeldung/sample/FooService.java rename to spring-di/src/main/java/com/baeldung/sample/FooService.java index 711711f205..6d7ed3d93b 100644 --- a/spring-di/src/main/java/org/baeldung/sample/FooService.java +++ b/spring-di/src/main/java/com/baeldung/sample/FooService.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/spring-di/src/main/java/org/baeldung/sample/Formatter.java b/spring-di/src/main/java/com/baeldung/sample/Formatter.java similarity index 65% rename from spring-di/src/main/java/org/baeldung/sample/Formatter.java rename to spring-di/src/main/java/com/baeldung/sample/Formatter.java index ab29c2b848..c5de59993c 100644 --- a/spring-di/src/main/java/org/baeldung/sample/Formatter.java +++ b/spring-di/src/main/java/com/baeldung/sample/Formatter.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; public interface Formatter { diff --git a/spring-di/src/main/java/org/baeldung/sample/FormatterType.java b/spring-di/src/main/java/com/baeldung/sample/FormatterType.java similarity index 93% rename from spring-di/src/main/java/org/baeldung/sample/FormatterType.java rename to spring-di/src/main/java/com/baeldung/sample/FormatterType.java index a00a9750bf..1ac6c6f4ad 100644 --- a/spring-di/src/main/java/org/baeldung/sample/FormatterType.java +++ b/spring-di/src/main/java/com/baeldung/sample/FormatterType.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/spring-di/src/main/java/org/baeldung/sample/Bar.java b/spring-di/src/main/java/org/baeldung/sample/Bar.java deleted file mode 100644 index 54e8d54418..0000000000 --- a/spring-di/src/main/java/org/baeldung/sample/Bar.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.baeldung.sample; - -public class Bar { - -} diff --git a/spring-di/src/main/java/org/baeldung/sample/Foo.java b/spring-di/src/main/java/org/baeldung/sample/Foo.java deleted file mode 100644 index 562a00121a..0000000000 --- a/spring-di/src/main/java/org/baeldung/sample/Foo.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.baeldung.sample; - -public class Foo { - -} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooDAO.java b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java deleted file mode 100644 index 151c0c38de..0000000000 --- a/spring-di/src/main/java/org/baeldung/sample/FooDAO.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.baeldung.sample; - -public class FooDAO { - -} diff --git a/spring-di/src/main/resources/application.properties b/spring-di/src/main/resources/application.properties new file mode 100644 index 0000000000..11710b49aa --- /dev/null +++ b/spring-di/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.profiles.active=prod + diff --git a/spring-di/src/main/resources/baeldung.xml b/spring-di/src/main/resources/baeldung.xml new file mode 100644 index 0000000000..d84492f1d4 --- /dev/null +++ b/spring-di/src/main/resources/baeldung.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-di/src/main/resources/beaninjectiontypes-context.xml b/spring-di/src/main/resources/beaninjectiontypes-context.xml new file mode 100644 index 0000000000..dfdea41cdc --- /dev/null +++ b/spring-di/src/main/resources/beaninjectiontypes-context.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/beans.xml b/spring-di/src/main/resources/beans.xml new file mode 100644 index 0000000000..4002fa63bd --- /dev/null +++ b/spring-di/src/main/resources/beans.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/classpathxmlapplicationcontext-example.xml b/spring-di/src/main/resources/classpathxmlapplicationcontext-example.xml new file mode 100644 index 0000000000..d0ba03cec8 --- /dev/null +++ b/spring-di/src/main/resources/classpathxmlapplicationcontext-example.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/classpathxmlapplicationcontext-internationalization.xml b/spring-di/src/main/resources/classpathxmlapplicationcontext-internationalization.xml new file mode 100644 index 0000000000..f68d623be7 --- /dev/null +++ b/spring-di/src/main/resources/classpathxmlapplicationcontext-internationalization.xml @@ -0,0 +1,14 @@ + + + + + + + dialog/dialog + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/com.baeldung.di.spring.properties b/spring-di/src/main/resources/com.baeldung.di.spring.properties new file mode 100644 index 0000000000..8b8b5b85c2 --- /dev/null +++ b/spring-di/src/main/resources/com.baeldung.di.spring.properties @@ -0,0 +1 @@ +message.value=Hello World \ No newline at end of file diff --git a/spring-di/src/main/resources/com.baeldung.di.spring.xml b/spring-di/src/main/resources/com.baeldung.di.spring.xml new file mode 100644 index 0000000000..81942453b2 --- /dev/null +++ b/spring-di/src/main/resources/com.baeldung.di.spring.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/constructordi.xml b/spring-di/src/main/resources/constructordi.xml new file mode 100644 index 0000000000..08f6013dc6 --- /dev/null +++ b/spring-di/src/main/resources/constructordi.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-di/src/main/resources/dependencyinjectiontypes-context.xml b/spring-di/src/main/resources/dependencyinjectiontypes-context.xml new file mode 100644 index 0000000000..bd6b3c408d --- /dev/null +++ b/spring-di/src/main/resources/dependencyinjectiontypes-context.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/dialog/dialog_en.properties b/spring-di/src/main/resources/dialog/dialog_en.properties new file mode 100644 index 0000000000..cf65b8990e --- /dev/null +++ b/spring-di/src/main/resources/dialog/dialog_en.properties @@ -0,0 +1,3 @@ +hello=hello +you=you +thanks=thank {0} \ No newline at end of file diff --git a/spring-di/src/main/resources/dialog/dialog_zh_CN.properties b/spring-di/src/main/resources/dialog/dialog_zh_CN.properties new file mode 100644 index 0000000000..ab09c8b39f --- /dev/null +++ b/spring-di/src/main/resources/dialog/dialog_zh_CN.properties @@ -0,0 +1,3 @@ +hello=\u4f60\u597d +you=\u4f60 +thanks=\u8c22\u8c22{0} \ No newline at end of file diff --git a/spring-di/src/main/resources/factorybean-abstract-spring-ctx.xml b/spring-di/src/main/resources/factorybean-abstract-spring-ctx.xml new file mode 100644 index 0000000000..a82b884ee5 --- /dev/null +++ b/spring-di/src/main/resources/factorybean-abstract-spring-ctx.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/factorybean-spring-ctx.xml b/spring-di/src/main/resources/factorybean-spring-ctx.xml new file mode 100644 index 0000000000..3231fda676 --- /dev/null +++ b/spring-di/src/main/resources/factorybean-spring-ctx.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/injectiontypes.xml b/spring-di/src/main/resources/injectiontypes.xml new file mode 100644 index 0000000000..9dad1e300a --- /dev/null +++ b/spring-di/src/main/resources/injectiontypes.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/main/resources/logback.xml b/spring-di/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/spring-di/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/spring-di/src/main/resources/setterdi.xml b/spring-di/src/main/resources/setterdi.xml new file mode 100644 index 0000000000..cf3b00d7f5 --- /dev/null +++ b/spring-di/src/main/resources/setterdi.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java b/spring-di/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/circulardependency/TestConfig.java b/spring-di/src/test/java/com/baeldung/circulardependency/TestConfig.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/circulardependency/TestConfig.java rename to spring-di/src/test/java/com/baeldung/circulardependency/TestConfig.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java diff --git a/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java rename to spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java diff --git a/spring-core/src/test/java/com/baeldung/constructordi/ConstructorDependencyInjectionIntegrationTest.java b/spring-di/src/test/java/com/baeldung/constructordi/ConstructorDependencyInjectionIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/constructordi/ConstructorDependencyInjectionIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/constructordi/ConstructorDependencyInjectionIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionIntegrationTest.java b/spring-di/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/dependson/config/TestConfig.java b/spring-di/src/test/java/com/baeldung/dependson/config/TestConfig.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/dependson/config/TestConfig.java rename to spring-di/src/test/java/com/baeldung/dependson/config/TestConfig.java diff --git a/spring-core/src/test/java/com/baeldung/dependson/processor/FileProcessorIntegrationTest.java b/spring-di/src/test/java/com/baeldung/dependson/processor/FileProcessorIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/dependson/processor/FileProcessorIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/dependson/processor/FileProcessorIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java b/spring-di/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java similarity index 96% rename from spring-core/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java index 4bfb3c5de4..b0c566e4d7 100644 --- a/spring-core/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java +++ b/spring-di/src/test/java/com/baeldung/di/spring/BeanInjectionIntegrationTest.java @@ -1,31 +1,31 @@ -package com.baeldung.di.spring; - -import static org.junit.Assert.*; -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class BeanInjectionIntegrationTest { - - private ApplicationContext applicationContext; - - @Before - public void setUp() throws Exception { - applicationContext = new ClassPathXmlApplicationContext("com.baeldung.di.spring.xml"); - } - - @Test - public void singletonBean_getBean_returnsSingleInstance() { - final IndexApp indexApp1 = applicationContext.getBean("indexApp", IndexApp.class); - final IndexApp indexApp2 = applicationContext.getBean("indexApp", IndexApp.class); - assertEquals(indexApp1, indexApp2); - } - - @Test - public void getBean_returnsInstance() { - final IndexApp indexApp = applicationContext.getBean("indexApp", IndexApp.class); - assertNotNull(indexApp); - } - -} +package com.baeldung.di.spring; + +import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class BeanInjectionIntegrationTest { + + private ApplicationContext applicationContext; + + @Before + public void setUp() throws Exception { + applicationContext = new ClassPathXmlApplicationContext("com.baeldung.di.spring.xml"); + } + + @Test + public void singletonBean_getBean_returnsSingleInstance() { + final IndexApp indexApp1 = applicationContext.getBean("indexApp", IndexApp.class); + final IndexApp indexApp2 = applicationContext.getBean("indexApp", IndexApp.class); + assertEquals(indexApp1, indexApp2); + } + + @Test + public void getBean_returnsInstance() { + final IndexApp indexApp = applicationContext.getBean("indexApp", IndexApp.class); + assertNotNull(indexApp); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/di/spring/SpringUnitTest.java b/spring-di/src/test/java/com/baeldung/di/spring/SpringUnitTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/di/spring/SpringUnitTest.java rename to spring-di/src/test/java/com/baeldung/di/spring/SpringUnitTest.java diff --git a/spring-core/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/methodinjections/StudentIntegrationTest.java b/spring-di/src/test/java/com/baeldung/methodinjections/StudentIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/methodinjections/StudentIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/methodinjections/StudentIntegrationTest.java diff --git a/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java b/spring-di/src/test/java/com/baeldung/sample/FooServiceIntegrationTest.java similarity index 96% rename from spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java rename to spring-di/src/test/java/com/baeldung/sample/FooServiceIntegrationTest.java index 6b518395a1..d42b98fc76 100644 --- a/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java +++ b/spring-di/src/test/java/com/baeldung/sample/FooServiceIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.sample; +package com.baeldung.sample; import org.junit.Assert; import org.junit.Test; diff --git a/spring-di/src/test/resources/beanfactory-example.xml b/spring-di/src/test/resources/beanfactory-example.xml new file mode 100644 index 0000000000..7b3d4f29ed --- /dev/null +++ b/spring-di/src/test/resources/beanfactory-example.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring-di/src/test/resources/data/employees.dat b/spring-di/src/test/resources/data/employees.dat new file mode 100644 index 0000000000..9c28fdf82f --- /dev/null +++ b/spring-di/src/test/resources/data/employees.dat @@ -0,0 +1 @@ +Joe Employee,Jan Employee,James T. Employee \ No newline at end of file diff --git a/spring-di/src/test/resources/input.txt b/spring-di/src/test/resources/input.txt new file mode 100644 index 0000000000..811232fa1f --- /dev/null +++ b/spring-di/src/test/resources/input.txt @@ -0,0 +1 @@ +This file is merely for testing. \ No newline at end of file diff --git a/spring-di/src/test/resources/output.txt b/spring-di/src/test/resources/output.txt new file mode 100644 index 0000000000..34e1e27d5a --- /dev/null +++ b/spring-di/src/test/resources/output.txt @@ -0,0 +1 @@ +Should be copied to OutputStream. \ No newline at end of file diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 670bac9805..555eafe40a 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -139,7 +139,7 @@ commons-io commons-io - 2.4 + ${commons-io.version} au.com.dius diff --git a/spring-security-kerberos/pom.xml b/spring-security-kerberos/pom.xml index d98d0ff508..437e8566bb 100644 --- a/spring-security-kerberos/pom.xml +++ b/spring-security-kerberos/pom.xml @@ -28,17 +28,17 @@ org.springframework.security.kerberos spring-security-kerberos-core - 1.0.1.RELEASE + ${spring-security-kerberos.version} org.springframework.security.kerberos spring-security-kerberos-web - 1.0.1.RELEASE + ${spring-security-kerberos.version} org.springframework.security.kerberos spring-security-kerberos-client - 1.0.1.RELEASE + ${spring-security-kerberos.version} @@ -61,4 +61,8 @@ + + + 1.0.1.RELEASE + diff --git a/testing-modules/easy-random/pom.xml b/testing-modules/easy-random/pom.xml index 93c0027f8f..d80927c3e8 100644 --- a/testing-modules/easy-random/pom.xml +++ b/testing-modules/easy-random/pom.xml @@ -17,8 +17,12 @@ org.jeasy easy-random-core - 4.0.0 + ${easy-random-core.version} + + 4.0.0 + + \ No newline at end of file diff --git a/testing-modules/mockito/README.md b/testing-modules/mockito/README.md index 8fe57016e3..9c6407f9da 100644 --- a/testing-modules/mockito/README.md +++ b/testing-modules/mockito/README.md @@ -21,4 +21,6 @@ - [Quick Guide to BDDMockito](http://www.baeldung.com/bdd-mockito) - [Hamcrest Bean Matchers](http://www.baeldung.com/hamcrest-bean-matchers) - [Hamcrest Object Matchers](http://www.baeldung.com/hamcrest-object-matchers) +- [Hamcrest File Matchers](https://www.baeldung.com/hamcrest-file-matchers) +- [Hamcrest Text Matchers](http://www.baeldung.com/hamcrest-text-matchers) - [Testing Callbacks with Mockito](http://www.baeldung.com/mockito-callbacks) diff --git a/xml/src/main/java/com/baeldung/xmlhtml/freemarker/FreemarkerTransformer.java b/xml/src/main/java/com/baeldung/xmlhtml/freemarker/FreemarkerTransformer.java index 61528dbfad..04e9b2e8cf 100644 --- a/xml/src/main/java/com/baeldung/xmlhtml/freemarker/FreemarkerTransformer.java +++ b/xml/src/main/java/com/baeldung/xmlhtml/freemarker/FreemarkerTransformer.java @@ -24,7 +24,7 @@ public class FreemarkerTransformer { this.templateFile = templateFile; } - public String html() throws IOException, XMLStreamException, TemplateException { + public String html() throws IOException, TemplateException { Configuration cfg = new Configuration(Configuration.VERSION_2_3_29); cfg.setDirectoryForTemplateLoading(new File(templateDirectory)); cfg.setDefaultEncoding(StandardCharsets.UTF_8.toString()); @@ -33,8 +33,9 @@ public class FreemarkerTransformer { cfg.setWrapUncheckedExceptions(true); cfg.setFallbackOnNullLoopVariable(false); Template temp = cfg.getTemplate(templateFile); - Writer output = new StringWriter(); - temp.process(staxTransformer.buildMap(), output); - return output.toString(); + try (Writer output = new StringWriter()) { + temp.process(staxTransformer.getMap(), output); + return output.toString(); + } } } diff --git a/xml/src/main/java/com/baeldung/xmlhtml/jaxp/JaxpTransformer.java b/xml/src/main/java/com/baeldung/xmlhtml/jaxp/JaxpTransformer.java index be3dde3805..3c288122a3 100644 --- a/xml/src/main/java/com/baeldung/xmlhtml/jaxp/JaxpTransformer.java +++ b/xml/src/main/java/com/baeldung/xmlhtml/jaxp/JaxpTransformer.java @@ -27,12 +27,13 @@ public class JaxpTransformer { // 1- Build the doc from the XML file factory = DocumentBuilderFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); input = factory .newDocumentBuilder() .parse(resourcePath); } - public String html() throws ParserConfigurationException, TransformerException { + public String html() throws ParserConfigurationException, TransformerException, IOException { Element xml = input.getDocumentElement(); Document doc = factory .newDocumentBuilder() @@ -48,19 +49,19 @@ public class JaxpTransformer { Element body = buildBody(map, doc); html.appendChild(body); doc.appendChild(html); - Writer output = applyTransformation(doc); - return String.format("%n%s", output.toString()); + return String.format("%n%s", applyTransformation(doc)); } - private Writer applyTransformation(Document doc) throws TransformerException { + private String applyTransformation(Document doc) throws TransformerException, IOException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - Writer output = new StringWriter(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.transform(new DOMSource(doc), new StreamResult(output)); - return output; + try (Writer output = new StringWriter()) { + Transformer transformer = transformerFactory.newTransformer(); + transformer.transform(new DOMSource(doc), new StreamResult(output)); + return output.toString(); + } } private Map buildMap(Element xml) { diff --git a/xml/src/main/java/com/baeldung/xmlhtml/mustache/MustacheTransformer.java b/xml/src/main/java/com/baeldung/xmlhtml/mustache/MustacheTransformer.java index ce3bf3cada..88e93463db 100644 --- a/xml/src/main/java/com/baeldung/xmlhtml/mustache/MustacheTransformer.java +++ b/xml/src/main/java/com/baeldung/xmlhtml/mustache/MustacheTransformer.java @@ -19,12 +19,13 @@ public class MustacheTransformer { this.templateFile = templateFile; } - public String html() throws IOException, XMLStreamException { + public String html() throws IOException { MustacheFactory mf = new DefaultMustacheFactory(); Mustache mustache = mf.compile(templateFile); - Writer output = new StringWriter(); - mustache.execute(output, staxTransformer.buildMap()); - output.flush(); - return output.toString(); + try (Writer output = new StringWriter()) { + mustache.execute(output, staxTransformer.getMap()); + output.flush(); + return output.toString(); + } } } diff --git a/xml/src/main/java/com/baeldung/xmlhtml/stax/StaxTransformer.java b/xml/src/main/java/com/baeldung/xmlhtml/stax/StaxTransformer.java index 67b3c1c9ce..d7762f3c1f 100644 --- a/xml/src/main/java/com/baeldung/xmlhtml/stax/StaxTransformer.java +++ b/xml/src/main/java/com/baeldung/xmlhtml/stax/StaxTransformer.java @@ -2,7 +2,7 @@ package com.baeldung.xmlhtml.stax; import javax.xml.stream.*; import java.io.FileInputStream; -import java.io.FileNotFoundException; +import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.HashMap; @@ -10,80 +10,90 @@ import java.util.Map; public class StaxTransformer { - private XMLStreamReader input; + private Map map; - public StaxTransformer(String resourcePath) throws FileNotFoundException, XMLStreamException { + public StaxTransformer(String resourcePath) throws IOException, XMLStreamException { XMLInputFactory factory = XMLInputFactory.newInstance(); factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE); factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE); - input = factory.createXMLStreamReader(new FileInputStream(resourcePath)); + XMLStreamReader input = null; + try (FileInputStream file = new FileInputStream(resourcePath)) { + input = factory.createXMLStreamReader(file); + map = buildMap(input); + } finally { + if (input != null) { + input.close(); + } + } } - public String html() throws XMLStreamException { - Map map = buildMap(); - Writer output = new StringWriter(); - XMLStreamWriter writer = XMLOutputFactory - .newInstance() - .createXMLStreamWriter(output); - //Head - writer.writeDTD(""); - writer.writeCharacters(String.format("%n")); - writer.writeStartElement("html"); - writer.writeAttribute("lang", "en"); - writer.writeCharacters(String.format("%n")); - writer.writeStartElement("head"); - writer.writeCharacters(String.format("%n")); - writer.writeDTD(""); - writer.writeCharacters(String.format("%n")); - writer.writeStartElement("title"); - writer.writeCharacters(map.get("heading")); - writer.writeEndElement(); - writer.writeCharacters(String.format("%n")); - writer.writeEndElement(); - writer.writeCharacters(String.format("%n")); - //Body - writer.writeStartElement("body"); - writer.writeCharacters(String.format("%n")); - writer.writeStartElement("p"); - writer.writeCharacters(map.get("from")); - writer.writeEndElement(); - writer.writeCharacters(String.format("%n")); - writer.writeStartElement("p"); - writer.writeCharacters(map.get("content")); - writer.writeEndElement(); - writer.writeCharacters(String.format("%n")); - writer.writeEndElement(); - writer.writeCharacters(String.format("%n")); - writer.writeEndDocument(); - writer.writeCharacters(String.format("%n")); - writer.flush(); - writer.close(); - return output.toString(); + public String html() throws XMLStreamException, IOException { + try (Writer output = new StringWriter()) { + XMLStreamWriter writer = XMLOutputFactory + .newInstance() + .createXMLStreamWriter(output); + //Head + writer.writeDTD(""); + writer.writeCharacters(String.format("%n")); + writer.writeStartElement("html"); + writer.writeAttribute("lang", "en"); + writer.writeCharacters(String.format("%n")); + writer.writeStartElement("head"); + writer.writeCharacters(String.format("%n")); + writer.writeDTD(""); + writer.writeCharacters(String.format("%n")); + writer.writeStartElement("title"); + writer.writeCharacters(map.get("heading")); + writer.writeEndElement(); + writer.writeCharacters(String.format("%n")); + writer.writeEndElement(); + writer.writeCharacters(String.format("%n")); + //Body + writer.writeStartElement("body"); + writer.writeCharacters(String.format("%n")); + writer.writeStartElement("p"); + writer.writeCharacters(map.get("from")); + writer.writeEndElement(); + writer.writeCharacters(String.format("%n")); + writer.writeStartElement("p"); + writer.writeCharacters(map.get("content")); + writer.writeEndElement(); + writer.writeCharacters(String.format("%n")); + writer.writeEndElement(); + writer.writeCharacters(String.format("%n")); + writer.writeEndDocument(); + writer.writeCharacters(String.format("%n")); + writer.flush(); + return output.toString(); + } } - public Map buildMap() throws XMLStreamException { - Map map = new HashMap<>(); + private Map buildMap(XMLStreamReader input) throws XMLStreamException { + Map tempMap = new HashMap<>(); while (input.hasNext()) { input.next(); if (input.isStartElement()) { if (input .getLocalName() .equals("heading")) { - map.put("heading", input.getElementText()); + tempMap.put("heading", input.getElementText()); } if (input .getLocalName() .equals("from")) { - map.put("from", String.format("from: %s", input.getElementText())); + tempMap.put("from", String.format("from: %s", input.getElementText())); } if (input .getLocalName() .equals("content")) { - map.put("content", input.getElementText()); + tempMap.put("content", input.getElementText()); } } } - input.close(); + return tempMap; + } + + public Map getMap() { return map; } }