[Git][java-team/jackson-datatype-joda][upstream] New upstream version 2.9.8
Emmanuel Bourg
gitlab at salsa.debian.org
Fri Jan 11 12:04:08 GMT 2019
Emmanuel Bourg pushed to branch upstream at Debian Java Maintainers / jackson-datatype-joda
Commits:
0b427421 by Emmanuel Bourg at 2019-01-11T11:58:09Z
New upstream version 2.9.8
- - - - -
29 changed files:
- pom.xml
- release-notes/CREDITS
- release-notes/VERSION
- src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java
- src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java
- src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java
- src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java
- + src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java
- + src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java
- src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java
- src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java → src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java
- + src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java → src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java
- src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java
Changes:
=====================================
pom.xml
=====================================
@@ -4,12 +4,12 @@
<parent>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-base</artifactId>
- <version>2.9.4</version>
+ <version>2.9.8</version>
</parent>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<name>Jackson-datatype-Joda</name>
- <version>2.9.4</version>
+ <version>2.9.8</version>
<packaging>bundle</packaging>
<description>Add-on module for Jackson (http://jackson.codehaus.org) to support
Joda (http://joda-time.sourceforge.net/) data types.
@@ -19,7 +19,7 @@ Joda (http://joda-time.sourceforge.net/) data types.
<connection>scm:git:git at github.com:FasterXML/jackson-datatype-joda.git</connection>
<developerConnection>scm:git:git at github.com:FasterXML/jackson-datatype-joda.git</developerConnection>
<url>http://github.com/FasterXML/jackson-datatype-joda</url>
- <tag>jackson-datatype-joda-2.9.4</tag>
+ <tag>jackson-datatype-joda-2.9.8</tag>
</scm>
<properties>
<!-- Generate PackageVersion.java into this directory. -->
=====================================
release-notes/CREDITS
=====================================
@@ -71,3 +71,8 @@ Daniel Qian (chanjarster at github)
* Reported, contributed fix for #93: ADJUST_DATES_TO_CONTEXT_TIME_ZONE got wrong result
when parse string contains zone id
(2.9.0)
+
+Adrian Palanques (devdevx at github)
+ * Reported, contributed fix for #101: Instant, YearMonth and MonthDay not use
+ pattern in @JsonFormat
+ (2.9.7)
=====================================
release-notes/VERSION
=====================================
@@ -4,6 +4,19 @@ Project: jackson-datatype-joda
=== Releases ===
------------------------------------------------------------------------
+2.9.8 (15-Dec-2018)
+
+No changes since 2.9.7
+
+2.9.7 (19-Sep-2018)
+
+#99: Binary compatibility broken in 2.9.x in `DateTimeSerializer`
+ (reported, fixed by andrewl102 at github)
+#101: Instant, YearMonth and MonthDay not use pattern in @JsonFormat
+ (reported, fixed by Adrian P)
+
+2.9.6 (12-Jun-2018)
+2.9.5 (26-Mar-2018)
2.9.4 (24-Jan-2018)
2.9.3 (09-Dec-2017)
2.9.2 (14-Oct-2017)
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java
=====================================
@@ -1,9 +1,7 @@
package com.fasterxml.jackson.datatype.joda;
import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.joda.deser.*;
import com.fasterxml.jackson.datatype.joda.deser.key.*;
import com.fasterxml.jackson.datatype.joda.ser.*;
@@ -37,7 +35,6 @@ public class JodaModule extends SimpleModule
addDeserializer(YearMonth.class, new YearMonthDeserializer());
// then serializers:
- final JsonSerializer<Object> stringSer = ToStringSerializer.instance;
addSerializer(DateTime.class, new DateTimeSerializer());
addSerializer(DateTimeZone.class, new DateTimeZoneSerializer());
addSerializer(Duration.class, new DurationSerializer());
@@ -47,8 +44,8 @@ public class JodaModule extends SimpleModule
addSerializer(LocalTime.class, new LocalTimeSerializer());
addSerializer(Period.class, new PeriodSerializer());
addSerializer(Interval.class, new IntervalSerializer());
- addSerializer(MonthDay.class, stringSer);
- addSerializer(YearMonth.class, stringSer);
+ addSerializer(MonthDay.class, new MonthDaySerializer());
+ addSerializer(YearMonth.class, new YearMonthSerializer());
// then key deserializers
addKeyDeserializer(DateTime.class, new DateTimeKeyDeserializer());
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java
=====================================
@@ -1,6 +1,9 @@
package com.fasterxml.jackson.datatype.joda.cfg;
+import java.util.Arrays;
+
import org.joda.time.DateTimeZone;
+import org.joda.time.DateTimeFieldType;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.format.ISOPeriodFormat;
@@ -62,19 +65,28 @@ public class FormatConfig
public final static JacksonJodaPeriodFormat DEFAULT_PERIOD_FORMAT
= new JacksonJodaPeriodFormat(ISOPeriodFormat.standard());
+ public final static JacksonJodaDateFormat DEFAULT_YEAR_MONTH_FORMAT
+ = new JacksonJodaDateFormat(ISODateTimeFormat.yearMonth());
+
+ public final static JacksonJodaDateFormat DEFAULT_MONTH_DAY_FORMAT
+ = createMonthDayFormat();
+
// // // And then some wrapper methods for improved diagnostics, and possible
// // // default settings for things like "withOffsetParsed()" (see
// // // [dataformat-joda#75] for more information)
- private final static JacksonJodaDateFormat createUTC(DateTimeFormatter f)
- {
- f = f.withZoneUTC();
- return new JacksonJodaDateFormat(f);
+ private final static JacksonJodaDateFormat createUTC(DateTimeFormatter f) {
+ return new JacksonJodaDateFormat(f.withZoneUTC());
+ }
+
+ private final static JacksonJodaDateFormat createDefaultTZ(DateTimeFormatter f) {
+ return new JacksonJodaDateFormat(f.withZone(DEFAULT_TZ));
}
- private final static JacksonJodaDateFormat createDefaultTZ(DateTimeFormatter f)
+ private final static JacksonJodaDateFormat createMonthDayFormat()
{
- f = f.withZone(DEFAULT_TZ);
- return new JacksonJodaDateFormat(f);
+ return new JacksonJodaDateFormat(ISODateTimeFormat.forFields(
+ Arrays.asList(DateTimeFieldType.monthOfYear(), DateTimeFieldType.dayOfMonth()),
+ true, true));
}
}
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java
=====================================
@@ -4,17 +4,11 @@ import java.io.IOException;
import org.joda.time.Duration;
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonTokenId;
-import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
-import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaPeriodFormat;
/**
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java
=====================================
@@ -7,6 +7,8 @@ import org.joda.time.Instant;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
+import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
/**
* Basic deserializer for {@link org.joda.time.ReadableDateTime} and its subtypes.
@@ -14,12 +16,21 @@ import com.fasterxml.jackson.databind.*;
* Does not (yet?) support JSON object; support can be added if desired.
*/
public class InstantDeserializer
- extends JodaDeserializerBase<Instant>
+ extends JodaDateDeserializerBase<Instant>
{
private static final long serialVersionUID = 1L;
public InstantDeserializer() {
- super(Instant.class);
+ this(FormatConfig.DEFAULT_DATETIME_PARSER);
+ }
+
+ public InstantDeserializer(JacksonJodaDateFormat format) {
+ super(Instant.class, format);
+ }
+
+ @Override
+ public JodaDateDeserializerBase<?> withFormat(JacksonJodaDateFormat format) {
+ return new InstantDeserializer(format);
}
@Override
@@ -34,7 +45,9 @@ public class InstantDeserializer
if (str.length() == 0) {
return null;
}
- return new Instant(str);
+ // 11-Sep-2018, tatu: `DateTimeDeserializer` allows timezone inclusion in brackets;
+ // should that be checked here too?
+ return Instant.parse(str, _format.createParser(ctxt));
}
return _handleNotNumberOrString(p, ctxt);
}
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java
=====================================
@@ -2,6 +2,8 @@ package com.fasterxml.jackson.datatype.joda.deser;
import java.io.IOException;
+import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
+import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
import org.joda.time.MonthDay;
import com.fasterxml.jackson.core.JsonParser;
@@ -13,13 +15,21 @@ import com.fasterxml.jackson.databind.DeserializationContext;
* <p>
* Expects a string value compatible with MonthDay's parse operation.
*/
-public class MonthDayDeserializer extends JodaDeserializerBase<MonthDay>
+public class MonthDayDeserializer extends JodaDateDeserializerBase<MonthDay>
{
private static final long serialVersionUID = 1L;
- public MonthDayDeserializer()
- {
- super(MonthDay.class);
+ public MonthDayDeserializer() {
+ this(FormatConfig.DEFAULT_MONTH_DAY_FORMAT);
+ }
+
+ public MonthDayDeserializer(JacksonJodaDateFormat format) {
+ super(MonthDay.class, format);
+ }
+
+ @Override
+ public JodaDateDeserializerBase<?> withFormat(JacksonJodaDateFormat format) {
+ return new MonthDayDeserializer(format);
}
@Override
@@ -32,7 +42,7 @@ public class MonthDayDeserializer extends JodaDeserializerBase<MonthDay>
if (str.isEmpty()) {
return getNullValue(ctxt);
}
- return MonthDay.parse(str);
+ return MonthDay.parse(str, this._format.createParser(ctxt));
}
return (MonthDay) ctxt.handleUnexpectedToken(handledType(), p.getCurrentToken(), p,
"expected JSON String");
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java
=====================================
@@ -2,6 +2,8 @@ package com.fasterxml.jackson.datatype.joda.deser;
import java.io.IOException;
+import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
+import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
import org.joda.time.YearMonth;
import com.fasterxml.jackson.core.JsonParser;
@@ -13,13 +15,21 @@ import com.fasterxml.jackson.databind.DeserializationContext;
* <p>
* Expects a string value compatible with YearMonth's parse operation.
*/
-public class YearMonthDeserializer extends JodaDeserializerBase<YearMonth>
+public class YearMonthDeserializer extends JodaDateDeserializerBase<YearMonth>
{
private static final long serialVersionUID = 1L;
- public YearMonthDeserializer()
- {
- super(YearMonth.class);
+ public YearMonthDeserializer() {
+ this(FormatConfig.DEFAULT_YEAR_MONTH_FORMAT);
+ }
+
+ public YearMonthDeserializer(JacksonJodaDateFormat format) {
+ super(YearMonth.class, format);
+ }
+
+ @Override
+ public JodaDateDeserializerBase<?> withFormat(JacksonJodaDateFormat format) {
+ return new YearMonthDeserializer(format);
}
@Override
@@ -31,7 +41,7 @@ public class YearMonthDeserializer extends JodaDeserializerBase<YearMonth>
if (str.isEmpty()) {
return null;
}
- return YearMonth.parse(str);
+ return YearMonth.parse(str, _format.createParser(ctxt));
}
return (YearMonth) ctxt.handleUnexpectedToken(handledType(), p.getCurrentToken(), p,
"expected JSON String");
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java
=====================================
@@ -25,6 +25,10 @@ public class DateMidnightSerializer
this(FormatConfig.DEFAULT_LOCAL_DATEONLY_FORMAT, 0);
}
+ public DateMidnightSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+
public DateMidnightSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
// true -> use arrays
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java
=====================================
@@ -19,6 +19,10 @@ public class DateTimeSerializer
this(FormatConfig.DEFAULT_DATETIME_PRINTER, 0);
}
+ public DateTimeSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+
public DateTimeSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
// false -> no arrays (numbers)
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java
=====================================
@@ -24,6 +24,11 @@ public class DurationSerializer // non final since 2.6.1
// it as container for numeric/textual distinction
public DurationSerializer() { this(FormatConfig.DEFAULT_DATEONLY_FORMAT, 0); }
+
+ public DurationSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+
public DurationSerializer(JacksonJodaDateFormat formatter,
int shapeOverride) {
// false -> no arrays (numbers)
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java
=====================================
@@ -15,8 +15,11 @@ public class InstantSerializer // non final since 2.6.1
{
private static final long serialVersionUID = 1L;
- // NOTE: formatter not used for printing at all, hence choice doesn't matter
- public InstantSerializer() { this(FormatConfig.DEFAULT_TIMEONLY_FORMAT, 0); }
+ public InstantSerializer() { this(FormatConfig.DEFAULT_DATETIME_PRINTER, 0); }
+ public InstantSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+
public InstantSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
super(Instant.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
@@ -40,7 +43,7 @@ public class InstantSerializer // non final since 2.6.1
throws IOException
{
if (_serializationShape(provider) == FORMAT_STRING) {
- gen.writeString(value.toString());
+ gen.writeString(_format.createFormatter(provider).print(value));
} else {
gen.writeNumber(value.getMillis());
}
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java
=====================================
@@ -17,6 +17,9 @@ public class IntervalSerializer extends JodaDateSerializerBase<Interval>
private static final long serialVersionUID = 1L;
public IntervalSerializer() { this(FormatConfig.DEFAULT_DATETIME_PRINTER, 0); }
+ public IntervalSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
public IntervalSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
super(Interval.class, format, SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS,
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java
=====================================
@@ -17,12 +17,17 @@ public class LocalDateSerializer // non final since 2.6.1
private static final long serialVersionUID = 1L;
public LocalDateSerializer() { this(FormatConfig.DEFAULT_LOCAL_DATEONLY_FORMAT, 0); }
+ public LocalDateSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
public LocalDateSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
super(LocalDate.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
FORMAT_ARRAY, shapeOverride);
}
+
+
@Override
public LocalDateSerializer withFormat(JacksonJodaDateFormat formatter,
int shapeOverride) {
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java
=====================================
@@ -16,12 +16,16 @@ public class LocalDateTimeSerializer // non final since 2.6.1
private static final long serialVersionUID = 1L;
public LocalDateTimeSerializer() { this(FormatConfig.DEFAULT_LOCAL_DATETIME_PRINTER, 0); }
+ public LocalDateTimeSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
public LocalDateTimeSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
super(LocalDateTime.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
FORMAT_ARRAY, shapeOverride);
}
+
@Override
public LocalDateTimeSerializer withFormat(JacksonJodaDateFormat formatter,
int shapeOverride) {
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java
=====================================
@@ -19,6 +19,11 @@ public class LocalTimeSerializer // non final since 2.6.1
public LocalTimeSerializer() {
this(FormatConfig.DEFAULT_LOCAL_TIMEONLY_PRINTER, 0);
}
+
+ public LocalTimeSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+
public LocalTimeSerializer(JacksonJodaDateFormat format,
int shapeOverride) {
super(LocalTime.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java
=====================================
@@ -0,0 +1,39 @@
+package com.fasterxml.jackson.datatype.joda.ser;
+
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
+import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
+import org.joda.time.MonthDay;
+
+import java.io.IOException;
+
+public class MonthDaySerializer extends JodaDateSerializerBase<MonthDay>
+{
+ private static final long serialVersionUID = 1L;
+
+ public MonthDaySerializer() { this(FormatConfig.DEFAULT_MONTH_DAY_FORMAT, 0); }
+ public MonthDaySerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+ public MonthDaySerializer(JacksonJodaDateFormat format,
+ int shapeOverride) {
+ super(MonthDay.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
+ FORMAT_STRING, shapeOverride);
+ }
+
+
+
+ @Override
+ public MonthDaySerializer withFormat(JacksonJodaDateFormat formatter,
+ int shapeOverride) {
+ return new MonthDaySerializer(formatter, shapeOverride);
+ }
+
+ @Override
+ public void serialize(MonthDay value, JsonGenerator gen, SerializerProvider provider) throws IOException
+ {
+ gen.writeString(_format.createFormatter(provider).print(value));
+ }
+}
=====================================
src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java
=====================================
@@ -0,0 +1,39 @@
+package com.fasterxml.jackson.datatype.joda.ser;
+
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
+import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
+import org.joda.time.YearMonth;
+
+import java.io.IOException;
+
+public class YearMonthSerializer extends JodaDateSerializerBase<YearMonth>
+{
+ private static final long serialVersionUID = 1L;
+
+ public YearMonthSerializer() { this(FormatConfig.DEFAULT_YEAR_MONTH_FORMAT, 0); }
+ public YearMonthSerializer(JacksonJodaDateFormat format) {
+ this(format, 0);
+ }
+ public YearMonthSerializer(JacksonJodaDateFormat format,
+ int shapeOverride) {
+ super(YearMonth.class, format, SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
+ FORMAT_STRING, shapeOverride);
+ }
+
+
+
+ @Override
+ public YearMonthSerializer withFormat(JacksonJodaDateFormat formatter,
+ int shapeOverride) {
+ return new YearMonthSerializer(formatter, shapeOverride);
+ }
+
+ @Override
+ public void serialize(YearMonth value, JsonGenerator gen, SerializerProvider provider) throws IOException
+ {
+ gen.writeString(_format.createFormatter(provider).print(value));
+ }
+}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java
=====================================
@@ -1,17 +1,57 @@
package com.fasterxml.jackson.datatype.joda;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import junit.framework.TestCase;
import java.io.IOException;
import java.util.Arrays;
+import org.joda.time.Instant;
+import org.joda.time.YearMonth;
+import org.joda.time.MonthDay;
+
import static org.junit.Assert.*;
public abstract class JodaTestBase extends TestCase
{
- protected static ObjectMapper jodaMapper()
- {
+ protected static class FormattedInstant {
+ @JsonFormat(pattern = "dd/MM/yyyy HH_mm_ss_SSS")
+ public Instant value;
+
+ public FormattedInstant(Instant v) { value = v; }
+ protected FormattedInstant() { }
+ }
+
+ protected static class FormattedYearMonth {
+ @JsonFormat(pattern = "yyyy/MM")
+ public YearMonth value;
+
+ public FormattedYearMonth(YearMonth v) { value = v; }
+ protected FormattedYearMonth() { }
+ }
+
+ protected static class FormattedMonthDay {
+ @JsonFormat(pattern = "MM:dd")
+ public MonthDay value;
+
+ public FormattedMonthDay(MonthDay v) { value = v; }
+ protected FormattedMonthDay() { }
+ }
+
+ // Mix-in class for forcing polymorphic handling
+ @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY)
+ protected static interface MixinForPolymorphism {
+ }
+
+ /*
+ /**********************************************************
+ /* Factory methods
+ /**********************************************************
+ */
+
+ protected static ObjectMapper jodaMapper() {
return new JodaMapper();
}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java → src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java
=====================================
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.datatype.joda;
+package com.fasterxml.jackson.datatype.joda.depr;
import java.io.IOException;
import java.util.TimeZone;
@@ -8,7 +8,9 @@ import org.joda.time.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaTestBase;
@SuppressWarnings("deprecation") // because DateMidnight deprecated by Joda
public class DateMidnightTest extends JodaTestBase
@@ -48,7 +50,7 @@ public class DateMidnightTest extends JodaTestBase
/*
/**********************************************************
- /* Test methods
+ /* Test methods, deserialization
/**********************************************************
*/
@@ -119,7 +121,48 @@ public class DateMidnightTest extends JodaTestBase
assertEquals(13, date2.getDayOfMonth());
}
- public void testCustomFormat() throws Exception
+ /*
+ /**********************************************************
+ /* Test methods, serialization
+ /**********************************************************
+ */
+
+ public void testSerializeAsTimestamp() throws Exception
+ {
+ assertEquals(aposToQuotes("{'value':0}"),
+ MAPPER.writeValueAsString(new FormattedDateAsTimestamp(
+ new DateMidnight(0, DateTimeZone.UTC))));
+ }
+
+ public void testDateMidnightSer() throws IOException
+ {
+ ObjectMapper mapper = jodaMapper()
+ .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+ .enable(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS);
+ final ObjectWriter writer = mapper.writer();
+
+ DateMidnight date = new DateMidnight(2001, 5, 25);
+ // default format is that of JSON array...
+ assertEquals("[2001,5,25]", writer.writeValueAsString(date));
+ // but we can force it to be a String as well (note: here we assume this is
+ // dynamically changeable)
+ assertEquals(quote("2001-05-25"),
+ writer.without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+ .writeValueAsString(date));
+
+ mapper = jodaMapper();
+ mapper.addMixIn(DateMidnight.class, MixInForTypeId.class);
+ mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ assertEquals("[\"org.joda.time.DateMidnight\",\"2001-05-25\"]", mapper.writeValueAsString(date));
+ }
+
+ /*
+ /**********************************************************
+ /* Test methods, custom format
+ /**********************************************************
+ */
+
+ public void testDeserWithCustomFormat() throws Exception
{
String STR = "2015-06-19";
String ALT = "19.06.2015";
@@ -159,10 +202,4 @@ public class DateMidnightTest extends JodaTestBase
assertEquals("America/New_York", resultTz.getID());
}
- public void testSerializeAsTimestamp() throws Exception
- {
- assertEquals(aposToQuotes("{'value':0}"),
- MAPPER.writeValueAsString(new FormattedDateAsTimestamp(
- new DateMidnight(0, DateTimeZone.UTC))));
- }
}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java
=====================================
@@ -9,16 +9,11 @@ import org.joda.time.DateTime;
import org.joda.time.Instant;
import org.joda.time.ReadableInstant;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.joda.JodaTestBase;
public class InstantDeserTest extends JodaTestBase
{
- @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY)
- private static interface ObjectConfiguration {
- }
-
/*
/**********************************************************
/* Test methods
@@ -35,11 +30,12 @@ public class InstantDeserTest extends JodaTestBase
assertNull(MAPPER.readValue(quote(""), ReadableInstant.class));
}
- public void testDeserDateTimeWithTypeInfo() throws IOException
+ public void testDeserInstantWithTypeInfo() throws IOException
{
ObjectMapper mapper = jodaMapper();
- mapper.addMixIn(DateTime.class, ObjectConfiguration.class);
- DateTime date = mapper.readValue("[\"org.joda.time.DateTime\",\"1972-12-28T12:00:01.000+0000\"]", DateTime.class);
+ mapper.addMixIn(Instant.class, MixinForPolymorphism.class);
+ Instant date = mapper.readValue("[\"org.joda.time.Instant\",\"1972-12-28T12:00:01.000+0000\"]",
+ Instant.class);
assertNotNull(date);
assertEquals("1972-12-28T12:00:01.000Z", date.toString());
}
@@ -61,7 +57,16 @@ public class InstantDeserTest extends JodaTestBase
assertNotNull(date);
assertEquals("1972-12-28T12:00:01.000Z", date.toString());
- // since 1.6.1, for [JACKSON-360]
assertNull(MAPPER.readValue(quote(""), Instant.class));
}
+
+ public void testDeserInstantCustomFormat() throws IOException
+ {
+ FormattedInstant input = MAPPER.readValue(aposToQuotes(
+ "{'value':'28/12/1972 12_34_56_789'}"),
+ FormattedInstant.class);
+ DateTime date = input.value.toDateTime();
+ assertEquals(1972, date.getYear());
+ assertEquals(789, date.getMillisOfSecond());
+ }
}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java
=====================================
@@ -19,12 +19,6 @@ public class IntervalDeserTest extends JodaTestBase
private final ObjectMapper MAPPER = jodaMapper();
- /*
- /**********************************************************
- /* Test methods
- /**********************************************************
- */
-
/*
/**********************************************************
/* Tests for Interval type
@@ -46,20 +40,19 @@ public class IntervalDeserTest extends JodaTestBase
public void testIntervalDeserWithTimeZone() throws IOException
{
- MAPPER.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
+ MAPPER.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
Interval interval = MAPPER.readValue(quote("1396439982-1396440001"), Interval.class);
assertEquals(1396439982, interval.getStartMillis());
assertEquals(1396440001, interval.getEndMillis());
assertEquals(ISOChronology.getInstance(DateTimeZone.forID("Europe/Paris")), interval.getChronology());
- MAPPER.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
+ MAPPER.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
interval = MAPPER.readValue(quote("-100-1396440001"), Interval.class);
assertEquals(-100, interval.getStartMillis());
assertEquals(1396440001, interval.getEndMillis());
assertEquals(ISOChronology.getInstance(DateTimeZone.forID("America/Los_Angeles")), interval.getChronology());
-
}
public void testIntervalDeserWithTypeInfo() throws IOException
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java
=====================================
@@ -14,12 +14,6 @@ public class LocalTimeDeserTest extends JodaTestBase
private static interface ObjectConfiguration {
}
- /*
- /**********************************************************
- /* Test methods
- /**********************************************************
- */
-
private final ObjectMapper MAPPER = jodaMapper();
/*
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java
=====================================
@@ -1,13 +1,13 @@
package com.fasterxml.jackson.datatype.joda.deser;
-import java.io.IOException;
import java.util.TimeZone;
import org.joda.time.MonthDay;
import org.joda.time.chrono.ISOChronology;
-import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.exc.MismatchedInputException;
import com.fasterxml.jackson.datatype.joda.JodaTestBase;
public class MonthDayDeserTest extends JodaTestBase
@@ -44,15 +44,35 @@ public class MonthDayDeserTest extends JodaTestBase
assertNull(monthDay);
}
- public void testDeserMonthDayFailsForUnexpectedType() throws IOException
+ public void testDeserMonthDayFailsForUnexpectedType() throws Exception
{
- try
- {
+ try {
MAPPER.readValue("{\"month\":8}", MonthDay.class);
fail();
- } catch (JsonMappingException e)
- {
- assertTrue(e.getMessage().contains("expected JSON String"));
+ } catch (MismatchedInputException e) {
+ verifyException(e, "expected JSON String");
}
}
+
+ public void testDeserMonthDayCustomFormat() throws Exception
+ {
+ FormattedMonthDay input = MAPPER.readValue(aposToQuotes(
+ "{'value':'12:20'}"),
+ FormattedMonthDay.class);
+ MonthDay monthDay = input.value;
+ assertEquals(12, monthDay.getMonthOfYear());
+ assertEquals(20, monthDay.getDayOfMonth());
+ }
+
+ public void testDeserMonthDayConfigOverride() throws Exception
+ {
+ ObjectMapper mapper = jodaMapper();
+ mapper.configOverride(MonthDay.class)
+ .setFormat(JsonFormat.Value.forPattern("MM|dd"));
+ final MonthDay input = new MonthDay(12, 20);
+ final String exp = quote("12|20");
+ assertEquals(exp, mapper.writeValueAsString(input));
+ final MonthDay result = mapper.readValue(exp, MonthDay.class);
+ assertEquals(input, result);
+ }
}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java
=====================================
@@ -54,4 +54,13 @@ public class YearMonthDeserTest extends JodaTestBase
}
}
+ public void testDeserYearMonthCustomFormat() throws IOException
+ {
+ FormattedYearMonth input = MAPPER.readValue(aposToQuotes(
+ "{'value':'2013/8'}"),
+ FormattedYearMonth.class);
+ YearMonth yearMonth = input.value;
+ assertEquals(2013, yearMonth.getYear());
+ assertEquals(8, yearMonth.getMonthOfYear());
+ }
}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java
=====================================
@@ -0,0 +1,57 @@
+package com.fasterxml.jackson.datatype.joda.ser;
+
+import java.text.SimpleDateFormat;
+
+import org.joda.time.DateTime;
+import org.joda.time.Instant;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaTestBase;
+
+public class InstantSerializationTest extends JodaTestBase
+{
+ private final ObjectMapper MAPPER = jodaMapper();
+ {
+ MAPPER.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ MAPPER.enable(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS);
+ }
+
+ public void testInstantSer() throws Exception {
+ Instant instant = new Instant(0L);
+
+ // by default, dates use timestamp, so:
+ assertEquals("0", MAPPER.writeValueAsString(instant));
+
+ // but if re-configured, as regular ISO-8601 string
+ assertEquals(quote("1970-01-01T00:00:00.000Z"), MAPPER.writer()
+ .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+ .writeValueAsString(instant));
+ }
+
+ public void testCustomFormatInstantSer() throws Exception
+ {
+ final String json = MAPPER.writer()
+ .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+ .writeValueAsString(new FormattedInstant(new Instant(0L)));
+ assertEquals(aposToQuotes(
+ "{'value':'01/01/1970 00_00_00_000'}"), json);
+ }
+
+ // [datatype-joda#60]
+ public void testInstantConversion() throws Exception
+ {
+ final ObjectMapper mapper = jodaMapper();
+
+ // Configure Date Formatting
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"));
+
+ // Create an instant and serialize and additionally serialize the instant as DateTime to demonstrate the difference
+ org.joda.time.Instant now = new DateTime(1431498572205L).toInstant();
+
+ String instantString = mapper.writeValueAsString(now);
+
+ assertEquals("\"2015-05-13T06:29:32.205Z\"", instantString);
+ }
+}
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java → src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java
=====================================
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.datatype.joda;
+package com.fasterxml.jackson.datatype.joda.ser;
import java.io.IOException;
@@ -8,6 +8,7 @@ import org.joda.time.Interval;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.datatype.joda.JodaTestBase;
public class IntervalSerializationTest extends JodaTestBase
{
=====================================
src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java
=====================================
@@ -1,7 +1,6 @@
package com.fasterxml.jackson.datatype.joda.ser;
import java.io.IOException;
-import java.text.SimpleDateFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -38,35 +37,6 @@ public class JodaSerializationTest extends JodaTestBase
}
private final ObjectWriter WRITER = MAPPER.writer();
-
- /*
- /**********************************************************
- /* Tests for DateMidnight type
- /**********************************************************
- */
-
- @SuppressWarnings("deprecation") // since Jackson 2.7 / Joda 2.4
- public void testDateMidnightSer() throws IOException
- {
- DateMidnight date = new DateMidnight(2001, 5, 25);
- // default format is that of JSON array...
- assertEquals("[2001,5,25]", WRITER.writeValueAsString(date));
- // but we can force it to be a String as well (note: here we assume this is
- // dynamically changeable)
- assertEquals(quote("2001-05-25"),
- WRITER.without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
- .writeValueAsString(date));
-
- date = new DateMidnight(2001, 5, 25);
- // default format is that of JSON array...
- assertEquals("[2001,5,25]", WRITER.writeValueAsString(date));
- // but we can force it to be a String as well (note: here we assume this is
- // dynamically changeable)
- ObjectMapper mapper = jodaMapper();
- mapper.addMixIn(DateMidnight.class, ObjectConfiguration.class);
- mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
- assertEquals("[\"org.joda.time.DateMidnight\",\"2001-05-25\"]", mapper.writeValueAsString(date));
- }
/*
/**********************************************************
@@ -109,7 +79,6 @@ public class JodaSerializationTest extends JodaTestBase
assertEquals("[\"org.joda.time.LocalDate\",\"2001-05-25\"]", mapper.writeValueAsString(date));
}
-
/*
/**********************************************************
/* Tests for LocalTime type
@@ -224,35 +193,6 @@ public class JodaSerializationTest extends JodaTestBase
assertEquals("[\"org.joda.time.Duration\",3123422]", json);
}
- public void testInstantSer() throws IOException {
- Instant instant = new Instant(0L);
-
- // by default, dates use timestamp, so:
- assertEquals("0", MAPPER.writeValueAsString(instant));
-
- // but if re-configured, as regular ISO-8601 string
- assertEquals(quote("1970-01-01T00:00:00.000Z"), MAPPER.writer()
- .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
- .writeValueAsString(instant));
- }
-
- // [datatype-joda#60]
- public void testInstantConversion() throws Exception
- {
- final ObjectMapper mapper = jodaMapper();
-
- // Configure Date Formatting
- mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"));
-
- // Create an instant and serialize and additionally serialize the instant as DateTime to demonstrate the difference
- org.joda.time.Instant now = new DateTime(1431498572205L).toInstant();
-
- String instantString = mapper.writeValueAsString(now);
-
- assertEquals("\"2015-05-13T06:29:32.205Z\"", instantString);
- }
-
public void testMonthDaySer() throws Exception
{
MonthDay monthDay = new MonthDay(7, 23);
@@ -261,6 +201,14 @@ public class JodaSerializationTest extends JodaTestBase
assertEquals(quote("--07-23"), json);
}
+ public void testCustomMonthDaySer() throws Exception
+ {
+ MonthDay monthDay = new MonthDay(7, 23);
+ ObjectMapper mapper = jodaMapper();
+ String json = mapper.writeValueAsString(new FormattedMonthDay(monthDay));
+ assertEquals(aposToQuotes("{'value':'07:23'}"), json);
+ }
+
public void testYearMonthSer() throws Exception
{
YearMonth yearMonth = new YearMonth(2013, 8);
@@ -269,4 +217,11 @@ public class JodaSerializationTest extends JodaTestBase
assertEquals(quote("2013-08"), json);
}
+ public void testCustomYearMonthSer() throws Exception
+ {
+ YearMonth yearMonth = new YearMonth(2013, 8);
+ ObjectMapper mapper = jodaMapper();
+ String json = mapper.writeValueAsString(new FormattedYearMonth(yearMonth));
+ assertEquals(aposToQuotes("{'value':'2013/08'}"), json);
+ }
}
View it on GitLab: https://salsa.debian.org/java-team/jackson-datatype-joda/commit/0b4274211db2059f9c7ccb289f871636cb8d5971
--
View it on GitLab: https://salsa.debian.org/java-team/jackson-datatype-joda/commit/0b4274211db2059f9c7ccb289f871636cb8d5971
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20190111/bf291894/attachment.html>
More information about the pkg-java-commits
mailing list