diff --git a/.gitignore b/.gitignore
index e78c1e7e24..a0a519c8cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,12 @@ dependency-reduced-pom.xml
*.so
*.dylib
*.dll
+
+xml/src/test/resources/example_dom4j_new.xml
+xml/src/test/resources/example_dom4j_updated.xml
+xml/src/test/resources/example_jaxb_new.xml
+core-java-io/hard_link.txt
+core-java-io/target_link.txt
+core-java/src/main/java/com/baeldung/manifest/MANIFEST.MF
+ethereum/logs/
+jmeter/src/main/resources/*-JMeter.csv
\ No newline at end of file
diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml
index dee0634951..7e3b8cb280 100644
--- a/core-java-8/pom.xml
+++ b/core-java-8/pom.xml
@@ -99,6 +99,16 @@
joda-time
${joda.version}
+
+ org.aspectj
+ aspectjrt
+ ${asspectj.version}
+
+
+ org.aspectj
+ aspectjweaver
+ ${asspectj.version}
+
@@ -170,6 +180,7 @@
2.10
3.6.1
+ 1.8.9
1.7.0
1.19
1.19
diff --git a/core-java-8/src/main/java/com/baeldung/aspect/ChangeCallsToCurrentTimeInMillisMethod.aj b/core-java-8/src/main/java/com/baeldung/aspect/ChangeCallsToCurrentTimeInMillisMethod.aj
new file mode 100644
index 0000000000..b28bebfdaf
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/aspect/ChangeCallsToCurrentTimeInMillisMethod.aj
@@ -0,0 +1,9 @@
+package com.baeldung.aspect;
+
+public aspect ChangeCallsToCurrentTimeInMillisMethod {
+ long around():
+ call(public static native long java.lang.System.currentTimeMillis())
+ && within(user.code.base.pckg.*) {
+ return 0;
+ }
+}
diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeUnitTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeUnitTest.java
index 3ad3deb548..1689a5054d 100644
--- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeUnitTest.java
+++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeUnitTest.java
@@ -1,6 +1,7 @@
package com.baeldung.util;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.time.Clock;
import java.time.Instant;
@@ -9,6 +10,8 @@ import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoField;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeUtils;
import org.junit.Test;
public class CurrentDateTimeUnitTest {
@@ -39,5 +42,4 @@ public class CurrentDateTimeUnitTest {
assertEquals(clock.instant().getEpochSecond(), now.getEpochSecond());
}
-
}
diff --git a/core-java-8/src/main/java/com/baeldung/convertlisttomap/Animal.java b/core-java-collections/src/main/java/com/baeldung/convertlisttomap/Animal.java
similarity index 100%
rename from core-java-8/src/main/java/com/baeldung/convertlisttomap/Animal.java
rename to core-java-collections/src/main/java/com/baeldung/convertlisttomap/Animal.java
diff --git a/core-java-8/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java b/core-java-collections/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java
similarity index 63%
rename from core-java-8/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java
rename to core-java-collections/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java
index 679e753c56..6527d35742 100644
--- a/core-java-8/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java
+++ b/core-java-collections/src/main/java/com/baeldung/convertlisttomap/ConvertListToMapService.java
@@ -1,18 +1,19 @@
package com.baeldung.convertlisttomap;
+import com.google.common.collect.Maps;
+import org.apache.commons.collections4.MapUtils;
+
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.MapUtils;
-import com.google.common.collect.Maps;
-
public class ConvertListToMapService {
public Map convertListBeforeJava8(List list) {
- Map map = new HashMap();
+
+ Map map = new HashMap<>();
+
for (Animal animal : list) {
map.put(animal.getId(), animal);
}
@@ -30,20 +31,9 @@ public class ConvertListToMapService {
return map;
}
- public Map convertListWithApacheCommons1(List list) {
+ public Map convertListWithApacheCommons(List list) {
- Map map = new HashMap();
-
- IterableUtils.forEach(list, animal -> {
- map.put(animal.getId(), animal);
- });
-
- return map;
- }
-
- public Map convertListWithApacheCommons2(List list) {
-
- Map map = new HashMap();
+ Map map = new HashMap<>();
MapUtils.populateMap(map, list, Animal::getId);
diff --git a/core-java-8/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java b/core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java
similarity index 80%
rename from core-java-8/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java
rename to core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java
index 4e78af08cd..4d783f4525 100644
--- a/core-java-8/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java
+++ b/core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListToMapServiceUnitTest.java
@@ -1,13 +1,14 @@
package com.baeldung.convertlisttomap;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
+import org.junit.Before;
+import org.junit.Test;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsInAnyOrder;
public class ConvertListToMapServiceUnitTest {
List list;
@@ -29,6 +30,7 @@ public class ConvertListToMapServiceUnitTest {
list.add(cow);
Animal goat = new Animal(5, "Goat");
list.add(goat);
+
}
@Test
@@ -56,18 +58,11 @@ public class ConvertListToMapServiceUnitTest {
}
@Test
- public void givenAList_whenConvertWithApacheCommons1_thenReturnMapWithTheSameElements() {
+ public void givenAList_whenConvertWithApacheCommons_thenReturnMapWithTheSameElements() {
- Map map = convertListService.convertListWithApacheCommons1(list);
+ Map map = convertListService.convertListWithApacheCommons(list);
assertThat(map.values(), containsInAnyOrder(list.toArray()));
}
- @Test
- public void givenAList_whenConvertWithApacheCommons2_thenReturnMapWithTheSameElements() {
-
- Map map = convertListService.convertListWithApacheCommons2(list);
-
- assertThat(map.values(), containsInAnyOrder(list.toArray()));
- }
}
diff --git a/core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java b/core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java
new file mode 100644
index 0000000000..6e766433d1
--- /dev/null
+++ b/core-java-collections/src/test/java/com/baeldung/convertlisttomap/ConvertListWithDiplicatedIdToMapServiceUnitTest.java
@@ -0,0 +1,68 @@
+package com.baeldung.convertlisttomap;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
+
+public class ConvertListWithDiplicatedIdToMapServiceUnitTest {
+ List duplicatedIdList;
+
+ private ConvertListToMapService convertListService = new ConvertListToMapService();
+
+ @Before
+ public void init() {
+
+ this.duplicatedIdList = new ArrayList<>();
+
+ Animal cat = new Animal(1, "Cat");
+ duplicatedIdList.add(cat);
+ Animal dog = new Animal(2, "Dog");
+ duplicatedIdList.add(dog);
+ Animal pig = new Animal(3, "Pig");
+ duplicatedIdList.add(pig);
+ Animal cow = new Animal(4, "Cow");
+ duplicatedIdList.add(cow);
+ Animal goat = new Animal(4, "Goat");
+ duplicatedIdList.add(goat);
+
+ }
+
+ @Test
+ public void givenADupIdList_whenConvertBeforeJava8_thenReturnMapWithRewrittenElement() {
+
+ Map map = convertListService.convertListBeforeJava8(duplicatedIdList);
+
+ assertThat(map.values(), hasSize(4));
+ assertThat(map.values(), hasItem(duplicatedIdList.get(4)));
+ }
+
+ @Test
+ public void givenADupIdList_whenConvertWithApacheCommons_thenReturnMapWithRewrittenElement() {
+
+ Map map = convertListService.convertListWithApacheCommons(duplicatedIdList);
+
+ assertThat(map.values(), hasSize(4));
+ assertThat(map.values(), hasItem(duplicatedIdList.get(4)));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void givenADupIdList_whenConvertAfterJava8_thenException() {
+
+ convertListService.convertListAfterJava8(duplicatedIdList);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void givenADupIdList_whenConvertWithGuava_thenException() {
+
+ convertListService.convertListWithGuava(duplicatedIdList);
+
+ }
+
+}
diff --git a/core-java/pom.xml b/core-java/pom.xml
index c52b109f72..0b69685e14 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -147,6 +147,17 @@
icu4j
${icu4j.version}
+
+
+ org.apache.tika
+ tika-core
+ ${tika.version}
+
+
+ net.sf.jmimemagic
+ jmimemagic
+ ${jmime-magic.version}
+
org.apache.commons
commons-dbcp2
@@ -162,6 +173,19 @@
c3p0
${c3p0.version}
+
+
+ org.javassist
+ javassist
+ ${javaassist.version}
+
+
+ com.sun
+ tools
+ 1.8.0
+ system
+ ${java.home}/../lib/tools.jar
+
@@ -389,6 +413,111 @@
+
+
+
+ buildAgentLoader
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ package
+
+ jar
+
+
+ agentLoader
+ target/classes
+
+
+ true
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+ com/baeldung/instrumentation/application/AgentLoader.class
+ com/baeldung/instrumentation/application/Launcher.class
+
+
+
+
+
+
+
+
+
+ buildApplication
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ package
+
+ jar
+
+
+ application
+ target/classes
+
+
+ true
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+ com/baeldung/instrumentation/application/MyAtm.class
+ com/baeldung/instrumentation/application/MyAtmApplication.class
+ com/baeldung/instrumentation/application/Launcher.class
+
+
+
+
+
+
+
+
+
+ buildAgent
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ package
+
+ jar
+
+
+ agent
+ target/classes
+
+
+ true
+
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
+
+
+ com/baeldung/instrumentation/agent/AtmTransformer.class
+ com/baeldung/instrumentation/agent/MyInstrumentationAgent.class
+
+
+
+
+
+
+
+
@@ -439,6 +568,11 @@
2.0.3.RELEASE
1.6.0
61.1
+
+ 1.18
+ 0.1.5
+
+ 3.21.0-GA
diff --git a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java b/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java
index 243ec88eb5..1934d0cfc2 100644
--- a/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java
+++ b/core-java/src/main/java/com/baeldung/connectionpool/connectionpools/BasicConnectionPool.java
@@ -33,7 +33,7 @@ public class BasicConnectionPool implements ConnectionPool {
@Override
public Connection getConnection() throws SQLException {
- if (connectionPool.size() == 0) {
+ if (connectionPool.isEmpty()) {
if (usedConnections.size() < MAX_POOL_SIZE) {
connectionPool.add(createConnection(url, user, password));
} else {
@@ -76,9 +76,7 @@ public class BasicConnectionPool implements ConnectionPool {
}
public void shutdown() throws SQLException {
- for (Connection c : usedConnections) {
- this.releaseConnection(c);
- }
+ usedConnections.forEach(this::releaseConnection);
for (Connection c : connectionPool) {
c.close();
}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java b/core-java/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java
new file mode 100644
index 0000000000..3c83912f54
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/agent/AtmTransformer.java
@@ -0,0 +1,70 @@
+package com.baeldung.instrumentation.agent;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtMethod;
+import javassist.NotFoundException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.security.ProtectionDomain;
+
+public class AtmTransformer implements ClassFileTransformer {
+
+ private static Logger LOGGER = LoggerFactory.getLogger(AtmTransformer.class);
+
+ private static final String WITHDRAW_MONEY_METHOD = "withdrawMoney";
+
+ /** The internal form class name of the class to transform */
+ private String targetClassName;
+ /** The class loader of the class we want to transform */
+ private ClassLoader targetClassLoader;
+
+ public AtmTransformer(String targetClassName, ClassLoader targetClassLoader) {
+ this.targetClassName = targetClassName;
+ this.targetClassLoader = targetClassLoader;
+ }
+
+ @Override
+ public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined,
+ ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
+ byte[] byteCode = classfileBuffer;
+
+ String finalTargetClassName = this.targetClassName.replaceAll("\\.", "/"); //replace . with /
+ if (!className.equals(finalTargetClassName)) {
+ return byteCode;
+ }
+
+ if (className.equals(finalTargetClassName) && loader.equals(targetClassLoader)) {
+ LOGGER.info("[Agent] Transforming class MyAtm");
+ try {
+ ClassPool cp = ClassPool.getDefault();
+ CtClass cc = cp.get(targetClassName);
+ CtMethod m = cc.getDeclaredMethod(WITHDRAW_MONEY_METHOD);
+ m.addLocalVariable("startTime", CtClass.longType);
+ m.insertBefore("startTime = System.currentTimeMillis();");
+
+ StringBuilder endBlock = new StringBuilder();
+
+ m.addLocalVariable("endTime", CtClass.longType);
+ m.addLocalVariable("opTime", CtClass.longType);
+ endBlock.append("endTime = System.currentTimeMillis();");
+ endBlock.append("opTime = (endTime-startTime)/1000;");
+
+ endBlock.append("LOGGER.info(\"[Application] Withdrawal operation completed in:\" + opTime + \" seconds!\");");
+
+ m.insertAfter(endBlock.toString());
+
+ byteCode = cc.toBytecode();
+ cc.detach();
+ } catch (NotFoundException | CannotCompileException | IOException e) {
+ LOGGER.error("Exception", e);
+ }
+ }
+ return byteCode;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java b/core-java/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java
new file mode 100644
index 0000000000..685520276e
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/agent/MyInstrumentationAgent.java
@@ -0,0 +1,59 @@
+package com.baeldung.instrumentation.agent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.instrument.Instrumentation;
+
+public class MyInstrumentationAgent {
+ private static Logger LOGGER = LoggerFactory.getLogger(MyInstrumentationAgent.class);
+
+ public static void premain(String agentArgs, Instrumentation inst) {
+ LOGGER.info("[Agent] In premain method");
+
+ String className = "com.baeldung.instrumentation.application.MyAtm";
+ transformClass(className,inst);
+ }
+
+ public static void agentmain(String agentArgs, Instrumentation inst) {
+ LOGGER.info("[Agent] In agentmain method");
+
+ String className = "com.baeldung.instrumentation.application.MyAtm";
+ transformClass(className,inst);
+ }
+
+ private static void transformClass(String className, Instrumentation instrumentation) {
+ Class> targetCls = null;
+ ClassLoader targetClassLoader = null;
+ // see if we can get the class using forName
+ try {
+ targetCls = Class.forName(className);
+ targetClassLoader = targetCls.getClassLoader();
+ transform(targetCls, targetClassLoader, instrumentation);
+ return;
+ } catch (Exception ex) {
+ LOGGER.error("Class [{}] not found with Class.forName");
+ }
+ // otherwise iterate all loaded classes and find what we want
+ for(Class> clazz: instrumentation.getAllLoadedClasses()) {
+ if(clazz.getName().equals(className)) {
+ targetCls = clazz;
+ targetClassLoader = targetCls.getClassLoader();
+ transform(targetCls, targetClassLoader, instrumentation);
+ return;
+ }
+ }
+ throw new RuntimeException("Failed to find class [" + className + "]");
+ }
+
+ private static void transform(Class> clazz, ClassLoader classLoader, Instrumentation instrumentation) {
+ AtmTransformer dt = new AtmTransformer(clazz.getName(), classLoader);
+ instrumentation.addTransformer(dt, true);
+ try {
+ instrumentation.retransformClasses(clazz);
+ } catch (Exception ex) {
+ throw new RuntimeException("Transform failed for class: [" + clazz.getName() + "]", ex);
+ }
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java b/core-java/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java
new file mode 100644
index 0000000000..2c1cd759a5
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/application/AgentLoader.java
@@ -0,0 +1,46 @@
+package com.baeldung.instrumentation.application;
+
+import com.sun.tools.attach.VirtualMachine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.Optional;
+
+/**
+ * Created by adi on 6/10/18.
+ */
+public class AgentLoader {
+ private static Logger LOGGER = LoggerFactory.getLogger(AgentLoader.class);
+
+ public static void run(String[] args) {
+ String agentFilePath = "/home/adi/Desktop/agent-1.0.0-jar-with-dependencies.jar";
+ String applicationName = "MyAtmApplication";
+
+ //iterate all jvms and get the first one that matches our application name
+ Optional jvmProcessOpt = Optional.ofNullable(VirtualMachine.list()
+ .stream()
+ .filter(jvm -> {
+ LOGGER.info("jvm:{}", jvm.displayName());
+ return jvm.displayName().contains(applicationName);
+ })
+ .findFirst().get().id());
+
+ if(!jvmProcessOpt.isPresent()) {
+ LOGGER.error("Target Application not found");
+ return;
+ }
+ File agentFile = new File(agentFilePath);
+ try {
+ String jvmPid = jvmProcessOpt.get();
+ LOGGER.info("Attaching to target JVM with PID: " + jvmPid);
+ VirtualMachine jvm = VirtualMachine.attach(jvmPid);
+ jvm.loadAgent(agentFile.getAbsolutePath());
+ jvm.detach();
+ LOGGER.info("Attached to target JVM and loaded Java agent successfully");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/application/Launcher.java b/core-java/src/main/java/com/baeldung/instrumentation/application/Launcher.java
new file mode 100644
index 0000000000..87e494baab
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/application/Launcher.java
@@ -0,0 +1,14 @@
+package com.baeldung.instrumentation.application;
+
+/**
+ * Created by adi on 6/14/18.
+ */
+public class Launcher {
+ public static void main(String[] args) throws Exception {
+ if(args[0].equals("StartMyAtmApplication")) {
+ new MyAtmApplication().run(args);
+ } else if(args[0].equals("LoadAgent")) {
+ new AgentLoader().run(args);
+ }
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtm.java b/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtm.java
new file mode 100644
index 0000000000..f826e82975
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtm.java
@@ -0,0 +1,19 @@
+package com.baeldung.instrumentation.application;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by adi on 6/11/18.
+ */
+public class MyAtm {
+ private static Logger LOGGER = LoggerFactory.getLogger(MyAtm.class);
+
+ private static final int account = 10;
+
+ public static void withdrawMoney(int amount) throws InterruptedException {
+ Thread.sleep(2000l); //processing going on here
+ LOGGER.info("[Application] Successful Withdrawal of [{}] units!", amount);
+
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java b/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java
new file mode 100644
index 0000000000..425511285e
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/instrumentation/application/MyAtmApplication.java
@@ -0,0 +1,19 @@
+package com.baeldung.instrumentation.application;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MyAtmApplication {
+
+ private static Logger LOGGER = LoggerFactory.getLogger(MyAtmApplication.class);
+
+ public static void run(String[] args) throws Exception {
+ LOGGER.info("[Application] Starting ATM application");
+ MyAtm.withdrawMoney(Integer.parseInt(args[2]));
+
+ Thread.sleep(Long.valueOf(args[1]));
+
+ MyAtm.withdrawMoney(Integer.parseInt(args[3]));
+ }
+
+}
diff --git a/core-java/src/main/resources/META-INF/MANIFEST.MF b/core-java/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..988de3193d
--- /dev/null
+++ b/core-java/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Agent-Class: com.baeldung.instrumentation.agent.MyInstrumentationAgent
+Can-Redefine-Classes: true
+Can-Retransform-Classes: true
+Premain-Class: com.baeldung.instrumentation.agent.MyInstrumentationAgent
+Main-Class: com.baeldung.instrumentation.application.Launcher
diff --git a/core-java/src/main/resources/log4j2.xml b/core-java/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..a824bef9b0
--- /dev/null
+++ b/core-java/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java/src/main/resources/product.png b/core-java/src/main/resources/product.png
new file mode 100644
index 0000000000..4edd01c0a1
Binary files /dev/null and b/core-java/src/main/resources/product.png differ
diff --git a/core-java/src/test/java/com/baeldung/java/mimetype/MimeTypeUnitTest.java b/core-java/src/test/java/com/baeldung/java/mimetype/MimeTypeUnitTest.java
new file mode 100644
index 0000000000..c8da2c1339
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/java/mimetype/MimeTypeUnitTest.java
@@ -0,0 +1,131 @@
+package com.baeldung.java.mimetype;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.FileNameMap;
+import java.net.MalformedURLException;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import javax.activation.MimetypesFileTypeMap;
+
+import org.apache.tika.Tika;
+import org.junit.Test;
+
+import net.sf.jmimemagic.Magic;
+import net.sf.jmimemagic.MagicException;
+import net.sf.jmimemagic.MagicMatch;
+import net.sf.jmimemagic.MagicMatchNotFoundException;
+import net.sf.jmimemagic.MagicParseException;
+
+/**
+ * Test class demonstrating various strategies to resolve MIME type of a file.
+ * @author tritty
+ *
+ */
+public class MimeTypeUnitTest {
+ /**
+ * Expected Ouput.
+ */
+ public static final String PNG_EXT = "image/png";
+
+ /**
+ * The location of the file.
+ */
+ public static final String FILE_LOC = "src/test/resources/product.png";
+
+ /**
+ * Test method, demonstrating usage in Java 7.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void whenUsingJava7_thenSuccess() throws IOException {
+ final Path path = new File(FILE_LOC).toPath();
+ final String mimeType = Files.probeContentType(path);
+ assertEquals(mimeType, PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating the usage of URLConnection to resolve MIME type.
+ *
+ * @throws MalformedURLException
+ * @throws IOException
+ */
+ @Test
+ public void whenUsingGetContentType_thenSuccess() throws MalformedURLException, IOException {
+ final File file = new File(FILE_LOC);
+ final URLConnection connection = file.toURL()
+ .openConnection();
+ final String mimeType = connection.getContentType();
+ assertEquals(mimeType, PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating the usage of URLConnection to resolve MIME type.
+ *
+ */
+ @Test
+ public void whenUsingGuessContentTypeFromName_thenSuccess() {
+ final File file = new File(FILE_LOC);
+ final String mimeType = URLConnection.guessContentTypeFromName(file.getName());
+ assertEquals(mimeType, PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating the usage of FileNameMap from URLConnection
+ * to resolve MIME type of a file.
+ *
+ */
+ @Test
+ public void whenUsingGetFileNameMap_thenSuccess() {
+ final File file = new File(FILE_LOC);
+ final FileNameMap fileNameMap = URLConnection.getFileNameMap();
+ final String mimeType = fileNameMap.getContentTypeFor(file.getName());
+ assertEquals(mimeType, PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating the usage of MimeTypesFileTypeMap for resolution of
+ * MIME type.
+ *
+ */
+ @Test
+ public void whenUsingMimeTypesFileTypeMap_thenSuccess() {
+ final File file = new File(FILE_LOC);
+ final MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();
+ final String mimeType = fileTypeMap.getContentType(file.getName());
+ assertEquals(mimeType, PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating usage of jMimeMagic.
+ *
+ * @throws MagicParseException
+ * @throws MagicMatchNotFoundException
+ * @throws MagicException
+ */
+ @Test
+ public void whenUsingJmimeMagic_thenSuccess() throws MagicParseException, MagicMatchNotFoundException, MagicException {
+ final File file = new File(FILE_LOC);
+ final Magic magic = new Magic();
+ final MagicMatch match = magic.getMagicMatch(file, false);
+ assertEquals(match.getMimeType(), PNG_EXT);
+ }
+
+ /**
+ * Test method demonstrating usage of Apache Tika.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void whenUsingTika_thenSuccess() throws IOException {
+ final File file = new File(FILE_LOC);
+ final Tika tika = new Tika();
+ final String mimeType = tika.detect(file);
+ assertEquals(mimeType, PNG_EXT);
+ }
+}
diff --git a/core-java/src/test/resources/META-INF/mime.types b/core-java/src/test/resources/META-INF/mime.types
new file mode 100644
index 0000000000..5175242626
--- /dev/null
+++ b/core-java/src/test/resources/META-INF/mime.types
@@ -0,0 +1,1588 @@
+# This file maps Internet media types to unique file extension(s).
+# Although created for httpd, this file is used by many software systems
+# and has been placed in the public domain for unlimited redisribution.
+#
+# The table below contains both registered and (common) unregistered types.
+# A type that has no unique extension can be ignored -- they are listed
+# here to guide configurations toward known types and to make it easier to
+# identify "new" types. File extensions are also commonly used to indicate
+# content languages and encodings, so choose them carefully.
+#
+# Internet media types should be registered as described in RFC 4288.
+# The registry is at .
+#
+# MIME type (lowercased) Extensions
+# ============================================ ==========
+# application/1d-interleaved-parityfec
+# application/3gpp-ims+xml
+# application/activemessage
+application/andrew-inset ez
+# application/applefile
+application/applixware aw
+application/atom+xml atom
+application/atomcat+xml atomcat
+# application/atomicmail
+application/atomsvc+xml atomsvc
+# application/auth-policy+xml
+# application/batch-smtp
+# application/beep+xml
+# application/calendar+xml
+# application/cals-1840
+# application/ccmp+xml
+application/ccxml+xml ccxml
+application/cdmi-capability cdmia
+application/cdmi-container cdmic
+application/cdmi-domain cdmid
+application/cdmi-object cdmio
+application/cdmi-queue cdmiq
+# application/cea-2018+xml
+# application/cellml+xml
+# application/cfw
+# application/cnrp+xml
+# application/commonground
+# application/conference-info+xml
+# application/cpl+xml
+# application/csta+xml
+# application/cstadata+xml
+application/cu-seeme cu
+# application/cybercash
+application/davmount+xml davmount
+# application/dca-rft
+# application/dec-dx
+# application/dialog-info+xml
+# application/dicom
+# application/dns
+application/docbook+xml dbk
+# application/dskpp+xml
+application/dssc+der dssc
+application/dssc+xml xdssc
+# application/dvcs
+application/ecmascript ecma
+# application/edi-consent
+# application/edi-x12
+# application/edifact
+application/emma+xml emma
+# application/epp+xml
+application/epub+zip epub
+# application/eshop
+# application/example
+application/exi exi
+# application/fastinfoset
+# application/fastsoap
+# application/fits
+application/font-tdpfr pfr
+# application/framework-attributes+xml
+application/gml+xml gml
+application/gpx+xml gpx
+application/gxf gxf
+# application/h224
+# application/held+xml
+# application/http
+application/hyperstudio stk
+# application/ibe-key-request+xml
+# application/ibe-pkg-reply+xml
+# application/ibe-pp-data
+# application/iges
+# application/im-iscomposing+xml
+# application/index
+# application/index.cmd
+# application/index.obj
+# application/index.response
+# application/index.vnd
+application/inkml+xml ink inkml
+# application/iotp
+application/ipfix ipfix
+# application/ipp
+# application/isup
+application/java-archive jar
+application/java-serialized-object ser
+application/java-vm class
+application/javascript js
+application/json json
+application/jsonml+json jsonml
+# application/kpml-request+xml
+# application/kpml-response+xml
+application/lost+xml lostxml
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+# application/macwriteii
+application/mads+xml mads
+application/marc mrc
+application/marcxml+xml mrcx
+application/mathematica ma nb mb
+# application/mathml-content+xml
+# application/mathml-presentation+xml
+application/mathml+xml mathml
+# application/mbms-associated-procedure-description+xml
+# application/mbms-deregister+xml
+# application/mbms-envelope+xml
+# application/mbms-msk+xml
+# application/mbms-msk-response+xml
+# application/mbms-protection-description+xml
+# application/mbms-reception-report+xml
+# application/mbms-register+xml
+# application/mbms-register-response+xml
+# application/mbms-user-service-description+xml
+application/mbox mbox
+# application/media_control+xml
+application/mediaservercontrol+xml mscml
+application/metalink+xml metalink
+application/metalink4+xml meta4
+application/mets+xml mets
+# application/mikey
+application/mods+xml mods
+# application/moss-keys
+# application/moss-signature
+# application/mosskey-data
+# application/mosskey-request
+application/mp21 m21 mp21
+application/mp4 mp4s
+# application/mpeg4-generic
+# application/mpeg4-iod
+# application/mpeg4-iod-xmt
+# application/msc-ivr+xml
+# application/msc-mixer+xml
+application/msword doc dot
+application/mxf mxf
+# application/nasdata
+# application/news-checkgroups
+# application/news-groupinfo
+# application/news-transmission
+# application/nss
+# application/ocsp-request
+# application/ocsp-response
+application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy
+application/oda oda
+application/oebps-package+xml opf
+application/ogg ogx
+application/omdoc+xml omdoc
+application/onenote onetoc onetoc2 onetmp onepkg
+application/oxps oxps
+# application/parityfec
+application/patch-ops-error+xml xer
+application/pdf pdf
+application/pgp-encrypted pgp
+# application/pgp-keys
+application/pgp-signature asc sig
+application/pics-rules prf
+# application/pidf+xml
+# application/pidf-diff+xml
+application/pkcs10 p10
+application/pkcs7-mime p7m p7c
+application/pkcs7-signature p7s
+application/pkcs8 p8
+application/pkix-attr-cert ac
+application/pkix-cert cer
+application/pkix-crl crl
+application/pkix-pkipath pkipath
+application/pkixcmp pki
+application/pls+xml pls
+# application/poc-settings+xml
+application/postscript ai eps ps
+# application/prs.alvestrand.titrax-sheet
+application/prs.cww cww
+# application/prs.nprend
+# application/prs.plucker
+# application/prs.rdf-xml-crypt
+# application/prs.xsf+xml
+application/pskc+xml pskcxml
+# application/qsig
+application/rdf+xml rdf
+application/reginfo+xml rif
+application/relax-ng-compact-syntax rnc
+# application/remote-printing
+application/resource-lists+xml rl
+application/resource-lists-diff+xml rld
+# application/riscos
+# application/rlmi+xml
+application/rls-services+xml rs
+application/rpki-ghostbusters gbr
+application/rpki-manifest mft
+application/rpki-roa roa
+# application/rpki-updown
+application/rsd+xml rsd
+application/rss+xml rss
+application/rtf rtf
+# application/rtx
+# application/samlassertion+xml
+# application/samlmetadata+xml
+application/sbml+xml sbml
+application/scvp-cv-request scq
+application/scvp-cv-response scs
+application/scvp-vp-request spq
+application/scvp-vp-response spp
+application/sdp sdp
+# application/set-payment
+application/set-payment-initiation setpay
+# application/set-registration
+application/set-registration-initiation setreg
+# application/sgml
+# application/sgml-open-catalog
+application/shf+xml shf
+# application/sieve
+# application/simple-filter+xml
+# application/simple-message-summary
+# application/simplesymbolcontainer
+# application/slate
+# application/smil
+application/smil+xml smi smil
+# application/soap+fastinfoset
+# application/soap+xml
+application/sparql-query rq
+application/sparql-results+xml srx
+# application/spirits-event+xml
+application/srgs gram
+application/srgs+xml grxml
+application/sru+xml sru
+application/ssdl+xml ssdl
+application/ssml+xml ssml
+# application/tamp-apex-update
+# application/tamp-apex-update-confirm
+# application/tamp-community-update
+# application/tamp-community-update-confirm
+# application/tamp-error
+# application/tamp-sequence-adjust
+# application/tamp-sequence-adjust-confirm
+# application/tamp-status-query
+# application/tamp-status-response
+# application/tamp-update
+# application/tamp-update-confirm
+application/tei+xml tei teicorpus
+application/thraud+xml tfi
+# application/timestamp-query
+# application/timestamp-reply
+application/timestamped-data tsd
+# application/tve-trigger
+# application/ulpfec
+# application/vcard+xml
+# application/vemmi
+# application/vividence.scriptfile
+# application/vnd.3gpp.bsf+xml
+application/vnd.3gpp.pic-bw-large plb
+application/vnd.3gpp.pic-bw-small psb
+application/vnd.3gpp.pic-bw-var pvb
+# application/vnd.3gpp.sms
+# application/vnd.3gpp2.bcmcsinfo+xml
+# application/vnd.3gpp2.sms
+application/vnd.3gpp2.tcap tcap
+application/vnd.3m.post-it-notes pwn
+application/vnd.accpac.simply.aso aso
+application/vnd.accpac.simply.imp imp
+application/vnd.acucobol acu
+application/vnd.acucorp atc acutc
+application/vnd.adobe.air-application-installer-package+zip air
+application/vnd.adobe.formscentral.fcdt fcdt
+application/vnd.adobe.fxp fxp fxpl
+# application/vnd.adobe.partial-upload
+application/vnd.adobe.xdp+xml xdp
+application/vnd.adobe.xfdf xfdf
+# application/vnd.aether.imp
+# application/vnd.ah-barcode
+application/vnd.ahead.space ahead
+application/vnd.airzip.filesecure.azf azf
+application/vnd.airzip.filesecure.azs azs
+application/vnd.amazon.ebook azw
+application/vnd.americandynamics.acc acc
+application/vnd.amiga.ami ami
+# application/vnd.amundsen.maze+xml
+application/vnd.android.package-archive apk
+application/vnd.anser-web-certificate-issue-initiation cii
+application/vnd.anser-web-funds-transfer-initiation fti
+application/vnd.antix.game-component atx
+application/vnd.apple.installer+xml mpkg
+application/vnd.apple.mpegurl m3u8
+# application/vnd.arastra.swi
+application/vnd.aristanetworks.swi swi
+application/vnd.astraea-software.iota iota
+application/vnd.audiograph aep
+# application/vnd.autopackage
+# application/vnd.avistar+xml
+application/vnd.blueice.multipass mpm
+# application/vnd.bluetooth.ep.oob
+application/vnd.bmi bmi
+application/vnd.businessobjects rep
+# application/vnd.cab-jscript
+# application/vnd.canon-cpdl
+# application/vnd.canon-lips
+# application/vnd.cendio.thinlinc.clientconf
+application/vnd.chemdraw+xml cdxml
+application/vnd.chipnuts.karaoke-mmd mmd
+application/vnd.cinderella cdy
+# application/vnd.cirpack.isdn-ext
+application/vnd.claymore cla
+application/vnd.cloanto.rp9 rp9
+application/vnd.clonk.c4group c4g c4d c4f c4p c4u
+application/vnd.cluetrust.cartomobile-config c11amc
+application/vnd.cluetrust.cartomobile-config-pkg c11amz
+# application/vnd.collection+json
+# application/vnd.commerce-battelle
+application/vnd.commonspace csp
+application/vnd.contact.cmsg cdbcmsg
+application/vnd.cosmocaller cmc
+application/vnd.crick.clicker clkx
+application/vnd.crick.clicker.keyboard clkk
+application/vnd.crick.clicker.palette clkp
+application/vnd.crick.clicker.template clkt
+application/vnd.crick.clicker.wordbank clkw
+application/vnd.criticaltools.wbs+xml wbs
+application/vnd.ctc-posml pml
+# application/vnd.ctct.ws+xml
+# application/vnd.cups-pdf
+# application/vnd.cups-postscript
+application/vnd.cups-ppd ppd
+# application/vnd.cups-raster
+# application/vnd.cups-raw
+# application/vnd.curl
+application/vnd.curl.car car
+application/vnd.curl.pcurl pcurl
+# application/vnd.cybank
+application/vnd.dart dart
+application/vnd.data-vision.rdz rdz
+application/vnd.dece.data uvf uvvf uvd uvvd
+application/vnd.dece.ttml+xml uvt uvvt
+application/vnd.dece.unspecified uvx uvvx
+application/vnd.dece.zip uvz uvvz
+application/vnd.denovo.fcselayout-link fe_launch
+# application/vnd.dir-bi.plate-dl-nosuffix
+application/vnd.dna dna
+application/vnd.dolby.mlp mlp
+# application/vnd.dolby.mobile.1
+# application/vnd.dolby.mobile.2
+application/vnd.dpgraph dpg
+application/vnd.dreamfactory dfac
+application/vnd.ds-keypoint kpxx
+application/vnd.dvb.ait ait
+# application/vnd.dvb.dvbj
+# application/vnd.dvb.esgcontainer
+# application/vnd.dvb.ipdcdftnotifaccess
+# application/vnd.dvb.ipdcesgaccess
+# application/vnd.dvb.ipdcesgaccess2
+# application/vnd.dvb.ipdcesgpdd
+# application/vnd.dvb.ipdcroaming
+# application/vnd.dvb.iptv.alfec-base
+# application/vnd.dvb.iptv.alfec-enhancement
+# application/vnd.dvb.notif-aggregate-root+xml
+# application/vnd.dvb.notif-container+xml
+# application/vnd.dvb.notif-generic+xml
+# application/vnd.dvb.notif-ia-msglist+xml
+# application/vnd.dvb.notif-ia-registration-request+xml
+# application/vnd.dvb.notif-ia-registration-response+xml
+# application/vnd.dvb.notif-init+xml
+# application/vnd.dvb.pfr
+application/vnd.dvb.service svc
+# application/vnd.dxr
+application/vnd.dynageo geo
+# application/vnd.easykaraoke.cdgdownload
+# application/vnd.ecdis-update
+application/vnd.ecowin.chart mag
+# application/vnd.ecowin.filerequest
+# application/vnd.ecowin.fileupdate
+# application/vnd.ecowin.series
+# application/vnd.ecowin.seriesrequest
+# application/vnd.ecowin.seriesupdate
+# application/vnd.emclient.accessrequest+xml
+application/vnd.enliven nml
+# application/vnd.eprints.data+xml
+application/vnd.epson.esf esf
+application/vnd.epson.msf msf
+application/vnd.epson.quickanime qam
+application/vnd.epson.salt slt
+application/vnd.epson.ssf ssf
+# application/vnd.ericsson.quickcall
+application/vnd.eszigno3+xml es3 et3
+# application/vnd.etsi.aoc+xml
+# application/vnd.etsi.cug+xml
+# application/vnd.etsi.iptvcommand+xml
+# application/vnd.etsi.iptvdiscovery+xml
+# application/vnd.etsi.iptvprofile+xml
+# application/vnd.etsi.iptvsad-bc+xml
+# application/vnd.etsi.iptvsad-cod+xml
+# application/vnd.etsi.iptvsad-npvr+xml
+# application/vnd.etsi.iptvservice+xml
+# application/vnd.etsi.iptvsync+xml
+# application/vnd.etsi.iptvueprofile+xml
+# application/vnd.etsi.mcid+xml
+# application/vnd.etsi.overload-control-policy-dataset+xml
+# application/vnd.etsi.sci+xml
+# application/vnd.etsi.simservs+xml
+# application/vnd.etsi.tsl+xml
+# application/vnd.etsi.tsl.der
+# application/vnd.eudora.data
+application/vnd.ezpix-album ez2
+application/vnd.ezpix-package ez3
+# application/vnd.f-secure.mobile
+application/vnd.fdf fdf
+application/vnd.fdsn.mseed mseed
+application/vnd.fdsn.seed seed dataless
+# application/vnd.ffsns
+# application/vnd.fints
+application/vnd.flographit gph
+application/vnd.fluxtime.clip ftc
+# application/vnd.font-fontforge-sfd
+application/vnd.framemaker fm frame maker book
+application/vnd.frogans.fnc fnc
+application/vnd.frogans.ltf ltf
+application/vnd.fsc.weblaunch fsc
+application/vnd.fujitsu.oasys oas
+application/vnd.fujitsu.oasys2 oa2
+application/vnd.fujitsu.oasys3 oa3
+application/vnd.fujitsu.oasysgp fg5
+application/vnd.fujitsu.oasysprs bh2
+# application/vnd.fujixerox.art-ex
+# application/vnd.fujixerox.art4
+# application/vnd.fujixerox.hbpl
+application/vnd.fujixerox.ddd ddd
+application/vnd.fujixerox.docuworks xdw
+application/vnd.fujixerox.docuworks.binder xbd
+# application/vnd.fut-misnet
+application/vnd.fuzzysheet fzs
+application/vnd.genomatix.tuxedo txd
+# application/vnd.geocube+xml
+application/vnd.geogebra.file ggb
+application/vnd.geogebra.tool ggt
+application/vnd.geometry-explorer gex gre
+application/vnd.geonext gxt
+application/vnd.geoplan g2w
+application/vnd.geospace g3w
+# application/vnd.globalplatform.card-content-mgt
+# application/vnd.globalplatform.card-content-mgt-response
+application/vnd.gmx gmx
+application/vnd.google-earth.kml+xml kml
+application/vnd.google-earth.kmz kmz
+application/vnd.grafeq gqf gqs
+# application/vnd.gridmp
+application/vnd.groove-account gac
+application/vnd.groove-help ghf
+application/vnd.groove-identity-message gim
+application/vnd.groove-injector grv
+application/vnd.groove-tool-message gtm
+application/vnd.groove-tool-template tpl
+application/vnd.groove-vcard vcg
+# application/vnd.hal+json
+application/vnd.hal+xml hal
+application/vnd.handheld-entertainment+xml zmm
+application/vnd.hbci hbci
+# application/vnd.hcl-bireports
+application/vnd.hhe.lesson-player les
+application/vnd.hp-hpgl hpgl
+application/vnd.hp-hpid hpid
+application/vnd.hp-hps hps
+application/vnd.hp-jlyt jlt
+application/vnd.hp-pcl pcl
+application/vnd.hp-pclxl pclxl
+# application/vnd.httphone
+application/vnd.hydrostatix.sof-data sfd-hdstx
+# application/vnd.hzn-3d-crossword
+# application/vnd.ibm.afplinedata
+# application/vnd.ibm.electronic-media
+application/vnd.ibm.minipay mpy
+application/vnd.ibm.modcap afp listafp list3820
+application/vnd.ibm.rights-management irm
+application/vnd.ibm.secure-container sc
+application/vnd.iccprofile icc icm
+application/vnd.igloader igl
+application/vnd.immervision-ivp ivp
+application/vnd.immervision-ivu ivu
+# application/vnd.informedcontrol.rms+xml
+# application/vnd.informix-visionary
+# application/vnd.infotech.project
+# application/vnd.infotech.project+xml
+# application/vnd.innopath.wamp.notification
+application/vnd.insors.igm igm
+application/vnd.intercon.formnet xpw xpx
+application/vnd.intergeo i2g
+# application/vnd.intertrust.digibox
+# application/vnd.intertrust.nncp
+application/vnd.intu.qbo qbo
+application/vnd.intu.qfx qfx
+# application/vnd.iptc.g2.conceptitem+xml
+# application/vnd.iptc.g2.knowledgeitem+xml
+# application/vnd.iptc.g2.newsitem+xml
+# application/vnd.iptc.g2.newsmessage+xml
+# application/vnd.iptc.g2.packageitem+xml
+# application/vnd.iptc.g2.planningitem+xml
+application/vnd.ipunplugged.rcprofile rcprofile
+application/vnd.irepository.package+xml irp
+application/vnd.is-xpr xpr
+application/vnd.isac.fcs fcs
+application/vnd.jam jam
+# application/vnd.japannet-directory-service
+# application/vnd.japannet-jpnstore-wakeup
+# application/vnd.japannet-payment-wakeup
+# application/vnd.japannet-registration
+# application/vnd.japannet-registration-wakeup
+# application/vnd.japannet-setstore-wakeup
+# application/vnd.japannet-verification
+# application/vnd.japannet-verification-wakeup
+application/vnd.jcp.javame.midlet-rms rms
+application/vnd.jisp jisp
+application/vnd.joost.joda-archive joda
+application/vnd.kahootz ktz ktr
+application/vnd.kde.karbon karbon
+application/vnd.kde.kchart chrt
+application/vnd.kde.kformula kfo
+application/vnd.kde.kivio flw
+application/vnd.kde.kontour kon
+application/vnd.kde.kpresenter kpr kpt
+application/vnd.kde.kspread ksp
+application/vnd.kde.kword kwd kwt
+application/vnd.kenameaapp htke
+application/vnd.kidspiration kia
+application/vnd.kinar kne knp
+application/vnd.koan skp skd skt skm
+application/vnd.kodak-descriptor sse
+application/vnd.las.las+xml lasxml
+# application/vnd.liberty-request+xml
+application/vnd.llamagraphics.life-balance.desktop lbd
+application/vnd.llamagraphics.life-balance.exchange+xml lbe
+application/vnd.lotus-1-2-3 123
+application/vnd.lotus-approach apr
+application/vnd.lotus-freelance pre
+application/vnd.lotus-notes nsf
+application/vnd.lotus-organizer org
+application/vnd.lotus-screencam scm
+application/vnd.lotus-wordpro lwp
+application/vnd.macports.portpkg portpkg
+# application/vnd.marlin.drm.actiontoken+xml
+# application/vnd.marlin.drm.conftoken+xml
+# application/vnd.marlin.drm.license+xml
+# application/vnd.marlin.drm.mdcf
+application/vnd.mcd mcd
+application/vnd.medcalcdata mc1
+application/vnd.mediastation.cdkey cdkey
+# application/vnd.meridian-slingshot
+application/vnd.mfer mwf
+application/vnd.mfmp mfm
+application/vnd.micrografx.flo flo
+application/vnd.micrografx.igx igx
+application/vnd.mif mif
+# application/vnd.minisoft-hp3000-save
+# application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf daf
+application/vnd.mobius.dis dis
+application/vnd.mobius.mbk mbk
+application/vnd.mobius.mqy mqy
+application/vnd.mobius.msl msl
+application/vnd.mobius.plc plc
+application/vnd.mobius.txf txf
+application/vnd.mophun.application mpn
+application/vnd.mophun.certificate mpc
+# application/vnd.motorola.flexsuite
+# application/vnd.motorola.flexsuite.adsi
+# application/vnd.motorola.flexsuite.fis
+# application/vnd.motorola.flexsuite.gotap
+# application/vnd.motorola.flexsuite.kmr
+# application/vnd.motorola.flexsuite.ttc
+# application/vnd.motorola.flexsuite.wem
+# application/vnd.motorola.iprm
+application/vnd.mozilla.xul+xml xul
+application/vnd.ms-artgalry cil
+# application/vnd.ms-asf
+application/vnd.ms-cab-compressed cab
+# application/vnd.ms-color.iccprofile
+application/vnd.ms-excel xls xlm xla xlc xlt xlw
+application/vnd.ms-excel.addin.macroenabled.12 xlam
+application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb
+application/vnd.ms-excel.sheet.macroenabled.12 xlsm
+application/vnd.ms-excel.template.macroenabled.12 xltm
+application/vnd.ms-fontobject eot
+application/vnd.ms-htmlhelp chm
+application/vnd.ms-ims ims
+application/vnd.ms-lrm lrm
+# application/vnd.ms-office.activex+xml
+application/vnd.ms-officetheme thmx
+# application/vnd.ms-opentype
+# application/vnd.ms-package.obfuscated-opentype
+application/vnd.ms-pki.seccat cat
+application/vnd.ms-pki.stl stl
+# application/vnd.ms-playready.initiator+xml
+application/vnd.ms-powerpoint ppt pps pot
+application/vnd.ms-powerpoint.addin.macroenabled.12 ppam
+application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm
+application/vnd.ms-powerpoint.slide.macroenabled.12 sldm
+application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm
+application/vnd.ms-powerpoint.template.macroenabled.12 potm
+# application/vnd.ms-printing.printticket+xml
+application/vnd.ms-project mpp mpt
+# application/vnd.ms-tnef
+# application/vnd.ms-wmdrm.lic-chlg-req
+# application/vnd.ms-wmdrm.lic-resp
+# application/vnd.ms-wmdrm.meter-chlg-req
+# application/vnd.ms-wmdrm.meter-resp
+application/vnd.ms-word.document.macroenabled.12 docm
+application/vnd.ms-word.template.macroenabled.12 dotm
+application/vnd.ms-works wps wks wcm wdb
+application/vnd.ms-wpl wpl
+application/vnd.ms-xpsdocument xps
+application/vnd.mseq mseq
+# application/vnd.msign
+# application/vnd.multiad.creator
+# application/vnd.multiad.creator.cif
+# application/vnd.music-niff
+application/vnd.musician mus
+application/vnd.muvee.style msty
+application/vnd.mynfc taglet
+# application/vnd.ncd.control
+# application/vnd.ncd.reference
+# application/vnd.nervana
+# application/vnd.netfpx
+application/vnd.neurolanguage.nlu nlu
+application/vnd.nitf ntf nitf
+application/vnd.noblenet-directory nnd
+application/vnd.noblenet-sealer nns
+application/vnd.noblenet-web nnw
+# application/vnd.nokia.catalogs
+# application/vnd.nokia.conml+wbxml
+# application/vnd.nokia.conml+xml
+# application/vnd.nokia.isds-radio-presets
+# application/vnd.nokia.iptv.config+xml
+# application/vnd.nokia.landmark+wbxml
+# application/vnd.nokia.landmark+xml
+# application/vnd.nokia.landmarkcollection+xml
+# application/vnd.nokia.n-gage.ac+xml
+application/vnd.nokia.n-gage.data ngdat
+application/vnd.nokia.n-gage.symbian.install n-gage
+# application/vnd.nokia.ncd
+# application/vnd.nokia.pcd+wbxml
+# application/vnd.nokia.pcd+xml
+application/vnd.nokia.radio-preset rpst
+application/vnd.nokia.radio-presets rpss
+application/vnd.novadigm.edm edm
+application/vnd.novadigm.edx edx
+application/vnd.novadigm.ext ext
+# application/vnd.ntt-local.file-transfer
+# application/vnd.ntt-local.sip-ta_remote
+# application/vnd.ntt-local.sip-ta_tcp_stream
+application/vnd.oasis.opendocument.chart odc
+application/vnd.oasis.opendocument.chart-template otc
+application/vnd.oasis.opendocument.database odb
+application/vnd.oasis.opendocument.formula odf
+application/vnd.oasis.opendocument.formula-template odft
+application/vnd.oasis.opendocument.graphics odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image odi
+application/vnd.oasis.opendocument.image-template oti
+application/vnd.oasis.opendocument.presentation odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text odt
+application/vnd.oasis.opendocument.text-master odm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web oth
+# application/vnd.obn
+# application/vnd.oftn.l10n+json
+# application/vnd.oipf.contentaccessdownload+xml
+# application/vnd.oipf.contentaccessstreaming+xml
+# application/vnd.oipf.cspg-hexbinary
+# application/vnd.oipf.dae.svg+xml
+# application/vnd.oipf.dae.xhtml+xml
+# application/vnd.oipf.mippvcontrolmessage+xml
+# application/vnd.oipf.pae.gem
+# application/vnd.oipf.spdiscovery+xml
+# application/vnd.oipf.spdlist+xml
+# application/vnd.oipf.ueprofile+xml
+# application/vnd.oipf.userprofile+xml
+application/vnd.olpc-sugar xo
+# application/vnd.oma-scws-config
+# application/vnd.oma-scws-http-request
+# application/vnd.oma-scws-http-response
+# application/vnd.oma.bcast.associated-procedure-parameter+xml
+# application/vnd.oma.bcast.drm-trigger+xml
+# application/vnd.oma.bcast.imd+xml
+# application/vnd.oma.bcast.ltkm
+# application/vnd.oma.bcast.notification+xml
+# application/vnd.oma.bcast.provisioningtrigger
+# application/vnd.oma.bcast.sgboot
+# application/vnd.oma.bcast.sgdd+xml
+# application/vnd.oma.bcast.sgdu
+# application/vnd.oma.bcast.simple-symbol-container
+# application/vnd.oma.bcast.smartcard-trigger+xml
+# application/vnd.oma.bcast.sprov+xml
+# application/vnd.oma.bcast.stkm
+# application/vnd.oma.cab-address-book+xml
+# application/vnd.oma.cab-feature-handler+xml
+# application/vnd.oma.cab-pcc+xml
+# application/vnd.oma.cab-user-prefs+xml
+# application/vnd.oma.dcd
+# application/vnd.oma.dcdc
+application/vnd.oma.dd2+xml dd2
+# application/vnd.oma.drm.risd+xml
+# application/vnd.oma.group-usage-list+xml
+# application/vnd.oma.pal+xml
+# application/vnd.oma.poc.detailed-progress-report+xml
+# application/vnd.oma.poc.final-report+xml
+# application/vnd.oma.poc.groups+xml
+# application/vnd.oma.poc.invocation-descriptor+xml
+# application/vnd.oma.poc.optimized-progress-report+xml
+# application/vnd.oma.push
+# application/vnd.oma.scidm.messages+xml
+# application/vnd.oma.xcap-directory+xml
+# application/vnd.omads-email+xml
+# application/vnd.omads-file+xml
+# application/vnd.omads-folder+xml
+# application/vnd.omaloc-supl-init
+application/vnd.openofficeorg.extension oxt
+# application/vnd.openxmlformats-officedocument.custom-properties+xml
+# application/vnd.openxmlformats-officedocument.customxmlproperties+xml
+# application/vnd.openxmlformats-officedocument.drawing+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chart+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml
+# application/vnd.openxmlformats-officedocument.extended-properties+xml
+# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml
+# application/vnd.openxmlformats-officedocument.presentationml.comments+xml
+# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml
+application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
+# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml
+application/vnd.openxmlformats-officedocument.presentationml.slide sldx
+# application/vnd.openxmlformats-officedocument.presentationml.slide+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
+# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tags+xml
+application/vnd.openxmlformats-officedocument.presentationml.template potx
+# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
+# application/vnd.openxmlformats-officedocument.theme+xml
+# application/vnd.openxmlformats-officedocument.themeoverride+xml
+# application/vnd.openxmlformats-officedocument.vmldrawing
+# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml
+# application/vnd.openxmlformats-package.core-properties+xml
+# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
+# application/vnd.openxmlformats-package.relationships+xml
+# application/vnd.quobject-quoxdocument
+# application/vnd.osa.netdeploy
+application/vnd.osgeo.mapguide.package mgp
+# application/vnd.osgi.bundle
+application/vnd.osgi.dp dp
+application/vnd.osgi.subsystem esa
+# application/vnd.otps.ct-kip+xml
+application/vnd.palm pdb pqa oprc
+# application/vnd.paos.xml
+application/vnd.pawaafile paw
+application/vnd.pg.format str
+application/vnd.pg.osasli ei6
+# application/vnd.piaccess.application-licence
+application/vnd.picsel efif
+application/vnd.pmi.widget wg
+# application/vnd.poc.group-advertisement+xml
+application/vnd.pocketlearn plf
+application/vnd.powerbuilder6 pbd
+# application/vnd.powerbuilder6-s
+# application/vnd.powerbuilder7
+# application/vnd.powerbuilder7-s
+# application/vnd.powerbuilder75
+# application/vnd.powerbuilder75-s
+# application/vnd.preminet
+application/vnd.previewsystems.box box
+application/vnd.proteus.magazine mgz
+application/vnd.publishare-delta-tree qps
+application/vnd.pvi.ptid1 ptid
+# application/vnd.pwg-multiplexed
+# application/vnd.pwg-xhtml-print+xml
+# application/vnd.qualcomm.brew-app-res
+application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb
+# application/vnd.radisys.moml+xml
+# application/vnd.radisys.msml+xml
+# application/vnd.radisys.msml-audit+xml
+# application/vnd.radisys.msml-audit-conf+xml
+# application/vnd.radisys.msml-audit-conn+xml
+# application/vnd.radisys.msml-audit-dialog+xml
+# application/vnd.radisys.msml-audit-stream+xml
+# application/vnd.radisys.msml-conf+xml
+# application/vnd.radisys.msml-dialog+xml
+# application/vnd.radisys.msml-dialog-base+xml
+# application/vnd.radisys.msml-dialog-fax-detect+xml
+# application/vnd.radisys.msml-dialog-fax-sendrecv+xml
+# application/vnd.radisys.msml-dialog-group+xml
+# application/vnd.radisys.msml-dialog-speech+xml
+# application/vnd.radisys.msml-dialog-transform+xml
+# application/vnd.rainstor.data
+# application/vnd.rapid
+application/vnd.realvnc.bed bed
+application/vnd.recordare.musicxml mxl
+application/vnd.recordare.musicxml+xml musicxml
+# application/vnd.renlearn.rlprint
+application/vnd.rig.cryptonote cryptonote
+application/vnd.rim.cod cod
+application/vnd.rn-realmedia rm
+application/vnd.rn-realmedia-vbr rmvb
+application/vnd.route66.link66+xml link66
+# application/vnd.rs-274x
+# application/vnd.ruckus.download
+# application/vnd.s3sms
+application/vnd.sailingtracker.track st
+# application/vnd.sbm.cid
+# application/vnd.sbm.mid2
+# application/vnd.scribus
+# application/vnd.sealed.3df
+# application/vnd.sealed.csf
+# application/vnd.sealed.doc
+# application/vnd.sealed.eml
+# application/vnd.sealed.mht
+# application/vnd.sealed.net
+# application/vnd.sealed.ppt
+# application/vnd.sealed.tiff
+# application/vnd.sealed.xls
+# application/vnd.sealedmedia.softseal.html
+# application/vnd.sealedmedia.softseal.pdf
+application/vnd.seemail see
+application/vnd.sema sema
+application/vnd.semd semd
+application/vnd.semf semf
+application/vnd.shana.informed.formdata ifm
+application/vnd.shana.informed.formtemplate itp
+application/vnd.shana.informed.interchange iif
+application/vnd.shana.informed.package ipk
+application/vnd.simtech-mindmapper twd twds
+application/vnd.smaf mmf
+# application/vnd.smart.notebook
+application/vnd.smart.teacher teacher
+# application/vnd.software602.filler.form+xml
+# application/vnd.software602.filler.form-xml-zip
+application/vnd.solent.sdkm+xml sdkm sdkd
+application/vnd.spotfire.dxp dxp
+application/vnd.spotfire.sfs sfs
+# application/vnd.sss-cod
+# application/vnd.sss-dtf
+# application/vnd.sss-ntf
+application/vnd.stardivision.calc sdc
+application/vnd.stardivision.draw sda
+application/vnd.stardivision.impress sdd
+application/vnd.stardivision.math smf
+application/vnd.stardivision.writer sdw vor
+application/vnd.stardivision.writer-global sgl
+application/vnd.stepmania.package smzip
+application/vnd.stepmania.stepchart sm
+# application/vnd.street-stream
+application/vnd.sun.xml.calc sxc
+application/vnd.sun.xml.calc.template stc
+application/vnd.sun.xml.draw sxd
+application/vnd.sun.xml.draw.template std
+application/vnd.sun.xml.impress sxi
+application/vnd.sun.xml.impress.template sti
+application/vnd.sun.xml.math sxm
+application/vnd.sun.xml.writer sxw
+application/vnd.sun.xml.writer.global sxg
+application/vnd.sun.xml.writer.template stw
+# application/vnd.sun.wadl+xml
+application/vnd.sus-calendar sus susp
+application/vnd.svd svd
+# application/vnd.swiftview-ics
+application/vnd.symbian.install sis sisx
+application/vnd.syncml+xml xsm
+application/vnd.syncml.dm+wbxml bdm
+application/vnd.syncml.dm+xml xdm
+# application/vnd.syncml.dm.notification
+# application/vnd.syncml.ds.notification
+application/vnd.tao.intent-module-archive tao
+application/vnd.tcpdump.pcap pcap cap dmp
+application/vnd.tmobile-livetv tmo
+application/vnd.trid.tpt tpt
+application/vnd.triscape.mxs mxs
+application/vnd.trueapp tra
+# application/vnd.truedoc
+# application/vnd.ubisoft.webplayer
+application/vnd.ufdl ufd ufdl
+application/vnd.uiq.theme utz
+application/vnd.umajin umj
+application/vnd.unity unityweb
+application/vnd.uoml+xml uoml
+# application/vnd.uplanet.alert
+# application/vnd.uplanet.alert-wbxml
+# application/vnd.uplanet.bearer-choice
+# application/vnd.uplanet.bearer-choice-wbxml
+# application/vnd.uplanet.cacheop
+# application/vnd.uplanet.cacheop-wbxml
+# application/vnd.uplanet.channel
+# application/vnd.uplanet.channel-wbxml
+# application/vnd.uplanet.list
+# application/vnd.uplanet.list-wbxml
+# application/vnd.uplanet.listcmd
+# application/vnd.uplanet.listcmd-wbxml
+# application/vnd.uplanet.signal
+application/vnd.vcx vcx
+# application/vnd.vd-study
+# application/vnd.vectorworks
+# application/vnd.verimatrix.vcas
+# application/vnd.vidsoft.vidconference
+application/vnd.visio vsd vst vss vsw
+application/vnd.visionary vis
+# application/vnd.vividence.scriptfile
+application/vnd.vsf vsf
+# application/vnd.wap.sic
+# application/vnd.wap.slc
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.webturbo wtb
+# application/vnd.wfa.wsc
+# application/vnd.wmc
+# application/vnd.wmf.bootstrap
+# application/vnd.wolfram.mathematica
+# application/vnd.wolfram.mathematica.package
+application/vnd.wolfram.player nbp
+application/vnd.wordperfect wpd
+application/vnd.wqd wqd
+# application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf stf
+# application/vnd.wv.csp+wbxml
+# application/vnd.wv.csp+xml
+# application/vnd.wv.ssp+xml
+application/vnd.xara xar
+application/vnd.xfdl xfdl
+# application/vnd.xfdl.webform
+# application/vnd.xmi+xml
+# application/vnd.xmpie.cpkg
+# application/vnd.xmpie.dpkg
+# application/vnd.xmpie.plan
+# application/vnd.xmpie.ppkg
+# application/vnd.xmpie.xlim
+application/vnd.yamaha.hv-dic hvd
+application/vnd.yamaha.hv-script hvs
+application/vnd.yamaha.hv-voice hvp
+application/vnd.yamaha.openscoreformat osf
+application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg
+# application/vnd.yamaha.remote-setup
+application/vnd.yamaha.smaf-audio saf
+application/vnd.yamaha.smaf-phrase spf
+# application/vnd.yamaha.through-ngn
+# application/vnd.yamaha.tunnel-udpencap
+application/vnd.yellowriver-custom-menu cmp
+application/vnd.zul zir zirz
+application/vnd.zzazz.deck+xml zaz
+application/voicexml+xml vxml
+# application/vq-rtcpxr
+# application/watcherinfo+xml
+# application/whoispp-query
+# application/whoispp-response
+application/widget wgt
+application/winhlp hlp
+# application/wita
+# application/wordperfect5.1
+application/wsdl+xml wsdl
+application/wspolicy+xml wspolicy
+application/x-7z-compressed 7z
+application/x-abiword abw
+application/x-ace-compressed ace
+# application/x-amf
+application/x-apple-diskimage dmg
+application/x-authorware-bin aab x32 u32 vox
+application/x-authorware-map aam
+application/x-authorware-seg aas
+application/x-bcpio bcpio
+application/x-bittorrent torrent
+application/x-blorb blb blorb
+application/x-bzip bz
+application/x-bzip2 bz2 boz
+application/x-cbr cbr cba cbt cbz cb7
+application/x-cdlink vcd
+application/x-cfs-compressed cfs
+application/x-chat chat
+application/x-chess-pgn pgn
+application/x-conference nsc
+# application/x-compress
+application/x-cpio cpio
+application/x-csh csh
+application/x-debian-package deb udeb
+application/x-dgc-compressed dgc
+application/x-director dir dcr dxr cst cct cxt w3d fgd swa
+application/x-doom wad
+application/x-dtbncx+xml ncx
+application/x-dtbook+xml dtb
+application/x-dtbresource+xml res
+application/x-dvi dvi
+application/x-envoy evy
+application/x-eva eva
+application/x-font-bdf bdf
+# application/x-font-dos
+# application/x-font-framemaker
+application/x-font-ghostscript gsf
+# application/x-font-libgrx
+application/x-font-linux-psf psf
+application/x-font-otf otf
+application/x-font-pcf pcf
+application/x-font-snf snf
+# application/x-font-speedo
+# application/x-font-sunos-news
+application/x-font-ttf ttf ttc
+application/x-font-type1 pfa pfb pfm afm
+application/x-font-woff woff
+# application/x-font-vfont
+application/x-freearc arc
+application/x-futuresplash spl
+application/x-gca-compressed gca
+application/x-glulx ulx
+application/x-gnumeric gnumeric
+application/x-gramps-xml gramps
+application/x-gtar gtar
+# application/x-gzip
+application/x-hdf hdf
+application/x-install-instructions install
+application/x-iso9660-image iso
+application/x-java-jnlp-file jnlp
+application/x-latex latex
+application/x-lzh-compressed lzh lha
+application/x-mie mie
+application/x-mobipocket-ebook prc mobi
+application/x-ms-application application
+application/x-ms-shortcut lnk
+application/x-ms-wmd wmd
+application/x-ms-wmz wmz
+application/x-ms-xbap xbap
+application/x-msaccess mdb
+application/x-msbinder obd
+application/x-mscardfile crd
+application/x-msclip clp
+application/x-msdownload exe dll com bat msi
+application/x-msmediaview mvb m13 m14
+application/x-msmetafile wmf wmz emf emz
+application/x-msmoney mny
+application/x-mspublisher pub
+application/x-msschedule scd
+application/x-msterminal trm
+application/x-mswrite wri
+application/x-netcdf nc cdf
+application/x-nzb nzb
+application/x-pkcs12 p12 pfx
+application/x-pkcs7-certificates p7b spc
+application/x-pkcs7-certreqresp p7r
+application/x-rar-compressed rar
+application/x-research-info-systems ris
+application/x-sh sh
+application/x-shar shar
+application/x-shockwave-flash swf
+application/x-silverlight-app xap
+application/x-sql sql
+application/x-stuffit sit
+application/x-stuffitx sitx
+application/x-subrip srt
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-t3vm-image t3
+application/x-tads gam
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-tex-tfm tfm
+application/x-texinfo texinfo texi
+application/x-tgif obj
+application/x-ustar ustar
+application/x-wais-source src
+application/x-x509-ca-cert der crt
+application/x-xfig fig
+application/x-xliff+xml xlf
+application/x-xpinstall xpi
+application/x-xz xz
+application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8
+# application/x400-bp
+application/xaml+xml xaml
+# application/xcap-att+xml
+# application/xcap-caps+xml
+application/xcap-diff+xml xdf
+# application/xcap-el+xml
+# application/xcap-error+xml
+# application/xcap-ns+xml
+# application/xcon-conference-info-diff+xml
+# application/xcon-conference-info+xml
+application/xenc+xml xenc
+application/xhtml+xml xhtml xht
+# application/xhtml-voice+xml
+application/xml xml xsl
+application/xml-dtd dtd
+# application/xml-external-parsed-entity
+# application/xmpp+xml
+application/xop+xml xop
+application/xproc+xml xpl
+application/xslt+xml xslt
+application/xspf+xml xspf
+application/xv+xml mxml xhvml xvml xvm
+application/yang yang
+application/yin+xml yin
+application/zip zip
+# audio/1d-interleaved-parityfec
+# audio/32kadpcm
+# audio/3gpp
+# audio/3gpp2
+# audio/ac3
+audio/adpcm adp
+# audio/amr
+# audio/amr-wb
+# audio/amr-wb+
+# audio/asc
+# audio/atrac-advanced-lossless
+# audio/atrac-x
+# audio/atrac3
+audio/basic au snd
+# audio/bv16
+# audio/bv32
+# audio/clearmode
+# audio/cn
+# audio/dat12
+# audio/dls
+# audio/dsr-es201108
+# audio/dsr-es202050
+# audio/dsr-es202211
+# audio/dsr-es202212
+# audio/dv
+# audio/dvi4
+# audio/eac3
+# audio/evrc
+# audio/evrc-qcp
+# audio/evrc0
+# audio/evrc1
+# audio/evrcb
+# audio/evrcb0
+# audio/evrcb1
+# audio/evrcwb
+# audio/evrcwb0
+# audio/evrcwb1
+# audio/example
+# audio/fwdred
+# audio/g719
+# audio/g722
+# audio/g7221
+# audio/g723
+# audio/g726-16
+# audio/g726-24
+# audio/g726-32
+# audio/g726-40
+# audio/g728
+# audio/g729
+# audio/g7291
+# audio/g729d
+# audio/g729e
+# audio/gsm
+# audio/gsm-efr
+# audio/gsm-hr-08
+# audio/ilbc
+# audio/ip-mr_v2.5
+# audio/isac
+# audio/l16
+# audio/l20
+# audio/l24
+# audio/l8
+# audio/lpc
+audio/midi mid midi kar rmi
+# audio/mobile-xmf
+audio/mp4 m4a mp4a
+# audio/mp4a-latm
+# audio/mpa
+# audio/mpa-robust
+audio/mpeg mpga mp2 mp2a mp3 m2a m3a
+# audio/mpeg4-generic
+# audio/musepack
+audio/ogg oga ogg spx
+# audio/opus
+# audio/parityfec
+# audio/pcma
+# audio/pcma-wb
+# audio/pcmu-wb
+# audio/pcmu
+# audio/prs.sid
+# audio/qcelp
+# audio/red
+# audio/rtp-enc-aescm128
+# audio/rtp-midi
+# audio/rtx
+audio/s3m s3m
+audio/silk sil
+# audio/smv
+# audio/smv0
+# audio/smv-qcp
+# audio/sp-midi
+# audio/speex
+# audio/t140c
+# audio/t38
+# audio/telephone-event
+# audio/tone
+# audio/uemclip
+# audio/ulpfec
+# audio/vdvi
+# audio/vmr-wb
+# audio/vnd.3gpp.iufp
+# audio/vnd.4sb
+# audio/vnd.audiokoz
+# audio/vnd.celp
+# audio/vnd.cisco.nse
+# audio/vnd.cmles.radio-events
+# audio/vnd.cns.anp1
+# audio/vnd.cns.inf1
+audio/vnd.dece.audio uva uvva
+audio/vnd.digital-winds eol
+# audio/vnd.dlna.adts
+# audio/vnd.dolby.heaac.1
+# audio/vnd.dolby.heaac.2
+# audio/vnd.dolby.mlp
+# audio/vnd.dolby.mps
+# audio/vnd.dolby.pl2
+# audio/vnd.dolby.pl2x
+# audio/vnd.dolby.pl2z
+# audio/vnd.dolby.pulse.1
+audio/vnd.dra dra
+audio/vnd.dts dts
+audio/vnd.dts.hd dtshd
+# audio/vnd.dvb.file
+# audio/vnd.everad.plj
+# audio/vnd.hns.audio
+audio/vnd.lucent.voice lvp
+audio/vnd.ms-playready.media.pya pya
+# audio/vnd.nokia.mobile-xmf
+# audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800 ecelp4800
+audio/vnd.nuera.ecelp7470 ecelp7470
+audio/vnd.nuera.ecelp9600 ecelp9600
+# audio/vnd.octel.sbc
+# audio/vnd.qcelp
+# audio/vnd.rhetorex.32kadpcm
+audio/vnd.rip rip
+# audio/vnd.sealedmedia.softseal.mpeg
+# audio/vnd.vmx.cvsd
+# audio/vorbis
+# audio/vorbis-config
+audio/webm weba
+audio/x-aac aac
+audio/x-aiff aif aiff aifc
+audio/x-caf caf
+audio/x-flac flac
+audio/x-matroska mka
+audio/x-mpegurl m3u
+audio/x-ms-wax wax
+audio/x-ms-wma wma
+audio/x-pn-realaudio ram ra
+audio/x-pn-realaudio-plugin rmp
+# audio/x-tta
+audio/x-wav wav
+audio/xm xm
+chemical/x-cdx cdx
+chemical/x-cif cif
+chemical/x-cmdf cmdf
+chemical/x-cml cml
+chemical/x-csml csml
+# chemical/x-pdb
+chemical/x-xyz xyz
+image/bmp bmp
+image/cgm cgm
+# image/example
+# image/fits
+image/g3fax g3
+image/gif gif
+image/ief ief
+# image/jp2
+image/jpeg jpeg jpg jpe
+# image/jpm
+# image/jpx
+image/ktx ktx
+# image/naplps
+image/png png
+image/prs.btif btif
+# image/prs.pti
+image/sgi sgi
+image/svg+xml svg svgz
+# image/t38
+image/tiff tiff tif
+# image/tiff-fx
+image/vnd.adobe.photoshop psd
+# image/vnd.cns.inf2
+image/vnd.dece.graphic uvi uvvi uvg uvvg
+image/vnd.dvb.subtitle sub
+image/vnd.djvu djvu djv
+image/vnd.dwg dwg
+image/vnd.dxf dxf
+image/vnd.fastbidsheet fbs
+image/vnd.fpx fpx
+image/vnd.fst fst
+image/vnd.fujixerox.edmics-mmr mmr
+image/vnd.fujixerox.edmics-rlc rlc
+# image/vnd.globalgraphics.pgb
+# image/vnd.microsoft.icon
+# image/vnd.mix
+image/vnd.ms-modi mdi
+image/vnd.ms-photo wdp
+image/vnd.net-fpx npx
+# image/vnd.radiance
+# image/vnd.sealed.png
+# image/vnd.sealedmedia.softseal.gif
+# image/vnd.sealedmedia.softseal.jpg
+# image/vnd.svf
+image/vnd.wap.wbmp wbmp
+image/vnd.xiff xif
+image/webp webp
+image/x-3ds 3ds
+image/x-cmu-raster ras
+image/x-cmx cmx
+image/x-freehand fh fhc fh4 fh5 fh7
+image/x-icon ico
+image/x-mrsid-image sid
+image/x-pcx pcx
+image/x-pict pic pct
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-tga tga
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+# message/cpim
+# message/delivery-status
+# message/disposition-notification
+# message/example
+# message/external-body
+# message/feedback-report
+# message/global
+# message/global-delivery-status
+# message/global-disposition-notification
+# message/global-headers
+# message/http
+# message/imdn+xml
+# message/news
+# message/partial
+message/rfc822 eml mime
+# message/s-http
+# message/sip
+# message/sipfrag
+# message/tracking-status
+# message/vnd.si.simp
+# model/example
+model/iges igs iges
+model/mesh msh mesh silo
+model/vnd.collada+xml dae
+model/vnd.dwf dwf
+# model/vnd.flatland.3dml
+model/vnd.gdl gdl
+# model/vnd.gs-gdl
+# model/vnd.gs.gdl
+model/vnd.gtw gtw
+# model/vnd.moml+xml
+model/vnd.mts mts
+# model/vnd.parasolid.transmit.binary
+# model/vnd.parasolid.transmit.text
+model/vnd.vtu vtu
+model/vrml wrl vrml
+model/x3d+binary x3db x3dbz
+model/x3d+vrml x3dv x3dvz
+model/x3d+xml x3d x3dz
+# multipart/alternative
+# multipart/appledouble
+# multipart/byteranges
+# multipart/digest
+# multipart/encrypted
+# multipart/example
+# multipart/form-data
+# multipart/header-set
+# multipart/mixed
+# multipart/parallel
+# multipart/related
+# multipart/report
+# multipart/signed
+# multipart/voice-message
+# text/1d-interleaved-parityfec
+text/cache-manifest appcache
+text/calendar ics ifb
+text/css css
+text/csv csv
+# text/directory
+# text/dns
+# text/ecmascript
+# text/enriched
+# text/example
+# text/fwdred
+text/html html htm
+# text/javascript
+text/n3 n3
+# text/parityfec
+text/plain txt text conf def list log in
+# text/prs.fallenstein.rst
+text/prs.lines.tag dsc
+# text/vnd.radisys.msml-basic-layout
+# text/red
+# text/rfc822-headers
+text/richtext rtx
+# text/rtf
+# text/rtp-enc-aescm128
+# text/rtx
+text/sgml sgml sgm
+# text/t140
+text/tab-separated-values tsv
+text/troff t tr roff man me ms
+text/turtle ttl
+# text/ulpfec
+text/uri-list uri uris urls
+text/vcard vcard
+# text/vnd.abc
+text/vnd.curl curl
+text/vnd.curl.dcurl dcurl
+text/vnd.curl.scurl scurl
+text/vnd.curl.mcurl mcurl
+# text/vnd.dmclientscript
+text/vnd.dvb.subtitle sub
+# text/vnd.esmertec.theme-descriptor
+text/vnd.fly fly
+text/vnd.fmi.flexstor flx
+text/vnd.graphviz gv
+text/vnd.in3d.3dml 3dml
+text/vnd.in3d.spot spot
+# text/vnd.iptc.newsml
+# text/vnd.iptc.nitf
+# text/vnd.latex-z
+# text/vnd.motorola.reflex
+# text/vnd.ms-mediapackage
+# text/vnd.net2phone.commcenter.command
+# text/vnd.si.uricatalogue
+text/vnd.sun.j2me.app-descriptor jad
+# text/vnd.trolltech.linguist
+# text/vnd.wap.si
+# text/vnd.wap.sl
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/x-asm s asm
+text/x-c c cc cxx cpp h hh dic
+text/x-fortran f for f77 f90
+text/x-java-source java
+text/x-opml opml
+text/x-pascal p pas
+text/x-nfo nfo
+text/x-setext etx
+text/x-sfv sfv
+text/x-uuencode uu
+text/x-vcalendar vcs
+text/x-vcard vcf
+# text/xml
+# text/xml-external-parsed-entity
+# video/1d-interleaved-parityfec
+video/3gpp 3gp
+# video/3gpp-tt
+video/3gpp2 3g2
+# video/bmpeg
+# video/bt656
+# video/celb
+# video/dv
+# video/example
+video/h261 h261
+video/h263 h263
+# video/h263-1998
+# video/h263-2000
+video/h264 h264
+# video/h264-rcdo
+# video/h264-svc
+video/jpeg jpgv
+# video/jpeg2000
+video/jpm jpm jpgm
+video/mj2 mj2 mjp2
+# video/mp1s
+# video/mp2p
+# video/mp2t
+video/mp4 mp4 mp4v mpg4
+# video/mp4v-es
+video/mpeg mpeg mpg mpe m1v m2v
+# video/mpeg4-generic
+# video/mpv
+# video/nv
+video/ogg ogv
+# video/parityfec
+# video/pointer
+video/quicktime qt mov
+# video/raw
+# video/rtp-enc-aescm128
+# video/rtx
+# video/smpte292m
+# video/ulpfec
+# video/vc1
+# video/vnd.cctv
+video/vnd.dece.hd uvh uvvh
+video/vnd.dece.mobile uvm uvvm
+# video/vnd.dece.mp4
+video/vnd.dece.pd uvp uvvp
+video/vnd.dece.sd uvs uvvs
+video/vnd.dece.video uvv uvvv
+# video/vnd.directv.mpeg
+# video/vnd.directv.mpeg-tts
+# video/vnd.dlna.mpeg-tts
+video/vnd.dvb.file dvb
+video/vnd.fvt fvt
+# video/vnd.hns.video
+# video/vnd.iptvforum.1dparityfec-1010
+# video/vnd.iptvforum.1dparityfec-2005
+# video/vnd.iptvforum.2dparityfec-1010
+# video/vnd.iptvforum.2dparityfec-2005
+# video/vnd.iptvforum.ttsavc
+# video/vnd.iptvforum.ttsmpeg2
+# video/vnd.motorola.video
+# video/vnd.motorola.videop
+video/vnd.mpegurl mxu m4u
+video/vnd.ms-playready.media.pyv pyv
+# video/vnd.nokia.interleaved-multimedia
+# video/vnd.nokia.videovoip
+# video/vnd.objectvideo
+# video/vnd.sealed.mpeg1
+# video/vnd.sealed.mpeg4
+# video/vnd.sealed.swf
+# video/vnd.sealedmedia.softseal.mov
+video/vnd.uvvu.mp4 uvu uvvu
+video/vnd.vivo viv
+video/webm webm
+video/x-f4v f4v
+video/x-fli fli
+video/x-flv flv
+video/x-m4v m4v
+video/x-matroska mkv mk3d mks
+video/x-mng mng
+video/x-ms-asf asf asx
+video/x-ms-vob vob
+video/x-ms-wm wm
+video/x-ms-wmv wmv
+video/x-ms-wmx wmx
+video/x-ms-wvx wvx
+video/x-msvideo avi
+video/x-sgi-movie movie
+video/x-smv smv
+x-conference/x-cooltalk ice
diff --git a/core-java/src/test/resources/product.png b/core-java/src/test/resources/product.png
new file mode 100644
index 0000000000..4edd01c0a1
Binary files /dev/null and b/core-java/src/test/resources/product.png differ
diff --git a/jhipster/jhipster-monolithic/pom.xml b/jhipster/jhipster-monolithic/pom.xml
index 0536f80ada..8b753f6f93 100644
--- a/jhipster/jhipster-monolithic/pom.xml
+++ b/jhipster/jhipster-monolithic/pom.xml
@@ -347,7 +347,7 @@
-
+
com.spotify
docker-maven-plugin
diff --git a/pom.xml b/pom.xml
index 3e0d37e19f..f608f5cded 100644
--- a/pom.xml
+++ b/pom.xml
@@ -433,6 +433,7 @@
spring-data-couchbase-2
persistence-modules/spring-data-dynamodb
spring-data-elasticsearch
+ spring-data-jpa
spring-data-keyvalue
spring-data-mongodb
persistence-modules/spring-data-neo4j
@@ -545,8 +546,9 @@
antlr
maven-archetype
apache-meecrowave
- spring-reactive-kotlin
+ spring-reactive-kotlin
jnosql
+ testing-modules/junit-abstract
@@ -666,6 +668,7 @@
spring-amqp-simple
spring-apache-camel
spring-batch
+ testing-modules/junit-abstract
@@ -1071,7 +1074,7 @@
antlr
maven-archetype
apache-meecrowave
-
+ testing-modules/junit-abstract
@@ -96,7 +96,7 @@
com.fasterxml.jackson.core
jackson-databind
- ${jackson.version}
+ ${jackson-databind.version}
@@ -270,8 +270,6 @@
-
- 4.2.6.RELEASE
4.4.5
@@ -280,7 +278,6 @@
1.2
3.1.0
- 2.8.5
19.0
diff --git a/spring-security-rest-basic-auth/src/main/java/org/baeldung/filter/CustomWebSecurityConfigurerAdapter.java b/spring-security-rest-basic-auth/src/main/java/org/baeldung/filter/CustomWebSecurityConfigurerAdapter.java
index 2ff0e30f94..7ca2a80c52 100644
--- a/spring-security-rest-basic-auth/src/main/java/org/baeldung/filter/CustomWebSecurityConfigurerAdapter.java
+++ b/spring-security-rest-basic-auth/src/main/java/org/baeldung/filter/CustomWebSecurityConfigurerAdapter.java
@@ -2,11 +2,14 @@ package org.baeldung.filter;
import org.baeldung.security.RestAuthenticationEntryPoint;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
@Configuration
@@ -20,7 +23,7 @@ public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAda
auth
.inMemoryAuthentication()
.withUser("user1")
- .password("user1Pass")
+ .password(passwordEncoder().encode("user1Pass"))
.authorities("ROLE_USER");
}
@@ -38,4 +41,9 @@ public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAda
http.addFilterAfter(new CustomFilter(), BasicAuthenticationFilter.class);
}
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
}
diff --git a/spring-security-rest-basic-auth/src/main/java/org/baeldung/spring/WebConfig.java b/spring-security-rest-basic-auth/src/main/java/org/baeldung/spring/WebConfig.java
index 8c3d677af6..2305a7b6c2 100644
--- a/spring-security-rest-basic-auth/src/main/java/org/baeldung/spring/WebConfig.java
+++ b/spring-security-rest-basic-auth/src/main/java/org/baeldung/spring/WebConfig.java
@@ -7,12 +7,13 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
@ComponentScan("org.baeldung.web")
-public class WebConfig extends WebMvcConfigurerAdapter {
+public class WebConfig implements WebMvcConfigurer {
public WebConfig() {
super();
@@ -22,7 +23,6 @@ public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(final List> converters) {
- super.configureMessageConverters(converters);
converters.add(new MappingJackson2HttpMessageConverter());
}
diff --git a/spring-security-rest-basic-auth/src/main/resources/webSecurityConfig.xml b/spring-security-rest-basic-auth/src/main/resources/webSecurityConfig.xml
index 6dea965d8b..a93dc841b6 100644
--- a/spring-security-rest-basic-auth/src/main/resources/webSecurityConfig.xml
+++ b/spring-security-rest-basic-auth/src/main/resources/webSecurityConfig.xml
@@ -2,25 +2,27 @@
-
+
-
+
+
+
\ No newline at end of file
diff --git a/spring-security-rest-basic-auth/src/main/webapp/WEB-INF/api-servlet.xml b/spring-security-rest-basic-auth/src/main/webapp/WEB-INF/api-servlet.xml
index 4ba9642448..1dbff70b83 100644
--- a/spring-security-rest-basic-auth/src/main/webapp/WEB-INF/api-servlet.xml
+++ b/spring-security-rest-basic-auth/src/main/webapp/WEB-INF/api-servlet.xml
@@ -1,6 +1,6 @@
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" >
\ No newline at end of file
diff --git a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java
index c27e306c08..104129b663 100644
--- a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java
+++ b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java
@@ -8,6 +8,9 @@ import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLPeerUnverifiedException;
+
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
@@ -16,6 +19,7 @@ import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/spring-session/spring-session-jdbc/pom.xml b/spring-session/spring-session-jdbc/pom.xml
index ce119b3c74..ce6b5f5908 100644
--- a/spring-session/spring-session-jdbc/pom.xml
+++ b/spring-session/spring-session-jdbc/pom.xml
@@ -10,6 +10,10 @@
spring-session-jdbc
Spring Session with JDBC tutorial
+
+ 1.4.197
+
+
parent-boot-2
com.baeldung
@@ -18,25 +22,18 @@
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
org.springframework.boot
spring-boot-starter-web
org.springframework.session
- spring-session-core
+ spring-session-jdbc
com.h2database
h2
+ ${h2.version}
runtime
@@ -44,14 +41,6 @@
spring-boot-starter-test
test
-
- org.springframework.session
- spring-session-jdbc
-
-
-
-
-
diff --git a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
index 727fa653ff..a3bc17aa49 100644
--- a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
+++ b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringSessionJdbcApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringSessionJdbcApplication.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(SpringSessionJdbcApplication.class, args);
+ }
}
diff --git a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
index 0a68bbbfba..509a5f292b 100644
--- a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
+++ b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
@@ -24,20 +24,19 @@ public class SpringSessionJdbcController {
}
@PostMapping("/saveColor")
- public String saveMessage(@RequestParam("color") String color,
- HttpServletRequest request) {
+ public String saveMessage(@RequestParam("color") String color, HttpServletRequest request) {
List favoriteColors = getFavColors(request.getSession());
if (!StringUtils.isEmpty(color)) {
favoriteColors.add(color);
- request.getSession().
- setAttribute("favoriteColors", favoriteColors);
+ request
+ .getSession()
+ .setAttribute("favoriteColors", favoriteColors);
}
return "redirect:/";
}
private List getFavColors(HttpSession session) {
- List favoriteColors = (List) session.
- getAttribute("favoriteColors");
+ List favoriteColors = (List) session.getAttribute("favoriteColors");
if (favoriteColors == null) {
favoriteColors = new ArrayList<>();
}
diff --git a/spring-session/spring-session-jdbc/src/main/resources/application.properties b/spring-session/spring-session-jdbc/src/main/resources/application.properties
index 95f14559ce..119638de31 100644
--- a/spring-session/spring-session-jdbc/src/main/resources/application.properties
+++ b/spring-session/spring-session-jdbc/src/main/resources/application.properties
@@ -1,9 +1,3 @@
spring.session.store-type=jdbc
-#spring.session.jdbc.initialize-schema=embedded
-#spring.session.jdbc.table-name=SPRING_SESSION
-#server.servlet.session.timeout=60s
-#spring.datasource.url=jdbc:h2:mem:AZ
-#spring.security.user.name=admin
-#spring.security.user.password=secret
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
\ No newline at end of file
diff --git a/spring-session/spring-session-jdbc/src/main/resources/templates/index.html b/spring-session/spring-session-jdbc/src/main/resources/templates/index.html
deleted file mode 100644
index 51f6bbee2f..0000000000
--- a/spring-session/spring-session-jdbc/src/main/resources/templates/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- Spring Session JDBC
-
-
-
-
-
- Session ID -
- My favorite color(s) -
-
-
\ No newline at end of file
diff --git a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java
deleted file mode 100644
index 9975e51784..0000000000
--- a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.springsessionjdbc;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class SpringSessionJdbcApplicationTests {
-
- @Test
- public void contextLoads() {
- }
-
-}
diff --git a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java
new file mode 100644
index 0000000000..2dcc0b3af8
--- /dev/null
+++ b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java
@@ -0,0 +1,91 @@
+package com.baeldung.springsessionjdbc;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class SpringSessionJdbcIntegrationTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private TestRestTemplate testRestTemplate;
+
+ @Before
+ public void setup() throws ClassNotFoundException {
+ Class.forName("org.h2.Driver");
+ }
+
+ @Test
+ public void givenApiHasStarted_whenH2DbIsQueried_thenSessionTablesAreEmpty() throws SQLException {
+ Assert.assertEquals(0, getSessionIdsFromDatabase().size());
+ Assert.assertEquals(0, getSessionAttributeBytesFromDatabase().size());
+ }
+
+ @Test
+ public void givenGetInvoked_whenH2DbIsQueried_thenOneSessionIsCreated() throws SQLException {
+ assertThat(this.testRestTemplate.getForObject("http://localhost:" + port + "/", String.class)).isNotEmpty();
+ Assert.assertEquals(1, getSessionIdsFromDatabase().size());
+ }
+
+ @Test
+ public void givenPostInvoked_whenH2DbIsQueried_thenSessionAttributeIsRetrieved() throws ClassNotFoundException, SQLException, IOException {
+ MultiValueMap map = new LinkedMultiValueMap<>();
+ map.add("color", "red");
+ this.testRestTemplate.postForObject("http://localhost:" + port + "/saveColor", map, String.class);
+ List queryResponse = getSessionAttributeBytesFromDatabase();
+ Assert.assertEquals(1, queryResponse.size());
+ ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(queryResponse.get(0)));
+ List obj = (List) in.readObject(); //Deserialize byte[] to object
+ Assert.assertEquals("red", obj.get(0));
+ }
+
+ private List getSessionIdsFromDatabase() throws SQLException {
+ List result = new ArrayList<>();
+ ResultSet rs = getResultSet("SELECT * FROM SPRING_SESSION");
+ while (rs.next()) {
+ result.add(rs.getString("SESSION_ID"));
+ }
+ return result;
+ }
+
+ private List getSessionAttributeBytesFromDatabase() throws SQLException {
+ List result = new ArrayList<>();
+ ResultSet rs = getResultSet("SELECT * FROM SPRING_SESSION_ATTRIBUTES");
+ while (rs.next()) {
+ result.add(rs.getBytes("ATTRIBUTE_BYTES"));
+ }
+ return result;
+ }
+
+ private ResultSet getResultSet(String sql) throws SQLException {
+ Connection conn = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");
+ Statement stat = conn.createStatement();
+ return stat.executeQuery(sql);
+ }
+
+}
diff --git a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
index d5162e78ba..aac6fe9843 100644
--- a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
+++ b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
@@ -37,6 +37,7 @@
com.baeldung
spring-swagger-codegen
0.0.1-SNAPSHOT
+ ../../spring-swagger-codegen
diff --git a/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml b/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml
index dca3832438..ece534dc74 100644
--- a/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml
+++ b/spring-swagger-codegen/spring-swagger-codegen-app/pom.xml
@@ -5,11 +5,12 @@
com.baeldung
spring-swagger-codegen-app
0.0.1-SNAPSHOT
-
+
- org.springframework.boot
- spring-boot-starter-parent
- 1.5.10.RELEASE
+ com.baeldung
+ spring-swagger-codegen
+ 0.0.1-SNAPSHOT
+ ../../spring-swagger-codegen
@@ -21,6 +22,7 @@
org.springframework.boot
spring-boot-starter-web
+ ${spring.version}
@@ -36,6 +38,7 @@
1.8
0.0.1-SNAPSHOT
+ 1.5.10.RELEASE
\ No newline at end of file
diff --git a/testing-modules/junit-abstract/pom.xml b/testing-modules/junit-abstract/pom.xml
new file mode 100644
index 0000000000..c4957fbda4
--- /dev/null
+++ b/testing-modules/junit-abstract/pom.xml
@@ -0,0 +1,59 @@
+
+ 4.0.0
+
+ junit-abstract
+ 1.0-SNAPSHOT
+ jar
+
+ abstractclasses
+ http://maven.apache.org
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
+
+
+ UTF-8
+ 1.7.0
+ 4.12
+ 1.10.19
+ 1.8
+
+
+
+
+ org.mockito
+ mockito-all
+ ${mockito.all.version}
+ test
+
+
+ org.powermock
+ powermock-module-junit4
+ ${powermock.version}
+ test
+
+
+ junit
+ junit
+
+
+
+
+
+ org.powermock
+ powermock-api-mockito
+ ${powermock.version}
+ test
+
+
+
+
+
+ junit-abstract
+
+
+
diff --git a/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCalling.java b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCalling.java
new file mode 100644
index 0000000000..b0709bf6bf
--- /dev/null
+++ b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCalling.java
@@ -0,0 +1,17 @@
+/**
+ *
+ */
+package org.baeldung.testing.abstractclass.abstractmethod;
+
+/**
+ * When method calls abstract method.
+ */
+public abstract class AbstractMethodCalling {
+
+ public abstract String abstractFunc();
+
+ public String defaultImpl() {
+ String res = abstractFunc();
+ return (res == null) ? "Default" : (res + " Default");
+ }
+}
diff --git a/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependent.java b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependent.java
new file mode 100644
index 0000000000..7456a51c43
--- /dev/null
+++ b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependent.java
@@ -0,0 +1,14 @@
+package org.baeldung.testing.abstractclass.indepedentmethod;
+
+/**
+ * Test Independent Method
+ *
+ */
+public abstract class AbstractIndependent {
+
+ public abstract int abstractFunc();
+
+ public String defaultImpl() {
+ return "DEFAULT-1";
+ }
+}
diff --git a/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/ConcreteImpl.java b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/ConcreteImpl.java
new file mode 100644
index 0000000000..f568ad4eec
--- /dev/null
+++ b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/indepedentmethod/ConcreteImpl.java
@@ -0,0 +1,10 @@
+package org.baeldung.testing.abstractclass.indepedentmethod;
+
+public class ConcreteImpl extends AbstractIndependent {
+
+ @Override
+ public int abstractFunc() {
+ return 4;
+ }
+
+}
diff --git a/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFields.java b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFields.java
new file mode 100644
index 0000000000..3761eb8c3b
--- /dev/null
+++ b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFields.java
@@ -0,0 +1,22 @@
+package org.baeldung.testing.abstractclass.instancefields;
+
+/**
+ * Test Independent Method
+ */
+public abstract class AbstractInstanceFields {
+
+ protected int count;
+ private boolean active = false;
+
+ public abstract int abstractFunc();
+
+ public String testFunc() {
+ String response;
+ if (count > 5) {
+ response = "Overflow";
+ } else {
+ response = active ? "Added" : "Blocked";
+ }
+ return response;
+ }
+}
diff --git a/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethods.java b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethods.java
new file mode 100644
index 0000000000..98a9bcaa07
--- /dev/null
+++ b/testing-modules/junit-abstract/src/main/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethods.java
@@ -0,0 +1,17 @@
+package org.baeldung.testing.abstractclass.privatemethod;
+
+import java.time.LocalDateTime;
+
+public abstract class AbstractPrivateMethods {
+
+ public abstract int abstractFunc();
+
+ public String defaultImpl() {
+ return getCurrentDateTime() + "DEFAULT-1";
+ }
+
+ private String getCurrentDateTime() {
+ return LocalDateTime.now()
+ .toString();
+ }
+}
diff --git a/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCallingUnitTest.java b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCallingUnitTest.java
new file mode 100644
index 0000000000..64094710b9
--- /dev/null
+++ b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/abstractmethod/AbstractMethodCallingUnitTest.java
@@ -0,0 +1,32 @@
+package org.baeldung.testing.abstractclass.abstractmethod;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class AbstractMethodCallingUnitTest {
+
+ @Test
+ public void givenDefaultImpl_whenMockAbstractFunc_thenExpectedBehaviour() {
+
+ // mock classes and call real methods available
+ AbstractMethodCalling cls = Mockito.mock(AbstractMethodCalling.class);
+ Mockito.doReturn("Abstract")
+ .when(cls)
+ .abstractFunc();
+ Mockito.doCallRealMethod()
+ .when(cls)
+ .defaultImpl();
+
+ // validate result by mock abstractFunc's behaviour
+ assertEquals("Abstract Default", cls.defaultImpl());
+
+ // check the value with null response from abstract method
+ Mockito.doReturn(null)
+ .when(cls)
+ .abstractFunc();
+ assertEquals("Default", cls.defaultImpl());
+ }
+
+}
diff --git a/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependentUnitTest.java b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependentUnitTest.java
new file mode 100644
index 0000000000..ffad6327bd
--- /dev/null
+++ b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/indepedentmethod/AbstractIndependentUnitTest.java
@@ -0,0 +1,26 @@
+/**
+ *
+ */
+package org.baeldung.testing.abstractclass.indepedentmethod;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class AbstractIndependentUnitTest {
+
+@Test
+public void givenNonAbstractMethod_whenConcreteImpl_testCorrectBehaviour() {
+ ConcreteImpl conClass = new ConcreteImpl();
+ String actual = conClass.defaultImpl();
+
+ assertEquals("DEFAULT-1", actual);
+}
+
+ @Test
+ public void givenNonAbstractMethod_whenMockitoMock_testCorrectBehaviour() {
+ AbstractIndependent absCls = Mockito.mock(AbstractIndependent.class, Mockito.CALLS_REAL_METHODS);
+ assertEquals("DEFAULT-1", absCls.defaultImpl());
+ }
+}
diff --git a/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFieldsUnitTest.java b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFieldsUnitTest.java
new file mode 100644
index 0000000000..ddaca8a245
--- /dev/null
+++ b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/instancefields/AbstractInstanceFieldsUnitTest.java
@@ -0,0 +1,40 @@
+package org.baeldung.testing.abstractclass.instancefields;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.reflect.Whitebox;
+
+public class AbstractInstanceFieldsUnitTest {
+
+ @Test
+ public void protectedInstanceField_MockClassCountGt5_testNonAbstractMethod() {
+
+ // mock
+ AbstractInstanceFields instClass = Mockito.mock(AbstractInstanceFields.class);
+ Mockito.doCallRealMethod()
+ .when(instClass)
+ .testFunc();
+
+ // set counter greater than 5
+ instClass.count = 7;
+
+ // compare the result
+ assertEquals("Overflow", instClass.testFunc());
+ }
+
+ @Test
+ public void givenNonAbstractMethodAndPrivateField_whenPowerMockitoAndActiveFieldTrue_thenCorrectBehaviour() {
+ AbstractInstanceFields instClass = PowerMockito.mock(AbstractInstanceFields.class);
+ PowerMockito.doCallRealMethod()
+ .when(instClass)
+ .testFunc();
+ Whitebox.setInternalState(instClass, "active", true);
+
+ // compare the expected result with actual
+ assertEquals("Added", instClass.testFunc());
+ }
+
+}
diff --git a/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethodsUnitTest.java b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethodsUnitTest.java
new file mode 100644
index 0000000000..64f01a3c84
--- /dev/null
+++ b/testing-modules/junit-abstract/src/test/java/org/baeldung/testing/abstractclass/privatemethod/AbstractPrivateMethodsUnitTest.java
@@ -0,0 +1,40 @@
+/**
+ *
+ */
+package org.baeldung.testing.abstractclass.privatemethod;
+
+import static org.junit.Assert.assertEquals;
+
+import java.time.LocalDateTime;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+/**
+ * Providing custom values for private methods using powermock
+ *
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(AbstractPrivateMethods.class)
+public class AbstractPrivateMethodsUnitTest {
+
+ @Test
+ public void givenNonAbstractMethodAndCallPrivateMethod_whenMockPrivateMethod_thenVerifyBehaviour() throws Exception {
+ AbstractPrivateMethods mockClass = PowerMockito.mock(AbstractPrivateMethods.class);
+ PowerMockito.doCallRealMethod()
+ .when(mockClass)
+ .defaultImpl();
+
+ String dateTime = LocalDateTime.now()
+ .toString();
+ PowerMockito.doReturn(dateTime)
+ .when(mockClass, "getCurrentDateTime");
+
+ String actual = mockClass.defaultImpl();
+ assertEquals(dateTime + "DEFAULT-1", actual);
+ }
+
+}
diff --git a/testing-modules/spring-testing/README.md b/testing-modules/spring-testing/README.md
new file mode 100644
index 0000000000..a96ddccabb
--- /dev/null
+++ b/testing-modules/spring-testing/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+
diff --git a/testing-modules/spring-testing/pom.xml b/testing-modules/spring-testing/pom.xml
new file mode 100644
index 0000000000..a137bc8d33
--- /dev/null
+++ b/testing-modules/spring-testing/pom.xml
@@ -0,0 +1,75 @@
+
+ 4.0.0
+ org.baeldung
+ spring-testing
+ 0.1-SNAPSHOT
+ spring-testing
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+
+
+ org.hamcrest
+ java-hamcrest
+ ${hamcrest.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ LATEST
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ LATEST
+ test
+
+
+ org.springframework
+ spring-core
+ LATEST
+
+
+ org.springframework
+ spring-context
+ LATEST
+
+
+ org.eclipse.persistence
+ javax.persistence
+ 2.1.1
+
+
+ org.springframework.data
+ spring-data-jpa
+ LATEST
+
+
+
+
+ spring-testing
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+ 2.0.0.0
+
+
+
\ No newline at end of file
diff --git a/testing-modules/mockito/src/main/java/org/baeldung/mockito/repository/User.java b/testing-modules/spring-testing/src/main/java/org/baeldung/mockito/repository/User.java
similarity index 100%
rename from testing-modules/mockito/src/main/java/org/baeldung/mockito/repository/User.java
rename to testing-modules/spring-testing/src/main/java/org/baeldung/mockito/repository/User.java
diff --git a/testing-modules/mockito/src/main/java/org/baeldung/mockito/repository/UserRepository.java b/testing-modules/spring-testing/src/main/java/org/baeldung/mockito/repository/UserRepository.java
similarity index 100%
rename from testing-modules/mockito/src/main/java/org/baeldung/mockito/repository/UserRepository.java
rename to testing-modules/spring-testing/src/main/java/org/baeldung/mockito/repository/UserRepository.java
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockAnnotationUnitTest.java b/testing-modules/spring-testing/src/test/java/org/baeldung/mockito/MockAnnotationUnitTest.java
similarity index 100%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockAnnotationUnitTest.java
rename to testing-modules/spring-testing/src/test/java/org/baeldung/mockito/MockAnnotationUnitTest.java
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java b/testing-modules/spring-testing/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java
similarity index 90%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java
rename to testing-modules/spring-testing/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java
index fd9236fe13..3a7e58fb48 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java
+++ b/testing-modules/spring-testing/src/test/java/org/baeldung/mockito/MockBeanAnnotationIntegrationTest.java
@@ -20,7 +20,7 @@ public class MockBeanAnnotationIntegrationTest {
ApplicationContext context;
@Test
- public void givenCountMethodMocked_WhenCountInvokedOnBeanFromContext_ThenMockValueReturned() {
+ public void givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned() {
Mockito.when(mockRepository.count()).thenReturn(123L);
UserRepository userRepoFromContext = context.getBean(UserRepository.class);
diff --git a/xml/src/test/resources/example_dom4j_new.xml b/xml/src/test/resources/example_dom4j_new.xml
deleted file mode 100644
index 020760fdd3..0000000000
--- a/xml/src/test/resources/example_dom4j_new.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- XML with Dom4J
- XML handling with Dom4J
- 14/06/2016
- Dom4J tech writer
-
-
diff --git a/xml/src/test/resources/example_dom4j_updated.xml b/xml/src/test/resources/example_dom4j_updated.xml
deleted file mode 100755
index 962ca0c889..0000000000
--- a/xml/src/test/resources/example_dom4j_updated.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- Guava updated
- Introduction to Guava
- 04/04/2016
- GuavaAuthor
-
-
- XML updated
- Introduction to XPath
- 04/05/2016
- XMLAuthor
-
-
- Android updated
- Introduction to Android
- 04/03/2016
- AndroidAuthor
-
-
- Spring updated
- Introduction to Spring
- 04/02/2016
- SpringAuthor
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/xml/src/test/resources/example_jaxb_new.xml b/xml/src/test/resources/example_jaxb_new.xml
deleted file mode 100644
index 646d938869..0000000000
--- a/xml/src/test/resources/example_jaxb_new.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- Jaxb author
- 04/02/2015
- XML Binding with Jaxb
- XML with Jaxb
-
-