From 156c82a8ae2f16f9bea5394d7561c07353fc9fba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Thu, 29 Apr 2021 06:11:30 +0200
Subject: [PATCH] Support for LocalDate

---
 pom.xml                                       |  9 +++++--
 src/main/java/java2/lab12/client/Course.java  |  6 +++++
 .../java2/lab12/client/TableViewSample.java   | 16 ++++++++++--
 src/main/java/java2/lab12/server/Course.java  |  6 +++++
 .../server/JacksonObjectMapperCustomizer.java | 16 ++++++++++++
 .../server/ObjectMapperConfiguration.java     | 26 +++++++++++++++++++
 6 files changed, 75 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/java2/lab12/server/JacksonObjectMapperCustomizer.java
 create mode 100644 src/main/java/java2/lab12/server/ObjectMapperConfiguration.java

diff --git a/pom.xml b/pom.xml
index b3cfb86..b4100e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
 		</dependency>
 		<dependency>
 			<groupId>io.quarkus</groupId>
-			<artifactId>quarkus-resteasy-jsonb</artifactId>
+			<artifactId>quarkus-resteasy-jackson</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>io.quarkus</groupId>
@@ -85,7 +85,8 @@
 		<dependency>
 			<groupId>io.quarkus</groupId>
 			<artifactId>quarkus-config-yaml</artifactId>
-		</dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
 		<dependency>
 			<groupId>org.projectlombok</groupId>
 			<artifactId>lombok</artifactId>
@@ -110,6 +111,10 @@
 		    <artifactId>cxf-rt-rs-client</artifactId>
 		    <version>3.4.3</version>
 		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.datatype</groupId>
+			<artifactId>jackson-datatype-jsr310</artifactId>
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/java2/lab12/client/Course.java b/src/main/java/java2/lab12/client/Course.java
index 80e7c76..641703f 100644
--- a/src/main/java/java2/lab12/client/Course.java
+++ b/src/main/java/java2/lab12/client/Course.java
@@ -1,5 +1,7 @@
 package java2.lab12.client;
 
+import java.time.LocalDate;
+
 import javax.xml.bind.annotation.XmlRootElement;
 
 import lombok.Getter;
@@ -29,4 +31,8 @@ public class Course {
 	@Getter
 	@Setter
 	private String semester;
+
+	@Getter
+	@Setter
+	private LocalDate startDate;
 }
diff --git a/src/main/java/java2/lab12/client/TableViewSample.java b/src/main/java/java2/lab12/client/TableViewSample.java
index 10d266f..9e1bfbe 100644
--- a/src/main/java/java2/lab12/client/TableViewSample.java
+++ b/src/main/java/java2/lab12/client/TableViewSample.java
@@ -1,8 +1,14 @@
 package java2.lab12.client;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+
+import java.time.LocalDate;
 import java.util.Collection;
 import java.util.Collections;
 
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+
 import javafx.application.Application;
 import javafx.beans.property.ReadOnlyObjectWrapper;
 import javafx.collections.FXCollections;
@@ -26,7 +32,9 @@ import javafx.scene.layout.VBox;
 import javafx.scene.text.Font;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
- 
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
 public class TableViewSample extends Application {
  
 	
@@ -194,6 +202,7 @@ public class TableViewSample extends Application {
 	}
 
 	private void createCourse(Course course) {
+		course.setStartDate(LocalDate.now());
 		long id = getClient().createCourse(course);
 		course.setId(id);
 	}
@@ -207,8 +216,11 @@ public class TableViewSample extends Application {
 	}
 
 	private CourseResourceClient getClient() {
+		ObjectMapper mapper = new ObjectMapper();
+		mapper.findAndRegisterModules();
 		return JAXRSClientFactory.create("http://localhost:8080",
 			CourseResourceClient.class, Collections.singletonList(
-				JacksonJaxbJsonProvider.class));
+				new JacksonJaxbJsonProvider(mapper,
+					JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS)));
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/java2/lab12/server/Course.java b/src/main/java/java2/lab12/server/Course.java
index 237c07d..0ef0f2e 100644
--- a/src/main/java/java2/lab12/server/Course.java
+++ b/src/main/java/java2/lab12/server/Course.java
@@ -1,5 +1,7 @@
 package java2.lab12.server;
 
+import java.time.LocalDate;
+
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
@@ -36,4 +38,8 @@ public class Course {
 	@Getter
 	@Setter
 	private int semester;
+
+	@Getter
+	@Setter
+	private LocalDate startDate;
 }
diff --git a/src/main/java/java2/lab12/server/JacksonObjectMapperCustomizer.java b/src/main/java/java2/lab12/server/JacksonObjectMapperCustomizer.java
new file mode 100644
index 0000000..756fbf0
--- /dev/null
+++ b/src/main/java/java2/lab12/server/JacksonObjectMapperCustomizer.java
@@ -0,0 +1,16 @@
+package java2.lab12.server;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.quarkus.jackson.ObjectMapperCustomizer;
+
+import javax.inject.Singleton;
+
+@Singleton
+public class JacksonObjectMapperCustomizer implements ObjectMapperCustomizer {
+
+	@Override
+	public void customize(ObjectMapper mapper) {
+		mapper.findAndRegisterModules();
+	}
+}
diff --git a/src/main/java/java2/lab12/server/ObjectMapperConfiguration.java b/src/main/java/java2/lab12/server/ObjectMapperConfiguration.java
new file mode 100644
index 0000000..f15fad8
--- /dev/null
+++ b/src/main/java/java2/lab12/server/ObjectMapperConfiguration.java
@@ -0,0 +1,26 @@
+package java2.lab12.server;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.quarkus.jackson.ObjectMapperCustomizer;
+
+import javax.enterprise.inject.Instance;
+import javax.inject.Singleton;
+
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class ObjectMapperConfiguration {
+
+	@Singleton
+	ObjectMapper objectMapper(Instance<ObjectMapperCustomizer> customizers) {
+		// Your own `ObjectMapper` or one provided by another library
+		ObjectMapper mapper = new ObjectMapper();
+		// Apply customizations (includes customizations from Quarkus)
+		for (ObjectMapperCustomizer customizer : customizers) {
+			customizer.customize(mapper);
+		}
+		log.info("mapper {}", mapper);
+		return mapper;
+	}
+}
-- 
GitLab