diff -Nru jackson-datatype-joda-2.9.4/debian/changelog jackson-datatype-joda-2.9.8/debian/changelog --- jackson-datatype-joda-2.9.4/debian/changelog 2018-03-20 20:13:16.000000000 +0000 +++ jackson-datatype-joda-2.9.8/debian/changelog 2019-01-11 12:03:14.000000000 +0000 @@ -1,3 +1,13 @@ +jackson-datatype-joda (2.9.8-1) unstable; urgency=medium + + * Team upload. + * New upstream release + * Fixed the build failure caused by the latest jackson-core upgrade + * Standards-Version updated to 4.3.0 + * Use salsa.debian.org Vcs-* URLs + + -- Emmanuel Bourg Fri, 11 Jan 2019 13:03:14 +0100 + jackson-datatype-joda (2.9.4-2) unstable; urgency=medium * Team upload. diff -Nru jackson-datatype-joda-2.9.4/debian/control jackson-datatype-joda-2.9.8/debian/control --- jackson-datatype-joda-2.9.4/debian/control 2018-03-20 20:13:16.000000000 +0000 +++ jackson-datatype-joda-2.9.8/debian/control 2019-01-11 11:58:08.000000000 +0000 @@ -3,26 +3,27 @@ Priority: optional Maintainer: Debian Java maintainers Uploaders: Tim Potter -Build-Depends: debhelper (>= 11), - default-jdk, - default-jdk-doc, - javahelper, - junit4, - libbuild-helper-maven-plugin-java, - libjackson2-annotations-java (>= 2.8.5), - libjackson2-core-java (>= 2.8.5), - libjackson2-databind-java (>= 2.8.5), - libjoda-time-java, - libmaven-bundle-plugin-java, - libmaven-enforcer-plugin-java, - libmaven-javadoc-plugin-java, - libmaven-shade-plugin-java, - libreplacer-java, - maven-debian-helper, - xmlstarlet -Standards-Version: 4.1.3 -Vcs-Git: https://anonscm.debian.org/git/pkg-java/jackson-datatype-joda.git -Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/jackson-datatype-joda.git +Build-Depends: + debhelper (>= 11), + default-jdk, + default-jdk-doc, + javahelper, + junit4, + libbuild-helper-maven-plugin-java, + libjackson2-annotations-java (>= 2.8.5), + libjackson2-core-java (>= 2.8.5), + libjackson2-databind-java (>= 2.8.5), + libjoda-time-java, + libmaven-bundle-plugin-java, + libmaven-enforcer-plugin-java, + libmaven-javadoc-plugin-java, + libmaven-shade-plugin-java, + libreplacer-java, + maven-debian-helper, + xmlstarlet +Standards-Version: 4.3.0 +Vcs-Git: https://salsa.debian.org/java-team/jackson-datatype-joda.git +Vcs-Browser: https://salsa.debian.org/java-team/jackson-datatype-joda Homepage: https://github.com/FasterXML/jackson-datatype-joda Package: libjackson2-datatype-joda-java diff -Nru jackson-datatype-joda-2.9.4/debian/maven.rules jackson-datatype-joda-2.9.8/debian/maven.rules --- jackson-datatype-joda-2.9.4/debian/maven.rules 2018-03-20 20:13:16.000000000 +0000 +++ jackson-datatype-joda-2.9.8/debian/maven.rules 2019-01-11 11:58:44.000000000 +0000 @@ -1,3 +1,4 @@ +com.fasterxml.jackson jackson-base pom s/2.9.8/debian/ * * com.fasterxml.jackson.core jackson-core * s/.*/2.x/ * * com.fasterxml.jackson.core jackson-annotations * s/.*/2.x/ * * com.fasterxml.jackson.core jackson-databind * s/.*/2.x/ * * diff -Nru jackson-datatype-joda-2.9.4/debian/watch jackson-datatype-joda-2.9.8/debian/watch --- jackson-datatype-joda-2.9.4/debian/watch 2018-03-20 20:13:16.000000000 +0000 +++ jackson-datatype-joda-2.9.8/debian/watch 2019-01-11 11:58:08.000000000 +0000 @@ -1,4 +1,4 @@ -version=3 - +version=4 +opts="repack,compression=xz" \ https://github.com/FasterXML/jackson-datatype-joda/tags \ /FasterXML/jackson-datatype-joda/archive/jackson-datatype-joda-(.*)\.tar\.gz diff -Nru jackson-datatype-joda-2.9.4/pom.xml jackson-datatype-joda-2.9.8/pom.xml --- jackson-datatype-joda-2.9.4/pom.xml 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/pom.xml 2018-12-15 23:21:11.000000000 +0000 @@ -4,12 +4,12 @@ com.fasterxml.jackson jackson-base - 2.9.4 + 2.9.8 com.fasterxml.jackson.datatype jackson-datatype-joda Jackson-datatype-Joda - 2.9.4 + 2.9.8 bundle Add-on module for Jackson (http://jackson.codehaus.org) to support Joda (http://joda-time.sourceforge.net/) data types. @@ -19,7 +19,7 @@ scm:git:git@github.com:FasterXML/jackson-datatype-joda.git scm:git:git@github.com:FasterXML/jackson-datatype-joda.git http://github.com/FasterXML/jackson-datatype-joda - jackson-datatype-joda-2.9.4 + jackson-datatype-joda-2.9.8 diff -Nru jackson-datatype-joda-2.9.4/release-notes/CREDITS jackson-datatype-joda-2.9.8/release-notes/CREDITS --- jackson-datatype-joda-2.9.4/release-notes/CREDITS 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/release-notes/CREDITS 2018-12-15 23:21:11.000000000 +0000 @@ -71,3 +71,8 @@ * 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@github) + * Reported, contributed fix for #101: Instant, YearMonth and MonthDay not use + pattern in @JsonFormat + (2.9.7) diff -Nru jackson-datatype-joda-2.9.4/release-notes/VERSION jackson-datatype-joda-2.9.8/release-notes/VERSION --- jackson-datatype-joda-2.9.4/release-notes/VERSION 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/release-notes/VERSION 2018-12-15 23:21:11.000000000 +0000 @@ -4,6 +4,19 @@ === 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@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) diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/cfg/FormatConfig.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 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)); } } diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/DurationDeserializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -4,17 +4,11 @@ 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; /** diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -7,6 +7,8 @@ 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 @@ * Does not (yet?) support JSON object; support can be added if desired. */ public class InstantDeserializer - extends JodaDeserializerBase + extends JodaDateDeserializerBase { 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 @@ 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); } diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -2,6 +2,8 @@ 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 @@ *

