-
Notifications
You must be signed in to change notification settings - Fork 3
Jackson Work in Progress
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: https://github.com/FasterXML/jackson-dataformat-xml/issues/432 New Contributor Friendly Issues
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
- May revisit
- 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 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.
(updated on daily basis so only some of major updates mentioned)
- 01-Dec-2020, tatu: Clean up after
2.12.0release - 26-Apr-2020, tatu: Clean up after
2.11.0release - 26-Sep-2019, tatu:
2.10.0(final) released: clear up "recently completed" entries - 29-Oct-2018, tatu: Create the initial version
While patch releases occur somewhat frequently -- after initial minor version, usually once per month for 2 or 3, then 2-3 months after that -- minor versions have gone from "every 3 months" (with 1.x) to "every 6 months" (later 2.x) to "hard to say" (with 2.10 taking 2 years!). And with 2.x -> 3.0 work being ambitious, that is even less predictable.
But, currently I think that:
- 2.12 should be released during 2020, before end of November
- 3.0 could get close to release candidates during mid 2020 (Q2/Q3?)
- (java 8 date/time) https://github.com/FasterXML/jackson-modules-java8/issues/199 --
@JsonFormat,LocalDate - (datatypes-misc) https://github.com/FasterXML/jackson-datatypes-misc/issues/8 -- Avoid NPE with validation
- (kotlin) https://github.com/FasterXML/jackson-module-kotlin/issues/409 -- Missing exports in
module-info - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/445 --
java.lang.Object, multiple unwrapped collections - (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/236 -- ArrayIndexOutOfBounds for short String
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/442 -- Missing START_OBJECT token in complex element starting with text
- (databind) https://github.com/FasterXML/jackson-databind/issues/2992 -- Record,
PropertyNamingStrategy - (jax-rs) https://github.com/FasterXML/jackson-jaxrs-providers/issues/132 -- OSGi version
- Need PR for transformer wrt OSGi metadata
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/441 -- Serialization of
JsonNodeadds unnecessary wrapper (ObjectNode)- For 2.12.1, "dark launch"
- ND4j:
- https://github.com/deeplearning4j/nd4j/issues/2871 -- Jackson 2.9.5 version upgrade
- (databind/android) https://github.com/FasterXML/jackson-databind/issues/2807: catch-and-rethrow to help debuggering?
- Anything more that can be done... ?
- (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/230 -- tagged types for
Dateetc - (external) https://github.com/infobip/infobip-jackson-extension -- multi-level type resolution
Databind usability improvements:
- (databind) https://github.com/FasterXML/jackson-databind/issues/3001 -- MapperBuilder.defaulAttributes(ContextAttributes)
- (databind) https://github.com/FasterXML/jackson-databind/issues/3002 -- DeserializationContext.treeToValue(JsonNode, Class/JavaType)
Creator problems:
- (databind) https://github.com/FasterXML/jackson-databind/issues/2977 -- Incompatible FAIL_ON_MISSING_PRIMITIVE_PROPERTIES and field level @JsonProperty
Cleanup:
- https://github.com/FasterXML/jackson-databind/issues/3011 -- "Collections.xxxMap()" etc
- (jackson-datatypes-misc) https://github.com/FasterXML/jackson-datatypes-misc/issues/5 -- Consider adding
jackson-datatype-moneyonjackson-datatypes-miscfor 2.12- (external) https://github.com/zalando/jackson-datatype-money/issues/224 -- original issue
- Waiting for PR
- (streaming) https://github.com/FasterXML/jackson-core/issues/584 -- Type Ids, allow skipping
null- State?
- (protobuf) https://github.com/FasterXML/jackson-dataformats-binary/pull/220 -- Schema generation
- Need tests, questions about API compatibility
- (databind) https://github.com/FasterXML/jackson-databind/issues/2974 --
java.lang.Record,@JsonSetter(nulls = ...)(for 2.13?)
Misc non-Jackson:
- (woodstox) https://github.com/FasterXML/woodstox/issues/91 -- Location, external subsets (test added via PR 98)
- (woodstox) https://github.com/FasterXML/woodstox/issues/110 -- Felix vs OSGi core dep
- (classmate) https://github.com/FasterXML/java-classmate/issues/50 -- Add a convenience method for the full set of types for a type
- (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/166 -- feature to force use of length-prefix for all String values (waiting for possible PR)
- (databind) https://github.com/FasterXML/jackson-databind/issues/2816 -- Deeply nested "untyped" value (
java.lang.Object) deserialization - (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/207 --
CsvSchemaintrospection not working with Builder
- (streaming) https://github.com/FasterXML/jackson-core/issues/355 -- Allow registering "string-converter hook", for low-level coercion or String mutation
- (streaming) https://github.com/FasterXML/jackson-core/issues/478 --
ByteBufferfor non-blocking - (streaming) https://github.com/FasterXML/jackson-core/issues/652--
JsonProcessingExceptioninput source,byte[], no offsets
- 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
- (databind) https://github.com/FasterXML/jackson-databind/issues/2951 -- Inverse access of
- Databind, important, "most wanted":
- (databind) https://github.com/FasterXML/jackson-databind/issues/2968 -- Deserialization of
@JsonTypeInfoannotated type fails with missing type id even for explicit concrete subtypes - (databind) https://github.com/FasterXML/jackson-databind/issues/2045 --
@PreSerialize/@PostDeserializemethod annotations - (databind)
JsonNodeFeature? 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) https://github.com/FasterXML/jackson-databind/issues/2968 -- Deserialization of
- 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)
@JsonNamingon value class not applied to use via Builder -- Builder,@JsonNamingon value class - (databind) https://github.com/FasterXML/jackson-databind/issues/2722 -- Allow construction of "format-bending"
ObjectMapper.Builders? - (databind) https://github.com/FasterXML/jackson-databind/issues/2950 --
ObjectMapper.registerSubTypes(...)does not allow multiple type ids to map to oneClass(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) https://github.com/FasterXML/jackson-databind/issues/2803 --
- Databind, simple: (many marked as "good first issue")
- (databind) https://github.com/FasterXML/jackson-databind/issues/1281 --
@JsonIgnorePropertiesfor serialization via "any getter" - (databind) https://github.com/FasterXML/jackson-databind/issues/2287 - Allow overriding
FAIL_ON_MISSING_CREATOR_PROPERTIESwithrequired = false
- (databind) https://github.com/FasterXML/jackson-databind/issues/1281 --
- 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 (skipprivatefields 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
Next:
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/247 -- Root name (local name) not validated
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/322 -- Should throw error for mismatched wrapper name
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/306 -- @JacksonXmlText, creator, "" does not map to creator argument
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/150 -- Add DOCTYPE element
- similarly, different XML declaration (
standalone) -- closure/function of "write document beginning"
- similarly, different XML declaration (
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/426 -- Polymorphic List deser problems again
Important
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/75 -- Support
CharacterEscapesusing Stax (Woodstox/Aalto) functionality - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/244 -- Map names invalid
Other
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/114 -- XML,
JsonParser.Feature.STRICT_DUPLICATE_DETECTIONnot implemented - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/324 -- use of
xsi:typefor writing - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/358 -- Skip
xsivalues - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/356 -- Root name for Collection types
Deferred:
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/289 -- BigDecimal, type info
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/299 --
@JsonUnwrapped, unwrapped List - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/330 -- Deser, List, Kotlin, BigXML -- waiting for test case
- 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
nullvalues - (csv / PR) https://github.com/FasterXML/jackson-dataformats-text/pull/97 -- nested values (old PR)
- (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-schemalibrary: https://github.com/square/wire/tree/master/wire-library/wire-schema
-
https://github.com/FasterXML/jackson-dataformats-binary/issues/73: (
- YAML:
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/215 -- Doc start marker being written via
ObjectWriter(done in constructor)
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/215 -- Doc start marker being written via
- (guava/collections) https://github.com/FasterXML/jackson-datatypes-collections/pull/69 -- Add support for Guava primitives during deserialization
- (databind) https://github.com/FasterXML/jackson-databind/issues/2572:
JsonSetter, no-default-ctor -- not sure if bug or not; 2.9 vs 2.10 behavior
- Finish partial rewrite of
JsonFormat.Shapehandling to support ALL changes (POJO to/from non-POJO), for types AND properties -
https://github.com/FasterXML/jackson-databind/issues/2550: Rewrite Enum introspection via
AnnotationIntrospector -
https://github.com/FasterXML/jackson-databind/issues/2246: "Iterable"
JavaTypeforStream,Iteratoretc -
https://github.com/FasterXML/jackson-core/issues/485: Add
vanillaversion for generators, to optimize handling- f.ex. one with no
PrettyPrinter, using standard quoting
- f.ex. one with no
- (databind) Introspection callbacks ("json schema"): simplify String-type callbacks etc
- Annotations
-
https://github.com/FasterXML/jackson-annotations/pull/149: Use
@Repeatedon annotations likeJsonSubtypes.Type
-
https://github.com/FasterXML/jackson-annotations/pull/149: Use
- Streaming
- Remove mutability of
JsonGenerator: NOTE,CharacterEscapeshard (due to JSONP), max-non-escaped easy too? Features? - Remove
JsonParser.setSchema() - https://github.com/FasterXML/jackson-core/issues/507: Escape forward slash in Strings by default (but also allow change)
- Remove mutability of
- Databind
- https://github.com/FasterXML/jackson-databind/issues/2405: SQL date, default timezone
- https://github.com/FasterXML/jackson-databind/issues/1687: JsonView with JsonNode (convenience method)
-
https://github.com/FasterXML/jackson-databind/issues/2496: "null key" and "null value" serializers via
MapperBuilder, not module?
These entries have been evaluated but not solved (either worked without full solution, or deemed unlikely to be solved and no attempt made)
- 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
Enums- Can be fixed but requires changes to
AnnotationIntrospector
- Can be fixed but requires changes to
- (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?
- (datatypes) https://github.com/FasterXML/jackson-modules-java8/issues/86 --
- JSON Schema: https://github.com/FasterXML/jackson-module-jsonSchema/issues/136 --
ClassDescriptionnot used? - Formats:
- (CSV) https://github.com/FasterXML/jackson-dataformats-text/issues/45 -- trailing linefeed
- (PR) ^^^ https://github.com/FasterXML/jackson-dataformats-text/pull/46 -- ideally rewrite
- (CSV) https://github.com/FasterXML/jackson-dataformats-text/issues/45 -- trailing linefeed
- (jackson-jr) https://github.com/FasterXML/jackson-jr/issues/62: Support
atwithJsonPointer(but what abstraction?JSONprobably, otherwise too many overloads) - problem, noObjectWriterequivalent for jackson-jr - (databind) https://github.com/FasterXML/jackson-databind/issues/1196: Collect multiple errors
- 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
- (Java8) https://github.com/FasterXML/jackson-modules-java8/issues/111: Java8 module(s), serializability
-
java.time.format.DateTimeFormatterNOT beingjava.io.Serializable. Failing test added. - Unfortunately, while fixed for 3.0, difficult to fix for
2.10due to
-
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/173 -- yaml doc from empty input
- 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
Note: many Big Ideas now included on JSTEP page.
But a scratchpad for stuff can be retained...
- Add new
JsonTokentype for "Native Object Id Reference", mostly for YAML?
(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.
- https://github.com/FasterXML/jackson-dataformats-text/issues/133: (YAML) Document multi-doc use case, differences
- Rewrite
jackson-databindREADMEto make it plain that JSON is NOT the only supported format: add examples, links - Jackson 2.10 release documentation: (PolymorphicTypeValidator, JsonNode impr done)
- Jackson-jr improvements: read value sequences, custom
ValueReaders,ValueWriters
- Jackson-jr improvements: read value sequences, custom
- Write blog entries about:
- How does property introspection COMPLETELY work
- Simple "untyped" serialization with Guava ImmutableMap/ImmutableList
- Using "Config Overrides"
- How are
JsonSerializers located, initialized - How are
JsonDeserializers located, initialized - Null handling with XML (esp.
String,List/Map)
Here are things since April 26, 2020 (time of 2.11.0 release)
- (CVE, databind) https://github.com/FasterXML/jackson-databind/issues/2986 -- polymorphic deser (15-Dec-2020)
- (CVE, databind) https://github.com/FasterXML/jackson-databind/issues/3003 -- (CVE) wrt Xalan-embedded (31-Dec-2020)
- (CVE, databind) https://github.com/FasterXML/jackson-databind/issues/3004 -- more potential DBCP class(es) (31-Dec-2020)
- (databind) https://github.com/FasterXML/jackson-databind/issues/2962 -- Deserializing a
NumberthrowsMismatchedInputExceptionin Jackson 2.12.0 (05-Dec-2020) - (databind) https://github.com/FasterXML/jackson-databind/issues/2973 --
StringDeserializer,DeserializationProblemHandlernot called for JSON Object (08-Dec-2020) - (Ion) https://github.com/FasterXML/jackson-dataformats-binary/pull/232 -- New Type ID handling (09-Dec-2020)
- (databind) https://github.com/FasterXML/jackson-databind/pull/2978 --
BigDecimalcreator (15-Dec-2020) - (databind) https://github.com/FasterXML/jackson-databind/issues/2990 -- BasicClassIntrospector changes (18-Dec-2020)
- (afterburner) https://github.com/FasterXML/jackson-modules-base/issues/120 -- Afterburner does not support the new
CoercionConfig(18-Dec-2020) - (joda) PR https://github.com/FasterXML/jackson-datatype-joda/pull/120 -- Cache with format offset parsed (20-Dec-2020)
- (databind) https://github.com/FasterXML/jackson-databind/pull/2979 -- PR for property rename/trim ordering (21-Dec-2020)
- (kotlin) https://github.com/FasterXML/jackson-module-kotlin/issues/402 -- Java module system, remove
java.base(30-Dec-2020) - (json-p/jsr-353) https://github.com/FasterXML/jackson-datatypes-misc/issues/7 -- wrong module id (08-Jan-2020)
- (java 8 date/time) https://github.com/FasterXML/jackson-modules-java8/issues/196 -- not applying overrides (08-Jan-2020)
- (woodstox) https://github.com/FasterXML/woodstox/issues/112 -- MAX-ATTRIBUTES setting only loosely enforced (28-Aug-2020)