Skip to content

Jackson Release 2.10

Tatu Saloranta edited this page Jul 20, 2019 · 83 revisions

Version 2.10 is under development, as of late-October 2018. It will potentially be the last 2.x minor release.

Changes, compatibility

No changes to minimum JDK baselines for use, but 2.10 will include JDK 9+ compliant module-info.class which should improve forward-compatibility.

JDK 8 will be required to build all components, however, as module info inclusion plug-in requires it (note: publishing to Maven Central also requires JDK 8)

New Modules, status changes

Datatype: Eclipse-collection

First official version of the jackson-datatype-eclipse-collections (for Eclipse Collections was introduced in 2.10 (preview version included since 2.9.5)

Major features of 2.10

Much of additional functionality mirrors changes that 3.0 developments are making, in form that will get some of the benefits, and should ease migration to 3.0.

Safe Default typing

Due to numerous CVEs for one specific kind of Polymorphic Deserialization (see this blog post for details), block-list approach has proven insufficient to prevent issues. As a result, #2195 -- add abstraction PolymorphicTypeValidator, for limiting allowed polymorphic subtypes -- was added.

Builder-based construction of streaming factories and ObjectMapper

Although full moved to immutable factories, mappers, by (only) using builder-style construction will only be included in 3.0, 2.10 does introduce builder-pattern itself (but does not force strict immutability beyond what 2.x API supports). The main benefits of this addition are:

  • Easier migration to 3.0 since change to builder-based construction can be made in 2.10 already
  • More convenient configurability; ability to expose format-specific configuration beyond simple on/off features

Example of builder style:

// TO BE WRITTEN

Separation of general / JSON-specific features

Another change geared towards 3.0 compatibility is the creation of 4 new format feature types, to replace 2 existing features (JsonParser.Feature, JsonGenerator.Feature):

  • StreamReadFeature: format-agnostic (general) features for stream readers (parsers)
  • StreamWriteFeature: format-agnostic (general) features for stream writers (generators)
  • JsonReadFeature: JSON-specific stream reader (parser) features
  • JsonWriteFeature: JSON-specific stream writer (generator) features

For 2.10 these features will act as aliases to matching JsonParser.Features and JsonGenerator.Features: in 3.0 they will be the only stream-level features (JsonParser.Features, JsonGenerator.Feature being removed)

Example of using new configuration features:

// TO BE WRITTEN

JDK 9 Module info

All standard components will include module-info.class, generated using Moditect Maven plug-in. Resulting jars will therefore have proper module information for Java 9 and beyond but still be usable on JDK 7 (or, in case of jackson-core and jackson-annotations, JDK 6)


Change list

Changes, core

  • #151: Add basic Java 9+ module info
  • #433: Add Builder pattern for creating configured Stream factories
  • #464: Add "maximum unescaped char" configuration option for JsonFactory via builder
  • #467: Create JsonReadFeature to move JSON-specific JsonParser.Features to
  • #480: SerializableString value can not directly render to Writer
  • #481: Create JsonWriteFeature to move JSON-specific JsonGenerator.Features to
  • #484: Implement UTF8JsonGenerator.writeRawValue(SerializableString) (and writeRaw(..)) more efficiently
  • #495: Create StreamReadFeature to move non-json specific JsonParser.Features to
  • #496: Create StreamWriteFeature to take over non-json-specific JsonGenerator.Features
  • #502: Make DefaultPrettyPrinter.createInstance() to fail for sub-classes
  • #506: Add missing type parameter for TypeReference in ObjectCodec
  • #508: Add new exception type InputCoercionException to be used for failed coercions like overflow for int
  • #527: Add simple module-info for JDK9+, using Moditect
  • #533: UTF-8 BOM not accounted for in JsonLocation.getByteOffset()
  • #539: Reduce max size of recycled byte[]/char[] blocks by TextBuffer, ByteArrayBuilder
  • #18: Make JsonNode serializable
  • #1675: Remove "impossible" IOException in readTree() and readValue() ObjectMapper methods which accept Strings
  • #1954: Add Builder pattern for creating configured ObjectMapper instances
    • also add JsonMapper as explicit type, through which builders are created and that exposes JSON-specific configuration
  • #1995: Limit size of DeserializerCache, auto-flush on exceeding
  • #2059 Remove final modifier for TypeFactory
  • #2115: Support naive deserialization of Serializable values as "untyped", same as java.lang.Object
  • #2116: Make NumberSerializers.Base public and its inherited classes not final
  • #2126: DeserializationContext.instantiationException() throws InvalidDefinitionException
  • #2153: Add JsonMapper to replace generic ObjectMapper usage
  • #2187: Make JsonNode.toString() use shared ObjectMapper to produce valid json
  • #2195: Add abstraction PolymorphicTypeValidator, for limiting subtypes allowed by default typing, @JsonTypeInfo
  • #2204: Add JsonNode.isEmpty() as convenience alias
  • #2211: Change of behavior (2.8 -> 2.9) with ObjectMapper.readTree(input) with no content
  • #2220: Force serialization always for convertValue(); avoid short-cuts
  • #2223: Add missingNode() method in JsonNodeFactory
  • #2230: WRITE_BIGDECIMAL_AS_PLAIN is ignored if @JsonFormat is used
  • #2236: Type id not provided on Double.NaN, Infinity with @JsonTypeInfo
  • #2241: Add PropertyNamingStrategy.LOWER_DOT_CASE for dot-delimited names
  • #2273: Add basic Java 9+ module info

Changes, data formats

Changes, datatypes

  • #34: (guava) Allow use of Guava versions up to 25 (from 22)
  • #37: (eclipse-collections) Implement pair deserialization
  • #48: (all) Add simple module-info for JDK9+, using Moditect
  • #125: Ignore missing entities when lazy loading is enabled, if newly added Feature.WRITE_MISSING_ENTITIES_AS_NULL is enabled

Changes, other modules

  • #79: Add simple module-info for JDK9+, using Moditect
  • Update asm version 5.2 -> 7.0 for JDK 11 support

Changes, JAX-RS

JAX-RS, base

  • #111: AnnotationBundleKey equality fails for Parameter Annotations

Changes, jackson-jr

  • #63: Change default for JSON.Feature.USE_FIELDS to true (from false) in 2.10

Clone this wiki locally