You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2018/12/02 16:07:25 UTC

johnzon git commit: JOHNZON-196 support of LocalTime in JSON-B

Repository: johnzon
Updated Branches:
  refs/heads/master 2893743f2 -> a7c03892d


JOHNZON-196 support of LocalTime in JSON-B


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/a7c03892
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/a7c03892
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/a7c03892

Branch: refs/heads/master
Commit: a7c03892d75e42756afdb08ccf14e2a98f3d1308
Parents: 2893743
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun Dec 2 17:07:16 2018 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sun Dec 2 17:07:16 2018 +0100

----------------------------------------------------------------------
 .../apache/johnzon/jsonb/JohnzonBuilder.java    | 111 +++++++++++--------
 .../apache/johnzon/jsonb/JsonbTypesTest.java    |  48 +++++---
 2 files changed, 95 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/a7c03892/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
index 495e7b7..50be3ed 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java
@@ -18,40 +18,19 @@
  */
 package org.apache.johnzon.jsonb;
 
-import org.apache.johnzon.core.AbstractJsonFactory;
-import org.apache.johnzon.core.JsonGeneratorFactoryImpl;
-import org.apache.johnzon.core.JsonParserFactoryImpl;
-import org.apache.johnzon.jsonb.cdi.CDIs;
-import org.apache.johnzon.jsonb.converter.JohnzonJsonbAdapter;
-import org.apache.johnzon.jsonb.factory.SimpleJohnzonAdapterFactory;
-import org.apache.johnzon.jsonb.serializer.JohnzonDeserializationContext;
-import org.apache.johnzon.jsonb.serializer.JohnzonSerializationContext;
-import org.apache.johnzon.jsonb.spi.JohnzonAdapterFactory;
-import org.apache.johnzon.mapper.Adapter;
-import org.apache.johnzon.mapper.Converter;
-import org.apache.johnzon.mapper.Mapper;
-import org.apache.johnzon.mapper.MapperBuilder;
-import org.apache.johnzon.mapper.ObjectConverter;
-import org.apache.johnzon.mapper.SerializeValueFilter;
-import org.apache.johnzon.mapper.access.AccessMode;
-import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode;
-import org.apache.johnzon.mapper.internal.AdapterKey;
-import org.apache.johnzon.mapper.internal.ConverterAdapter;
+import static java.time.format.DateTimeFormatter.ofPattern;
+import static java.time.temporal.ChronoField.DAY_OF_MONTH;
+import static java.time.temporal.ChronoField.HOUR_OF_DAY;
+import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
+import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
+import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
+import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
+import static java.time.temporal.ChronoField.YEAR;
+import static java.util.Collections.emptyMap;
+import static java.util.Optional.ofNullable;
+import static javax.json.bind.config.PropertyNamingStrategy.IDENTITY;
+import static javax.json.bind.config.PropertyOrderStrategy.LEXICOGRAPHICAL;
 
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.json.bind.JsonbConfig;
-import javax.json.bind.adapter.JsonbAdapter;
-import javax.json.bind.annotation.JsonbProperty;
-import javax.json.bind.annotation.JsonbVisibility;
-import javax.json.bind.config.BinaryDataStrategy;
-import javax.json.bind.config.PropertyNamingStrategy;
-import javax.json.bind.config.PropertyVisibilityStrategy;
-import javax.json.bind.serializer.JsonbDeserializer;
-import javax.json.bind.serializer.JsonbSerializer;
-import javax.json.spi.JsonProvider;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonParserFactory;
 import java.io.Closeable;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -64,6 +43,7 @@ import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.OffsetDateTime;
 import java.time.OffsetTime;
 import java.time.Period;
@@ -72,6 +52,8 @@ import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
+import java.time.temporal.TemporalAccessor;
+import java.time.temporal.TemporalQueries;
 import java.util.Base64;
 import java.util.Calendar;
 import java.util.Comparator;
@@ -80,31 +62,51 @@ import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.SimpleTimeZone;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 import java.util.stream.Stream;
 