* Expects a string value compatible with MonthDay's parse operation. */ -public class MonthDayDeserializer extends JodaDeserializerBase +public class MonthDayDeserializer extends JodaDateDeserializerBase { 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 @@ 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"); diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -2,6 +2,8 @@ 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 @@ *

* Expects a string value compatible with YearMonth's parse operation. */ -public class YearMonthDeserializer extends JodaDeserializerBase +public class YearMonthDeserializer extends JodaDateDeserializerBase { 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 @@ 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"); diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 @@ addDeserializer(YearMonth.class, new YearMonthDeserializer()); // then serializers: - final JsonSerializer stringSer = ToStringSerializer.instance; addSerializer(DateTime.class, new DateTimeSerializer()); addSerializer(DateTimeZone.class, new DateTimeZoneSerializer()); addSerializer(Duration.class, new DurationSerializer()); @@ -47,8 +44,8 @@ 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()); diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateMidnightSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -25,6 +25,10 @@ this(FormatConfig.DEFAULT_LOCAL_DATEONLY_FORMAT, 0); } + public DateMidnightSerializer(JacksonJodaDateFormat format) { + this(format, 0); + } + public DateMidnightSerializer(JacksonJodaDateFormat format, int shapeOverride) { // true -> use arrays diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DateTimeSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -19,6 +19,10 @@ this(FormatConfig.DEFAULT_DATETIME_PRINTER, 0); } + public DateTimeSerializer(JacksonJodaDateFormat format) { + this(format, 0); + } + public DateTimeSerializer(JacksonJodaDateFormat format, int shapeOverride) { // false -> no arrays (numbers) diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/DurationSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -24,6 +24,11 @@ // 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) diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -15,8 +15,11 @@ { 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 @@ throws IOException { if (_serializationShape(provider) == FORMAT_STRING) { - gen.writeString(value.toString()); + gen.writeString(_format.createFormatter(provider).print(value)); } else { gen.writeNumber(value.getMillis()); } diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -17,6 +17,9 @@ 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, diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -17,12 +17,17 @@ 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) { diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalDateTimeSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -16,12 +16,16 @@ 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) { diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/LocalTimeSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -19,6 +19,11 @@ 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, diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java 1970-01-01 00:00:00.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/MonthDaySerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 +{ + 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)); + } +} diff -Nru jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java --- jackson-datatype-joda-2.9.4/src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java 1970-01-01 00:00:00.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/main/java/com/fasterxml/jackson/datatype/joda/ser/YearMonthSerializer.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 +{ + 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)); + } +} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/DateMidnightTest.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -package com.fasterxml.jackson.datatype.joda; - -import java.io.IOException; -import java.util.TimeZone; - -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.SerializationFeature; - -@SuppressWarnings("deprecation") // because DateMidnight deprecated by Joda -public class DateMidnightTest extends JodaTestBase -{ - // let's default to String serialization - private final ObjectMapper MAPPER = jodaMapper() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - - @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY, property = "@class") - private static interface MixInForTypeId { - } - - static class AlternateFormat { - @JsonFormat(pattern="dd'.'MM'.'YYYY") - public DateMidnight value; - - public AlternateFormat() { } - public AlternateFormat(DateMidnight v) { - value = v; - } - } - - static class FormattedDateMidnight { - @JsonFormat(timezone="EST") - public DateMidnight dateMidnight; - } - - static class FormattedDateAsTimestamp { - @JsonFormat(shape=JsonFormat.Shape.NUMBER) - public DateMidnight value; - - protected FormattedDateAsTimestamp() { } - public FormattedDateAsTimestamp(DateMidnight d) { - value = d; - } - } - - /* - /********************************************************** - /* Test methods - /********************************************************** - */ - - public void testDateMidnightDeserWithTimeZone() throws IOException - { - MAPPER.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); - // couple of acceptable formats, so: - DateMidnight date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); - assertEquals(2001, date.getYear()); - assertEquals(5, date.getMonthOfYear()); - assertEquals(25, date.getDayOfMonth()); - - DateMidnight date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); - assertEquals(2005, date2.getYear()); - assertEquals(7, date2.getMonthOfYear()); - assertEquals(13, date2.getDayOfMonth()); - - // since 1.6.1, for [JACKSON-360] - assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); - - MAPPER.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); - // couple of acceptable formats, so: - date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); - assertEquals(2001, date.getYear()); - assertEquals(5, date.getMonthOfYear()); - assertEquals(25, date.getDayOfMonth()); - - date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); - assertEquals(2005, date2.getYear()); - assertEquals(7, date2.getMonthOfYear()); - assertEquals(13, date2.getDayOfMonth()); - - // since 1.6.1, for [JACKSON-360] - assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); - } - - public void testDateMidnightDeser() throws IOException - { - // couple of acceptable formats, so: - DateMidnight date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); - assertEquals(2001, date.getYear()); - assertEquals(5, date.getMonthOfYear()); - assertEquals(25, date.getDayOfMonth()); - - DateMidnight date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); - assertEquals(2005, date2.getYear()); - assertEquals(7, date2.getMonthOfYear()); - assertEquals(13, date2.getDayOfMonth()); - - // since 1.6.1, for [JACKSON-360] - assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); - } - - public void testDateMidnightDeserWithTypeInfo() throws IOException - { - ObjectMapper mapper = jodaMapper(); - mapper.addMixIn(DateMidnight.class, MixInForTypeId.class); - - // couple of acceptable formats, so: - DateMidnight date = mapper.readValue("[\"org.joda.time.DateMidnight\",[2001,5,25]]", DateMidnight.class); - assertEquals(2001, date.getYear()); - assertEquals(5, date.getMonthOfYear()); - assertEquals(25, date.getDayOfMonth()); - - DateMidnight date2 = mapper.readValue("[\"org.joda.time.DateMidnight\",\"2005-07-13\"]", DateMidnight.class); - assertEquals(2005, date2.getYear()); - assertEquals(7, date2.getMonthOfYear()); - assertEquals(13, date2.getDayOfMonth()); - } - - public void testCustomFormat() throws Exception - { - String STR = "2015-06-19"; - String ALT = "19.06.2015"; - - final DateMidnight inputDate = new DateMidnight(STR); - AlternateFormat input = new AlternateFormat(inputDate); - String json = MAPPER.writeValueAsString(input); - - if (!json.contains(ALT)) { - fail("Should contain '"+ALT+"', did not: "+json); - } - AlternateFormat output = MAPPER.readValue(json, AlternateFormat.class); - assertNotNull(output.value); - assertEquals(inputDate, output.value); - } - - public void testWithTimeZoneOverride() throws Exception - { - ObjectMapper mapper = jodaMapper(); - - DateMidnight date = mapper.readValue("[2001,5,25]", DateMidnight.class); - FormattedDateMidnight input = new FormattedDateMidnight(); - input.dateMidnight = date; - String json = mapper.writeValueAsString(input); - - FormattedDateMidnight result = mapper.readValue(json, FormattedDateMidnight.class); - assertNotNull(result); - - // Ensure timezone sticks: - DateMidnight resultMidnight = result.dateMidnight; - assertEquals(2001, resultMidnight.getYear()); - assertEquals(5, resultMidnight.getMonthOfYear()); - assertEquals(25, resultMidnight.getDayOfMonth()); - - DateTimeZone resultTz = resultMidnight.getZone(); - // Is this stable enough for testing? - assertEquals("America/New_York", resultTz.getID()); - } - - public void testSerializeAsTimestamp() throws Exception - { - assertEquals(aposToQuotes("{'value':0}"), - MAPPER.writeValueAsString(new FormattedDateAsTimestamp( - new DateMidnight(0, DateTimeZone.UTC)))); - } -} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java 1970-01-01 00:00:00.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/depr/DateMidnightTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -0,0 +1,205 @@ +package com.fasterxml.jackson.datatype.joda.depr; + +import java.io.IOException; +import java.util.TimeZone; + +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 +{ + // let's default to String serialization + private final ObjectMapper MAPPER = jodaMapper() + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + + @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY, property = "@class") + private static interface MixInForTypeId { + } + + static class AlternateFormat { + @JsonFormat(pattern="dd'.'MM'.'YYYY") + public DateMidnight value; + + public AlternateFormat() { } + public AlternateFormat(DateMidnight v) { + value = v; + } + } + + static class FormattedDateMidnight { + @JsonFormat(timezone="EST") + public DateMidnight dateMidnight; + } + + static class FormattedDateAsTimestamp { + @JsonFormat(shape=JsonFormat.Shape.NUMBER) + public DateMidnight value; + + protected FormattedDateAsTimestamp() { } + public FormattedDateAsTimestamp(DateMidnight d) { + value = d; + } + } + + /* + /********************************************************** + /* Test methods, deserialization + /********************************************************** + */ + + public void testDateMidnightDeserWithTimeZone() throws IOException + { + MAPPER.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); + // couple of acceptable formats, so: + DateMidnight date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); + assertEquals(2001, date.getYear()); + assertEquals(5, date.getMonthOfYear()); + assertEquals(25, date.getDayOfMonth()); + + DateMidnight date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); + assertEquals(2005, date2.getYear()); + assertEquals(7, date2.getMonthOfYear()); + assertEquals(13, date2.getDayOfMonth()); + + // since 1.6.1, for [JACKSON-360] + assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); + + MAPPER.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); + // couple of acceptable formats, so: + date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); + assertEquals(2001, date.getYear()); + assertEquals(5, date.getMonthOfYear()); + assertEquals(25, date.getDayOfMonth()); + + date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); + assertEquals(2005, date2.getYear()); + assertEquals(7, date2.getMonthOfYear()); + assertEquals(13, date2.getDayOfMonth()); + + // since 1.6.1, for [JACKSON-360] + assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); + } + + public void testDateMidnightDeser() throws IOException + { + // couple of acceptable formats, so: + DateMidnight date = MAPPER.readValue("[2001,5,25]", DateMidnight.class); + assertEquals(2001, date.getYear()); + assertEquals(5, date.getMonthOfYear()); + assertEquals(25, date.getDayOfMonth()); + + DateMidnight date2 = MAPPER.readValue(quote("2005-07-13"), DateMidnight.class); + assertEquals(2005, date2.getYear()); + assertEquals(7, date2.getMonthOfYear()); + assertEquals(13, date2.getDayOfMonth()); + + // since 1.6.1, for [JACKSON-360] + assertNull(MAPPER.readValue(quote(""), DateMidnight.class)); + } + + public void testDateMidnightDeserWithTypeInfo() throws IOException + { + ObjectMapper mapper = jodaMapper(); + mapper.addMixIn(DateMidnight.class, MixInForTypeId.class); + + // couple of acceptable formats, so: + DateMidnight date = mapper.readValue("[\"org.joda.time.DateMidnight\",[2001,5,25]]", DateMidnight.class); + assertEquals(2001, date.getYear()); + assertEquals(5, date.getMonthOfYear()); + assertEquals(25, date.getDayOfMonth()); + + DateMidnight date2 = mapper.readValue("[\"org.joda.time.DateMidnight\",\"2005-07-13\"]", DateMidnight.class); + assertEquals(2005, date2.getYear()); + assertEquals(7, date2.getMonthOfYear()); + assertEquals(13, date2.getDayOfMonth()); + } + + /* + /********************************************************** + /* 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"; + + final DateMidnight inputDate = new DateMidnight(STR); + AlternateFormat input = new AlternateFormat(inputDate); + String json = MAPPER.writeValueAsString(input); + + if (!json.contains(ALT)) { + fail("Should contain '"+ALT+"', did not: "+json); + } + AlternateFormat output = MAPPER.readValue(json, AlternateFormat.class); + assertNotNull(output.value); + assertEquals(inputDate, output.value); + } + + public void testWithTimeZoneOverride() throws Exception + { + ObjectMapper mapper = jodaMapper(); + + DateMidnight date = mapper.readValue("[2001,5,25]", DateMidnight.class); + FormattedDateMidnight input = new FormattedDateMidnight(); + input.dateMidnight = date; + String json = mapper.writeValueAsString(input); + + FormattedDateMidnight result = mapper.readValue(json, FormattedDateMidnight.class); + assertNotNull(result); + + // Ensure timezone sticks: + DateMidnight resultMidnight = result.dateMidnight; + assertEquals(2001, resultMidnight.getYear()); + assertEquals(5, resultMidnight.getMonthOfYear()); + assertEquals(25, resultMidnight.getDayOfMonth()); + + DateTimeZone resultTz = resultMidnight.getZone(); + // Is this stable enough for testing? + assertEquals("America/New_York", resultTz.getID()); + } + +} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/InstantDeserTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -9,16 +9,11 @@ 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 @@ 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 @@ 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()); + } } diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/IntervalDeserTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -21,12 +21,6 @@ /* /********************************************************** - /* Test methods - /********************************************************** - */ - - /* - /********************************************************** /* Tests for Interval type /********************************************************** */ @@ -46,20 +40,19 @@ 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 diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/LocalTimeDeserTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -14,12 +14,6 @@ private static interface ObjectConfiguration { } - /* - /********************************************************** - /* Test methods - /********************************************************** - */ - private final ObjectMapper MAPPER = jodaMapper(); /* diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MonthDayDeserTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 @@ 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); + } } diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/deser/YearMonthDeserTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -54,4 +54,13 @@ } } + 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()); + } } diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/IntervalSerializationTest.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -package com.fasterxml.jackson.datatype.joda; - -import java.io.IOException; - -import org.joda.time.DateTimeZone; -import org.joda.time.Interval; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.*; - -public class IntervalSerializationTest extends JodaTestBase -{ - @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY, property = "@class") - private static interface ObjectConfiguration { - } - - static class FormattedInterval - { - @JsonFormat(timezone="EST") - public Interval interval; - } - - /* - /********************************************************** - /* Test methods - /********************************************************** - */ - - private final ObjectMapper MAPPER = jodaMapper(); - { - MAPPER.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - MAPPER.enable(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS); - } - private final ObjectWriter WRITER = MAPPER.writer(); - - public void testIntervalSerBasic() throws IOException - { - Interval interval = new Interval(1396439982, 1396440001); - assertEquals(quote("1396439982-1396440001"), MAPPER.writeValueAsString(interval)); - - // related to #48 - assertEquals(quote("1970-01-17T03:53:59.982Z/1970-01-17T03:54:00.001Z"), - WRITER.without(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS) - .writeValueAsString(interval)); - } - - public void testIntervalSerWithTypeInfo() throws IOException - { - Interval interval = new Interval(1396439982, 1396440001); - - ObjectMapper mapper = jodaMapper(); - mapper.addMixIn(Interval.class, ObjectConfiguration.class); - assertEquals("[\"org.joda.time.Interval\"," + quote("1396439982-1396440001") + "]", - mapper.writeValueAsString(interval)); - } - - public void testWithTimeZoneOverride() throws Exception - { - Interval int1 = new Interval(1396439982, 1396440001); - FormattedInterval input = new FormattedInterval(); - input.interval = int1; - String json = MAPPER.writeValueAsString(input); - - FormattedInterval result = MAPPER.readValue(json, FormattedInterval.class); - assertNotNull(result); - - // Ensure timezone sticks: - Interval resultInt = result.interval; - assertEquals(1396439982, resultInt.getStartMillis()); - assertEquals(1396440001, resultInt.getEndMillis()); - - DateTimeZone resultTz = resultInt.getStart().getZone(); - // Is this stable enough for testing? - assertEquals("America/New_York", resultTz.getID()); - } -} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/JodaTestBase.java 2018-12-15 23:21:11.000000000 +0000 @@ -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(); } diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java 1970-01-01 00:00:00.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/InstantSerializationTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -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); + } +} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java 1970-01-01 00:00:00.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/IntervalSerializationTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -0,0 +1,78 @@ +package com.fasterxml.jackson.datatype.joda.ser; + +import java.io.IOException; + +import org.joda.time.DateTimeZone; +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 +{ + @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.WRAPPER_ARRAY, property = "@class") + private static interface ObjectConfiguration { + } + + static class FormattedInterval + { + @JsonFormat(timezone="EST") + public Interval interval; + } + + /* + /********************************************************** + /* Test methods + /********************************************************** + */ + + private final ObjectMapper MAPPER = jodaMapper(); + { + MAPPER.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + MAPPER.enable(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS); + } + private final ObjectWriter WRITER = MAPPER.writer(); + + public void testIntervalSerBasic() throws IOException + { + Interval interval = new Interval(1396439982, 1396440001); + assertEquals(quote("1396439982-1396440001"), MAPPER.writeValueAsString(interval)); + + // related to #48 + assertEquals(quote("1970-01-17T03:53:59.982Z/1970-01-17T03:54:00.001Z"), + WRITER.without(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS) + .writeValueAsString(interval)); + } + + public void testIntervalSerWithTypeInfo() throws IOException + { + Interval interval = new Interval(1396439982, 1396440001); + + ObjectMapper mapper = jodaMapper(); + mapper.addMixIn(Interval.class, ObjectConfiguration.class); + assertEquals("[\"org.joda.time.Interval\"," + quote("1396439982-1396440001") + "]", + mapper.writeValueAsString(interval)); + } + + public void testWithTimeZoneOverride() throws Exception + { + Interval int1 = new Interval(1396439982, 1396440001); + FormattedInterval input = new FormattedInterval(); + input.interval = int1; + String json = MAPPER.writeValueAsString(input); + + FormattedInterval result = MAPPER.readValue(json, FormattedInterval.class); + assertNotNull(result); + + // Ensure timezone sticks: + Interval resultInt = result.interval; + assertEquals(1396439982, resultInt.getStartMillis()); + assertEquals(1396440001, resultInt.getEndMillis()); + + DateTimeZone resultTz = resultInt.getStart().getZone(); + // Is this stable enough for testing? + assertEquals("America/New_York", resultTz.getID()); + } +} diff -Nru jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java --- jackson-datatype-joda-2.9.4/src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java 2018-01-24 05:15:30.000000000 +0000 +++ jackson-datatype-joda-2.9.8/src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java 2018-12-15 23:21:11.000000000 +0000 @@ -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 @@ } 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 @@ assertEquals("[\"org.joda.time.LocalDate\",\"2001-05-25\"]", mapper.writeValueAsString(date)); } - /* /********************************************************** /* Tests for LocalTime type @@ -224,35 +193,6 @@ 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 @@ 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 @@ 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); + } }