-
Notifications
You must be signed in to change notification settings - Fork 6
Jackson Work in Progress
2024-03-31: Out-of-Date / Deprecated
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 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)
- 13-FEb-2023, tatu: Minor clean up; haven't been updating recently
- 04-Oct-2022, tatu: Had a quick look after
2.14.0-rc1
release (no changes) - 01-Oct-2021, tatu: Clean up after
2.13.0
release - 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
Jackson 2.14.0 was released in November 2021. After this focus has continued on 2.15 development, to tackle 2 main issues:
- Security issues (DoS), adding processing limits
- Prepare for (and ideally, do!) the Major Property Introspection rewrite (also important for Record support)
Question of priority between 3.0 and 2.x beyond 2.15 is still open:
- For 3.0, Java/Maven package renaming was completed to allow "2.x vs 3.x" co-existence (
com.fasterxml.jackson
->tools.jackson
) - For 2.x there are a few focus areas:
- Specialized Feature sets for to replace use of
DeserializationFeature
/SerializationFeature
for "too-specific" (not cross-cutting) features- Initially added in 2.14, continuing to make use
- Rewrite Property introspection (esp. to help with Creator properties) -- did not get into 2.13
- (if time permits) Processing limits for Streaming API
- Specialized Feature sets for to replace use of
But, currently I think that:
- 2.15: Release candidate (at least) in March 2023
- 3.0: limited progress during mid-2023, similarly, unlikely to proceed before 2023/Q2
Waiting:
- (hibernate) https://github.com/FasterXML/jackson-datatype-hibernate/pull/146 -- Persistent collections
- Need CLA, rebase, impls for other Hib versions
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/296 -- YAML anchor?
- (databind) https://github.com/FasterXML/jackson-databind/issues/3352 -- Records, "opens" access
- (Java 8) https://github.com/FasterXML/jackson-modules-java8/issues/224 --
DurationSerializer
&JsonFormat.shape
handling- Has failing test case
- (databind) https://github.com/FasterXML/jackson-databind/issues/3251 -- Generic class with generic field of runtime type Double is deserialized as BigDecimal when used with @JsonTypeInfo and JsonTypeInfo.As.EXISTING_PROPERTY
- (jackson-jr) https://github.com/FasterXML/jackson-jr/issues/90 -- USE_BIG_DECIMAL_FOR_FLOATS feature not working when using treeFrom
- Difficult to address, Tree module has no access to
jackson-core
settings
- Difficult to address, Tree module has no access to
- (databind) https://github.com/FasterXML/jackson-databind/issues/3355 -- Deserialization, order of
@JsonIgnoreProperties
- (databind) https://github.com/FasterXML/jackson-databind/issues/3561 -- Add
DeserializationContext
forset()
etc methods - (core) https://github.com/FasterXML/jackson-core/issues/668 -- Move
Reference
down toJacksonException
- Renaming:
- (databind) https://github.com/FasterXML/jackson-databind/issues/3043 --
SerializerProvider
->SerializationContext
-
JsonLocation
->TokenStreamLocation
(core)
- (databind) https://github.com/FasterXML/jackson-databind/issues/3043 --
- (jax-rs) https://github.com/FasterXML/jackson-jaxrs-providers/issues/123 -- Remove JAXB dependency from all but XML provider
- (JAXB) https://github.com/FasterXML/jackson-modules-base/issues/144 -- complicated Type ID handling thing
- (databind) https://github.com/FasterXML/jackson-databind/issues/3079 -- Record types,
ObjectMapper.updateValue()
- Requires separate
RecordDeserializer
, subtype ofBeanDeserializerBase
(sibling ofBeanDeserializer
)
- Requires separate
- Core:
- (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/679 -- Number parsing, multiple dots
- Databind
- (databind) https://github.com/FasterXML/jackson-databind/issues/2977 -- Incompatible FAIL_ON_MISSING_PRIMITIVE_PROPERTIES and field level @JsonProperty
- Likely requires JsonCreator introspection rewrite
- (databind) https://github.com/FasterXML/jackson-databind/issues/2977 -- Incompatible FAIL_ON_MISSING_PRIMITIVE_PROPERTIES and field level @JsonProperty
- 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
- (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)
- (cbor) https://github.com/FasterXML/jackson-dataformats-binary/issues/230 -- tagged types for
Date
etc
- CSV:
- (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/10 -- missing
null
values - (csv / PR) https://github.com/FasterXML/jackson-dataformats-text/pull/97 -- nested values (old PR)
- (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/198 -- Numbers as (quoted) Strings always
- (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/207 --
CsvSchema
introspection not working with Builder - (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/210 -- Quote surrounding space?
- (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/264 -- Records, alphabetic ordering
- (csv) https://github.com/FasterXML/jackson-dataformats-text/issues/10 -- missing
- Protobuf
- (protobuf) https://github.com/FasterXML/jackson-dataformats-binary/pull/220 -- Schema generation
- Need tests, questions about API compatibility
- (protobuf) https://github.com/FasterXML/jackson-dataformats-binary/issues/73: (
protobuf
) References to nested types - (protobuf) Consider changing Schema-reading to use
Wire-schema
library: https://github.com/square/wire/tree/master/wire-library/wire-schema
- (protobuf) https://github.com/FasterXML/jackson-dataformats-binary/pull/220 -- Schema generation
- XML
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/114 -- XML,
JsonParser.Feature.STRICT_DUPLICATE_DETECTION
not implemented - (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/247 -- Root name (local name) not validated
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/114 -- XML,
- YAML
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/36 -- emit comments
- (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/pull/242 -- Add
FlowStyleResolver
to enable custom YAML node style resolution- Waits for CLA, some questions on interface definition
- (yaml) https://github.com/FasterXML/jackson-dataformats-text/issues/252 -- Redesign
StringQuotingChecker
- Jackson-jr
- (jackson-jr) https://github.com/FasterXML/jackson-jr/issues/78 -- Nulls for wrappers
- alas, rather tricky to do since current serialize does not have primitive/wrapper distinction
- (jackson-jr) https://github.com/FasterXML/jackson-jr/issues/78 -- Nulls for wrappers
- (external) https://github.com/infobip/infobip-jackson-extension -- multi-level type resolution
- (jackson-datatypes-misc) https://github.com/FasterXML/jackson-datatypes-misc/issues/5 -- Consider adding
jackson-datatype-money
(NOT joda-money already added) onjackson-datatypes-misc
for 2.14 or later- (external) https://github.com/zalando/jackson-datatype-money/issues/224 -- original issue
- Waiting for PR
- (classmate) https://github.com/FasterXML/java-classmate/issues/57 -- return type co-variance
- (classmate) https://github.com/FasterXML/java-classmate/issues/50 -- Add a convenience method for the full set of types for a type
- 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
@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) 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....
- (databind) https://github.com/FasterXML/jackson-databind/issues/2803 --
Important
- (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/75 -- Support
CharacterEscapes
using 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/324 -- use of
xsi:type
for writing - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/358 -- Skip
xsi
values - (xml) https://github.com/FasterXML/jackson-dataformat-xml/issues/356 -- Root name for Collection types
- Finish partial rewrite of
JsonFormat.Shape
handling 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"
JavaType
forStream
,Iterator
etc -
https://github.com/FasterXML/jackson-core/issues/485: Add
vanilla
version 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
@Repeated
on annotations likeJsonSubtypes.Type
-
https://github.com/FasterXML/jackson-annotations/pull/149: Use
- 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)
- Remove mutability of
- Databind
- https://github.com/FasterXML/jackson-databind/issues/1687: JsonView with JsonNode (convenience method)
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/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)
- 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 --
ClassDescription
not 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
Note: many Big Ideas now included on JSTEP page.
But a scratchpad for stuff can be retained...
- Add new
JsonToken
type 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
- Write blog entries about:
- How does property introspection COMPLETELY work
- 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
- Note: already blogged about
- Simple "untyped" serialization with Guava ImmutableMap/ImmutableList: https://cowtowncoder.medium.com/casual-json-generation-with-jackson-191abfa1f7dc
Moved to: https://github.com/cowtowncoder/MyOpenSourceDiary/wiki