diff --git a/mutation-testing/pom.xml b/mutation-testing/pom.xml
index 83012ab8fe..cdee59fcb4 100644
--- a/mutation-testing/pom.xml
+++ b/mutation-testing/pom.xml
@@ -1,38 +1,77 @@
- 4.0.0
- com.baeldung
- mutation-testing
- 0.1-SNAPSHOT
- mutation-testing
-
-
- org.pitest
- pitest-parent
- 1.1.10
- pom
-
-
- junit
- junit
- 4.9
-
-
-
-
-
- org.pitest
- pitest-maven
- 1.1.10
-
-
- com.baeldung.testing.mutation.*
-
-
- com.baeldung.mutation.test.*
-
-
-
-
-
-
\ No newline at end of file
+ 4.0.0
+ com.baeldung
+ mutation-testing
+ 0.1-SNAPSHOT
+ mutation-testing
+
+
+ org.pitest
+ pitest-parent
+ 1.1.10
+ pom
+
+
+ junit
+ junit
+ 4.9
+
+
+
+
+
+ org.pitest
+ pitest-maven
+ 1.1.10
+
+
+ com.baeldung.testing.mutation.*
+
+
+ com.baeldung.mutation.test.*
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.7.7.201606060606
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+ jacoco-check
+
+ check
+
+
+
+
+ PACKAGE
+
+
+ LINE
+ COVEREDRATIO
+ 0.50
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java b/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java
index 1410135883..3add6290f6 100644
--- a/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java
+++ b/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java
@@ -8,21 +8,26 @@ import org.junit.Test;
import com.baeldung.testing.mutation.Palindrome;
public class TestPalindrome {
+ @Test
+ public void whenEmptyString_thanAccept() {
+ Palindrome palindromeTester = new Palindrome();
+ assertTrue(palindromeTester.isPalindrome("noon"));
+ }
@Test
- public void acceptsPalindrome() {
+ public void whenPalindrom_thanAccept() {
Palindrome palindromeTester = new Palindrome();
assertTrue(palindromeTester.isPalindrome("noon"));
}
@Test
- public void rejectsNonPalindrome(){
+ public void whenNotPalindrom_thanReject(){
Palindrome palindromeTester = new Palindrome();
assertFalse(palindromeTester.isPalindrome("box"));
}
@Test
- public void rejectsNearPalindrome(){
+ public void whenNearPalindrom_thanReject(){
Palindrome palindromeTester = new Palindrome();
assertFalse(palindromeTester.isPalindrome("neon"));
}
diff --git a/orika/pom.xml b/orika/pom.xml
new file mode 100644
index 0000000000..c335b0dc22
--- /dev/null
+++ b/orika/pom.xml
@@ -0,0 +1,60 @@
+
+ 4.0.0
+ com.baeldung
+ orika
+ 1.0
+
+
+ 1.7.5
+ 1.7.5
+ 1.4.6
+ 4.3
+
+
+ Orika
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j-api.version}
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${jcl-over-slf4j.version}
+
+
+
+ ma.glasnost.orika
+ orika-core
+ ${orika-core.version}
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 7
+ 7
+
+
+
+
+
+
diff --git a/orika/src/main/java/com/baeldung/orika/Dest.java b/orika/src/main/java/com/baeldung/orika/Dest.java
new file mode 100644
index 0000000000..4f050230ce
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Dest.java
@@ -0,0 +1,37 @@
+package com.baeldung.orika;
+
+public class Dest {
+ @Override
+ public String toString() {
+ return "Dest [name=" + name + ", age=" + age + "]";
+ }
+
+ private String name;
+ private int age;
+
+ public Dest() {
+
+ }
+
+ public Dest(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Name.java b/orika/src/main/java/com/baeldung/orika/Name.java
new file mode 100644
index 0000000000..fcf0214548
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Name.java
@@ -0,0 +1,28 @@
+package com.baeldung.orika;
+
+public class Name {
+ private String firstName;
+ private String lastName;
+
+ public Name(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Person.java b/orika/src/main/java/com/baeldung/orika/Person.java
new file mode 100644
index 0000000000..90ae8dee5e
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Person.java
@@ -0,0 +1,48 @@
+package com.baeldung.orika;
+
+public class Person {
+ @Override
+ public String toString() {
+ return "Person [name=" + name + ", nickname=" + nickname + ", age="
+ + age + "]";
+ }
+
+ private String name;
+ private String nickname;
+ private int age;
+
+ public Person() {
+
+ }
+
+ public Person(String name, String nickname, int age) {
+ this.name = name;
+ this.nickname = nickname;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getNickname() {
+ return nickname;
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Person3.java b/orika/src/main/java/com/baeldung/orika/Person3.java
new file mode 100644
index 0000000000..8661edfc10
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Person3.java
@@ -0,0 +1,38 @@
+package com.baeldung.orika;
+
+public class Person3 {
+ private String name;
+ private String dtob;
+
+ public Person3() {
+
+ }
+
+ public Person3(String name, String dtob) {
+ this.name = name;
+ this.dtob = dtob;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDtob() {
+ return dtob;
+ }
+
+ public void setDtob(String dtob) {
+ this.dtob = dtob;
+ }
+
+ @Override
+ public String toString() {
+ return "Person3 [name=" + name + ", dtob=" + dtob + "]";
+ }
+
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonContainer.java b/orika/src/main/java/com/baeldung/orika/PersonContainer.java
new file mode 100644
index 0000000000..aaec136bb9
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonContainer.java
@@ -0,0 +1,18 @@
+package com.baeldung.orika;
+
+public class PersonContainer {
+ private Name name;
+
+ public PersonContainer(Name name) {
+ this.name = name;
+ }
+
+ public Name getName() {
+ return name;
+ }
+
+ public void setName(Name name) {
+ this.name = name;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonCustomMapper.java b/orika/src/main/java/com/baeldung/orika/PersonCustomMapper.java
new file mode 100644
index 0000000000..d839eea30e
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonCustomMapper.java
@@ -0,0 +1,36 @@
+package com.baeldung.orika;
+
+import ma.glasnost.orika.CustomMapper;
+import ma.glasnost.orika.MappingContext;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+class PersonCustomMapper extends CustomMapper {
+
+ @Override
+ public void mapAtoB(Personne3 a, Person3 b, MappingContext context) {
+ Date date = new Date(a.getDtob());
+ DateFormat format = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ss'Z'");
+ String isoDate = format.format(date);
+ b.setDtob(isoDate);
+ }
+
+ @Override
+ public void mapBtoA(Person3 b, Personne3 a, MappingContext context) {
+ DateFormat format = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ss'Z'");
+ Date date = null;
+ try {
+ date = format.parse(b.getDtob());
+
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ long timestamp = date.getTime();
+ a.setDtob(timestamp);
+ }
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonListContainer.java b/orika/src/main/java/com/baeldung/orika/PersonListContainer.java
new file mode 100644
index 0000000000..97ae15eb48
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonListContainer.java
@@ -0,0 +1,20 @@
+package com.baeldung.orika;
+
+import java.util.List;
+
+public class PersonListContainer {
+ private List names;
+
+ public PersonListContainer(List names) {
+ this.names = names;
+ }
+
+ public List getNames() {
+ return names;
+ }
+
+ public void setNames(List names) {
+ this.names = names;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonNameArray.java b/orika/src/main/java/com/baeldung/orika/PersonNameArray.java
new file mode 100644
index 0000000000..f2e98be537
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonNameArray.java
@@ -0,0 +1,18 @@
+package com.baeldung.orika;
+
+public class PersonNameArray {
+ private String[] nameArray;
+
+ public PersonNameArray(String[] nameArray) {
+ this.nameArray = nameArray;
+ }
+
+ public String[] getNameArray() {
+ return nameArray;
+ }
+
+ public void setNameArray(String[] nameArray) {
+ this.nameArray = nameArray;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonNameList.java b/orika/src/main/java/com/baeldung/orika/PersonNameList.java
new file mode 100644
index 0000000000..70798ebd35
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonNameList.java
@@ -0,0 +1,20 @@
+package com.baeldung.orika;
+
+import java.util.List;
+
+public class PersonNameList {
+ private List nameList;
+
+ public PersonNameList(List nameList) {
+ this.nameList = nameList;
+ }
+
+ public List getNameList() {
+ return nameList;
+ }
+
+ public void setNameList(List nameList) {
+ this.nameList = nameList;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonNameMap.java b/orika/src/main/java/com/baeldung/orika/PersonNameMap.java
new file mode 100644
index 0000000000..8126cdfc3a
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonNameMap.java
@@ -0,0 +1,20 @@
+package com.baeldung.orika;
+
+import java.util.Map;
+
+public class PersonNameMap {
+ private Map nameMap;
+
+ public PersonNameMap(Map nameMap) {
+ this.nameMap = nameMap;
+ }
+
+ public Map getNameMap() {
+ return nameMap;
+ }
+
+ public void setNameMap(Map nameList) {
+ this.nameMap = nameList;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/PersonNameParts.java b/orika/src/main/java/com/baeldung/orika/PersonNameParts.java
new file mode 100644
index 0000000000..7cfdcdd75b
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/PersonNameParts.java
@@ -0,0 +1,28 @@
+package com.baeldung.orika;
+
+public class PersonNameParts {
+ private String firstName;
+ private String lastName;
+
+ public PersonNameParts(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Personne.java b/orika/src/main/java/com/baeldung/orika/Personne.java
new file mode 100644
index 0000000000..47789dd323
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Personne.java
@@ -0,0 +1,44 @@
+package com.baeldung.orika;
+
+public class Personne {
+ private String nom;
+ private String surnom;
+ private int age;
+
+ public Personne(String nom, String surnom, int age) {
+ this.nom = nom;
+ this.surnom = surnom;
+ this.age = age;
+ }
+
+ public String getNom() {
+ return nom;
+ }
+
+ public void setNom(String nom) {
+ this.nom = nom;
+ }
+
+ public String getSurnom() {
+ return surnom;
+ }
+
+ public void setSurnom(String surnom) {
+ this.surnom = surnom;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Personne [nom=" + nom + ", surnom=" + surnom + ", age=" + age
+ + "]";
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Personne3.java b/orika/src/main/java/com/baeldung/orika/Personne3.java
new file mode 100644
index 0000000000..35323c612a
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Personne3.java
@@ -0,0 +1,37 @@
+package com.baeldung.orika;
+
+public class Personne3 {
+ private String name;
+ private long dtob;
+
+ public Personne3() {
+
+ }
+
+ public Personne3(String name, long dtob) {
+ this.name = name;
+ this.dtob = dtob;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public long getDtob() {
+ return dtob;
+ }
+
+ public void setDtob(long dtob) {
+ this.dtob = dtob;
+ }
+
+ @Override
+ public String toString() {
+ return "Personne3 [name=" + name + ", dtob=" + dtob + "]";
+ }
+
+}
diff --git a/orika/src/main/java/com/baeldung/orika/Source.java b/orika/src/main/java/com/baeldung/orika/Source.java
new file mode 100644
index 0000000000..a973bab388
--- /dev/null
+++ b/orika/src/main/java/com/baeldung/orika/Source.java
@@ -0,0 +1,36 @@
+package com.baeldung.orika;
+
+public class Source {
+ @Override
+ public String toString() {
+ return "Source [name=" + name + ", age=" + age + "]";
+ }
+
+ private String name;
+ private int age;
+
+ public Source() {
+ }
+
+ public Source(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+}
diff --git a/orika/src/test/java/com/baeldung/orika/OrikaTest.java b/orika/src/test/java/com/baeldung/orika/OrikaTest.java
new file mode 100644
index 0000000000..18dfcfa44e
--- /dev/null
+++ b/orika/src/test/java/com/baeldung/orika/OrikaTest.java
@@ -0,0 +1,367 @@
+package com.baeldung.orika;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import ma.glasnost.orika.BoundMapperFacade;
+import ma.glasnost.orika.CustomMapper;
+import ma.glasnost.orika.MapperFacade;
+import ma.glasnost.orika.MapperFactory;
+import ma.glasnost.orika.MappingContext;
+import ma.glasnost.orika.impl.DefaultMapperFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class OrikaTest {
+ MapperFactory mapperFactory;
+ CustomMapper customMapper;
+ // constant to help us cover time zone differences
+ private final long GMT_DIFFERENCE = 46800000;
+
+ @Before
+ public void before() {
+ mapperFactory = new DefaultMapperFactory.Builder().build();
+ customMapper = new PersonCustomMapper();
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMaps_thenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class);
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source("Baeldung", 10);
+ Dest dest = mapper.map(src, Dest.class);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsReverse_thenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).byDefault();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Dest src = new Dest("Baeldung", 10);
+ Source dest = mapper.map(src, Source.class);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsByObject_thenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).byDefault();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source("Baeldung", 10);
+ Dest dest = new Dest();
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsUsingBoundMapper_thenCorrect() {
+ BoundMapperFacade boundMapper = mapperFactory
+ .getMapperFacade(Source.class, Dest.class);
+ Source src = new Source("baeldung", 10);
+ Dest dest = boundMapper.map(src);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsUsingBoundMapperInReverse_thenCorrect() {
+ BoundMapperFacade boundMapper = mapperFactory
+ .getMapperFacade(Source.class, Dest.class);
+ Dest src = new Dest("baeldung", 10);
+ Source dest = boundMapper.mapReverse(src);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsUsingBoundMapperByObject_thenCorrect() {
+ BoundMapperFacade boundMapper = mapperFactory
+ .getMapperFacade(Source.class, Dest.class);
+ Source src = new Source("baeldung", 10);
+ Dest dest = new Dest();
+ boundMapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDest_whenMapsUsingBoundMapperByObjectInReverse_thenCorrect() {
+ BoundMapperFacade boundMapper = mapperFactory
+ .getMapperFacade(Source.class, Dest.class);
+ Dest src = new Dest("baeldung", 10);
+ Source dest = new Source();
+ boundMapper.mapReverse(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcAndDestWithDifferentFieldNames_whenMaps_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class)
+ .field("nom", "name").field("surnom", "nickname")
+ .field("age", "age").register();
+
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+
+ assertEquals(englishPerson.getName(), frenchPerson.getNom());
+ assertEquals(englishPerson.getNickname(), frenchPerson.getSurnom());
+ assertEquals(englishPerson.getAge(), frenchPerson.getAge());
+
+ }
+
+ @Test
+ public void givenBothDifferentAndSameFieldNames_whenFailsToMapSameNameFieldAutomatically_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class)
+ .field("nom", "name").field("surnom", "nickname").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+ assertFalse(englishPerson.getAge() == frenchPerson.getAge());
+
+ }
+
+ @Test
+ public void givenBothDifferentAndSameFieldNames_whenMapsSameNameFieldByDefault_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class)
+ .field("nom", "name").field("surnom", "nickname").byDefault()
+ .register();
+
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+ assertEquals(englishPerson.getName(), frenchPerson.getNom());
+ assertEquals(englishPerson.getNickname(), frenchPerson.getSurnom());
+ assertEquals(englishPerson.getAge(), frenchPerson.getAge());
+
+ }
+
+ @Test
+ public void givenUnidirectionalMappingSetup_whenMapsUnidirectionally_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class)
+ .fieldAToB("nom", "name").fieldAToB("surnom", "nickname")
+ .fieldAToB("age", "age").register();
+ ;
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+ assertEquals(englishPerson.getName(), frenchPerson.getNom());
+ assertEquals(englishPerson.getNickname(), frenchPerson.getSurnom());
+ assertEquals(englishPerson.getAge(), frenchPerson.getAge());
+
+ }
+
+
+ @Test
+ public void givenSrcAndDest_whenCanExcludeField_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class).exclude("nom")
+ .field("surnom", "nickname").field("age", "age").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+
+ assertEquals(null, englishPerson.getName());
+ assertEquals(englishPerson.getNickname(), frenchPerson.getSurnom());
+ assertEquals(englishPerson.getAge(), frenchPerson.getAge());
+ }
+
+ @Test
+ public void givenSpecificConstructorToUse_whenMaps_thenCorrect() {
+ mapperFactory.classMap(Personne.class, Person.class).constructorB()
+ .field("nom", "name").field("surnom", "nickname")
+ .field("age", "age").register();
+ ;
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Personne frenchPerson = new Personne("Claire", "cla", 25);
+
+ Person englishPerson = mapper.map(frenchPerson, Person.class);
+ assertEquals(englishPerson.getName(), frenchPerson.getNom());
+ assertEquals(englishPerson.getNickname(), frenchPerson.getSurnom());
+ assertEquals(englishPerson.getAge(), frenchPerson.getAge());
+
+ }
+
+ @Test
+ public void givenSrcWithListAndDestWithPrimitiveAttributes_whenMaps_thenCorrect() {
+ mapperFactory.classMap(PersonNameList.class, PersonNameParts.class)
+ .field("nameList[0]", "firstName")
+ .field("nameList[1]", "lastName").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ List nameList = Arrays.asList(new String[]{"Sylvester",
+ "Stallone"});
+ PersonNameList src = new PersonNameList(nameList);
+ PersonNameParts dest = mapper.map(src, PersonNameParts.class);
+ assertEquals(dest.getFirstName(), "Sylvester");
+ assertEquals(dest.getLastName(), "Stallone");
+ }
+
+ @Test
+ public void givenSrcWithArrayAndDestWithPrimitiveAttributes_whenMaps_thenCorrect() {
+ mapperFactory.classMap(PersonNameArray.class, PersonNameParts.class)
+ .field("nameArray[0]", "firstName")
+ .field("nameArray[1]", "lastName").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ String[] nameArray = new String[]{"Vin", "Diesel"};
+ PersonNameArray src = new PersonNameArray(nameArray);
+ PersonNameParts dest = mapper.map(src, PersonNameParts.class);
+ assertEquals(dest.getFirstName(), "Vin");
+ assertEquals(dest.getLastName(), "Diesel");
+ }
+
+ @Test
+ public void givenSrcWithMapAndDestWithPrimitiveAttributes_whenMaps_thenCorrect() {
+ mapperFactory.classMap(PersonNameMap.class, PersonNameParts.class)
+ .field("nameMap['first']", "firstName")
+ .field("nameMap[\"last\"]", "lastName").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Map nameMap = new HashMap<>();
+ nameMap.put("first", "Leornado");
+ nameMap.put("last", "DiCaprio");
+ PersonNameMap src = new PersonNameMap(nameMap);
+ PersonNameParts dest = mapper.map(src, PersonNameParts.class);
+ assertEquals(dest.getFirstName(), "Leornado");
+ assertEquals(dest.getLastName(), "DiCaprio");
+ }
+
+ @Test
+ public void givenSrcWithNestedFields_whenMaps_thenCorrect() {
+ mapperFactory.classMap(PersonContainer.class, PersonNameParts.class)
+ .field("name.firstName", "firstName")
+ .field("name.lastName", "lastName").register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ PersonContainer src = new PersonContainer(new Name("Nick", "Canon"));
+ PersonNameParts dest = mapper.map(src, PersonNameParts.class);
+ assertEquals(dest.getFirstName(), "Nick");
+ assertEquals(dest.getLastName(), "Canon");
+ }
+
+ @Test
+ public void givenSrcWithNullField_whenMapsThenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).byDefault();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source(null, 10);
+ Dest dest = mapper.map(src, Dest.class);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenSrcWithNullAndGlobalConfigForNoNull_whenFailsToMap_ThenCorrect() {
+ MapperFactory mapperFactory = new DefaultMapperFactory.Builder()
+ .mapNulls(false).build();
+ mapperFactory.classMap(Source.class, Dest.class);
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source(null, 10);
+ Dest dest = new Dest("Clinton", 55);
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), "Clinton");
+ }
+
+ @Test
+ public void givenSrcWithNullAndLocalConfigForNoNull_whenFailsToMap_ThenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).field("age", "age")
+ .mapNulls(false).field("name", "name").byDefault().register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source(null, 10);
+ Dest dest = new Dest("Clinton", 55);
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), "Clinton");
+ }
+
+ @Test
+ public void givenDestWithNullReverseMappedToSource_whenMapsByDefault_thenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).byDefault();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Dest src = new Dest(null, 10);
+ Source dest = new Source("Vin", 44);
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), src.getName());
+ }
+
+ @Test
+ public void givenDestWithNullReverseMappedToSourceAndLocalConfigForNoNull_whenFailsToMap_thenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).field("age", "age")
+ .mapNullsInReverse(false).field("name", "name").byDefault()
+ .register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Dest src = new Dest(null, 10);
+ Source dest = new Source("Vin", 44);
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), "Vin");
+ }
+
+ @Test
+ public void givenSrcWithNullAndFieldLevelConfigForNoNull_whenFailsToMap_ThenCorrect() {
+ mapperFactory.classMap(Source.class, Dest.class).field("age", "age")
+ .fieldMap("name", "name").mapNulls(false).add().byDefault()
+ .register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ Source src = new Source(null, 10);
+ Dest dest = new Dest("Clinton", 55);
+ mapper.map(src, dest);
+ assertEquals(dest.getAge(), src.getAge());
+ assertEquals(dest.getName(), "Clinton");
+ }
+
+ @Test
+ public void givenSrcAndDest_whenCustomMapperWorks_thenCorrect() {
+ mapperFactory.classMap(Personne3.class, Person3.class)
+ .customize(customMapper).register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+ long timestamp = new Long("1182882159000");
+ Personne3 personne3 = new Personne3("Leornardo", timestamp);
+ Person3 person3 = mapper.map(personne3, Person3.class);
+
+ String timestampTest = person3.getDtob();
+ // since different timezones will resolve the timestamp to a different
+ // datetime string, it suffices to check only for format rather than
+ // specific date
+ assertTrue(timestampTest.charAt(10) == 'T'
+ && timestampTest.charAt(19) == 'Z');
+ }
+
+ @Test
+ public void givenSrcAndDest_whenCustomMapperWorksBidirectionally_thenCorrect() {
+ mapperFactory.classMap(Personne3.class, Person3.class)
+ .customize(customMapper).register();
+ MapperFacade mapper = mapperFactory.getMapperFacade();
+
+ String dateTime = "2007-06-26T21:22:39Z";
+ long timestamp = new Long("1182882159000");
+ Person3 person3 = new Person3("Leornardo", dateTime);
+ Personne3 personne3 = mapper.map(person3, Personne3.class);
+ long timestampToTest = personne3.getDtob();
+ /*
+ * since different timezones will resolve the datetime to a different
+ * unix timestamp, we must provide a range of tolerance
+ */
+ assertTrue(timestampToTest == timestamp
+ || timestampToTest >= timestamp - GMT_DIFFERENCE
+ || timestampToTest <= timestamp + GMT_DIFFERENCE);
+
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 46e6ef145f..e82b964900 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,6 +83,7 @@
spring-spel
spring-rest
spring-rest-docs
+ spring-cloud-config
spring-security-basic-auth
spring-security-custom-permission
@@ -109,6 +110,7 @@
spring-mvc-velocity
xstream
dozer
+ orika
diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml
index ada02a9965..2c5304dbf3 100644
--- a/spring-boot/pom.xml
+++ b/spring-boot/pom.xml
@@ -1,156 +1,156 @@
- 4.0.0
- com.baeldung
- spring-boot
- 0.0.1-SNAPSHOT
- war
- Spring Boot Actuator
- This is simple boot application for Spring boot actuator test
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ com.baeldung
+ spring-boot
+ 0.0.1-SNAPSHOT
+ war
+ Spring Boot Actuator
+ This is simple boot application for Spring boot actuator test
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 1.4.0.RC1
-
-
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.0.RC1
+
+
-
-
- org.baeldung.boot.DemoApplication
- UTF-8
- 1.8
-
-
+
+
+ org.baeldung.boot.DemoApplication
+ UTF-8
+ 1.8
+ 4.3.1.RELEASE
+
-
-
- org.springframework.boot
- spring-boot-starter-web
-
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
-
- org.springframework.boot
- spring-boot-starter-actuator
-
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
-
- org.springframework.boot
- spring-boot-starter-security
-
+
+ org.springframework.boot
+ spring-boot-starter-security
+
-
- io.dropwizard.metrics
- metrics-core
-
+
+ io.dropwizard.metrics
+ metrics-core
+
-
- com.h2database
- h2
-
+
+ com.h2database
+ h2
+
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
-
- org.springframework.boot
- spring-boot-starter
-
-
- com.jayway.jsonpath
- json-path
- test
-
-
- org.springframework.boot
- spring-boot-starter-mail
-
-
- org.subethamail
- subethasmtp
- 3.1.7
- test
-
-
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.jayway.jsonpath
+ json-path
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+ org.subethamail
+ subethasmtp
+ 3.1.7
+ test
+
+
-
- spring-boot
-
-
- src/main/resources
- true
-
-
+
+ spring-boot
+
+
+ src/main/resources
+ true
+
+
-
+
-
- org.springframework.boot
- spring-boot-maven-plugin
-
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
-
- org.apache.maven.plugins
- maven-war-plugin
-
+
+ org.apache.maven.plugins
+ maven-war-plugin
+
-
+
-
+
-
-
- spring-snapshots
- Spring Snapshots
- https://repo.spring.io/snapshot
-
- true
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
-
-
- spring-snapshots
- Spring Snapshots
- https://repo.spring.io/snapshot
-
- true
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/Application.java b/spring-boot/src/main/java/org/baeldung/session/exception/Application.java
new file mode 100644
index 0000000000..23d741b98c
--- /dev/null
+++ b/spring-boot/src/main/java/org/baeldung/session/exception/Application.java
@@ -0,0 +1,23 @@
+package org.baeldung.session.exception;
+
+import org.baeldung.boot.model.Foo;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;
+
+@EntityScan(basePackageClasses = Foo.class)
+@SpringBootApplication
+public class Application {
+ public static void main(String[] args) {
+ System.setProperty("spring.config.name", "exception");
+ System.setProperty("spring.profiles.active", "exception");
+ SpringApplication.run(Application.class, args);
+ }
+
+ @Bean
+ public HibernateJpaSessionFactoryBean sessionFactory() {
+ return new HibernateJpaSessionFactoryBean();
+ }
+}
diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java b/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java
new file mode 100644
index 0000000000..679d691b26
--- /dev/null
+++ b/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java
@@ -0,0 +1,10 @@
+package org.baeldung.session.exception.repository;
+
+import org.baeldung.boot.model.Foo;
+
+public interface FooRepository {
+
+ void save(Foo foo);
+
+ Foo get(Integer id);
+}
diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java b/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java
new file mode 100644
index 0000000000..83de888e5e
--- /dev/null
+++ b/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java
@@ -0,0 +1,25 @@
+package org.baeldung.session.exception.repository;
+
+import org.baeldung.boot.model.Foo;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Repository;
+
+@Profile("exception")
+@Repository
+public class FooRepositoryImpl implements FooRepository {
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @Override
+ public void save(Foo foo) {
+ sessionFactory.getCurrentSession().saveOrUpdate(foo);
+ }
+
+ @Override
+ public Foo get(Integer id) {
+ return sessionFactory.getCurrentSession().get(Foo.class, id);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java b/spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java
new file mode 100644
index 0000000000..7911465048
--- /dev/null
+++ b/spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java
@@ -0,0 +1,17 @@
+package org.baeldung.boot;
+
+import org.baeldung.session.exception.Application;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = Application.class)
+@TestPropertySource("classpath:exception.properties")
+public class ApplicationTests {
+ @Test
+ public void contextLoads() {
+ }
+}
diff --git a/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java b/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java
index 41c5a545cc..7f9b2ba912 100644
--- a/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java
+++ b/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java
@@ -2,12 +2,12 @@ package org.baeldung.boot;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = DemoApplication.class)
+@SpringBootTest(classes = DemoApplication.class)
@WebAppConfiguration
public class DemoApplicationTests {
diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java b/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java
new file mode 100644
index 0000000000..4cb1b60cde
--- /dev/null
+++ b/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java
@@ -0,0 +1,32 @@
+package org.baeldung.boot.repository;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+import org.baeldung.boot.ApplicationTests;
+import org.baeldung.boot.model.Foo;
+import org.baeldung.session.exception.repository.FooRepository;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@TestPropertySource("classpath:exception-hibernate.properties")
+public class HibernateSessionTest extends ApplicationTests {
+ @Autowired
+ private FooRepository fooRepository;
+
+ @Test
+ public void whenSavingWithCurrentSession_thenThrowNoException() {
+ Foo foo = new Foo("Exception Solved");
+ fooRepository.save(foo);
+ foo = null;
+ foo = fooRepository.get(1);
+
+ assertThat(foo, notNullValue());
+ assertThat(foo.getId(), is(1));
+ assertThat(foo.getName(), is("Exception Solved"));
+ }
+}
diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java b/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java
new file mode 100644
index 0000000000..5f5a49841a
--- /dev/null
+++ b/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java
@@ -0,0 +1,21 @@
+package org.baeldung.boot.repository;
+
+import org.baeldung.boot.ApplicationTests;
+import org.baeldung.boot.model.Foo;
+import org.baeldung.session.exception.repository.FooRepository;
+import org.hibernate.HibernateException;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class NoHibernateSessionTest extends ApplicationTests {
+ @Autowired
+ private FooRepository fooRepository;
+
+ @Test(expected = HibernateException.class)
+ public void whenSavingWithoutCurrentSession_thenThrowException() {
+ Foo foo = new Foo("Exception Thrown");
+ fooRepository.save(foo);
+ }
+}
diff --git a/spring-boot/src/test/resources/exception-hibernate.properties b/spring-boot/src/test/resources/exception-hibernate.properties
new file mode 100644
index 0000000000..cde746acb9
--- /dev/null
+++ b/spring-boot/src/test/resources/exception-hibernate.properties
@@ -0,0 +1,2 @@
+spring.profiles.active=exception
+spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
diff --git a/spring-boot/src/test/resources/exception.properties b/spring-boot/src/test/resources/exception.properties
new file mode 100644
index 0000000000..c55e415a3a
--- /dev/null
+++ b/spring-boot/src/test/resources/exception.properties
@@ -0,0 +1,6 @@
+# Security
+security.user.name=admin
+security.user.password=password
+
+spring.dao.exceptiontranslation.enabled=false
+spring.profiles.active=exception
\ No newline at end of file
diff --git a/spring-cloud-config/client-config/config-client-development.properties b/spring-cloud-config/client-config/config-client-development.properties
new file mode 100644
index 0000000000..6401d1be7f
--- /dev/null
+++ b/spring-cloud-config/client-config/config-client-development.properties
@@ -0,0 +1,2 @@
+user.role=Developer
+user.password=pass
diff --git a/spring-cloud-config/client-config/config-client-production.properties b/spring-cloud-config/client-config/config-client-production.properties
new file mode 100644
index 0000000000..cd2e14fcc3
--- /dev/null
+++ b/spring-cloud-config/client-config/config-client-production.properties
@@ -0,0 +1 @@
+user.role=User
diff --git a/spring-cloud-config/client/pom.xml b/spring-cloud-config/client/pom.xml
index 46212e1e89..0ef4b35581 100644
--- a/spring-cloud-config/client/pom.xml
+++ b/spring-cloud-config/client/pom.xml
@@ -1,80 +1,79 @@
-
- 4.0.0
+
+ 4.0.0
-
- com.baeldung.spring.cloud
- spring-cloud-config
- 0.0.1-SNAPSHOT
-
- client
- jar
+
+ com.baeldung.spring.cloud
+ spring-cloud-config
+ 0.0.1-SNAPSHOT
+
+ client
+ jar
- client
- Demo project for Spring Cloud Config Client
+ client
+ Demo project for Spring Cloud Config Client
-
- UTF-8
- UTF-8
- 1.8
-
+
+ UTF-8
+ UTF-8
+ 1.8
+
-
-
- org.springframework.cloud
- spring-cloud-starter-config
-
-
- org.springframework.boot
- spring-boot-starter-web
-
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- Brixton.BUILD-SNAPSHOT
- pom
- import
-
-
-
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
-
- spring-snapshots
- Spring Snapshots
- https://repo.spring.io/snapshot
-
- true
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
diff --git a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java
index 74ed41728f..1dd3bbdab0 100644
--- a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java
+++ b/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java
@@ -12,22 +12,17 @@ import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class ConfigClient {
-
@Value("${user.role}")
private String role;
@Value("${user.password}")
private String password;
- public static void main(String[] args) {
- SpringApplication.run(ConfigClient.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(ConfigClient.class, args);
+ }
- @RequestMapping(
- value = "/whoami/{username}",
- method = RequestMethod.GET,
- produces = MediaType.TEXT_PLAIN_VALUE
- )
+ @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
public String whoami(@PathVariable("username") String username) {
return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password);
}
diff --git a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientTests.java b/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java
similarity index 79%
rename from spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientTests.java
rename to spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java
index c0badeaf61..058fd45f35 100644
--- a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientTests.java
+++ b/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java
@@ -1,5 +1,6 @@
package com.baeldung.spring.cloud.config.client;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
@@ -9,10 +10,8 @@ import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ConfigClient.class)
@WebAppConfiguration
-public class ConfigClientTests {
-
- @Test
- public void contextLoads() {
- }
-
+public class ConfigClientLiveTest {
+ @Test
+ public void contextLoads() {
+ }
}
diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml
index 1185fae5d7..8e0e4b8706 100644
--- a/spring-cloud-config/pom.xml
+++ b/spring-cloud-config/pom.xml
@@ -1,7 +1,6 @@
-
+
4.0.0
com.baeldung.spring.cloud
@@ -14,4 +13,30 @@
client
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.3.5.RELEASE
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ **/*LiveTest.java
+
+
+
+
+
+
+
+
+ 1.3.5.RELEASE
+ 2.19.1
+
diff --git a/spring-cloud-config/server/pom.xml b/spring-cloud-config/server/pom.xml
index 897a33028f..c3f68854bb 100644
--- a/spring-cloud-config/server/pom.xml
+++ b/spring-cloud-config/server/pom.xml
@@ -1,83 +1,82 @@
-
- 4.0.0
+
+ 4.0.0
-
- com.baeldung.spring.cloud
- spring-cloud-config
- 0.0.1-SNAPSHOT
-
- server
+
+ com.baeldung.spring.cloud
+ spring-cloud-config
+ 0.0.1-SNAPSHOT
+
+ server
- server
- Demo project for Spring Cloud Config Server
+ server
+ Demo project for Spring Cloud Config Server
-
- UTF-8
- UTF-8
- 1.8
-
+
+ UTF-8
+ UTF-8
+ 1.8
+
-
-
- org.springframework.cloud
- spring-cloud-config-server
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-web
-
+
+
+ org.springframework.cloud
+ spring-cloud-config-server
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- Brixton.BUILD-SNAPSHOT
- pom
- import
-
-
-
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
-
- spring-snapshots
- Spring Snapshots
- https://repo.spring.io/snapshot
-
- true
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ true
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
diff --git a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java b/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java
index 7010632eaa..4dd34ae3ff 100644
--- a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java
+++ b/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java
@@ -9,8 +9,7 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
@EnableConfigServer
@EnableWebSecurity
public class ConfigServer {
-
- public static void main(String[] args) {
- SpringApplication.run(ConfigServer.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(ConfigServer.class, args);
+ }
}
diff --git a/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud-config/server/src/main/resources/application.properties
index 46b3bf8089..2131f3b249 100644
--- a/spring-cloud-config/server/src/main/resources/application.properties
+++ b/spring-cloud-config/server/src/main/resources/application.properties
@@ -1,6 +1,6 @@
server.port=8888
-spring.cloud.config.server.git.uri=${CONFIG_REPO}
-spring.cloud.config.server.git.clone-on-start=true
+spring.cloud.config.server.git.uri=https://github.com/eugenp/tutorials/tree/master/spring-cloud-config/client-config
+spring.cloud.config.server.git.clone-on-start=false
security.user.name=root
security.user.password=s3cr3t
encrypt.key-store.location=classpath:/config-server.jks
diff --git a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerTests.java b/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java
similarity index 78%
rename from spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerTests.java
rename to spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java
index 8ae78fcd1c..306c120e43 100644
--- a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerTests.java
+++ b/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java
@@ -1,5 +1,6 @@
package com.baeldung.spring.cloud.config.server;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
@@ -9,10 +10,9 @@ import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ConfigServer.class)
@WebAppConfiguration
-public class ConfigServerTests {
-
- @Test
- public void contextLoads() {
- }
-
+@Ignore
+public class ConfigServerListTest {
+ @Test
+ public void contextLoads() {
+ }
}
diff --git a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java
index ecb8909de9..60548dd6e3 100644
--- a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java
+++ b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java
@@ -4,6 +4,8 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class SpringDemoApplication extends SpringBootServletInitializer {
@@ -16,4 +18,9 @@ public class SpringDemoApplication extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringDemoApplication.class);
}
+
+ @Bean
+ public RestTemplate getRestTemplate(){
+ return new RestTemplate();
+ }
}
diff --git a/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java b/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java
index e37b203c07..34efff63fb 100644
--- a/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java
+++ b/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.SpringApplicationContextLoader;
import org.springframework.http.HttpMethod;
@@ -21,7 +22,8 @@ import org.springframework.web.client.RestTemplate;
public class SpringIntegrationTest {
protected static ResponseResults latestResponse = null;
- protected RestTemplate restTemplate = null;
+ @Autowired
+ protected RestTemplate restTemplate;
protected void executeGet(String url) throws IOException {
final Map headers = new HashMap<>();
@@ -29,10 +31,6 @@ public class SpringIntegrationTest {
final HeaderSettingRequestCallback requestCallback = new HeaderSettingRequestCallback(headers);
final ResponseResultErrorHandler errorHandler = new ResponseResultErrorHandler();
- if (restTemplate == null) {
- restTemplate = new RestTemplate();
- }
-
restTemplate.setErrorHandler(errorHandler);
latestResponse = restTemplate.execute(url, HttpMethod.GET, requestCallback, new ResponseExtractor() {
@Override
diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml
index 9ed3285018..733a721c58 100644
--- a/spring-exceptions/pom.xml
+++ b/spring-exceptions/pom.xml
@@ -229,8 +229,8 @@
- 4.2.5.RELEASE
- 4.0.4.RELEASE
+ 4.3.2.RELEASE
+ 4.1.1.RELEASE
3.20.0-GA
1.2
diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CleanupFailureExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CleanupFailureExceptionTest.java
index eea9289757..32897e9e35 100644
--- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CleanupFailureExceptionTest.java
+++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CleanupFailureExceptionTest.java
@@ -1,5 +1,8 @@
package org.baeldung.ex.nontransientdataaccessexception;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import org.baeldung.ex.nontransientexception.cause.Cause1NonTransientConfig;
import org.baeldung.persistence.model.Foo;
import org.baeldung.persistence.service.IFooService;
@@ -12,15 +15,12 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class)
public class CleanupFailureExceptionTest {
- private static final Logger LOG = Logger.getLogger(CleanupFailureExceptionTest.class.getName());
-
+ private static final Logger LOG = Logger.getLogger(CleanupFailureExceptionTest.class.getName());
+
@Autowired
private SessionFactory sessionFactory;
diff --git a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java
new file mode 100644
index 0000000000..d5cd6e1eae
--- /dev/null
+++ b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java
@@ -0,0 +1,53 @@
+package org.baeldung.config;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import org.baeldung.config.converter.KryoHttpMessageConverter;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter;
+import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
+import org.springframework.oxm.xstream.XStreamMarshaller;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan({ "org.baeldung.web" })
+public class WebConfig extends WebMvcConfigurerAdapter {
+
+ public WebConfig() {
+ super();
+ }
+
+ //
+
+ @Override
+ public void configureMessageConverters(final List> messageConverters) {
+ messageConverters.add(createXmlHttpMessageConverter());
+ // messageConverters.add(new MappingJackson2HttpMessageConverter());
+
+ final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
+ builder.indentOutput(true).dateFormat(new SimpleDateFormat("dd-MM-yyyy hh:mm"));
+ messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build()));
+ // messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
+ messageConverters.add(new ProtobufHttpMessageConverter());
+ messageConverters.add(new KryoHttpMessageConverter());
+ super.configureMessageConverters(messageConverters);
+ }
+
+ private HttpMessageConverter