Loading src/main/java/es/redmic/brokerlib/deserializer/CustomDateTimeDeserializer.java 0 → 100644 +40 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.deserializer; import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import es.redmic.exception.databinding.DateTimeDeserializerException; public class CustomDateTimeDeserializer extends JsonDeserializer<DateTime> { final String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"; @Override public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) { DateTimeFormatter patternFormat = DateTimeFormat.forPattern(pattern); String dateTime; try { dateTime = jp.getText(); } catch (IOException e) { throw new DateTimeDeserializerException(pattern, null, e); } try { return patternFormat.parseDateTime(dateTime).toDateTime(DateTimeZone.UTC); } catch (Exception e) { throw new DateTimeDeserializerException(pattern, dateTime, e); } } } No newline at end of file src/main/java/es/redmic/brokerlib/serializer/CustomDateTimeSerializer.java 0 → 100644 +27 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.serializer; import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import es.redmic.exception.databinding.DateTimeSerializerException; public class CustomDateTimeSerializer extends JsonSerializer<DateTime> { @Override public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) { String format = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"; try { gen.writeString(value.withZone(DateTimeZone.UTC).toString(format)); } catch (IOException e) { throw new DateTimeSerializerException(format, value.toString(), e); } } } src/test/java/es/redmic/brokerlib/deserializer/CustomDateTimeDeserializerTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.deserializer; import static org.junit.Assert.assertEquals; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.BeforeClass; import org.junit.Test; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import es.redmic.exception.databinding.DateTimeDeserializerException; public class CustomDateTimeDeserializerTest { ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.WRAP_EXCEPTIONS, false); static DateTime daylightSavingTimeSummerExpected; static String daylightSavingTimeSummerSource; static DateTime daylightSavingTimeWinterExpected; static String daylightSavingTimeWinterSource; @BeforeClass public static void setUp() { daylightSavingTimeSummerExpected = new DateTime(2017, 3, 26, 0, 0, 0, 0, DateTimeZone.UTC); daylightSavingTimeSummerSource = "2017-03-26T01:00:00.000+01:00"; daylightSavingTimeWinterExpected = new DateTime(2017, 10, 29, 1, 0, 0, 0, DateTimeZone.UTC); daylightSavingTimeWinterSource = "2017-10-29T01:00:00.000+00:00"; } @Test public void checkDaylightSavingTimeSummerDeserializer_IsCorrect_IfFormatIsCorrect() throws Exception { DateTime item = deserialize(daylightSavingTimeSummerSource); assertEquals(item, daylightSavingTimeSummerExpected); } @Test public void checkDaylightSavingTimeWinterDeserializer_IsCorrect_IfFormatIsCorrect() throws Exception { DateTime item = deserialize(daylightSavingTimeWinterSource); assertEquals(item, daylightSavingTimeWinterExpected); } @Test(expected = DateTimeDeserializerException.class) public void checkDaylightSavingTimeWinterDeserializer_ThrowException_IfFormatIsWrong() throws Exception { deserialize("26-03-2017T01:00:00.000+01:00"); } private DateTime deserialize(String dateTime) throws Exception { TestObject testObject = mapper.readValue("{\"date\":" + mapper.writeValueAsString(dateTime) + "}", TestObject.class); return testObject.getDate(); } private static class TestObject { @JsonDeserialize(using = CustomDateTimeDeserializer.class) private final DateTime date = null; public DateTime getDate() { return date; } } } No newline at end of file src/test/java/es/redmic/brokerlib/serializer/CustomDateTimeSerializerTest.java 0 → 100644 +60 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.serializer; import static org.junit.Assert.assertTrue; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.BeforeClass; import org.junit.Test; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.datatype.joda.JodaModule; public class CustomDateTimeSerializerTest { static ObjectMapper mapper = new ObjectMapper(); static String dateTimeExpected; static DateTime dateTimeSource; @BeforeClass public static void setUp() { mapper.registerModule(new JodaModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); dateTimeExpected = "\"2015-03-17T01:00:00.000+00:00\""; dateTimeSource = new DateTime(2015, 3, 17, 1, 0, 0, 0, DateTimeZone.UTC); } @Test public void checkDateTimeSerializer_IsCorrect_IfIsEqualToExpected() throws Exception { assertTrue(serialize(dateTimeSource).contains(dateTimeExpected)); } private String serialize(DateTime dateTime) throws Exception { TestObject testObject = new TestObject(); testObject.setDate(dateTime); return mapper.writeValueAsString(testObject); } private class TestObject { private DateTime date; public void setDate(DateTime date) { this.date = date; } @JsonSerialize(using = CustomDateTimeSerializer.class) public DateTime getDate() { return date; } } } No newline at end of file Loading
src/main/java/es/redmic/brokerlib/deserializer/CustomDateTimeDeserializer.java 0 → 100644 +40 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.deserializer; import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import es.redmic.exception.databinding.DateTimeDeserializerException; public class CustomDateTimeDeserializer extends JsonDeserializer<DateTime> { final String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"; @Override public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) { DateTimeFormatter patternFormat = DateTimeFormat.forPattern(pattern); String dateTime; try { dateTime = jp.getText(); } catch (IOException e) { throw new DateTimeDeserializerException(pattern, null, e); } try { return patternFormat.parseDateTime(dateTime).toDateTime(DateTimeZone.UTC); } catch (Exception e) { throw new DateTimeDeserializerException(pattern, dateTime, e); } } } No newline at end of file
src/main/java/es/redmic/brokerlib/serializer/CustomDateTimeSerializer.java 0 → 100644 +27 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.serializer; import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import es.redmic.exception.databinding.DateTimeSerializerException; public class CustomDateTimeSerializer extends JsonSerializer<DateTime> { @Override public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) { String format = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"; try { gen.writeString(value.withZone(DateTimeZone.UTC).toString(format)); } catch (IOException e) { throw new DateTimeSerializerException(format, value.toString(), e); } } }
src/test/java/es/redmic/brokerlib/deserializer/CustomDateTimeDeserializerTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.deserializer; import static org.junit.Assert.assertEquals; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.BeforeClass; import org.junit.Test; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import es.redmic.exception.databinding.DateTimeDeserializerException; public class CustomDateTimeDeserializerTest { ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.WRAP_EXCEPTIONS, false); static DateTime daylightSavingTimeSummerExpected; static String daylightSavingTimeSummerSource; static DateTime daylightSavingTimeWinterExpected; static String daylightSavingTimeWinterSource; @BeforeClass public static void setUp() { daylightSavingTimeSummerExpected = new DateTime(2017, 3, 26, 0, 0, 0, 0, DateTimeZone.UTC); daylightSavingTimeSummerSource = "2017-03-26T01:00:00.000+01:00"; daylightSavingTimeWinterExpected = new DateTime(2017, 10, 29, 1, 0, 0, 0, DateTimeZone.UTC); daylightSavingTimeWinterSource = "2017-10-29T01:00:00.000+00:00"; } @Test public void checkDaylightSavingTimeSummerDeserializer_IsCorrect_IfFormatIsCorrect() throws Exception { DateTime item = deserialize(daylightSavingTimeSummerSource); assertEquals(item, daylightSavingTimeSummerExpected); } @Test public void checkDaylightSavingTimeWinterDeserializer_IsCorrect_IfFormatIsCorrect() throws Exception { DateTime item = deserialize(daylightSavingTimeWinterSource); assertEquals(item, daylightSavingTimeWinterExpected); } @Test(expected = DateTimeDeserializerException.class) public void checkDaylightSavingTimeWinterDeserializer_ThrowException_IfFormatIsWrong() throws Exception { deserialize("26-03-2017T01:00:00.000+01:00"); } private DateTime deserialize(String dateTime) throws Exception { TestObject testObject = mapper.readValue("{\"date\":" + mapper.writeValueAsString(dateTime) + "}", TestObject.class); return testObject.getDate(); } private static class TestObject { @JsonDeserialize(using = CustomDateTimeDeserializer.class) private final DateTime date = null; public DateTime getDate() { return date; } } } No newline at end of file
src/test/java/es/redmic/brokerlib/serializer/CustomDateTimeSerializerTest.java 0 → 100644 +60 −0 Original line number Diff line number Diff line package es.redmic.brokerlib.serializer; import static org.junit.Assert.assertTrue; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.BeforeClass; import org.junit.Test; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.datatype.joda.JodaModule; public class CustomDateTimeSerializerTest { static ObjectMapper mapper = new ObjectMapper(); static String dateTimeExpected; static DateTime dateTimeSource; @BeforeClass public static void setUp() { mapper.registerModule(new JodaModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); dateTimeExpected = "\"2015-03-17T01:00:00.000+00:00\""; dateTimeSource = new DateTime(2015, 3, 17, 1, 0, 0, 0, DateTimeZone.UTC); } @Test public void checkDateTimeSerializer_IsCorrect_IfIsEqualToExpected() throws Exception { assertTrue(serialize(dateTimeSource).contains(dateTimeExpected)); } private String serialize(DateTime dateTime) throws Exception { TestObject testObject = new TestObject(); testObject.setDate(dateTime); return mapper.writeValueAsString(testObject); } private class TestObject { private DateTime date; public void setDate(DateTime date) { this.date = date; } @JsonSerialize(using = CustomDateTimeSerializer.class) public DateTime getDate() { return date; } } } No newline at end of file