-import static java.time.format.DateTimeFormatter.ofPattern;
-import static java.time.temporal.ChronoField.DAY_OF_MONTH;
-import static java.time.temporal.ChronoField.HOUR_OF_DAY;
-import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
-import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
-import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
-import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
-import static java.time.temporal.ChronoField.YEAR;
-import java.time.temporal.TemporalAccessor;
-import java.time.temporal.TemporalQueries;
-import static java.util.Collections.emptyMap;
-import java.util.Objects;
-import static java.util.Optional.ofNullable;
-import java.util.concurrent.TimeUnit;
-import static javax.json.bind.config.PropertyNamingStrategy.IDENTITY;
-import static javax.json.bind.config.PropertyOrderStrategy.LEXICOGRAPHICAL;
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.adapter.JsonbAdapter;
+import javax.json.bind.annotation.JsonbProperty;
+import javax.json.bind.annotation.JsonbVisibility;
+import javax.json.bind.config.BinaryDataStrategy;
+import javax.json.bind.config.PropertyNamingStrategy;
+import javax.json.bind.config.PropertyVisibilityStrategy;
+import javax.json.bind.serializer.JsonbDeserializer;
+import javax.json.bind.serializer.JsonbSerializer;
+import javax.json.spi.JsonProvider;
+import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonParserFactory;
+
+import org.apache.johnzon.core.AbstractJsonFactory;
+import org.apache.johnzon.core.JsonGeneratorFactoryImpl;
+import org.apache.johnzon.core.JsonParserFactoryImpl;
+import org.apache.johnzon.jsonb.cdi.CDIs;
+import org.apache.johnzon.jsonb.converter.JohnzonJsonbAdapter;
+import org.apache.johnzon.jsonb.factory.SimpleJohnzonAdapterFactory;
+import org.apache.johnzon.jsonb.serializer.JohnzonDeserializationContext;
+import org.apache.johnzon.jsonb.serializer.JohnzonSerializationContext;
+import org.apache.johnzon.jsonb.spi.JohnzonAdapterFactory;
+import org.apache.johnzon.mapper.Adapter;
+import org.apache.johnzon.mapper.Converter;
+import org.apache.johnzon.mapper.Mapper;
+import org.apache.johnzon.mapper.MapperBuilder;
+import org.apache.johnzon.mapper.ObjectConverter;
+import org.apache.johnzon.mapper.SerializeValueFilter;
+import org.apache.johnzon.mapper.access.AccessMode;
+import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode;
+import org.apache.johnzon.mapper.internal.AdapterKey;
+import org.apache.johnzon.mapper.internal.ConverterAdapter;
 
 public class JohnzonBuilder implements JsonbBuilder {
     private static final Object NO_BM = new Object();
@@ -586,6 +588,17 @@ public class JohnzonBuilder implements JsonbBuilder {
                 return LocalDate.parse(text);
             }
         }));
