Skip to content

Jackson Work in Progress

Tatu Saloranta edited this page Feb 25, 2021 · 3 revisions
  1. Jackson & Friends W-I-P
This page is a "living document" of on-going work, mostly by `@cowtowncoder` (Tatu), although other committers are welcome to update it as well.

Note that there is also a complementary set of things core developers may eventually work on but that may be better tackled by other contributors: [New](https://github.com/FasterXML/jackson/wiki/Issues-For-New-Contributors)

Contents are divided in multiple sections, first in a few kinds of actionable (*) things. Specific breakdown varies but is along lines of:

  • Things to evaluate -- haven't yet had a chance to fully grok
  • Actively worked on -- items to start work on (or being worked on)
  • Urgent to fix -- security problems, correctness (corruption), reliability (threading/concurrency)
  • Simple to fix -- low(er) hanging fruits that are likely relatively easily fixable (and important enough to include here)
  • Important to fix -- things that important strategically, or highly "voted", but that are more involved to fix/implement.
and then one other theoretically-actionable category:
  • Things to contemplate (not easy to fix and not even sure if behavior should change and/or if attempting to fix is worth the hassle or even possible), divided into
    1. May revisit
    2. Unlikely to revisit

as finally the "Recently Completed" addendum. Plus, I try to give "safe harbor" style guesstimate on timing of next minor (and in case of 3.0, major) releases.

Note that this page does NOT contain "Big Ideas" for Jackson 3.0: these are covered on separate [JSTEP](JSTEP) page.

(*) actionable meaning, in general, that progress is only/mostly limited by time available and not by inherent difficulty, or lack of design or ideas of how to tackle the need.

    1. Last updates
(updated on daily basis so only some of major updates mentioned)
  • 01-Dec-2020, tatu: Clean up after `2.12.0` release
  • 26-Apr-2020, tatu: Clean up after `2.11.0` release
  • 26-Sep-2019, tatu: `2.10.0` (final) released: clear up "recently completed" entries
  • 29-Oct-2018, tatu: Create the initial version
    1. When will 2.13 and 3.0 be out?
Development of 2.x will slow down a bit after 2.12, as focus shifts back to 3.0.

But, currently I think that:

  • 2.13 should be released towards end of Q2/2021 (or early Q3), so June/July 2021
  • 3.0 could get close to release candidates during mid 2021 as well (July/August)
    1. On-going 3.0 work
    * (databind) https://github.com/FasterXML/jackson-databind/issues/3043 --  `SerializerProvider` -> `SerializationContext`
    * `JsonLocation` -> `TokenStreamLocation` (core)
    1. On-going/planned 2.12 work
    2. On-going/planned 2.13 work
  • PRs from other devs:
    * (yaml) https://github.com/FasterXML/jackson-dataformats-text/pull/242 -- Add FlowStyleResolver to enable custom YAML node style resolution
    * Likely requires JsonCreator introspection rewrite
    * probably requires Creator-introspection rewrite? (and/or gets fixed by it)
    1. Misc other in 2.12 timeframe?
  • ND4j:
   * https://github.com/deeplearning4j/nd4j/issues/2871 -- Jackson 2.9.5 version upgrade
      1. Missed 2.12, re-evaluate
    * (external) https://github.com/zalando/jackson-datatype-money/issues/224 -- original issue
    * Waiting for PR
    * State?
    * Need tests, questions about API compatibility
    1. Work-in-progress
Misc non-Jackson:
    * ^^^ PR https://github.com/FasterXML/java-classmate/pull/56
    1. To evaluate
    1. To work on
      1. 2.13
        1. 2.13 / streaming
        1. 2.13 / databind
  • PRs:
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2951 -- Inverse access of `@JsonProperty(access=)` so it can work differently on server side and client side
        * ^^^ PR: https://github.com/FasterXML/jackson-databind/pull/2966
  • Databind, important, "most wanted":
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2968 -- Deserialization of `@JsonTypeInfo` annotated type fails with missing type id even for explicit concrete subtypes
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2045 -- `@PreSerialize` / `@PostDeserialize` method annotations
    * (databind) `JsonNodeFeature`? [JSTEP-3](https://github.com/FasterXML/jackson-future-ideas/wiki/JSTEP-3)
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2971 -- Allow registering a hook to modify/pre-process String values read
        * (core) Matching issue for ^^^ https://github.com/FasterXML/jackson-core/issues/355
  • Databind, important, other:
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2803 -- `@JsonIgnoreProperties`, cyclic types
        * Nasty, but not easy to fix, may have to wait for 2.13+
    * (databind) `@JsonNaming` on value class not applied to use via Builder -- Builder, `@JsonNaming` on value class
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2722 -- Allow construction of "format-bending" `ObjectMapper.Builder`s?
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2950 -- `ObjectMapper.registerSubTypes(...)` does not allow multiple type ids to map to one `Class` (earlier fix for allowing this for annotations)
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2502 -- Add a way to configure Caches Jackson uses
  • Databind, simple: (many marked as "good first issue")
    * (databind) https://github.com/FasterXML/jackson-databind/issues/1281 -- `@JsonIgnoreProperties` for serialization via "any getter"
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2287 - Allow overriding `FAIL_ON_MISSING_CREATOR_PROPERTIES` with `required = false`
  • Databind, other:
    * (databind) https://github.com/FasterXML/jackson-databind/issues/1172 -- Json View not working with JsonCreator
    * (databind) https://github.com/FasterXML/jackson-databind/issues/1770 -- BigDecimalNode (NaN due to `Double`) 
    * (databind) https://github.com/FasterXML/jackson-databind/issues/1850: Enum, `@JsonValue`, `int`/`long`
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2253: support multiple properties with `@JsonRootName`, unwrap;
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2354 -- Builder, configure static builder creation method on value class?
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2438 -- Duplicate property value Creator vs field/setter
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2465 -- `@JacksonInject`, `@JsonCreator`
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2678 -- `@JacksonInject`, overrides (skip `private` fields if constructor)
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2667 -- Enum naming strategy?
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2536 -- Need a Feature like "READ_ENUM_KEYS_USING_INDEX" 0
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2563 -- Turkish I, part 2
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2692 -- Should never call `set()` on setterless property during deserialization
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2724 -- No Polymorphic Type Id for Object Ids, even if Default Typing enabled
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2932 -- Name auto-detection for Creator, `@JsonDeserialize`
        1. 2.13, XML
Next:
    * similarly, different XML declaration (`standalone`) -- closure/function of "write document beginning"
Important Other
     * https://github.com/FasterXML/jackson-dataformat-xml/pull/357 (PR)

Deferred:

        1. 2.13, other dataformats
  • Avro
    * (PR) (avro): https://github.com/FasterXML/jackson-dataformats-binary/pull/133 -- Logical types
    * (avro) https://github.com/FasterXML/jackson-dataformats-binary/issues/164 -- reader/writer schema, union
    * (avro) https://github.com/FasterXML/jackson-dataformats-binary/issues/165 -- missing default value for `Map`
  • CBOR
  • CSV
    * (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/198 -- Numbers as (quoted) Strings always
    * (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/176 -- Allow skipping first line of input file
    * (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/10 -- missing `null` values
    * (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/210 -- Quote surrounding space?
  • Protobuf
    * https://github.com/FasterXML/jackson-dataformats-binary/issues/73: (`protobuf`) References to nested types
    * Consider changing Schema-reading to use `Wire-schema` library: https://github.com/square/wire/tree/master/wire-library/wire-schema
  • YAML:
    * (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/215 -- Doc start marker being written via `ObjectWriter` (done in constructor)
        1. 2.13, other datatypes
    1. Waiting....
      1. Other/Misc
    1. Important Things
      1. 3.0
    * f.ex. one with no `PrettyPrinter`, using standard quoting
  • (databind) Introspection callbacks ("json schema"): simplify String-type callbacks etc
    1. Simple Things
      1. 3.0
  • Annotations
    * https://github.com/FasterXML/jackson-annotations/pull/149: Use `@Repeated` on annotations like `JsonSubtypes.Type`
  • Streaming
    * Remove mutability of `JsonGenerator`: NOTE, `CharacterEscapes` hard (due to JSONP), max-non-escaped easy too? Features?
    * https://github.com/FasterXML/jackson-core/issues/507: Escape forward slash in Strings by default (but also allow change)
  • Databind
    * https://github.com/FasterXML/jackson-databind/issues/1687: JsonView with JsonNode (convenience method)
    1. Deferred
These entries have been evaluated but not solved (either worked without full solution, or deemed unlikely to be solved and no attempt made)
      1. Deferred - hope to revisit (when time permits)
  • Databind
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2624 -- Config override for "with"-prefix (builders).
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2787 -- Field mix-ins do not work for `Enum`s
        * Can be fixed but requires changes to `AnnotationIntrospector`
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2686 -- `@JsonBackReference`, Builder
    * https://github.com/FasterXML/jackson-databind/issues/1986: `Throwable`, self-reference (NOTE: probably not really simple to solve, but need to evaluate)
    * https://github.com/FasterXML/jackson-databind/issues/2382: Support `AutoClosable` (NOTE: not as trivial to implement as I thought)
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2593 -- Java 9, `StackTraceElement`
  • Java 8:
    * (datatypes) https://github.com/FasterXML/jackson-modules-java8/issues/86 -- `Optional`, polymorphic types -- bug it seems, but hard to reason about.
    * (date/time) https://github.com/FasterXML/jackson-modules-java8/issues/109: `Instant`, integer/nanoseconds -- probably NOT a bug, but need to verify
    * (Java 8 optional) https://github.com/FasterXML/jackson-modules-java8/issues/154: `Optional<JsonNode>` not working.
        * Not a bug per se, but could this be improved?
    * (CSV) https://github.com/FasterXML/jackson-dataformats-text/issues/45 -- trailing linefeed
        * (PR) ^^^ https://github.com/FasterXML/jackson-dataformats-text/pull/46 -- ideally rewrite
      1. Deferred - for now
      1. Deferred - unlikely to revisit
  • Databind
    * https://github.com/FasterXML/jackson-databind/pull/2180 -- order of Constructor / Factory method lookup for KEY deserializers (change order from current)
    * https://github.com/FasterXML/jackson-databind/issues/2305: problem with `@JsonCreator`, single string argument
        * Due to "all implicit" vs "all explicit": not sure if should change
    * (databind) https://github.com/FasterXML/jackson-databind/issues/2461 -- `@JsonUnwrapped`, serializer caching
        * Would be good to fully understand, but may be fundamental problem with multi-level nesting
    * `java.time.format.DateTimeFormatter` NOT being `java.io.Serializable`. Failing test added.
    * Unfortunately, while fixed for 3.0, difficult to fix for `2.10` due to 
    * Not clear we should do anything different: empty content is not parsed as valid Document by SnakeYAML
    * But technically we probably could induce empty Object if that made sense
    1. Big Ideas
Note: many Big Ideas now included on [JSTEP](JSTEP) page.

But a scratchpad for stuff can be retained...

  • Add new `JsonToken` type for "Native Object Id Reference", mostly for YAML?
    1. Documentation
(NOTE: need to include in some better way, but for now just need a place to add ideas)

Another dimension of things to work is... documentation.

    * How does property introspection COMPLETELY work
    * Simple "untyped" serialization with Guava ImmutableMap/ImmutableList
    * Using "Config Overrides"
    * How are `JsonSerializer`s located, initialized
    * How are `JsonDeserializer`s located, initialized
    * Null handling with XML (esp. `String`, `List`/`Map`)
    * Writing complete
        * Scalar serializer
        * Scalar deserializer
        * Converting serializer
        * Converting deserializer

    1. Recently completed
Here are things since ~January 2021.
      1. pre-2.12 (since 08-Jan-2021)
      2. 2.12 (since 2.12.1, 08-Jan-2021)
    * (databind) https://github.com/FasterXML/jackson-databind/issues/3025 -- actual issue on databind side
  • (java 8 date/time) https://github.com/FasterXML/jackson-modules-java8/issues/202 -- Unable to deserialize YearMonth when running as java9 module (27-Jan-2021)
  • (kotlin) https://github.com/FasterXML/jackson-module-kotlin/issues/409 -- Missing exports in `module-info` (29-Jan-2021)
  • (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/236 -- ArrayIndexOutOfBounds for short String (29-Jan-2021)
  • (CBOR) https://github.com/FasterXML/jackson-dataformats-binary/issues/240 -- Catch issue with invalid array (1 byte doc) (30-Jan-2013)
  • (annotations) https://github.com/FasterXML/jackson-annotations/issues/184 -- Improve Javadocs wrt `@JsonUnwrapped` etc (04-Feb-2021)
  • (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/451 -- NPE with polymorphic handling
  • (ion) https://github.com/FasterXML/jackson-dataformats-binary/pull/241 -- PR for enum/symbol handling (12-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3056 -- `ObjectNode` with `NullNode` update (15-Feb-2021)
  • (Ion) https://github.com/FasterXML/jackson-dataformats-binary/pull/242 -- WriteContext, sexp (17-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3055 -- Polymorphic deser, deduction (17-Feb-2021)
  • (databind/parameter-names) https://github.com/FasterXML/jackson-databind/issues/3060 -- Problems with `@JsonKey` for Hibernate, Parameter-names module (18-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3045 -- Polymorphic deser, `@JsonAnySetter` (19-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3008 -- External property id (19-Feb-2021)
  • (jax-rs) https://github.com/FasterXML/jackson-jaxrs-providers/issues/132 -- OSGi version
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3062 -- single-arg ctor conflict for `double`
  • (bom) https://github.com/FasterXML/jackson-bom/issues/40 -- jakarta versions (24-Feb-2021)
      1. 2.13
  • (java 8 date/time) https://github.com/FasterXML/jackson-modules-java8/pull/201 -- tests for Era (`uuuu` vs `yyyy`) (30-Jan-2021)
  • (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/239 -- Make sure UTF-8 code sequences always validated (30-Jan-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3035 -- Add `MapperBuilder.removeMixIn()` (31-Jan-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3036 -- lambda-requiring `MapperBuilder` methods in 2.13 (01-Feb-2021)
  • (joda-money) https://github.com/FasterXML/jackson-datatypes-misc/issues/8 -- Avoid NPE with validation (01-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3001 -- MapperBuilder.defaultAttributes(ContextAttributes) (01-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3002 -- DeserializationContext.readTreeAsValue(JsonNode, Class/JavaType)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3011 -- Clean up support for JDK "immutable" collections, maps etc. (02-Feb-2021)
  • (Ion) https://github.com/FasterXML/jackson-dataformats-binary/issues/246 -- Convenience Mapper-builder methods (19-Feb-2021)
      1. 3.0
  • (CSV) https://github.com/FasterXML/jackson-dataformats-text/issues/240 -- refactor `CsvMappingException` (23-Jan-2021)
  • (core) https://github.com/FasterXML/jackson-core/issues/663 -- Rename `JsonEOFException` as `EndOfContentException` (26-Jan-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3028 -- Use `StreamWriteCapability` for `UUIDSerializer` (29-Jan-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3037 -- Rename `Module` -> `JacksonModule` (03-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/2405: SQL date, default timezone
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3046 -- `JsonSerializable`->`JacksonSerializable` (08-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3047 -- `Bean[De]SerializerModifier`->`Value[De]SerializerModifier` (08-Feb-2021)
  • (databind) https://github.com/FasterXML/jackson-databind/issues/3044 - JsonSerializer`/`JsonDeserializer` -> `ValueSerializer`/`ValueDeserializer` (08-Feb-2021)
      1. Other
  • (woodstox) https://github.com/FasterXML/woodstox/issues/112 -- MAX-ATTRIBUTES setting only loosely enforced (28-Aug-2020)

Clone this wiki locally