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;
}