-
Notifications
You must be signed in to change notification settings - Fork 3
Jackson3 Changes
Tatu Saloranta edited this page Aug 7, 2017
·
32 revisions
- Jackson 3.x will require and be based on Java 8
- with possible exception of
jackson-coreandjackson-annotations(?)
- with possible exception of
- Embed some/all Java8 modules
- Embed "parameter names", "datatypes" (
Optional) - Need to think of Java 8 date/time module (size)
- Embed "parameter names", "datatypes" (
- Should we combine
databindwith "base modules" (mr-bean, afterburner, jaxb-annotations) for easier tracking of API change effects?
Plan is to immediately remove all things deprecated (but not yet removed) by version 2.9, including things that are part of Public API (which have been retained throughout whole 2.x cycle, unlike internal/package APIs).
This includes:
- Old JSON Schema generation that builds
JsonNode(already deprecated)- Not actively maintained since at least 2.4, deprecated by visitor-based approach since then
- May want to rewrite visitor-introspection interface as well; too JSON Schema centric
Following are things that are thought to be removed as of now:
- Dataformat auto-detection (most in streaming, some in databind)
- supported by some formats, but complicated to make work at higher level
- Ability to re-configure
ObjectMapperwith different codec factory (JsonFactory)- If codec factory is fixed since construction, allows databind/core to be more optimized, esp. for binary formats where name is not decoded from input but inferred from schema (
protobuf,avro) -- could lead to non-trivial performance improvements
- If codec factory is fixed since construction, allows databind/core to be more optimized, esp. for binary formats where name is not decoded from input but inferred from schema (
Further following features are up for discussion
- Serializability of components (from
ObjectMapperon)- Original justification was to allow "thaw"/"unthaw" for Android, but it is questionable whether observed improvement was due to use of JDK serialization, or something else (perf problem in setup)
- In general, idea of serializing active components is not a good idea: and making it explicit these are not serializable can even help resolve problems on systems like distributed data streaming processors (Spark, Storm etc)
- Lots of bits of extra code, removal of which would clean up codebase a bit; but more importantly, less code to maintain, test
- May still want to offer some level of explicit support for passing configuration of
ObjectMapper/ObjectReader/ObjectWriter? That is, allow some form of externalizing settings, if possible (but may not be... perhaps only for some of settings)
MapperFeature:
-
USE_STD_BEAN_NAMING: should always be used, no need for old slightly differing algorithm
-
ContextualSerializer/ContextualDeserializer,ResolvableSerializer/ResolvableDeserializer- just embed as part of
JsonSerializer/JsonDeserializer, with no-op implementation
- just embed as part of
-
JsonNodeneeds major rework; can do binary-incompatible return value changes
(will require wiki sub-page)
-
MapperFeature-
SORT_PROPERTIES_ALPHABETICALLY: default totrue(falsereally doesn't make much sense since it is unstable, and arbitrary based on JVM/JDK)
-
-
DeserializationFeature-
READ_ENUMS_USING_TO_STRING: default totrue(instead offalsethat relies onname()) -
FAIL_ON_UNKNOWN_PROPERTIES: default tofalse? (TOP REQUEST by users)
-
-
SerializationFeature-
FAIL_ON_EMPTY_BEANS: default tofalse
-
- Other
- Check defaults of date/time handling
-
JsonStreamContext: implement "currentValue" access in base class (remove from sub-classes)