diff --git a/.travis.yml b/.travis.yml
index bcff16f5f1..fdd741154b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
language: java
-install: travis_wait 60 mvn -q test
+install: travis_wait 60 mvn -q test -fae
before_script:
- echo "MAVEN_OPTS='-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:-UseGCOverheadLimit'" > ~/.mavenrc
diff --git a/algorithms/pom.xml b/algorithms/pom.xml
index 884c804d13..3dfce8769b 100644
--- a/algorithms/pom.xml
+++ b/algorithms/pom.xml
@@ -39,7 +39,6 @@
- install
@@ -56,6 +55,17 @@
exec-maven-plugin
${exec-maven-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*LongRunningUnitTest.java
+ **/*IntegrationTest.java
+
+
+
diff --git a/algorithms/src/test/java/algorithms/AntColonyOptimizationLongRunningUnitTest.java b/algorithms/src/test/java/algorithms/AntColonyOptimizationLongRunningUnitTest.java
new file mode 100644
index 0000000000..b0218ae23e
--- /dev/null
+++ b/algorithms/src/test/java/algorithms/AntColonyOptimizationLongRunningUnitTest.java
@@ -0,0 +1,22 @@
+package algorithms;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.baeldung.algorithms.ga.ant_colony.AntColonyOptimization;
+
+public class AntColonyOptimizationLongRunningUnitTest {
+
+ @Test
+ public void testGenerateRandomMatrix() {
+ AntColonyOptimization antTSP = new AntColonyOptimization(5);
+ Assert.assertNotNull(antTSP.generateRandomMatrix(5));
+ }
+
+ @Test
+ public void testStartAntOptimization() {
+ AntColonyOptimization antTSP = new AntColonyOptimization(5);
+ Assert.assertNotNull(antTSP.solve());
+ }
+
+}
diff --git a/algorithms/src/test/java/algorithms/AntColonyOptimizationTest.java b/algorithms/src/test/java/algorithms/AntColonyOptimizationTest.java
deleted file mode 100644
index a11f5db698..0000000000
--- a/algorithms/src/test/java/algorithms/AntColonyOptimizationTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package algorithms;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.baeldung.algorithms.ga.ant_colony.AntColonyOptimization;
-
-public class AntColonyOptimizationTest {
-
- @Test
- public void testGenerateRandomMatrix() {
- AntColonyOptimization antTSP = new AntColonyOptimization(5);
- Assert.assertNotNull(antTSP.generateRandomMatrix(5));
- }
-
- @Test
- public void testStartAntOptimization() {
- AntColonyOptimization antTSP = new AntColonyOptimization(5);
- Assert.assertNotNull(antTSP.solve());
- }
-
-}
diff --git a/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java b/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java
new file mode 100644
index 0000000000..fa8ecdee77
--- /dev/null
+++ b/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java
@@ -0,0 +1,16 @@
+package algorithms;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.baeldung.algorithms.ga.binary.SimpleGeneticAlgorithm;
+
+public class BinaryGeneticAlgorithmLongRunningUnitTest {
+
+ @Test
+ public void testGA() {
+ SimpleGeneticAlgorithm ga = new SimpleGeneticAlgorithm();
+ Assert.assertTrue(ga.runAlgorithm(50, "1011000100000100010000100000100111001000000100000100000000001111"));
+ }
+
+}
diff --git a/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmUnitTest.java b/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmUnitTest.java
deleted file mode 100644
index 2ba516d310..0000000000
--- a/algorithms/src/test/java/algorithms/BinaryGeneticAlgorithmUnitTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package algorithms;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.baeldung.algorithms.ga.binary.SimpleGeneticAlgorithm;
-
-public class BinaryGeneticAlgorithmUnitTest {
-
- @Test
- public void testGA() {
- SimpleGeneticAlgorithm ga = new SimpleGeneticAlgorithm();
- Assert.assertTrue(ga.runAlgorithm(50, "1011000100000100010000100000100111001000000100000100000000001111"));
- }
-
-}
diff --git a/algorithms/src/test/java/algorithms/DijkstraAlgorithmTest.java b/algorithms/src/test/java/algorithms/DijkstraAlgorithmLongRunningUnitTest.java
similarity index 74%
rename from algorithms/src/test/java/algorithms/DijkstraAlgorithmTest.java
rename to algorithms/src/test/java/algorithms/DijkstraAlgorithmLongRunningUnitTest.java
index 4d8cebed25..68386278fc 100644
--- a/algorithms/src/test/java/algorithms/DijkstraAlgorithmTest.java
+++ b/algorithms/src/test/java/algorithms/DijkstraAlgorithmLongRunningUnitTest.java
@@ -1,76 +1,86 @@
-package algorithms;
-
-import org.junit.Test;
-
-import com.baeldung.algorithms.ga.dijkstra.Dijkstra;
-import com.baeldung.algorithms.ga.dijkstra.Graph;
-import com.baeldung.algorithms.ga.dijkstra.Node;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertTrue;
-
-public class DijkstraAlgorithmTest {
-
- @Test
- public void whenSPPSolved_thenCorrect() {
-
- Node nodeA = new Node("A");
- Node nodeB = new Node("B");
- Node nodeC = new Node("C");
- Node nodeD = new Node("D");
- Node nodeE = new Node("E");
- Node nodeF = new Node("F");
-
- nodeA.addDestination(nodeB, 10);
- nodeA.addDestination(nodeC, 15);
-
- nodeB.addDestination(nodeD, 12);
- nodeB.addDestination(nodeF, 15);
-
- nodeC.addDestination(nodeE, 10);
-
- nodeD.addDestination(nodeE, 2);
- nodeD.addDestination(nodeF, 1);
-
- nodeF.addDestination(nodeE, 5);
-
- Graph graph = new Graph();
-
- graph.addNode(nodeA);
- graph.addNode(nodeB);
- graph.addNode(nodeC);
- graph.addNode(nodeD);
- graph.addNode(nodeE);
- graph.addNode(nodeF);
-
- graph = Dijkstra.calculateShortestPathFromSource(graph, nodeA);
-
- List shortestPathForNodeB = Arrays.asList(nodeA);
- List shortestPathForNodeC = Arrays.asList(nodeA);
- List shortestPathForNodeD = Arrays.asList(nodeA, nodeB);
- List shortestPathForNodeE = Arrays.asList(nodeA, nodeB, nodeD);
- List shortestPathForNodeF = Arrays.asList(nodeA, nodeB, nodeD);
-
- for (Node node : graph.getNodes()) {
- switch (node.getName()) {
- case "B":
- assertTrue(node.getShortestPath().equals(shortestPathForNodeB));
- break;
- case "C":
- assertTrue(node.getShortestPath().equals(shortestPathForNodeC));
- break;
- case "D":
- assertTrue(node.getShortestPath().equals(shortestPathForNodeD));
- break;
- case "E":
- assertTrue(node.getShortestPath().equals(shortestPathForNodeE));
- break;
- case "F":
- assertTrue(node.getShortestPath().equals(shortestPathForNodeF));
- break;
- }
- }
- }
-}
+package algorithms;
+
+import org.junit.Test;
+
+import com.baeldung.algorithms.ga.dijkstra.Dijkstra;
+import com.baeldung.algorithms.ga.dijkstra.Graph;
+import com.baeldung.algorithms.ga.dijkstra.Node;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertTrue;
+
+public class DijkstraAlgorithmLongRunningUnitTest {
+
+ @Test
+ public void whenSPPSolved_thenCorrect() {
+
+ Node nodeA = new Node("A");
+ Node nodeB = new Node("B");
+ Node nodeC = new Node("C");
+ Node nodeD = new Node("D");
+ Node nodeE = new Node("E");
+ Node nodeF = new Node("F");
+
+ nodeA.addDestination(nodeB, 10);
+ nodeA.addDestination(nodeC, 15);
+
+ nodeB.addDestination(nodeD, 12);
+ nodeB.addDestination(nodeF, 15);
+
+ nodeC.addDestination(nodeE, 10);
+
+ nodeD.addDestination(nodeE, 2);
+ nodeD.addDestination(nodeF, 1);
+
+ nodeF.addDestination(nodeE, 5);
+
+ Graph graph = new Graph();
+
+ graph.addNode(nodeA);
+ graph.addNode(nodeB);
+ graph.addNode(nodeC);
+ graph.addNode(nodeD);
+ graph.addNode(nodeE);
+ graph.addNode(nodeF);
+
+ graph = Dijkstra.calculateShortestPathFromSource(graph, nodeA);
+
+ List shortestPathForNodeB = Arrays.asList(nodeA);
+ List shortestPathForNodeC = Arrays.asList(nodeA);
+ List shortestPathForNodeD = Arrays.asList(nodeA, nodeB);
+ List shortestPathForNodeE = Arrays.asList(nodeA, nodeB, nodeD);
+ List shortestPathForNodeF = Arrays.asList(nodeA, nodeB, nodeD);
+
+ for (Node node : graph.getNodes()) {
+ switch (node.getName()) {
+ case "B":
+ assertTrue(node
+ .getShortestPath()
+ .equals(shortestPathForNodeB));
+ break;
+ case "C":
+ assertTrue(node
+ .getShortestPath()
+ .equals(shortestPathForNodeC));
+ break;
+ case "D":
+ assertTrue(node
+ .getShortestPath()
+ .equals(shortestPathForNodeD));
+ break;
+ case "E":
+ assertTrue(node
+ .getShortestPath()
+ .equals(shortestPathForNodeE));
+ break;
+ case "F":
+ assertTrue(node
+ .getShortestPath()
+ .equals(shortestPathForNodeF));
+ break;
+ }
+ }
+ }
+}
diff --git a/algorithms/src/test/java/algorithms/RtFiniteStateMachineTest.java b/algorithms/src/test/java/algorithms/RtFiniteStateMachineLongRunningUnitTest.java
similarity index 72%
rename from algorithms/src/test/java/algorithms/RtFiniteStateMachineTest.java
rename to algorithms/src/test/java/algorithms/RtFiniteStateMachineLongRunningUnitTest.java
index 089b38ec3f..c6800e9a64 100644
--- a/algorithms/src/test/java/algorithms/RtFiniteStateMachineTest.java
+++ b/algorithms/src/test/java/algorithms/RtFiniteStateMachineLongRunningUnitTest.java
@@ -1,38 +1,37 @@
package algorithms;
-import static org.junit.Assert.*;
-import org.junit.Test;
import com.baeldung.automata.*;
+import org.junit.Test;
-/**
- * Tests for {@link RtFiniteStateMachine}
- */
-public final class RtFiniteStateMachineTest {
+import static org.junit.Assert.assertTrue;
+
+public final class RtFiniteStateMachineLongRunningUnitTest {
@Test
public void acceptsSimplePair() {
String json = "{\"key\":\"value\"}";
FiniteStateMachine machine = this.buildJsonStateMachine();
- for (int i=0;i${lombok.version}
provided
+
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
@@ -135,13 +142,6 @@
test
-
- org.testng
- testng
- ${testng.version}
- test
-
-
org.mockito
mockito-core
@@ -177,37 +177,6 @@
-
-
- org.datanucleus
- javax.jdo
- 3.2.0-m6
-
-
- org.datanucleus
- datanucleus-core
- 5.1.0-m1
-
-
- org.datanucleus
- datanucleus-api-jdo
- 5.1.0-m1
-
-
- org.datanucleus
- datanucleus-rdbms
- 5.1.0-m1
-
-
- org.datanucleus
- datanucleus-maven-plugin
- 5.0.2
-
-
- com.h2database
- h2
- 1.4.194
-
org.owasp.esapi
@@ -250,6 +219,7 @@
**/*IntegrationTest.java
**/*LongRunningUnitTest.java
**/*ManualTest.java
+ **/JdbcTest.java
true
@@ -358,29 +328,6 @@
-
-
-
-
- org.datanucleus
- datanucleus-maven-plugin
- 5.0.2
-
- JDO
- ${basedir}/datanucleus.properties
- ${basedir}/log4j.properties
- true
-
-
-
- process-classes
-
- enhance
-
-
-
-
-
@@ -427,6 +374,9 @@
1.7.21
1.1.7
+
+
+ 6.0.6
21.0
diff --git a/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java
index 9eef00bd3f..3aca6b0147 100644
--- a/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java
+++ b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java
@@ -4,17 +4,10 @@ import java.time.ZonedDateTime;
import java.util.Comparator;
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.function.ToLongFunction;
public class EventWindowSort {
- private final ConcurrentSkipListMap events = new ConcurrentSkipListMap<>(Comparator.comparingLong(new ToLongFunction() {
- @Override
- public long applyAsLong(ZonedDateTime value) {
- return value
- .toInstant()
- .toEpochMilli();
- }
- }));
+ private final ConcurrentSkipListMap events
+ = new ConcurrentSkipListMap<>(Comparator.comparingLong(value -> value.toInstant().toEpochMilli()));
public void acceptEvent(Event event) {
events.put(event.getEventTime(), event.getContent());
@@ -22,14 +15,14 @@ public class EventWindowSort {
public ConcurrentNavigableMap getEventsFromLastMinute() {
return events.tailMap(ZonedDateTime
- .now()
- .minusMinutes(1));
+ .now()
+ .minusMinutes(1));
}
public ConcurrentNavigableMap getEventsOlderThatOneMinute() {
return events.headMap(ZonedDateTime
- .now()
- .minusMinutes(1));
+ .now()
+ .minusMinutes(1));
}
}
diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
new file mode 100644
index 0000000000..6bb055d360
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
@@ -0,0 +1,27 @@
+package com.baeldung.concurrent.sleepwait;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/***
+ * Example of waking up a waiting thread
+ */
+public class ThreadA {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ThreadA.class);
+
+ private static final ThreadB b = new ThreadB();
+
+ public static void main(String... args) throws InterruptedException {
+ b.start();
+
+ synchronized (b) {
+ while (b.sum == 0) {
+ LOG.debug("Waiting for ThreadB to complete...");
+ b.wait();
+ }
+
+ LOG.debug("ThreadB has completed. Sum from that thread is: " + b.sum);
+ }
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
new file mode 100644
index 0000000000..1fc180a5de
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
@@ -0,0 +1,20 @@
+package com.baeldung.concurrent.sleepwait;
+
+/***
+ * Example of waking up a waiting thread
+ */
+class ThreadB extends Thread {
+ int sum;
+
+ @Override
+ public void run() {
+ synchronized (this) {
+ int i = 0;
+ while (i < 100000) {
+ sum += i;
+ i++;
+ }
+ notify();
+ }
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
new file mode 100644
index 0000000000..0311d9b0b2
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
@@ -0,0 +1,29 @@
+package com.baeldung.concurrent.sleepwait;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/***
+ * Example of wait() and sleep() methods
+ */
+public class WaitSleepExample {
+
+ private static final Logger LOG = LoggerFactory.getLogger(WaitSleepExample.class);
+
+ private static final Object LOCK = new Object();
+
+ public static void main(String... args) throws InterruptedException {
+ sleepWaitInSyncronizedBlocks();
+ }
+
+ private static void sleepWaitInSyncronizedBlocks() throws InterruptedException {
+ Thread.sleep(1000); // called on the thread
+ LOG.debug("Thread '" + Thread.currentThread().getName() + "' is woken after sleeping for 1 second");
+
+ synchronized (LOCK) {
+ LOCK.wait(1000); // called on the object, synchronization required
+ LOG.debug("Object '" + LOCK + "' is woken after waiting for 1 second");
+ }
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java b/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java
index 49030b5352..f9028bd159 100644
--- a/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java
+++ b/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java
@@ -1,14 +1,19 @@
package com.baeldung.dirmonitoring;
-import java.io.File;
-
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
public class DirectoryMonitoringExample {
+ private static final Logger LOG = LoggerFactory.getLogger(DirectoryMonitoringExample.class);
+
+
public static final int POLL_INTERVAL = 500;
public static void main(String[] args) throws Exception {
@@ -17,17 +22,17 @@ public class DirectoryMonitoringExample {
FileAlterationListener listener = new FileAlterationListenerAdaptor() {
@Override
public void onFileCreate(File file) {
- System.out.println("File: " + file.getName() + " created");
+ LOG.debug("File: " + file.getName() + " created");
}
@Override
public void onFileDelete(File file) {
- System.out.println("File: " + file.getName() + " deleted");
+ LOG.debug("File: " + file.getName() + " deleted");
}
@Override
public void onFileChange(File file) {
- System.out.println("File: " + file.getName() + " changed");
+ LOG.debug("File: " + file.getName() + " changed");
}
};
observer.addListener(listener);
diff --git a/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java b/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java
index 3fc459c681..f5c31e9653 100644
--- a/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java
+++ b/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java
@@ -1,9 +1,14 @@
package com.baeldung.doublecolon;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.function.Function;
public class MacbookPro extends Computer {
+ private static final Logger LOG = LoggerFactory.getLogger(MacbookPro.class);
+
public MacbookPro(int age, String color) {
super(age, color);
}
@@ -14,12 +19,12 @@ public class MacbookPro extends Computer {
@Override
public void turnOnPc() {
- System.out.println("MacbookPro turned on");
+ LOG.debug("MacbookPro turned on");
}
@Override
public void turnOffPc() {
- System.out.println("MacbookPro turned off");
+ LOG.debug("MacbookPro turned off");
}
@Override
@@ -27,7 +32,7 @@ public class MacbookPro extends Computer {
Function function = super::calculateValue;
final Double pcValue = function.apply(initialValue);
- System.out.println("First value is:" + pcValue);
+ LOG.debug("First value is:" + pcValue);
return pcValue + (initialValue / 10);
}
diff --git a/core-java/src/main/java/com/baeldung/dynamicproxy/DynamicInvocationHandler.java b/core-java/src/main/java/com/baeldung/dynamicproxy/DynamicInvocationHandler.java
new file mode 100644
index 0000000000..8bde2f703f
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/dynamicproxy/DynamicInvocationHandler.java
@@ -0,0 +1,19 @@
+package com.baeldung.dynamicproxy;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+public class DynamicInvocationHandler implements InvocationHandler {
+
+ private static Logger LOGGER = LoggerFactory.getLogger(DynamicInvocationHandler.class);
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ LOGGER.info("Invoked method: {}", method.getName());
+
+ return 42;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java b/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java
new file mode 100644
index 0000000000..942efc50cc
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java
@@ -0,0 +1,36 @@
+package com.baeldung.dynamicproxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TimingDynamicInvocationHandler implements InvocationHandler {
+
+ private static Logger LOGGER = LoggerFactory.getLogger(TimingDynamicInvocationHandler.class);
+ private final Map methods = new HashMap<>();
+
+ private Object target;
+
+ public TimingDynamicInvocationHandler(Object target) {
+ this.target = target;
+
+ for(Method method: target.getClass().getDeclaredMethods()) {
+ this.methods.put(method.getName(), method);
+ }
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ long start = System.nanoTime();
+ Object result = methods.get(method.getName()).invoke(target, args);
+ long elapsed = System.nanoTime() - start;
+
+ LOGGER.info("Executing {} finished in {} ns", method.getName(), elapsed);
+
+ return result;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/exceptions/StackTraceToString.java b/core-java/src/main/java/com/baeldung/exceptions/StackTraceToString.java
new file mode 100644
index 0000000000..c6bf915996
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/exceptions/StackTraceToString.java
@@ -0,0 +1,30 @@
+package com.baeldung.exceptions;
+
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+public class StackTraceToString {
+
+ public static void main(String[] args) {
+ // Convert a StackTrace to String using core java
+ try {
+ throw new NullPointerException();
+ } catch (Exception e) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ e.printStackTrace(pw);
+
+ System.out.println(sw.toString());
+ }
+
+ // Convert a StackTrace to String using Apache Commons
+ try {
+ throw new IndexOutOfBoundsException();
+ } catch (Exception e) {
+ System.out.println(ExceptionUtils.getStackTrace(e));
+ }
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/http/ParameterStringBuilder.java b/core-java/src/main/java/com/baeldung/http/ParameterStringBuilder.java
new file mode 100644
index 0000000000..bed4195faa
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/http/ParameterStringBuilder.java
@@ -0,0 +1,21 @@
+package com.baeldung.http;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Map;
+
+public class ParameterStringBuilder {
+ public static String getParamsString(Map params) throws UnsupportedEncodingException {
+ StringBuilder result = new StringBuilder();
+
+ for (Map.Entry entry : params.entrySet()) {
+ result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
+ result.append("=");
+ result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
+ result.append("&");
+ }
+
+ String resultString = result.toString();
+ return resultString.length() > 0 ? resultString.substring(0, resultString.length() - 1) : resultString;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/java/map/MyKey.java b/core-java/src/main/java/com/baeldung/java/map/MyKey.java
index a2587c1dc1..ae3c3edc39 100644
--- a/core-java/src/main/java/com/baeldung/java/map/MyKey.java
+++ b/core-java/src/main/java/com/baeldung/java/map/MyKey.java
@@ -1,6 +1,11 @@
package com.baeldung.java.map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class MyKey {
+ private static final Logger LOG = LoggerFactory.getLogger(MyKey.class);
+
private String name;
private int id;
@@ -27,7 +32,7 @@ public class MyKey {
@Override
public int hashCode() {
- System.out.println("Calling hashCode()");
+ LOG.debug("Calling hashCode()");
return id;
}
@@ -38,7 +43,7 @@ public class MyKey {
@Override
public boolean equals(Object obj) {
- System.out.println("Calling equals() for key: " + obj);
+ LOG.debug("Calling equals() for key: " + obj);
if (this == obj)
return true;
if (obj == null)
diff --git a/core-java/src/main/java/com/baeldung/jdbc/Employee.java b/core-java/src/main/java/com/baeldung/jdbc/Employee.java
new file mode 100644
index 0000000000..749855ca3b
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/jdbc/Employee.java
@@ -0,0 +1,51 @@
+package com.baeldung.jdbc;
+
+public class Employee {
+ private int id;
+ private String name;
+ private String position;
+ private double salary;
+
+ public Employee() {
+ }
+
+ public Employee(int id, String name, double salary, String position) {
+ this.id = id;
+ this.name = name;
+ this.salary = salary;
+ this.position = position;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java b/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java
deleted file mode 100644
index fb7bd184ee..0000000000
--- a/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.baeldung.jdo;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.jdo.PersistenceManager;
-import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.Query;
-import javax.jdo.Transaction;
-
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-import org.datanucleus.metadata.PersistenceUnitMetaData;
-
-public class GuideToJDO {
-
- private static final Logger LOGGER = Logger.getLogger(GuideToJDO.class.getName());
- private Random rnd = new Random();
- private PersistenceUnitMetaData pumd;
-
- public static void main(String[] args) {
- new GuideToJDO();
- }
-
- public GuideToJDO() {
- CreateProperties();
- CreateProducts();
- ListProducts();
- UpdateProducts();
- ListProducts();
- DeleteProducts();
- ListProducts();
- }
-
- public void CreateProperties(){
-
- pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
- pumd.addClassName("com.baeldung.jdo.Product");
- pumd.setExcludeUnlistedClasses();
- pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
- pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
- pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
- pumd.addProperty("javax.jdo.option.ConnectionPassword", "");
- pumd.addProperty("datanucleus.autoCreateSchema", "true");
-
- }
-
- public void CreateProducts() {
- PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
- Product product = new Product("Tablet", 80.0);
- pm.makePersistent(product);
- Product product2 = new Product("Phone", 20.0);
- pm.makePersistent(product2);
- Product product3 = new Product("Laptop", 200.0);
- pm.makePersistent(product3);
- for (int i = 0; i < 100; i++) {
- String nam = "Product-" + i;
- double price = rnd.nextDouble();
- Product productx = new Product(nam, price);
- pm.makePersistent(productx);
- }
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- pm.close();
- }
- }
-
- @SuppressWarnings("rawtypes")
- public void UpdateProducts(){
- PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
- Query query = pm.newQuery(Product.class, "name == \"Phone\"");
- Collection result = (Collection) query.execute();
- Product product = (Product) result.iterator().next();
- product.setName("Android Phone");
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- pm.close();
- }
- }
-
- @SuppressWarnings("rawtypes")
- public void DeleteProducts(){
- PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
- Query query = pm.newQuery(Product.class, "name == \"Android Phone\"");
- Collection result = (Collection) query.execute();
- Product product = (Product) result.iterator().next();
- pm.deletePersistent(product);
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
- pm.close();
- }
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public void ListProducts() {
- PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
-
- Query q = pm.newQuery("SELECT FROM " + Product.class.getName() + " WHERE price > 10");
- List products = (List) q.execute();
- Iterator iter = products.iterator();
- while (iter.hasNext()) {
- Product p = iter.next();
- LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
- }
- LOGGER.log(Level.INFO, "--------------------------------------------------------------");
- tx.commit();
- } finally {
- if (tx.isActive()) {
- tx.rollback();
- }
-
- pm.close();
- }
- }
-}
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/jmx/Game.java b/core-java/src/main/java/com/baeldung/jmx/Game.java
index f38db27601..79256c0659 100644
--- a/core-java/src/main/java/com/baeldung/jmx/Game.java
+++ b/core-java/src/main/java/com/baeldung/jmx/Game.java
@@ -1,23 +1,28 @@
package com.baeldung.jmx;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class Game implements GameMBean {
+ private static final Logger LOG = LoggerFactory.getLogger(Game.class);
+
private String playerName;
@Override
public void playFootball(String clubName) {
- System.out.println(this.playerName + " playing football for " + clubName);
+ LOG.debug(this.playerName + " playing football for " + clubName);
}
@Override
public String getPlayerName() {
- System.out.println("Return playerName " + this.playerName);
+ LOG.debug("Return playerName " + this.playerName);
return playerName;
}
@Override
public void setPlayerName(String playerName) {
- System.out.println("Set playerName to value " + playerName);
+ LOG.debug("Set playerName to value " + playerName);
this.playerName = playerName;
}
diff --git a/core-java/src/main/java/com/baeldung/jmx/JMXTutorialMainlauncher.java b/core-java/src/main/java/com/baeldung/jmx/JMXTutorialMainlauncher.java
index 6f9c30ab50..220b9a8ec6 100644
--- a/core-java/src/main/java/com/baeldung/jmx/JMXTutorialMainlauncher.java
+++ b/core-java/src/main/java/com/baeldung/jmx/JMXTutorialMainlauncher.java
@@ -1,19 +1,20 @@
package com.baeldung.jmx;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.management.*;
import java.lang.management.ManagementFactory;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
public class JMXTutorialMainlauncher {
+ private static final Logger LOG = LoggerFactory.getLogger(JMXTutorialMainlauncher.class);
+
+
public static void main(String[] args) {
// TODO Auto-generated method stub
- System.out.println("This is basic JMX tutorial");
+ LOG.debug("This is basic JMX tutorial");
ObjectName objectName = null;
try {
objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game");
@@ -27,8 +28,8 @@ public class JMXTutorialMainlauncher {
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
e.printStackTrace();
}
- System.out.println("Registration for Game mbean with the platform server is successfull");
- System.out.println("Please open jconsole to access Game mbean");
+ LOG.debug("Registration for Game mbean with the platform server is successfull");
+ LOG.debug("Please open jconsole to access Game mbean");
while (true) {
// to ensure application does not terminate
}
diff --git a/core-java/src/main/java/com/baeldung/socket/EchoClient.java b/core-java/src/main/java/com/baeldung/socket/EchoClient.java
index 570bd60b2d..cf5c253276 100644
--- a/core-java/src/main/java/com/baeldung/socket/EchoClient.java
+++ b/core-java/src/main/java/com/baeldung/socket/EchoClient.java
@@ -1,9 +1,16 @@
package com.baeldung.socket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.*;
import java.net.*;
public class EchoClient {
+
+
+ private static final Logger LOG = LoggerFactory.getLogger(EchoClient.class);
+
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
@@ -14,7 +21,7 @@ public class EchoClient {
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
- System.out.print(e);
+ LOG.debug("Error when initializing connection", e);
}
}
@@ -34,7 +41,7 @@ public class EchoClient {
out.close();
clientSocket.close();
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug("error when closing", e);
}
}
diff --git a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java
index b920967545..a9f055f8f4 100644
--- a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java
+++ b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java
@@ -1,9 +1,15 @@
package com.baeldung.socket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.net.*;
import java.io.*;
public class EchoMultiServer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(EchoMultiServer.class);
+
private ServerSocket serverSocket;
public void start(int port) {
@@ -57,7 +63,7 @@ public class EchoMultiServer {
clientSocket.close();
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
}
diff --git a/core-java/src/main/java/com/baeldung/socket/EchoServer.java b/core-java/src/main/java/com/baeldung/socket/EchoServer.java
index dfd281d51c..a869e98966 100644
--- a/core-java/src/main/java/com/baeldung/socket/EchoServer.java
+++ b/core-java/src/main/java/com/baeldung/socket/EchoServer.java
@@ -1,9 +1,15 @@
package com.baeldung.socket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.net.*;
import java.io.*;
public class EchoServer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(EchoServer.class);
+
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
@@ -24,7 +30,7 @@ public class EchoServer {
out.println(inputLine);
}
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
@@ -36,7 +42,7 @@ public class EchoServer {
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
diff --git a/core-java/src/main/java/com/baeldung/socket/GreetClient.java b/core-java/src/main/java/com/baeldung/socket/GreetClient.java
index e6f14bb2b6..38ad016919 100644
--- a/core-java/src/main/java/com/baeldung/socket/GreetClient.java
+++ b/core-java/src/main/java/com/baeldung/socket/GreetClient.java
@@ -1,5 +1,8 @@
package com.baeldung.socket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -7,6 +10,9 @@ import java.io.PrintWriter;
import java.net.Socket;
public class GreetClient {
+
+ private static final Logger LOG = LoggerFactory.getLogger(EchoMultiServer.class);
+
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
@@ -17,7 +23,7 @@ public class GreetClient {
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
-
+ LOG.debug(e.getMessage());
}
}
@@ -37,7 +43,7 @@ public class GreetClient {
out.close();
clientSocket.close();
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
diff --git a/core-java/src/main/java/com/baeldung/socket/GreetServer.java b/core-java/src/main/java/com/baeldung/socket/GreetServer.java
index 05bc65a65e..f46db91959 100644
--- a/core-java/src/main/java/com/baeldung/socket/GreetServer.java
+++ b/core-java/src/main/java/com/baeldung/socket/GreetServer.java
@@ -1,9 +1,15 @@
package com.baeldung.socket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.net.*;
import java.io.*;
public class GreetServer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(GreetServer.class);
+
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
@@ -21,7 +27,7 @@ public class GreetServer {
else
out.println("unrecognised greeting");
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
@@ -33,7 +39,7 @@ public class GreetServer {
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
- e.printStackTrace();
+ LOG.debug(e.getMessage());
}
}
diff --git a/core-java/src/main/java/com/baeldung/stream/InfiniteStreams.java b/core-java/src/main/java/com/baeldung/stream/InfiniteStreams.java
index 097b516f8c..ae00fc7cb4 100644
--- a/core-java/src/main/java/com/baeldung/stream/InfiniteStreams.java
+++ b/core-java/src/main/java/com/baeldung/stream/InfiniteStreams.java
@@ -1,9 +1,15 @@
package com.baeldung.stream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.stream.Stream;
public class InfiniteStreams {
+
+ private static final Logger LOG = LoggerFactory.getLogger(InfiniteStreams.class);
+
public static void main(String[] args) {
doWhileOldWay();
@@ -15,7 +21,7 @@ public class InfiniteStreams {
int i = 0;
while (i < 10) {
- System.out.println(i);
+ LOG.debug("{}", i);
i++;
}
}
diff --git a/core-java/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java b/core-java/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
index 0d6a7e5572..de7e4a0369 100644
--- a/core-java/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
+++ b/core-java/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
@@ -1,7 +1,11 @@
package com.baeldung.threadlocal;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class ThreadLocalWithUserContext implements Runnable {
+ private static final Logger LOG = LoggerFactory.getLogger(ThreadLocalWithUserContext.class);
+
private static final ThreadLocal userContext = new ThreadLocal<>();
private final Integer userId;
private UserRepository userRepository = new UserRepository();
@@ -15,6 +19,6 @@ public class ThreadLocalWithUserContext implements Runnable {
public void run() {
String userName = userRepository.getUserNameForUserId(userId);
userContext.set(new Context(userName));
- System.out.println("thread context for given userId: " + userId + " is: " + userContext.get());
+ LOG.debug("thread context for given userId: " + userId + " is: " + userContext.get());
}
}
diff --git a/core-java/src/main/java/com/baeldung/transferqueue/Consumer.java b/core-java/src/main/java/com/baeldung/transferqueue/Consumer.java
index a498d08041..69d7ff2390 100644
--- a/core-java/src/main/java/com/baeldung/transferqueue/Consumer.java
+++ b/core-java/src/main/java/com/baeldung/transferqueue/Consumer.java
@@ -1,9 +1,15 @@
package com.baeldung.transferqueue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.concurrent.TransferQueue;
import java.util.concurrent.atomic.AtomicInteger;
public class Consumer implements Runnable {
+ private static final Logger LOG = LoggerFactory.getLogger(Consumer.class);
+
+
private final TransferQueue transferQueue;
private final String name;
private final int numberOfMessagesToConsume;
@@ -19,10 +25,10 @@ public class Consumer implements Runnable {
public void run() {
for (int i = 0; i < numberOfMessagesToConsume; i++) {
try {
- System.out.println("Consumer: " + name + " is waiting to take element...");
+ LOG.debug("Consumer: " + name + " is waiting to take element...");
String element = transferQueue.take();
longProcessing(element);
- System.out.println("Consumer: " + name + " received element: " + element);
+ LOG.debug("Consumer: " + name + " received element: " + element);
} catch (InterruptedException e) {
e.printStackTrace();
}
diff --git a/core-java/src/main/java/com/baeldung/transferqueue/Producer.java b/core-java/src/main/java/com/baeldung/transferqueue/Producer.java
index c6edc99bb5..c7df7c410a 100644
--- a/core-java/src/main/java/com/baeldung/transferqueue/Producer.java
+++ b/core-java/src/main/java/com/baeldung/transferqueue/Producer.java
@@ -1,10 +1,15 @@
package com.baeldung.transferqueue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TransferQueue;
import java.util.concurrent.atomic.AtomicInteger;
public class Producer implements Runnable {
+ private static final Logger LOG = LoggerFactory.getLogger(Producer.class);
+
private final TransferQueue transferQueue;
private final String name;
private final Integer numberOfMessagesToProduce;
@@ -20,13 +25,13 @@ public class Producer implements Runnable {
public void run() {
for (int i = 0; i < numberOfMessagesToProduce; i++) {
try {
- System.out.println("Producer: " + name + " is waiting to transfer...");
+ LOG.debug("Producer: " + name + " is waiting to transfer...");
boolean added = transferQueue.tryTransfer("A" + i, 4000, TimeUnit.MILLISECONDS);
if (added) {
numberOfProducedMessages.incrementAndGet();
- System.out.println("Producer: " + name + " transferred element: A" + i);
+ LOG.debug("Producer: " + name + " transferred element: A" + i);
} else {
- System.out.println("can not add an element due to the timeout");
+ LOG.debug("can not add an element due to the timeout");
}
} catch (InterruptedException e) {
e.printStackTrace();
diff --git a/core-java/src/main/resources/log4j.properties b/core-java/src/main/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java/src/main/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/PrimitiveConversionsJUnitTest.java b/core-java/src/test/java/com/baeldung/PrimitiveConversionsJUnitTest.java
index 10ceaf85a4..69a6c18dfd 100644
--- a/core-java/src/test/java/com/baeldung/PrimitiveConversionsJUnitTest.java
+++ b/core-java/src/test/java/com/baeldung/PrimitiveConversionsJUnitTest.java
@@ -1,13 +1,14 @@
package com.baeldung;
import org.junit.Test;
-import static org.junit.Assert.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.Assert.assertEquals;
-/**
- *
- * @author paulo.motta
- */
public class PrimitiveConversionsJUnitTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PrimitiveConversionsJUnitTest.class);
@Test
public void givenDataWithLessBits_whenAttributingToLargerSizeVariable_thenNoSpecialNotation() {
@@ -60,36 +61,36 @@ public class PrimitiveConversionsJUnitTest {
@Test
public void givenByteValue_whenConvertingToChar_thenWidenAndNarrowTakesPlace(){
byte myLargeValueByte = (byte) 130; //0b10000010
- System.out.println(myLargeValueByte); //0b10000010 -126
+ LOG.debug("{}", myLargeValueByte); //0b10000010 -126
assertEquals( -126, myLargeValueByte);
int myLargeValueInt = myLargeValueByte;
- System.out.println(myLargeValueInt); //0b11111111 11111111 11111111 10000010 -126
+ LOG.debug("{}", myLargeValueInt); //0b11111111 11111111 11111111 10000010 -126
assertEquals( -126, myLargeValueInt);
char myLargeValueChar = (char) myLargeValueByte;
- System.out.println(myLargeValueChar);//0b11111111 10000010 unsigned 0xFF82
+ LOG.debug("{}", myLargeValueChar);//0b11111111 10000010 unsigned 0xFF82
assertEquals(0xFF82, myLargeValueChar);
myLargeValueInt = myLargeValueChar;
- System.out.println(myLargeValueInt); //0b11111111 10000010 65410
+ LOG.debug("{}", myLargeValueInt); //0b11111111 10000010 65410
assertEquals(65410, myLargeValueInt);
byte myOtherByte = (byte) myLargeValueInt;
- System.out.println(myOtherByte); //0b10000010 -126
+ LOG.debug("{}", myOtherByte); //0b10000010 -126
assertEquals( -126, myOtherByte);
char myLargeValueChar2 = 130; //This is an int not a byte!
- System.out.println(myLargeValueChar2);//0b00000000 10000010 unsigned 0x0082
+ LOG.debug("{}", myLargeValueChar2);//0b00000000 10000010 unsigned 0x0082
assertEquals(0x0082, myLargeValueChar2);
int myLargeValueInt2 = myLargeValueChar2;
- System.out.println(myLargeValueInt2); //0b00000000 10000010 130
+ LOG.debug("{}", myLargeValueInt2); //0b00000000 10000010 130
assertEquals(130, myLargeValueInt2);
byte myOtherByte2 = (byte) myLargeValueInt2;
- System.out.println(myOtherByte2); //0b10000010 -126
+ LOG.debug("{}", myOtherByte2); //0b10000010 -126
assertEquals( -126, myOtherByte2);
}
diff --git a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java
index df12c3d79e..501cb1afa0 100644
--- a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java
+++ b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java
@@ -1,20 +1,21 @@
package com.baeldung.completablefuture;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.junit.Test;
-
public class CompletableFutureUnitTest {
+ private static final Logger LOG = LoggerFactory.getLogger(CompletableFutureUnitTest.class);
+
+
@Test
public void whenRunningCompletableFutureAsynchronously_thenGetMethodWaitsForResult() throws InterruptedException, ExecutionException {
Future completableFuture = calculateAsync();
@@ -72,7 +73,7 @@ public class CompletableFutureUnitTest {
public void whenAddingThenAcceptToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException {
CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello");
- CompletableFuture future = completableFuture.thenAccept(s -> System.out.println("Computation returned: " + s));
+ CompletableFuture future = completableFuture.thenAccept(s -> LOG.debug("Computation returned: " + s));
future.get();
}
@@ -81,7 +82,7 @@ public class CompletableFutureUnitTest {
public void whenAddingThenRunToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException {
CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello");
- CompletableFuture future = completableFuture.thenRun(() -> System.out.println("Computation finished."));
+ CompletableFuture future = completableFuture.thenRun(() -> LOG.debug("Computation finished."));
future.get();
}
@@ -111,7 +112,7 @@ public class CompletableFutureUnitTest {
@Test
public void whenUsingThenAcceptBoth_thenWaitForExecutionOfBothFutures() throws ExecutionException, InterruptedException {
- CompletableFuture.supplyAsync(() -> "Hello").thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> System.out.println(s1 + s2));
+ CompletableFuture.supplyAsync(() -> "Hello").thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> LOG.debug(s1 + s2));
}
@Test
diff --git a/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java
index 46e107b607..3a0092cf24 100644
--- a/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java
+++ b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java
@@ -17,25 +17,26 @@ public class LongAccumulatorTest {
public void givenLongAccumulator_whenApplyActionOnItFromMultipleThrads_thenShouldProduceProperResult() throws InterruptedException {
//given
ExecutorService executorService = Executors.newFixedThreadPool(8);
- LongBinaryOperator higherValueFinder = (currentValue, previousValue) -> currentValue > previousValue ? currentValue : previousValue;
- LongAccumulator accumulator = new LongAccumulator(higherValueFinder, 0L);
-
+ LongBinaryOperator sum = Long::sum;
+ LongAccumulator accumulator = new LongAccumulator(sum, 0L);
int numberOfThreads = 4;
int numberOfIncrements = 100;
//when
Runnable accumulateAction = () -> IntStream
- .rangeClosed(0, numberOfIncrements)
- .forEach(accumulator::accumulate);
+ .rangeClosed(0, numberOfIncrements)
+ .forEach(accumulator::accumulate);
for (int i = 0; i < numberOfThreads; i++) {
executorService.execute(accumulateAction);
}
+
//then
executorService.awaitTermination(500, TimeUnit.MILLISECONDS);
executorService.shutdown();
+ assertEquals(accumulator.get(), 20200);
+
- assertEquals(accumulator.get(), 100);
}
}
diff --git a/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListTest.java b/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListTest.java
new file mode 100644
index 0000000000..c71c193372
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.concurrent.copyonwrite;
+
+
+import org.junit.Test;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+public class CopyOnWriteArrayListTest {
+
+ @Test
+ public void givenCopyOnWriteList_whenIterateAndAddElementToUnderneathList_thenShouldNotChangeIterator() {
+ //given
+ final CopyOnWriteArrayList numbers =
+ new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8});
+
+ //when
+ Iterator iterator = numbers.iterator();
+ numbers.add(10);
+
+ //then
+ List result = new LinkedList<>();
+ iterator.forEachRemaining(result::add);
+ assertThat(result).containsOnly(1, 3, 5, 8);
+
+ //and
+ Iterator iterator2 = numbers.iterator();
+ List result2 = new LinkedList<>();
+ iterator2.forEachRemaining(result2::add);
+
+ //then
+ assertThat(result2).containsOnly(1, 3, 5, 8, 10);
+
+ }
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void givenCopyOnWriteList_whenIterateOverItAndTryToRemoveElement_thenShouldThrowException() {
+ //given
+ final CopyOnWriteArrayList numbers =
+ new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8});
+
+ //when
+ Iterator iterator = numbers.iterator();
+ while (iterator.hasNext()) {
+ iterator.remove();
+ }
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
similarity index 77%
rename from core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorUnitTest.java
rename to core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
index 69c802feb8..84d7a55504 100644
--- a/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorUnitTest.java
+++ b/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
@@ -1,22 +1,22 @@
package com.baeldung.concurrent.future;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class SquareCalculatorIntegrationTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SquareCalculatorIntegrationTest.class);
-public class SquareCalculatorUnitTest {
@Rule
public TestName name = new TestName();
@@ -33,7 +33,7 @@ public class SquareCalculatorUnitTest {
Future result2 = squareCalculator.calculate(1000);
while (!result1.isDone() || !result2.isDone()) {
- System.out.println(String.format("Task 1 is %s and Task 2 is %s.", result1.isDone() ? "done" : "not done", result2.isDone() ? "done" : "not done"));
+ LOG.debug(String.format("Task 1 is %s and Task 2 is %s.", result1.isDone() ? "done" : "not done", result2.isDone() ? "done" : "not done"));
Thread.sleep(300);
}
@@ -59,7 +59,7 @@ public class SquareCalculatorUnitTest {
Future result2 = squareCalculator.calculate(1000);
while (!result1.isDone() || !result2.isDone()) {
- System.out.println(String.format("Task 1 is %s and Task 2 is %s.", result1.isDone() ? "done" : "not done", result2.isDone() ? "done" : "not done"));
+ LOG.debug(String.format("Task 1 is %s and Task 2 is %s.", result1.isDone() ? "done" : "not done", result2.isDone() ? "done" : "not done"));
Thread.sleep(300);
}
@@ -89,6 +89,6 @@ public class SquareCalculatorUnitTest {
@After
public void end() {
- System.out.println(String.format("Test %s took %s ms \n", name.getMethodName(), System.currentTimeMillis() - start));
+ LOG.debug(String.format("Test %s took %s ms \n", name.getMethodName(), System.currentTimeMillis() - start));
}
}
diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java
similarity index 80%
rename from core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java
rename to core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java
index 0272726465..9f7b828a9c 100644
--- a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java
+++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java
@@ -1,6 +1,8 @@
package com.baeldung.concurrent.priorityblockingqueue;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.concurrent.PriorityBlockingQueue;
@@ -9,7 +11,10 @@ import java.util.concurrent.TimeUnit;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.util.Lists.newArrayList;
-public class PriorityBlockingQueueUnitTest {
+public class PriorityBlockingQueueIntegrationTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PriorityBlockingQueueIntegrationTest.class);
+
@Test
public void givenUnorderedValues_whenPolling_thenShouldOrderQueue() throws InterruptedException {
@@ -32,11 +37,11 @@ public class PriorityBlockingQueueUnitTest {
PriorityBlockingQueue queue = new PriorityBlockingQueue<>();
final Thread thread = new Thread(() -> {
- System.out.println("Polling...");
+ LOG.debug("Polling...");
while (true) {
try {
Integer poll = queue.take();
- System.out.println("Polled: " + poll);
+ LOG.debug("Polled: " + poll);
} catch (InterruptedException e) {
}
}
@@ -44,7 +49,7 @@ public class PriorityBlockingQueueUnitTest {
thread.start();
Thread.sleep(TimeUnit.SECONDS.toMillis(5));
- System.out.println("Adding to queue");
+ LOG.debug("Adding to queue");
queue.addAll(newArrayList(1, 5, 6, 1, 2, 6, 7));
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
diff --git a/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java b/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetIntegrationTest.java
similarity index 98%
rename from core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java
rename to core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetIntegrationTest.java
index a2dbbae520..92fff8446b 100644
--- a/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetTest.java
+++ b/core-java/src/test/java/com/baeldung/concurrent/skiplist/ConcurrentSkipListSetIntegrationTest.java
@@ -13,7 +13,7 @@ import java.util.stream.IntStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class ConcurrentSkipListSetTest {
+public class ConcurrentSkipListSetIntegrationTest {
@Test
public void givenThreadsProducingEvents_whenGetForEventsFromLastMinute_thenReturnThoseEventsInTheLockFreeWay() throws InterruptedException {
diff --git a/core-java/src/test/java/com/baeldung/dynamicproxy/DynamicProxyTest.java b/core-java/src/test/java/com/baeldung/dynamicproxy/DynamicProxyTest.java
new file mode 100644
index 0000000000..dc7f9366ba
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/dynamicproxy/DynamicProxyTest.java
@@ -0,0 +1,57 @@
+package com.baeldung.dynamicproxy;
+
+import org.junit.Test;
+
+import java.lang.reflect.Proxy;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class DynamicProxyTest {
+
+ @Test
+ public void givenDynamicProxy_thenPutWorks() {
+ Map proxyInstance = (Map) Proxy.newProxyInstance(DynamicProxyTest.class.getClassLoader(), new Class[] { Map.class }, new DynamicInvocationHandler());
+
+ proxyInstance.put("hello", "world");
+ }
+
+ @Test
+ public void givenInlineDynamicProxy_thenGetWorksOtherMethodsDoNot() {
+ Map proxyInstance = (Map) Proxy.newProxyInstance(DynamicProxyTest.class.getClassLoader(), new Class[] { Map.class }, (proxy, method, methodArgs) -> {
+
+ if (method.getName().equals("get")) {
+ return 42;
+ } else {
+ throw new UnsupportedOperationException("Unsupported method: " + method.getName());
+ }
+ });
+
+ int result = (int) proxyInstance.get("hello");
+
+ assertEquals(42, result);
+
+ try {
+ proxyInstance.put("hello", "world");
+ fail();
+ } catch(UnsupportedOperationException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void givenTimingDynamicProxy_thenMethodInvokationsProduceTiming() {
+ Map mapProxyInstance = (Map) Proxy.newProxyInstance(DynamicProxyTest.class.getClassLoader(), new Class[] { Map.class }, new TimingDynamicInvocationHandler(new HashMap<>()));
+
+ mapProxyInstance.put("hello", "world");
+ assertEquals("world", mapProxyInstance.get("hello"));
+
+ CharSequence csProxyInstance = (CharSequence) Proxy.newProxyInstance(DynamicProxyTest.class.getClassLoader(), new Class[] { CharSequence.class }, new TimingDynamicInvocationHandler("Hello World"));
+
+ assertEquals('l', csProxyInstance.charAt(2));
+ assertEquals(11, csProxyInstance.length());
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java
index 6f3384c8eb..1036df0bb8 100644
--- a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java
+++ b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java
@@ -1,8 +1,9 @@
package com.baeldung.functionalinterface;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import com.google.common.util.concurrent.Uninterruptibles;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.HashMap;
@@ -14,12 +15,13 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.junit.Test;
-
-import com.google.common.util.concurrent.Uninterruptibles;
+import static org.junit.Assert.*;
public class FunctionalInterfaceUnitTest {
+ private static final Logger LOG = LoggerFactory.getLogger(FunctionalInterfaceUnitTest.class);
+
+
@Test
public void whenPassingLambdaToComputeIfAbsent_thenTheValueGetsComputedAndPutIntoMap() {
Map nameMap = new HashMap<>();
@@ -65,7 +67,7 @@ public class FunctionalInterfaceUnitTest {
@Test
public void whenPassingLambdaToThreadConstructor_thenLambdaInferredToRunnable() {
- Thread thread = new Thread(() -> System.out.println("Hello From Another Thread"));
+ Thread thread = new Thread(() -> LOG.debug("Hello From Another Thread"));
thread.start();
}
@@ -93,7 +95,7 @@ public class FunctionalInterfaceUnitTest {
@Test
public void whenUsingConsumerInForEach_thenConsumerExecutesForEachListElement() {
List names = Arrays.asList("John", "Freddy", "Samuel");
- names.forEach(name -> System.out.println("Hello, " + name));
+ names.forEach(name -> LOG.debug("Hello, " + name));
}
@Test
@@ -103,7 +105,7 @@ public class FunctionalInterfaceUnitTest {
ages.put("Freddy", 24);
ages.put("Samuel", 30);
- ages.forEach((name, age) -> System.out.println(name + " is " + age + " years old"));
+ ages.forEach((name, age) -> LOG.debug(name + " is " + age + " years old"));
}
@Test
diff --git a/core-java/src/test/java/com/baeldung/http/HttpRequestTest.java b/core-java/src/test/java/com/baeldung/http/HttpRequestTest.java
new file mode 100644
index 0000000000..f238f7df7c
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/http/HttpRequestTest.java
@@ -0,0 +1,126 @@
+package com.baeldung.http;
+
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.CookieManager;
+import java.net.HttpCookie;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class HttpRequestTest {
+
+ @Test
+ public void whenGetRequest_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+
+ Map parameters = new HashMap<>();
+ parameters.put("param1", "val");
+ con.setDoOutput(true);
+ DataOutputStream out = new DataOutputStream(con.getOutputStream());
+ out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
+ out.flush();
+ out.close();
+
+ con.setConnectTimeout(5000);
+ con.setReadTimeout(5000);
+
+ int status = con.getResponseCode();
+ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ StringBuffer content = new StringBuffer();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+ in.close();
+
+ assertEquals("status code incorrect", status, 200);
+ assertTrue("content incorrect", content.toString().contains("Example Domain"));
+ }
+
+ @Test
+ public void whenPostRequest_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("POST");
+ con.setRequestProperty("Content-Type", "application/json");
+
+ Map parameters = new HashMap<>();
+ parameters.put("param1", "val");
+ con.setDoOutput(true);
+ DataOutputStream out = new DataOutputStream(con.getOutputStream());
+ out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
+ out.flush();
+ out.close();
+
+ int status = con.getResponseCode();
+ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ StringBuffer content = new StringBuffer();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+ in.close();
+
+ assertEquals("status code incorrect", status, 200);
+ }
+
+ @Test
+ public void whenGetCookies_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+
+ CookieManager cookieManager = new CookieManager();
+ String cookiesHeader = con.getHeaderField("Set-Cookie");
+ Optional usernameCookie = null;
+ if (cookiesHeader != null) {
+ List cookies = HttpCookie.parse(cookiesHeader);
+ cookies.forEach(cookie -> cookieManager.getCookieStore().add(null, cookie));
+ usernameCookie = cookies.stream().findAny().filter(cookie -> cookie.getName().equals("username"));
+ }
+
+ if (usernameCookie == null) {
+ cookieManager.getCookieStore().add(null, new HttpCookie("username", "john"));
+ }
+
+ con.disconnect();
+
+ con = (HttpURLConnection) url.openConnection();
+ con.setRequestProperty("Cookie", StringUtils.join(cookieManager.getCookieStore().getCookies(), ";"));
+
+ int status = con.getResponseCode();
+
+ assertEquals("status code incorrect", status, 200);
+ }
+
+ @Test
+ public void whenRedirect_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+
+ con.setInstanceFollowRedirects(true);
+ int status = con.getResponseCode();
+
+ if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM) {
+ String location = con.getHeaderField("Location");
+ URL newUrl = new URL(location);
+ con = (HttpURLConnection) newUrl.openConnection();
+ }
+
+ assertEquals("status code incorrect", con.getResponseCode(), 200);
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/java/collections/ConcurrentModificationExceptionTest.java b/core-java/src/test/java/com/baeldung/java/collections/ConcurrentModificationExceptionTest.java
index 100d25ab8d..d12f07286b 100644
--- a/core-java/src/test/java/com/baeldung/java/collections/ConcurrentModificationExceptionTest.java
+++ b/core-java/src/test/java/com/baeldung/java/collections/ConcurrentModificationExceptionTest.java
@@ -6,9 +6,10 @@ import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import static java.util.Arrays.asList;
-import static org.testng.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
public class ConcurrentModificationExceptionTest {
+
@Test
public void changingContentWithSetDoesNotThrowConcurrentModificationException() throws Exception {
ArrayList
+
+
+ org.datanucleus
+ javax.jdo
+ 3.2.0-m6
+
+
+ org.datanucleus
+ datanucleus-core
+ 5.1.0-m1
+
+
+ org.datanucleus
+ datanucleus-api-jdo
+ 5.1.0-m1
+
+
+ org.datanucleus
+ datanucleus-rdbms
+ 5.1.0-m1
+
+
+ org.datanucleus
+ datanucleus-maven-plugin
+ 5.0.2
+
+
+ com.h2database
+ h2
+ 1.4.194
+
+
+ org.datanucleus
+ datanucleus-xml
+ 5.0.0-release
+
@@ -227,4 +283,4 @@
2.19.1
-
\ No newline at end of file
+
diff --git a/libraries/src/main/java/com/baeldung/http/HttpRequestBuilder.java b/libraries/src/main/java/com/baeldung/http/HttpRequestBuilder.java
deleted file mode 100644
index bfa7cc121b..0000000000
--- a/libraries/src/main/java/com/baeldung/http/HttpRequestBuilder.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.baeldung.http;
-
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-public class HttpRequestBuilder {
-
- private static final Logger LOG = Logger.getLogger(HttpRequestBuilder.class);
-
- public HttpResponseWrapper sendRequest(String urlString, String method, Map parameters, Map properties) throws IOException{
- URL url = new URL(urlString);
- HttpURLConnection con = (HttpURLConnection) url.openConnection();
- con.setRequestMethod(method);
- if (properties != null) {
- properties.forEach((key, value) -> con.setRequestProperty(key, value));
- }
- if (parameters != null) {
- con.setDoOutput(true);
- DataOutputStream out = new DataOutputStream(con.getOutputStream());
- out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
- out.flush();
- out.close();
- }
-
- int status = con.getResponseCode();
-
- BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
- String inputLine;
- StringBuffer content = new StringBuffer();
- while ((inputLine = in.readLine()) != null) {
- content.append(inputLine);
- }
- in.close();
-
- HttpResponseWrapper responseWrapper = new HttpResponseWrapper();
- responseWrapper.setStatus(status);
- responseWrapper.setContent(content.toString());
-
- return responseWrapper;
- }
-
-}
diff --git a/libraries/src/main/java/com/baeldung/http/HttpResponseWrapper.java b/libraries/src/main/java/com/baeldung/http/HttpResponseWrapper.java
deleted file mode 100644
index c0f68ac18b..0000000000
--- a/libraries/src/main/java/com/baeldung/http/HttpResponseWrapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.baeldung.http;
-
-public class HttpResponseWrapper {
- private int status;
- private String content;
-
- public HttpResponseWrapper(){ }
-
- public HttpResponseWrapper(int status, String content) {
- super();
- this.status = status;
- this.content = content;
- }
-
- public int getStatus() {
- return status;
- }
-
- public void setStatus(int status) {
- this.status = status;
- }
-
- public String getContent() {
- return content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
-}
diff --git a/libraries/src/main/java/com/baeldung/http/ParameterStringBuilder.java b/libraries/src/main/java/com/baeldung/http/ParameterStringBuilder.java
deleted file mode 100644
index b148ddb3fd..0000000000
--- a/libraries/src/main/java/com/baeldung/http/ParameterStringBuilder.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.baeldung.http;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Map;
-
-public class ParameterStringBuilder {
- public static String getParamsString(Map params) {
- StringBuilder result = new StringBuilder();
-
- params.forEach((key, value) -> {
- try {
- result.append(URLEncoder.encode(key, "UTF-8"));
- result.append("=");
- result.append(URLEncoder.encode(value, "UTF-8"));
- result.append("&");
- } catch (UnsupportedEncodingException exc) {
- }
- });
-
- String resultString = result.toString();
- if (resultString.length() > 0) {
- resultString = resultString.substring(0, resultString.length() - 1);
- }
- return resultString;
- }
-}
diff --git a/libraries/src/main/java/com/baeldung/httpclient/HttpClientRequestBuilder.java b/libraries/src/main/java/com/baeldung/httpclient/HttpClientRequestBuilder.java
deleted file mode 100644
index b2f6c36a4f..0000000000
--- a/libraries/src/main/java/com/baeldung/httpclient/HttpClientRequestBuilder.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.baeldung.httpclient;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.message.BasicNameValuePair;
-
-import com.baeldung.http.HttpResponseWrapper;
-import com.baeldung.http.ParameterStringBuilder;
-
-public class HttpClientRequestBuilder {
-
- public HttpResponseWrapper sendGetRequest(String url, Map parameters) {
- HttpClient client = HttpClientBuilder.create()
- .build();
- if (parameters != null) {
- url += "?" + ParameterStringBuilder.getParamsString(parameters);
- }
- HttpGet request = new HttpGet(url);
- try {
- HttpResponse response = client.execute(request);
-
- HttpResponseWrapper responseWrapper = new HttpResponseWrapper();
- responseWrapper.setStatus(response.getStatusLine()
- .getStatusCode());
- BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity()
- .getContent()));
-
- String line = "", content = "";
- while ((line = in.readLine()) != null) {
- content += line;
- }
- responseWrapper.setContent(content);
- return responseWrapper;
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- return null;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public HttpResponseWrapper sendPostRequestWithParameters(String url, Map parameters) {
- HttpClient client = HttpClientBuilder.create()
- .build();
- HttpPost request = new HttpPost(url);
-
- try {
- if (parameters != null) {
- List nameValuePairs = new ArrayList<>();
- parameters.forEach((key, value) -> nameValuePairs.add(new BasicNameValuePair(key, value)));
- request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- }
-
- HttpResponse response = client.execute(request);
-
- HttpResponseWrapper responseWrapper = new HttpResponseWrapper();
- responseWrapper.setStatus(response.getStatusLine()
- .getStatusCode());
- BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity()
- .getContent()));
-
- String line = "", content = "";
- while ((line = in.readLine()) != null) {
- content += line;
- }
- responseWrapper.setContent(content);
- return responseWrapper;
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- return null;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public HttpResponseWrapper sendPostRequestWithJson(String url, String json) {
- HttpClient client = HttpClientBuilder.create()
- .build();
- HttpPost request = new HttpPost(url);
-
- try {
- request.addHeader("Content-Type", "application/json");
- request.setEntity(new StringEntity(json));
-
- HttpResponse response = client.execute(request);
-
- HttpResponseWrapper responseWrapper = new HttpResponseWrapper();
- responseWrapper.setStatus(response.getStatusLine()
- .getStatusCode());
- BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity()
- .getContent()));
-
- String line = "", content = "";
- while ((line = in.readLine()) != null) {
- content += line;
- }
- responseWrapper.setContent(content);
- return responseWrapper;
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- return null;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
-}
diff --git a/libraries/src/main/java/com/baeldung/jdo/GuideToJDO.java b/libraries/src/main/java/com/baeldung/jdo/GuideToJDO.java
new file mode 100644
index 0000000000..387c8c4e00
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/jdo/GuideToJDO.java
@@ -0,0 +1,299 @@
+package com.baeldung.jdo;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.Query;
+import javax.jdo.Transaction;
+
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.PersistenceUnitMetaData;
+
+public class GuideToJDO {
+
+ private static final Logger LOGGER = Logger.getLogger(GuideToJDO.class.getName());
+ private Random rnd = new Random();
+ private PersistenceUnitMetaData pumd;
+ private PersistenceUnitMetaData pumdXML;
+
+ public static void main(String[] args) {
+ new GuideToJDO();
+ }
+
+ public GuideToJDO() {
+ CreateH2Properties();
+ CreateXMLProperties();
+ CreateProducts();
+ ListProducts();
+ QueryJDOQL();
+ QuerySQL();
+ QueryJPQL();
+ UpdateProducts();
+ ListProducts();
+ DeleteProducts();
+ ListProducts();
+ persistXML();
+ listXMLProducts();
+ }
+
+ public void CreateH2Properties(){
+
+ pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
+ pumd.addClassName("com.baeldung.jdo.Product");
+ pumd.setExcludeUnlistedClasses();
+ pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
+ pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
+ pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
+ pumd.addProperty("javax.jdo.option.ConnectionPassword", "");
+ pumd.addProperty("datanucleus.autoCreateSchema", "true");
+
+ }
+
+ public void CreateXMLProperties(){
+ pumdXML = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
+ pumdXML.addClassName("com.baeldung.jdo.ProductXML");
+ pumdXML.setExcludeUnlistedClasses();
+ pumdXML.addProperty("javax.jdo.option.ConnectionURL", "xml:file:myPersistence.xml");
+ pumdXML.addProperty("datanucleus.autoCreateSchema", "true");
+ }
+
+ public void CreateProducts() {
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ Product product = new Product("Tablet", 80.0);
+ pm.makePersistent(product);
+ Product product2 = new Product("Phone", 20.0);
+ pm.makePersistent(product2);
+ Product product3 = new Product("Laptop", 200.0);
+ pm.makePersistent(product3);
+ for (int i = 0; i < 100; i++) {
+ String nam = "Product-" + i;
+ double price = rnd.nextDouble();
+ Product productx = new Product(nam, price);
+ pm.makePersistent(productx);
+ }
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void UpdateProducts(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ Query query = pm.newQuery(Product.class, "name == \"Phone\"");
+ Collection result = (Collection) query.execute();
+ Product product = (Product) result.iterator().next();
+ product.setName("Android Phone");
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void DeleteProducts(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ Query query = pm.newQuery(Product.class, "name == \"Android Phone\"");
+ Collection result = (Collection) query.execute();
+ Product product = (Product) result.iterator().next();
+ pm.deletePersistent(product);
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void ListProducts() {
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ Query q = pm.newQuery("SELECT FROM " + Product.class.getName() + " WHERE price > 10");
+ List products = (List) q.execute();
+ Iterator iter = products.iterator();
+ while (iter.hasNext()) {
+ Product p = iter.next();
+ LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
+ }
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void QueryJDOQL (){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ // Declarative JDOQL :
+ LOGGER.log(Level.INFO, "Declarative JDOQL --------------------------------------------------------------");
+ Query qDJDOQL = pm.newQuery(Product.class);
+ qDJDOQL.setFilter("name == 'Tablet' && price == price_value");
+ qDJDOQL.declareParameters("double price_value");
+ List resultsqDJDOQL = qDJDOQL.setParameters(80.0).executeList();
+
+ Iterator iterDJDOQL = resultsqDJDOQL.iterator();
+ while (iterDJDOQL.hasNext()) {
+ Product p = iterDJDOQL.next();
+ LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
+ }
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
+
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void QuerySQL (){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ //SQL :
+ LOGGER.log(Level.INFO, "SQL --------------------------------------------------------------");
+ Query query = pm.newQuery("javax.jdo.query.SQL", "SELECT * FROM PRODUCT");
+ query.setClass(Product.class);
+ List results = query.executeList();
+
+ Iterator iter = results.iterator();
+ while (iter.hasNext()) {
+ Product p = iter.next();
+ LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
+ }
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
+
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void QueryJPQL (){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ //JPQL :
+ LOGGER.log(Level.INFO, "JPQL --------------------------------------------------------------");
+ Query q = pm.newQuery("JPQL", "SELECT p FROM "+Product.class.getName()+" p WHERE p.name = 'Laptop'");
+ List results = (List)q.execute();
+
+ Iterator iter = results.iterator();
+ while (iter.hasNext()) {
+ Product p = iter.next();
+ LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
+ }
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
+
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ pm.close();
+ }
+ }
+
+ public void persistXML(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumdXML, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ ProductXML productXML = new ProductXML(0,"Tablet", 80.0);
+ pm.makePersistent(productXML);
+ ProductXML productXML2 = new ProductXML(1,"Phone", 20.0);
+ pm.makePersistent(productXML2);
+ ProductXML productXML3 = new ProductXML(2,"Laptop", 200.0);
+ pm.makePersistent(productXML3);
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void listXMLProducts(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumdXML, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ Query q = pm.newQuery("SELECT FROM " + ProductXML.class.getName());
+ List products = (List) q.execute();
+ Iterator iter = products.iterator();
+ while (iter.hasNext()) {
+ ProductXML p = iter.next();
+ LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.getName(), p.getPrice() });
+ pm.deletePersistent(p);
+ }
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+
+ pm.close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/jdo/Product.java b/libraries/src/main/java/com/baeldung/jdo/Product.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/jdo/Product.java
rename to libraries/src/main/java/com/baeldung/jdo/Product.java
diff --git a/libraries/src/main/java/com/baeldung/jdo/ProductXML.java b/libraries/src/main/java/com/baeldung/jdo/ProductXML.java
new file mode 100644
index 0000000000..d702a8ac90
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/jdo/ProductXML.java
@@ -0,0 +1,44 @@
+package com.baeldung.jdo;
+
+import javax.jdo.annotations.PersistenceCapable;
+import javax.jdo.annotations.PrimaryKey;
+import javax.xml.bind.annotation.XmlAttribute;
+
+@PersistenceCapable()
+public class ProductXML {
+
+ @XmlAttribute
+ private long productNumber = 0;
+ @PrimaryKey
+ private String name = null;
+ private Double price = 0.0;
+
+ public ProductXML() {
+ this.productNumber = 0;
+ this.name = null;
+ this.price = 0.0;
+ }
+
+ public ProductXML(long productNumber, String name, Double price) {
+ this.productNumber = productNumber;
+ this.name = name;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Double getPrice() {
+ return price;
+ }
+
+ public void setPrice(Double price) {
+ this.price = price;
+ }
+
+}
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/http/HttpRequestBuilderTest.java b/libraries/src/test/java/com/baeldung/http/HttpRequestBuilderTest.java
deleted file mode 100644
index 7f5992fbd9..0000000000
--- a/libraries/src/test/java/com/baeldung/http/HttpRequestBuilderTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.baeldung.http;
-
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Before;
-
-import java.io.IOException;
-
-public class HttpRequestBuilderTest {
-
- private HttpRequestBuilder requestPerformer;
-
- @Before
- public void setup() {
- requestPerformer = new HttpRequestBuilder();
- }
-
- @Test
- public void whenGetRequest_thenOk() throws IOException {
- HttpResponseWrapper response = requestPerformer.sendRequest("http://www.example.com", "GET", null, null);
- assertEquals("status code incorrect", response.getStatus(), 200);
- assertTrue("content incorrect", response.getContent()
- .contains("Example Domain"));
- }
-
- @Test
- public void whenPostRequest_thenOk() throws IOException {
- Map parameters = new HashMap<>();
- parameters.put("param1", "val");
- Map properties = new HashMap<>();
- properties.put("Content-Type", "application/json");
- HttpResponseWrapper response = requestPerformer.sendRequest("http://www.example.com", "POST", parameters, properties);
- assertEquals("status code incorrect", response.getStatus(), 200);
- }
-
-}
diff --git a/libraries/src/test/java/com/baeldung/httpclient/HttpClientRequestBuilderTest.java b/libraries/src/test/java/com/baeldung/httpclient/HttpClientRequestBuilderTest.java
deleted file mode 100644
index 886d2649a3..0000000000
--- a/libraries/src/test/java/com/baeldung/httpclient/HttpClientRequestBuilderTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.baeldung.httpclient;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.baeldung.http.HttpResponseWrapper;
-
-public class HttpClientRequestBuilderTest {
- private HttpClientRequestBuilder requestBuilder;
-
- @Before
- public void setup() {
- requestBuilder = new HttpClientRequestBuilder();
- }
-
- @Test
- public void whenGetRequest_thenOk() {
- Map parameters = new HashMap<>();
- parameters.put("param1", "val");
- HttpResponseWrapper response = requestBuilder.sendGetRequest("http://www.example.com",parameters);
- assertEquals("status code incorrect", response.getStatus(), 200);
- assertTrue("content incorrect", response.getContent()
- .contains("Example Domain"));
- }
-
- @Test
- public void whenPostRequestWithParameters_thenOk() {
- Map parameters = new HashMap<>();
- parameters.put("param1", "val");
- HttpResponseWrapper response = requestBuilder.sendPostRequestWithParameters("http://www.example.com", parameters);
- assertEquals("status code incorrect", response.getStatus(), 200);
- }
-
- @Test
- public void whenPostRequestWithJson_thenOk() {
- String json = "{\"id\":\"1\"}";
- HttpResponseWrapper response = requestBuilder.sendPostRequestWithJson("http://www.example.com",json);
- assertEquals("status code incorrect", response.getStatus(), 200);
- }
-}
diff --git a/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java b/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java
similarity index 97%
rename from core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java
rename to libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java
index b8a8d2adb3..65f89d75b2 100644
--- a/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java
+++ b/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java
@@ -1,21 +1,20 @@
package com.baeldung.jdo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.jdo.PersistenceManager;
-import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.Query;
-import javax.jdo.Transaction;
-
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
import org.datanucleus.metadata.PersistenceUnitMetaData;
import org.junit.Test;
-public class GuideToJDOTest {
+import javax.jdo.PersistenceManager;
+import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.Query;
+import javax.jdo.Transaction;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class GuideToJDOIntegrationTest {
@Test
public void givenProduct_WhenNewThenPerformTransaction() {
PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
@@ -34,8 +33,7 @@ public class GuideToJDOTest {
tx.begin();
for (int i = 0; i < 100; i++){
String nam = "Product-" + i;
- double price = i;
- Product productx = new Product(nam, price);
+ Product productx = new Product(nam, (double) i);
pm.makePersistent(productx);
}
tx.commit();
diff --git a/pom.xml b/pom.xml
index 57041f2340..3f8eeb6264 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,7 @@
handling-spring-static-resources
hazelcast
hbase
+
httpclient
hystrix
@@ -200,12 +201,8 @@
video-tutorials
- wicket
-
xml
xmlunit2
- xstream
-
struts2
apache-velocity
apache-solrj
@@ -215,6 +212,7 @@
spring-data-gemfire
cucumber
mybatis
+ spring-drools
@@ -225,8 +223,6 @@
1.6.0
maven
- hibernate5
-
diff --git a/reactor-core/pom.xml b/reactor-core/pom.xml
index 3aeb4af3d5..2f9b096fd2 100644
--- a/reactor-core/pom.xml
+++ b/reactor-core/pom.xml
@@ -16,6 +16,17 @@
1.8
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*LongRunningUnitTest.java
+ **/*IntegrationTest.java
+
+
+
@@ -56,4 +67,6 @@
1.1.3
+
+
diff --git a/reactor-core/src/test/java/com/baeldung/reactor/ReactorTest.java b/reactor-core/src/test/java/com/baeldung/reactor/ReactorIntegrationTest.java
similarity index 98%
rename from reactor-core/src/test/java/com/baeldung/reactor/ReactorTest.java
rename to reactor-core/src/test/java/com/baeldung/reactor/ReactorIntegrationTest.java
index 0e534e7d61..56650ba306 100644
--- a/reactor-core/src/test/java/com/baeldung/reactor/ReactorTest.java
+++ b/reactor-core/src/test/java/com/baeldung/reactor/ReactorIntegrationTest.java
@@ -12,7 +12,7 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
-public class ReactorTest {
+public class ReactorIntegrationTest {
@Test
public void givenFlux_whenSubscribing_thenStream() throws InterruptedException {
diff --git a/spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIUnitTest.java b/spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIIntegrationTest.java
similarity index 98%
rename from spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIUnitTest.java
rename to spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIIntegrationTest.java
index cc5ac863b5..3ec756e238 100644
--- a/spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIUnitTest.java
+++ b/spring-all/src/test/java/org/baeldung/shell/simple/SimpleCLIIntegrationTest.java
@@ -1,7 +1,5 @@
package org.baeldung.shell.simple;
-import java.io.File;
-
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
@@ -10,7 +8,9 @@ import org.springframework.shell.Bootstrap;
import org.springframework.shell.core.CommandResult;
import org.springframework.shell.core.JLineShellComponent;
-public class SimpleCLIUnitTest {
+import java.io.File;
+
+public class SimpleCLIIntegrationTest {
static JLineShellComponent shell;
diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml
index b00af7fc94..7477c78b58 100644
--- a/spring-boot/pom.xml
+++ b/spring-boot/pom.xml
@@ -125,7 +125,23 @@
mysql-connector-java
6.0.6
+
+
+ org.togglz
+ togglz-spring-boot-starter
+ ${togglz.version}
+
+
+
+ org.togglz
+ togglz-spring-security
+ ${togglz.version}
+
+
+ org.apache.activemq
+ artemis-server
+
@@ -262,6 +278,7 @@
3.1.7
8.5.11
1.4.194
+ 2.4.1.Final
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/Employee.java b/spring-boot/src/main/java/com/baeldung/toggle/Employee.java
new file mode 100644
index 0000000000..64a8b3ce5b
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/Employee.java
@@ -0,0 +1,37 @@
+package com.baeldung.toggle;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class Employee {
+
+ @Id
+ private long id;
+ private double salary;
+
+ public Employee() {
+ }
+
+ public Employee(long id, double salary) {
+ this.id = id;
+ this.salary = salary;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java b/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java
new file mode 100644
index 0000000000..7ea7c11fde
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.toggle;
+
+import org.springframework.data.repository.CrudRepository;
+
+public interface EmployeeRepository extends CrudRepository{
+
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java b/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java
new file mode 100644
index 0000000000..4578b8498e
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java
@@ -0,0 +1,12 @@
+package com.baeldung.toggle;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.TYPE })
+public @interface FeatureAssociation {
+ MyFeatures value();
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java b/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java
new file mode 100644
index 0000000000..9bc643fccc
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java
@@ -0,0 +1,27 @@
+package com.baeldung.toggle;
+
+import org.apache.log4j.Logger;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class FeaturesAspect {
+
+ private static final Logger LOG = Logger.getLogger(FeaturesAspect.class);
+
+ @Around(value = "@within(featureAssociation) || @annotation(featureAssociation)")
+ public Object checkAspect(ProceedingJoinPoint joinPoint, FeatureAssociation featureAssociation) throws Throwable {
+ if (featureAssociation.value()
+ .isActive()) {
+ return joinPoint.proceed();
+ } else {
+ LOG.info("Feature " + featureAssociation.value()
+ .name() + " is not enabled!");
+ return null;
+ }
+ }
+
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java b/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java
new file mode 100644
index 0000000000..245415a2a0
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java
@@ -0,0 +1,22 @@
+package com.baeldung.toggle;
+
+import org.togglz.core.Feature;
+import org.togglz.core.activation.SystemPropertyActivationStrategy;
+import org.togglz.core.annotation.ActivationParameter;
+import org.togglz.core.annotation.DefaultActivationStrategy;
+import org.togglz.core.annotation.EnabledByDefault;
+import org.togglz.core.annotation.Label;
+import org.togglz.core.context.FeatureContext;
+
+public enum MyFeatures implements Feature {
+
+ @Label("Employee Management Feature") @EnabledByDefault @DefaultActivationStrategy(id = SystemPropertyActivationStrategy.ID,
+ parameters = { @ActivationParameter(name = SystemPropertyActivationStrategy.PARAM_PROPERTY_NAME, value = "employee.feature"),
+ @ActivationParameter(name = SystemPropertyActivationStrategy.PARAM_PROPERTY_VALUE, value = "true") })
+ EMPLOYEE_MANAGEMENT_FEATURE;
+
+ public boolean isActive() {
+ return FeatureContext.getFeatureManager().isActive(this);
+ }
+
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java b/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java
new file mode 100644
index 0000000000..5d72f0105a
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java
@@ -0,0 +1,20 @@
+package com.baeldung.toggle;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+public class SalaryController {
+
+ @Autowired
+ SalaryService salaryService;
+
+ @PostMapping(value = "/increaseSalary")
+ @ResponseBody
+ public void increaseSalary(@RequestParam long id) {
+ salaryService.increaseSalary(id);
+ }
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java b/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java
new file mode 100644
index 0000000000..df65033d6b
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java
@@ -0,0 +1,19 @@
+package com.baeldung.toggle;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SalaryService {
+
+ @Autowired
+ EmployeeRepository employeeRepository;
+
+ @FeatureAssociation(value = MyFeatures.EMPLOYEE_MANAGEMENT_FEATURE)
+ public void increaseSalary(long id) {
+ Employee employee = employeeRepository.findOne(id);
+ employee.setSalary(employee.getSalary() + employee.getSalary() * 0.1);
+ employeeRepository.save(employee);
+ }
+
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java b/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java
new file mode 100644
index 0000000000..c269262ab2
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java
@@ -0,0 +1,17 @@
+package com.baeldung.toggle;
+
+import javax.annotation.security.RolesAllowed;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import com.baeldung.autoconfiguration.MySQLAutoconfiguration;
+
+@SpringBootApplication(exclude = MySQLAutoconfiguration.class)
+public class ToggleApplication {
+ @RolesAllowed("*")
+ public static void main(String[] args) {
+ System.setProperty("security.basic.enabled", "false");
+ SpringApplication.run(ToggleApplication.class, args);
+ }
+}
diff --git a/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java b/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java
new file mode 100644
index 0000000000..ee0b251479
--- /dev/null
+++ b/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java
@@ -0,0 +1,20 @@
+package com.baeldung.toggle;
+
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.togglz.core.manager.EnumBasedFeatureProvider;
+import org.togglz.core.spi.FeatureProvider;
+
+@Configuration
+@EnableJpaRepositories("com.baeldung.toggle")
+@EntityScan("com.baeldung.toggle")
+public class ToggleConfiguration {
+
+ @Bean
+ public FeatureProvider featureProvider() {
+ return new EnumBasedFeatureProvider(MyFeatures.class);
+ }
+
+}
diff --git a/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
new file mode 100644
index 0000000000..e40678603b
--- /dev/null
+++ b/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.toggle;
+
+import static org.junit.Assert.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = ToggleApplication.class)
+@AutoConfigureMockMvc
+public class ToggleIntegrationTest {
+
+ @Autowired
+ SalaryService salaryService;
+
+ @Autowired
+ EmployeeRepository employeeRepository;
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ @Before
+ public void setup() {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+ }
+
+ @Test
+ public void givenFeaturePropertyFalse_whenIncreaseSalary_thenNoIncrease() throws Exception {
+ Employee emp = new Employee(1, 2000);
+ employeeRepository.save(emp);
+
+ System.setProperty("employee.feature", "false");
+
+ mockMvc.perform(post("/increaseSalary").param("id", emp.getId() + "")).andExpect(status().is(200));
+
+ emp = employeeRepository.findOne(1L);
+ assertEquals("salary incorrect", 2000, emp.getSalary(), 0.5);
+ }
+
+ @Test
+ public void givenFeaturePropertyTrue_whenIncreaseSalary_thenIncrease() throws Exception {
+ Employee emp = new Employee(1, 2000);
+ employeeRepository.save(emp);
+
+ System.setProperty("employee.feature", "true");
+
+ mockMvc.perform(post("/increaseSalary").param("id", emp.getId() + "")).andExpect(status().is(200));
+
+ emp = employeeRepository.findOne(1L);
+ assertEquals("salary incorrect", 2200, emp.getSalary(), 0.5);
+ }
+}
diff --git a/spring-boot/src/test/java/org/baeldung/boot/boottest/EmployeeRestControllerIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/boot/boottest/EmployeeRestControllerIntegrationTest.java
index 110092d293..4c3a50f933 100644
--- a/spring-boot/src/test/java/org/baeldung/boot/boottest/EmployeeRestControllerIntegrationTest.java
+++ b/spring-boot/src/test/java/org/baeldung/boot/boottest/EmployeeRestControllerIntegrationTest.java
@@ -19,18 +19,19 @@ import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.http.MediaType;
-import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = DemoApplication.class)
@AutoConfigureMockMvc
-@TestPropertySource(locations = "classpath:application-integrationtest.properties")
+// @TestPropertySource(locations = "classpath:application-integrationtest.properties")
+@AutoConfigureTestDatabase
public class EmployeeRestControllerIntegrationTest {
@Autowired
diff --git a/spring-boot/src/test/resources/application-integrationtest.properties b/spring-boot/src/test/resources/application-integrationtest.properties
index 508acf45e0..bcd03226d3 100644
--- a/spring-boot/src/test/resources/application-integrationtest.properties
+++ b/spring-boot/src/test/resources/application-integrationtest.properties
@@ -1,2 +1,4 @@
-spring.datasource.url = jdbc:h2:mem:test
-spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect
\ No newline at end of file
+spring.datasource.url=jdbc:mysql://localhost:3306/employee_int_test
+spring.datasource.username=root
+spring.datasource.password=root
+
diff --git a/spring-drools/pom.xml b/spring-drools/pom.xml
new file mode 100644
index 0000000000..8afdae0d84
--- /dev/null
+++ b/spring-drools/pom.xml
@@ -0,0 +1,130 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ spring-drools
+ 1.0.0-SNAPSHOT
+
+ 1.1.1.RELEASE
+ 4.0-alpha6
+ 7.0.0.CR1
+ 3.13
+ 2.19.1
+
+
+
+
+ io.spring.platform
+ platform-bom
+ ${spring-boot-version}
+ pom
+ import
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.apache.httpcomponents
+ httpcore
+ ${http-component-version}
+
+
+
+ org.kie
+ kie-ci
+ ${drools-version}
+
+
+ org.drools
+ drools-decisiontables
+ ${drools-version}
+
+
+
+ org.drools
+ drools-core
+ ${drools-version}
+
+
+ org.drools
+ drools-compiler
+ ${drools-version}
+
+
+ org.apache.poi
+ poi
+ ${apache-poi-version}
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${apache-poi-version}
+
+
+ org.kie
+ kie-spring
+ 6.4.0.Final
+
+
+ org.springframework
+ spring-tx
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-core
+
+
+ org.springframework
+ spring-context
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire-plugin-version}
+
+
+ **/*IntegrationTest.java
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/Application.java b/spring-drools/src/main/java/com/baeldung/spring/drools/Application.java
new file mode 100644
index 0000000000..8f5b915f88
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/Application.java
@@ -0,0 +1,30 @@
+package com.baeldung.spring.drools;
+
+
+import com.baeldung.spring.drools.model.Applicant;
+import com.baeldung.spring.drools.model.Product;
+import com.baeldung.spring.drools.model.SuggestedRole;
+import com.baeldung.spring.drools.service.ApplicantService;
+import com.baeldung.spring.drools.service.ProductService;
+import org.kie.api.KieServices;
+import org.kie.api.runtime.KieContainer;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+
+@SpringBootApplication
+@Import(DroolConfiguration.class)
+public class Application {
+
+ public static void main(String[] args) {
+ ApplicationContext ctx = SpringApplication.run(Application.class, args);
+ ApplicantService applicantService=(ApplicantService)ctx.getBean("applicantService");
+ applicantService.suggestARoleForApplicant(new Applicant("Baljeet",37,1200000.0,8),new SuggestedRole());
+
+ ProductService productService=(ProductService)ctx.getBean("productService");
+ Product returnedProduct=productService.applyLabelToProduct(new Product("Microwave","Book"));
+ }
+
+}
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/DroolConfiguration.java b/spring-drools/src/main/java/com/baeldung/spring/drools/DroolConfiguration.java
new file mode 100644
index 0000000000..7a5e833ed5
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/DroolConfiguration.java
@@ -0,0 +1,83 @@
+package com.baeldung.spring.drools;
+
+import com.baeldung.spring.drools.service.ApplicantService;
+import com.baeldung.spring.drools.service.ProductService;
+import org.kie.api.KieBase;
+import org.kie.api.KieServices;
+import org.kie.api.builder.*;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.internal.io.ResourceFactory;
+import org.kie.spring.KModuleBeanFactoryPostProcessor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+
+import java.io.IOException;
+
+@Configuration
+public class DroolConfiguration {
+
+ private static final String RULES_PATH = "com/baeldung/spring/drools/rules/";
+
+ @Bean
+ public KieFileSystem kieFileSystem() throws IOException {
+ KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
+ for (Resource file : getRuleFiles()) {
+ kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8"));
+ }
+ return kieFileSystem;
+ }
+
+ private Resource[] getRuleFiles() throws IOException {
+ ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
+ return resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "**/*.*");
+ }
+
+ @Bean
+ public KieContainer kieContainer() throws IOException {
+ final KieRepository kieRepository = getKieServices().getRepository();
+
+ kieRepository.addKieModule(new KieModule() {
+ public ReleaseId getReleaseId() {
+ return kieRepository.getDefaultReleaseId();
+ }
+ });
+
+ KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());
+ kieBuilder.buildAll();
+
+ return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());
+ }
+
+ private KieServices getKieServices() {
+ return KieServices.Factory.get();
+ }
+
+ @Bean
+ public KieBase kieBase() throws IOException {
+ return kieContainer().getKieBase();
+ }
+
+ @Bean
+ public KieSession kieSession() throws IOException {
+ return kieContainer().newKieSession();
+ }
+
+ @Bean
+ public ApplicantService getApplicantService(){
+ return new ApplicantService();
+ }
+
+ @Bean
+ public ProductService getProductService(KieContainer kieContainer){
+ return new ProductService();
+ }
+
+ @Bean
+ public KModuleBeanFactoryPostProcessor kiePostProcessor() {
+ return new KModuleBeanFactoryPostProcessor();
+ }
+}
\ No newline at end of file
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/model/Applicant.java b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Applicant.java
new file mode 100644
index 0000000000..f28d0fcab7
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Applicant.java
@@ -0,0 +1,48 @@
+package com.baeldung.spring.drools.model;
+
+public class Applicant {
+
+ private String name;
+ private int age;
+ private double currentSalary;
+ private int experienceInYears;
+
+ public Applicant(String name, int age, Double currentSalary, int experienceInYears) {
+ this.name = name;
+ this.age = age;
+ this.currentSalary = currentSalary;
+ this.experienceInYears = experienceInYears;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public Double getCurrentSalary() {
+ return currentSalary;
+ }
+
+ public void setCurrentSalary(Double currentSalary) {
+ this.currentSalary = currentSalary;
+ }
+
+ public int getExperienceInYears() {
+ return experienceInYears;
+ }
+
+ public void setExperienceInYears(int experienceInYears) {
+ this.experienceInYears = experienceInYears;
+ }
+}
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/model/Product.java b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Product.java
new file mode 100644
index 0000000000..a861df5834
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Product.java
@@ -0,0 +1,38 @@
+package com.baeldung.spring.drools.model;
+
+public class Product {
+ private String name;
+ private String type;
+
+ private String label;
+
+ public Product(String name, String type) {
+ this.name = name;
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+}
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/model/SuggestedRole.java b/spring-drools/src/main/java/com/baeldung/spring/drools/model/SuggestedRole.java
new file mode 100644
index 0000000000..1ace5aa4ae
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/model/SuggestedRole.java
@@ -0,0 +1,14 @@
+package com.baeldung.spring.drools.model;
+
+public class SuggestedRole {
+
+ private String role;
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(String role) {
+ this.role = role;
+ }
+}
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/ApplicantService.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/ApplicantService.java
new file mode 100644
index 0000000000..f78ffe668b
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/ApplicantService.java
@@ -0,0 +1,25 @@
+package com.baeldung.spring.drools.service;
+
+import com.baeldung.spring.drools.model.Applicant;
+import com.baeldung.spring.drools.model.SuggestedRole;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ApplicantService {
+
+ @Autowired
+ private KieContainer kieContainer;
+
+ public SuggestedRole suggestARoleForApplicant(Applicant applicant,SuggestedRole suggestedRole){
+ KieSession kieSession = kieContainer.newKieSession();
+ kieSession.insert(applicant);
+ kieSession.setGlobal("suggestedRole",suggestedRole);
+ kieSession.fireAllRules();
+ System.out.println(suggestedRole.getRole());
+ return suggestedRole;
+
+ }
+}
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/ProductService.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/ProductService.java
new file mode 100644
index 0000000000..21ca9c9730
--- /dev/null
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/ProductService.java
@@ -0,0 +1,24 @@
+package com.baeldung.spring.drools.service;
+
+import com.baeldung.spring.drools.model.Product;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProductService {
+
+ @Autowired
+ private KieContainer kieContainer;
+
+ public Product applyLabelToProduct(Product product){
+ KieSession kieSession = kieContainer.newKieSession();
+ kieSession.insert(product);
+ kieSession.fireAllRules();
+ System.out.println(product.getLabel());
+ return product;
+
+ }
+
+}
diff --git a/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/Product_rules.xls b/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/Product_rules.xls
new file mode 100644
index 0000000000..24caaf2470
Binary files /dev/null and b/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/Product_rules.xls differ
diff --git a/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/SuggestApplicant.drl b/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/SuggestApplicant.drl
new file mode 100644
index 0000000000..baaf29d0b4
--- /dev/null
+++ b/spring-drools/src/main/resources/com/baeldung/spring/drools/rules/SuggestApplicant.drl
@@ -0,0 +1,31 @@
+package com.baeldung.spring.drools.rules;
+
+import com.baeldung.spring.drools.model.Applicant;
+
+global com.baeldung.spring.drools.model.SuggestedRole suggestedRole;
+
+dialect "mvel"
+
+rule "Suggest Manager Role"
+ when
+ Applicant(experienceInYears > 10)
+ Applicant(currentSalary > 1000000 && currentSalary <= 2500000)
+ then
+ suggestedRole.setRole("Manager");
+end
+
+rule "Suggest Senior developer Role"
+ when
+ Applicant(experienceInYears > 5 && experienceInYears <= 10)
+ Applicant(currentSalary > 500000 && currentSalary <= 1500000)
+ then
+ suggestedRole.setRole("Senior developer");
+end
+
+rule "Suggest Developer Role"
+ when
+ Applicant(experienceInYears > 0 && experienceInYears <= 5)
+ Applicant(currentSalary > 200000 && currentSalary <= 1000000)
+ then
+ suggestedRole.setRole("Developer");
+end
diff --git a/spring-drools/src/test/java/com/baeldung/spring/drools/service/ApplicantServiceIntegrationTest.java b/spring-drools/src/test/java/com/baeldung/spring/drools/service/ApplicantServiceIntegrationTest.java
new file mode 100644
index 0000000000..d7e7634c00
--- /dev/null
+++ b/spring-drools/src/test/java/com/baeldung/spring/drools/service/ApplicantServiceIntegrationTest.java
@@ -0,0 +1,52 @@
+package com.baeldung.spring.drools.service;
+
+import com.baeldung.spring.drools.Application;
+import com.baeldung.spring.drools.DroolConfiguration;
+import com.baeldung.spring.drools.model.Applicant;
+import com.baeldung.spring.drools.model.SuggestedRole;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static junit.framework.Assert.assertNull;
+import static junit.framework.TestCase.assertEquals;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {DroolConfiguration.class})
+public class ApplicantServiceIntegrationTest {
+
+ @Autowired
+ ApplicantService applicantService;
+
+ @Test
+ public void whenCriteriaMatching_ThenSuggestManagerRole(){
+ Applicant applicant=new Applicant("Davis",37,1600000.0,11);
+ SuggestedRole suggestedRole=new SuggestedRole();
+ applicantService.suggestARoleForApplicant(applicant,suggestedRole);
+ assertEquals("Manager",suggestedRole.getRole());
+ }
+
+ @Test
+ public void whenCriteriaMatching_ThenSuggestSeniorDeveloperRole(){
+ Applicant applicant=new Applicant("John",37,1200000.0,8);
+ SuggestedRole suggestedRole=new SuggestedRole();
+ applicantService.suggestARoleForApplicant(applicant,suggestedRole);
+ assertEquals("Senior developer",suggestedRole.getRole());
+ }
+ @Test
+ public void whenCriteriaMatching_ThenSuggestDeveloperRole(){
+ Applicant applicant=new Applicant("Davis",37,800000.0,3);
+ SuggestedRole suggestedRole=new SuggestedRole();
+ applicantService.suggestARoleForApplicant(applicant,suggestedRole);
+ assertEquals("Developer",suggestedRole.getRole());
+ }
+ @Test
+ public void whenCriteriaNotMatching_ThenNoRole(){
+ Applicant applicant=new Applicant("John",37,1200000.0,5);
+ SuggestedRole suggestedRole=new SuggestedRole();
+ applicantService.suggestARoleForApplicant(applicant,suggestedRole);
+ assertNull(suggestedRole.getRole());
+ }
+}
diff --git a/spring-drools/src/test/java/com/baeldung/spring/drools/service/ProductServiceIntegrationTest.java b/spring-drools/src/test/java/com/baeldung/spring/drools/service/ProductServiceIntegrationTest.java
new file mode 100644
index 0000000000..7a442e48fd
--- /dev/null
+++ b/spring-drools/src/test/java/com/baeldung/spring/drools/service/ProductServiceIntegrationTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.spring.drools.service;
+
+import com.baeldung.spring.drools.Application;
+import com.baeldung.spring.drools.DroolConfiguration;
+import com.baeldung.spring.drools.model.Product;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static junit.framework.TestCase.assertEquals;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {DroolConfiguration.class})
+public class ProductServiceIntegrationTest {
+
+ @Autowired
+ ProductService productService;
+
+ @Test
+ public void whenProductTypeElectronic_ThenLabelBarcode(){
+ Product product=new Product("Microwave","Electronic");
+ product=productService.applyLabelToProduct(product);
+ assertEquals("BarCode",product.getLabel());
+ }
+
+ @Test
+ public void whenProductTypeBook_ThenLabelIsbn(){
+ Product product=new Product("AutoBiography","Book");
+ product=productService.applyLabelToProduct(product);
+ assertEquals("ISBN",product.getLabel());
+ }
+}
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBTest.java b/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
similarity index 93%
rename from spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBTest.java
rename to spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
index 2c40c5b117..1fcc4be45d 100644
--- a/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBTest.java
+++ b/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
@@ -1,7 +1,8 @@
package org.baeldung.persistence.repository;
-import javax.annotation.Resource;
-
+import org.baeldung.config.StudentJpaConfig;
+import org.baeldung.persistence.dao.StudentRepository;
+import org.baeldung.persistence.model.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
@@ -9,16 +10,14 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import org.springframework.transaction.annotation.Transactional;
-import org.baeldung.config.StudentJpaConfig;
-import org.baeldung.persistence.model.Student;
-import org.baeldung.persistence.dao.StudentRepository;
+import javax.annotation.Resource;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { StudentJpaConfig.class }, loader = AnnotationConfigContextLoader.class)
@Transactional
-public class InMemoryDBTest {
+public class InMemoryDBIntegrationTest {
@Resource
private StudentRepository studentRepository;
diff --git a/spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerTest.java b/spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java
similarity index 98%
rename from spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerTest.java
rename to spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java
index a1f9e71bec..1dae559371 100644
--- a/spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerTest.java
+++ b/spring-rest/src/test/java/org/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java
@@ -26,7 +26,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
-public class HeavyResourceControllerTest {
+public class HeavyResourceControllerIntegrationTest {
private MockMvc mockMvc;
diff --git a/spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerTest.java b/spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java
similarity index 96%
rename from spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerTest.java
rename to spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java
index a38177f78b..9ef2dfa215 100644
--- a/spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerTest.java
+++ b/spring-rest/src/test/java/org/baeldung/web/controller/mediatypes/CustomMediaTypeControllerIntegrationTest.java
@@ -18,7 +18,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
-public class CustomMediaTypeControllerTest {
+public class CustomMediaTypeControllerIntegrationTest {
private MockMvc mockMvc;
diff --git a/spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerTest.java b/spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerIntegrationTest.java
similarity index 88%
rename from spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerTest.java
rename to spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerIntegrationTest.java
index f2f00a40d8..7bd16a3e97 100644
--- a/spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerTest.java
+++ b/spring-rest/src/test/java/org/baeldung/web/test/BazzNewMappingsExampleControllerIntegrationTest.java
@@ -1,15 +1,6 @@
package org.baeldung.web.test;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
import org.baeldung.config.WebConfig;
import org.junit.Before;
import org.junit.Test;
@@ -22,11 +13,17 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
-public class BazzNewMappingsExampleControllerTest {
+public class BazzNewMappingsExampleControllerIntegrationTest {
private MockMvc mockMvc;
diff --git a/spring-session/pom.xml b/spring-session/pom.xml
index 2c8b15a6eb..79095cbfbb 100644
--- a/spring-session/pom.xml
+++ b/spring-session/pom.xml
@@ -59,7 +59,7 @@
maven-surefire-plugin
- **/*ControllerTest.java
+ **/*IntegrationTest.java
diff --git a/spring-session/src/test/java/com/baeldung/spring/session/SessionControllerTest.java b/spring-session/src/test/java/com/baeldung/spring/session/SessionControllerIntegrationTest.java
similarity index 97%
rename from spring-session/src/test/java/com/baeldung/spring/session/SessionControllerTest.java
rename to spring-session/src/test/java/com/baeldung/spring/session/SessionControllerIntegrationTest.java
index c8138889b2..84dd2bc139 100644
--- a/spring-session/src/test/java/com/baeldung/spring/session/SessionControllerTest.java
+++ b/spring-session/src/test/java/com/baeldung/spring/session/SessionControllerIntegrationTest.java
@@ -11,7 +11,7 @@ import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class SessionControllerTest {
+public class SessionControllerIntegrationTest {
private Jedis jedis;
private TestRestTemplate testRestTemplate;
diff --git a/wicket/pom.xml b/wicket/pom.xml
index 8b81ea4be8..f51ef0173e 100644
--- a/wicket/pom.xml
+++ b/wicket/pom.xml
@@ -4,10 +4,10 @@
4.0.0
com.baeldung.wicket.examples
- wicket-intro
+ wicket
war
1.0-SNAPSHOT
- WicketIntro
+ Wicket
7.5.0
9.2.13.v20150730
@@ -100,6 +100,16 @@
jetty-maven-plugin
${jetty9.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*IntegrationTest.java
+
+
+
diff --git a/xstream/pom.xml b/xstream/pom.xml
index ee1882850a..a97bee27fa 100644
--- a/xstream/pom.xml
+++ b/xstream/pom.xml
@@ -2,9 +2,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.baeldung
- xstream-introduction
+ xstream
0.0.1-SNAPSHOT
- xstream-introduction
+ xstream
An Introduction To XStream
@@ -57,6 +57,17 @@
1.8
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*LongRunningUnitTest.java
+ **/*IntegrationTest.java
+
+
+
diff --git a/xstream/src/main/java/com/baeldung/initializer/SimpleXstreamInitializer.java b/xstream/src/main/java/com/baeldung/initializer/SimpleXstreamInitializer.java
index a15bea5481..27b8cc84f3 100644
--- a/xstream/src/main/java/com/baeldung/initializer/SimpleXstreamInitializer.java
+++ b/xstream/src/main/java/com/baeldung/initializer/SimpleXstreamInitializer.java
@@ -7,17 +7,14 @@ import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
public class SimpleXstreamInitializer {
public XStream getXstreamInstance() {
- XStream xtreamInstance = new XStream();
- return xtreamInstance;
+ return new XStream();
}
public XStream getXstreamJettisonMappedInstance() {
- XStream xstreamInstance = new XStream(new JettisonMappedXmlDriver());
- return xstreamInstance;
+ return new XStream(new JettisonMappedXmlDriver());
}
public XStream getXstreamJsonHierarchicalInstance() {
- XStream xstreamInstance = new XStream(new JsonHierarchicalStreamDriver());
- return xstreamInstance;
+ return new XStream(new JsonHierarchicalStreamDriver());
}
}
\ No newline at end of file
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAnnotationTest.java b/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAnnotationTest.java
index 479500c4a0..ed74086ed6 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAnnotationTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAnnotationTest.java
@@ -1,14 +1,15 @@
package com.baeldung.pojo.test;
+import com.baeldung.complex.pojo.ContactDetails;
import com.baeldung.complex.pojo.Customer;
import com.baeldung.initializer.SimpleXstreamInitializer;
import com.thoughtworks.xstream.XStream;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.FileReader;
-import java.io.IOException;
+
+import static org.junit.Assert.assertNotNull;
public class ComplexXmlToObjectAnnotationTest {
@@ -22,17 +23,30 @@ public class ComplexXmlToObjectAnnotationTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-alias-field-complex.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
- Assert.assertNotNull(customer.getContactDetailsList());
+ public void convertXmlToObjectFromFile() throws Exception {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-alias-field-complex.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ assertNotNull(customer);
+ assertNotNull(customer.getContactDetailsList());
}
+ @Test
+ public void convertXmlToObjectAttributeFromFile() throws Exception {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-alias-field-complex.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+
+ assertNotNull(customer);
+ assertNotNull(customer.getContactDetailsList());
+
+ for (ContactDetails contactDetails : customer.getContactDetailsList()) {
+ assertNotNull(contactDetails.getContactType());
+ }
+ }
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAttributeCollectionTest.java b/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAttributeCollectionTest.java
deleted file mode 100644
index 8c569aa11e..0000000000
--- a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectAttributeCollectionTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.baeldung.pojo.test;
-
-import com.baeldung.complex.pojo.ContactDetails;
-import com.baeldung.complex.pojo.Customer;
-import com.baeldung.initializer.SimpleXstreamInitializer;
-import com.thoughtworks.xstream.XStream;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.FileReader;
-import java.io.IOException;
-
-public class ComplexXmlToObjectAttributeCollectionTest {
-
- private XStream xstream = null;
-
- @Before
- public void dataSetup() {
- SimpleXstreamInitializer simpleXstreamInitializer = new SimpleXstreamInitializer();
- xstream = simpleXstreamInitializer.getXstreamInstance();
- xstream.processAnnotations(Customer.class);
- }
-
- @Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-alias-field-complex.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
- Assert.assertNotNull(customer.getContactDetailsList());
- for (ContactDetails contactDetails : customer.getContactDetailsList()) {
- Assert.assertNotNull(contactDetails.getContactType());
- }
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectCollectionTest.java b/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectCollectionTest.java
index 6b1ae9dbb3..02cdbd734f 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectCollectionTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/ComplexXmlToObjectCollectionTest.java
@@ -7,8 +7,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.IOException;
public class ComplexXmlToObjectCollectionTest {
@@ -22,18 +22,14 @@ public class ComplexXmlToObjectCollectionTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-alias-implicit-collection.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
- Assert.assertNotNull(customer.getContactDetailsList());
- // System.out.println(customer);
-
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void convertXmlToObjectFromFile() throws FileNotFoundException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-alias-implicit-collection.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+ Assert.assertNotNull(customer);
+ Assert.assertNotNull(customer.getContactDetailsList());
}
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAliasTest.java b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAliasTest.java
index 8a4de3b70a..b7c6a8b496 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAliasTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAliasTest.java
@@ -7,8 +7,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.IOException;
public class XmlToObjectAliasTest {
@@ -22,16 +22,13 @@ public class XmlToObjectAliasTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-alias.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
-
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void convertXmlToObjectFromFile() throws FileNotFoundException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-alias.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+ Assert.assertNotNull(customer);
}
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAnnotationTest.java b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAnnotationTest.java
index 4a7ff2f74a..c2bb859e70 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAnnotationTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectAnnotationTest.java
@@ -7,8 +7,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.IOException;
public class XmlToObjectAnnotationTest {
@@ -22,17 +22,12 @@ public class XmlToObjectAnnotationTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
+ public void convertXmlToObjectFromFile() throws FileNotFoundException {
ClassLoader classLoader = getClass().getClassLoader();
FileReader reader = new FileReader(classLoader.getResource("data-file-alias-field.xml").getFile());
Customer customer = (Customer) xstream.fromXML(reader);
Assert.assertNotNull(customer);
Assert.assertNotNull(customer.getFirstName());
-
- } catch (IOException e) {
- e.printStackTrace();
- }
}
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectFieldAliasTest.java b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectFieldAliasTest.java
index 3b1b8326ab..71e1cee809 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectFieldAliasTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectFieldAliasTest.java
@@ -7,8 +7,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.IOException;
public class XmlToObjectFieldAliasTest {
@@ -23,17 +23,14 @@ public class XmlToObjectFieldAliasTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-alias-field.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
- Assert.assertNotNull(customer.getFirstName());
-
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void convertXmlToObjectFromFile() throws FileNotFoundException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-alias-field.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+ Assert.assertNotNull(customer);
+ Assert.assertNotNull(customer.getFirstName());
}
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectIgnoreFieldsTest.java b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectIgnoreFieldsTest.java
index 3b8a83cf47..7726fef0fc 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectIgnoreFieldsTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectIgnoreFieldsTest.java
@@ -7,8 +7,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.FileNotFoundException;
import java.io.FileReader;
-import java.io.IOException;
public class XmlToObjectIgnoreFieldsTest {
@@ -23,16 +23,14 @@ public class XmlToObjectIgnoreFieldsTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file-ignore-field.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
- // System.out.println(customer);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void convertXmlToObjectFromFile() throws FileNotFoundException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file-ignore-field.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+ Assert.assertNotNull(customer);
+ // System.out.println(customer);
}
}
diff --git a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectTest.java b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectTest.java
index a36af81ec1..b7d8f27e5f 100644
--- a/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectTest.java
+++ b/xstream/src/test/java/com/baeldung/pojo/test/XmlToObjectTest.java
@@ -9,7 +9,6 @@ import org.junit.Before;
import org.junit.Test;
import java.io.FileReader;
-import java.io.IOException;
public class XmlToObjectTest {
@@ -22,16 +21,13 @@ public class XmlToObjectTest {
}
@Test
- public void convertXmlToObjectFromFile() {
- try {
- ClassLoader classLoader = getClass().getClassLoader();
- FileReader reader = new FileReader(classLoader.getResource("data-file.xml").getFile());
- Customer customer = (Customer) xstream.fromXML(reader);
- Assert.assertNotNull(customer);
-
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public void convertXmlToObjectFromFile() throws Exception {
+ ClassLoader classLoader = getClass().getClassLoader();
+ FileReader reader = new FileReader(classLoader
+ .getResource("data-file.xml")
+ .getFile());
+ Customer customer = (Customer) xstream.fromXML(reader);
+ Assert.assertNotNull(customer);
}
@Test