diff --git a/jaxb/book.xml b/jaxb/book.xml
new file mode 100644
index 0000000000..605d531b16
--- /dev/null
+++ b/jaxb/book.xml
@@ -0,0 +1,5 @@
+
+
+ Book1
+ 2016-12-16T17:28:49.718Z
+
diff --git a/jaxb/pom.xml b/jaxb/pom.xml
index 6c36956913..115a632d7b 100644
--- a/jaxb/pom.xml
+++ b/jaxb/pom.xml
@@ -23,7 +23,13 @@
com.sun.istack
istack-commons-runtime
- ${istack.version}
+ 3.0.2
+
+
+
+ commons-io
+ commons-io
+ 2.5
@@ -43,7 +49,18 @@
logback-core
${logback.version}
-
+
+
+ junit
+ junit
+ ${junit.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.5
+
@@ -60,7 +77,7 @@
org.eclipse.m2e
lifecycle-mapping
- ${lifecycle-mapping.version}
+ 1.0.0
@@ -158,16 +175,14 @@
2.2.11
- 3.0.2
-
1.7.21
1.1.7
- 1.0.0
- 3.6.0
+ 3.5.1
2.3
+ 4.12
-
\ No newline at end of file
+
diff --git a/jaxb/sample_book.xml b/jaxb/sample_book.xml
new file mode 100644
index 0000000000..605d531b16
--- /dev/null
+++ b/jaxb/sample_book.xml
@@ -0,0 +1,5 @@
+
+
+ Book1
+ 2016-12-16T17:28:49.718Z
+
diff --git a/jaxb/src/main/java/com/baeldung/jaxb/Book.java b/jaxb/src/main/java/com/baeldung/jaxb/Book.java
index 8455d3e6df..b7a5d39ce5 100644
--- a/jaxb/src/main/java/com/baeldung/jaxb/Book.java
+++ b/jaxb/src/main/java/com/baeldung/jaxb/Book.java
@@ -8,6 +8,10 @@ import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
@XmlRootElement(name = "book")
@XmlType(propOrder = { "id", "name", "date" })
public class Book {
@@ -53,6 +57,17 @@ public class Book {
@Override
public String toString() {
- return "Book [id=" + id + ", name=" + name + ", author=" + author + ", date=" + date + "]";
+ return ToStringBuilder.reflectionToString(this);
}
+
+ @Override
+ public boolean equals(Object obj) {
+ return EqualsBuilder.reflectionEquals(this, obj);
+ }
+
+ @Override
+ public int hashCode() {
+ return HashCodeBuilder.reflectionHashCode(this);
+ }
+
}
diff --git a/jaxb/src/main/java/com/baeldung/jaxb/Main.java b/jaxb/src/main/java/com/baeldung/jaxb/Main.java
index aaf062dd4e..46adfb3c60 100644
--- a/jaxb/src/main/java/com/baeldung/jaxb/Main.java
+++ b/jaxb/src/main/java/com/baeldung/jaxb/Main.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
+import java.util.TimeZone;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -16,7 +17,8 @@ public class Main {
book.setId(1L);
book.setName("Book1");
book.setAuthor("Author1");
- book.setDate(new Date());
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ book.setDate(new Date(1481909329718L));
JAXBContext context = JAXBContext.newInstance(Book.class);
Marshaller marshaller = context.createMarshaller();
diff --git a/jaxb/src/test/java/com/baeldung/jaxb/test/JaxbTest.java b/jaxb/src/test/java/com/baeldung/jaxb/test/JaxbTest.java
new file mode 100644
index 0000000000..daf3864436
--- /dev/null
+++ b/jaxb/src/test/java/com/baeldung/jaxb/test/JaxbTest.java
@@ -0,0 +1,54 @@
+package com.baeldung.jaxb.test;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Date;
+import java.util.TimeZone;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import com.baeldung.jaxb.Book;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class JaxbTest {
+ Book book;
+ JAXBContext context;
+
+ @Before
+ public void before() throws JAXBException {
+ book = new Book();
+ book.setId(1L);
+ book.setName("Book1");
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ book.setDate(new Date(1481909329718L));
+ context = JAXBContext.newInstance(Book.class);
+ }
+
+ @Test
+ public void marshal() throws JAXBException, IOException {
+ Marshaller marshaller = context.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ marshaller.marshal(book, new File("./book.xml"));
+ String sampleBookXML = FileUtils.readFileToString(new File("./sample_book.xml"), "UTF-8");
+ String marshallerBookXML = FileUtils.readFileToString(new File("./book.xml"), "UTF-8");
+ Assert.assertEquals(sampleBookXML, marshallerBookXML);
+ }
+
+ @Test
+ public void unMashal() throws JAXBException, IOException {
+ Unmarshaller unmarshaller = context.createUnmarshaller();
+ Book unMarshallerbook = (Book) unmarshaller.unmarshal(new FileReader("./book.xml"));
+ Assert.assertEquals(book, unMarshallerbook);
+ }
+}