+        converters.put(new AdapterKey(LocalTime.class, String.class), new ConverterAdapter<>(new Converter<LocalTime>() {
+            @Override
+            public String toString(final LocalTime instance) {
+                return instance.toString();
+            }
+
+            @Override
+            public LocalTime fromString(final String text) {
+                return LocalTime.parse(text);
+            }
+        }));
         converters.put(new AdapterKey(LocalDateTime.class, String.class), new ConverterAdapter<>(new Converter<LocalDateTime>() {
             @Override
             public String toString(final LocalDateTime instance) {

http://git-wip-us.apache.org/repos/asf/johnzon/blob/a7c03892/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbTypesTest.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbTypesTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbTypesTest.java
index ad5b6d2..d6d7817 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbTypesTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbTypesTest.java
@@ -18,11 +18,8 @@
  */
 package org.apache.johnzon.jsonb;
 
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
 
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbConfig;
-import javax.json.bind.spi.JsonbProvider;
 import java.io.StringReader;
 import java.net.URI;
 import java.net.URL;
@@ -30,6 +27,7 @@ import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.OffsetDateTime;
 import java.time.OffsetTime;
 import java.time.Period;
@@ -51,27 +49,33 @@ import java.util.OptionalLong;
 import java.util.SimpleTimeZone;
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
-import org.apache.cxf.common.util.StringUtils;
 
-import static org.junit.Assert.assertEquals;
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.spi.JsonbProvider;
+
+import org.apache.cxf.common.util.StringUtils;
+import org.junit.Test;
 
 public class JsonbTypesTest {
     @Test
-    public void readAndWrite() {
+    public void readAndWrite() throws Exception {
         final LocalDate localDate = LocalDate.of(2015, 1, 1);
+        final LocalTime localTime = LocalTime.of(1, 2, 3);
         final LocalDateTime localDateTime = LocalDateTime.of(2015, 1, 1, 1, 1);
         final String dateTime = localDateTime.toString();
         final ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));
         final String expected = "{" +
-            "\"calendar\":\"" + zonedDateTime.toString() + "\"," +
-            "\"date\":\"" + localDateTime.toString() + "\"," +
+            "\"calendar\":\"" + zonedDateTime + "\"," +
+            "\"date\":\"" + localDateTime + "\"," +
             "\"duration\":\"PT30S\"," +
             "\"gregorianCalendar\":\"" + zonedDateTime.toString() + "\"," +
-            "\"instant\":\"" + Instant.ofEpochMilli(TimeUnit.DAYS.toMillis(localDate.toEpochDay())).toString() + "\"," +
-            "\"localDate\":\"" + localDate.toString() + "\"," +
+            "\"instant\":\"" + Instant.ofEpochMilli(TimeUnit.DAYS.toMillis(localDate.toEpochDay())) + "\"," +
+            "\"localDate\":\"" + localDate + "\"," +
             "\"localDateTime\":\"" + dateTime + "\"," +
-            "\"offsetDateTime\":\"" + OffsetDateTime.of(localDateTime, ZoneOffset.UTC).toString() + "\"," +
-            "\"offsetTime\":\"" + OffsetTime.of(localDateTime.toLocalTime(), ZoneOffset.UTC).toString() + "\"," +
+            "\"localTime\":\"" + localTime + "\"," +
+            "\"offsetDateTime\":\"" + OffsetDateTime.of(localDateTime, ZoneOffset.UTC) + "\"," +
+            "\"offsetTime\":\"" + OffsetTime.of(localDateTime.toLocalTime(), ZoneOffset.UTC) + "\"," +
             "\"optionalDouble\":3.4," +
             "\"optionalInt\":1," +
             "\"optionalLong\":2," +
@@ -97,6 +101,7 @@ public class JsonbTypesTest {
         assertEquals(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli(), types.date.getTime());
         assertEquals(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli(), types.calendar.getTime().getTime());
         assertEquals(localDateTime, types.localDateTime);
+        assertEquals(localTime, types.localTime);
         assertEquals(localDate, types.localDate);
         assertEquals(OffsetDateTime.of(localDateTime, ZoneOffset.UTC), types.offsetDateTime);
         assertEquals(OffsetTime.of(localDateTime.toLocalTime(), ZoneOffset.UTC), types.offsetTime);
@@ -110,16 +115,18 @@ public class JsonbTypesTest {
         assertEquals(Period.of(0, 1, 10), types.period);
 
         assertEquals(expected, jsonb.toJson(types));
+
+        jsonb.close();
     }
 
     @Test
-    public void readAndWriteWithDateFormats() {
+    public void readAndWriteWithDateFormats() throws Exception {
         readAndWriteWithDateFormat(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"), "yyyy-MM-dd'T'HH:mm:ss.SSSZ");
         readAndWriteWithDateFormat(DateTimeFormatter.ofPattern("yyyyMMdd+HHmmssZ"), "yyyyMMdd+HHmmssZ");
         readAndWriteWithDateFormat(DateTimeFormatter.ofPattern("yyyy-MM-dd"), "yyyy-MM-dd");
     }
     
-    private void readAndWriteWithDateFormat(DateTimeFormatter dateTimeFormatter, String dateFormat) {
+    private void readAndWriteWithDateFormat(DateTimeFormatter dateTimeFormatter, String dateFormat) throws Exception {
         final LocalDate localDate = LocalDate.of(2015, 1, 1);
         final LocalDateTime localDateTime = LocalDateTime.of(2015, 1, 1, 1, 1);
         final ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));
@@ -138,6 +145,8 @@ public class JsonbTypesTest {
         final DateTypes types = jsonb.fromJson(new StringReader(expected), DateTypes.class);
         assertEquals(localDate, types.localDate);
         assertEquals(expected, jsonb.toJson(types));
+
+        jsonb.close();
     }
     
     private static Jsonb newJsonb() {
@@ -175,10 +184,19 @@ public class JsonbTypesTest {
         private Duration duration;
         private Period period;
         private LocalDateTime localDateTime;
+        private LocalTime localTime;
         private LocalDate localDate;
         private OffsetDateTime offsetDateTime;
         private OffsetTime offsetTime;
 
+        public LocalTime getLocalTime() {
+            return localTime;
+        }
+
+        public void setLocalTime(final LocalTime localTime) {
+            this.localTime = localTime;
+        }
+
         public URL getUrl() {
             return url;
         }