[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