Skip to content

Jackson Release 2.17

Tatu Saloranta edited this page Jan 24, 2024 · 101 revisions

Jackson Version 2.17 development started in November 2023.

This wiki page gives a list of links to all changes (with brief descriptions) that will be included, as well as about original plans for bigger changes (and in some cases changes to plans, postponing).

Status

Branch is open for development.

Patches

No release yet

Documentation

Articles, Blog posts

Changes, compatibility

Compatibility: platform requirements

JDK

Same as Jackson 2.16

Changes, behavior


Major focus areas, features included

Most Wanted features implemented

  • #437: Adds DeserializationFeature.FAIL_ON_UNEXPECTED_VIEW_PROPERTIES, enabling of which starts failing known properties that are not part of the active view

Full Change list

Changes, core

  • #507: Add JsonWriteFeature.ESCAPE_FORWARD_SLASHES to allow escaping of '/' for String values
  • #1137: Improve detection of "is a NaN" to only consider explicit cases, not double overflow/underflow
  • #1145: JsonPointer.appendProperty(String) does not escape the property name
  • #1149: Add JsonParser.getNumberTypeFP()
  • #1157: Use fast parser (FDP) for large BigDecimals (500+ chars)
  • #1169: ArrayIndexOutOfBoundsException for specific invalid content, with Reader-based parser
  • #1179: Allow configuring DefaultPrettyPrinter separators for empty Arrays and Objects
  • #1186: BufferRecycler should avoid setting replacement if one already returned, bigger
  • #1195: Use BufferRecycler provided by output (OutputStream, Writer) object if available
  • #437: Support throwing MismatchedInputException when deserializing properties that are not part of the view
  • #736: MapperFeature.REQUIRE_SETTERS_FOR_GETTERS has no effect
  • #4160: Deprecate DefaultTyping.EVERYTHING in 2.x and remove in 3.0
  • #4194: Add JsonNodeFeature.FAIL_ON_NAN_TO_BIG_DECIMAL_COERCION option to fail on attempting to coerce NaN into BigDecimal
  • #4205: Consider types in sun.* package(s) to be JDK (platform) types for purposes of handling
  • #4209: Make BeanDeserializerModifier/BeanSerializerModifier implement java.io.Serializable
  • #4214: EnumSet deserialization does not work when we activate default typing in ObjectMapper
  • #4248: ThrowableDeserializer does not handle null well for cause
  • #4250: Add input validation for NumberDeserializers deserializers for "stringified" FP numbers
  • #4262: Improve handling of null insertion failure for TreeSet
  • #4263: Change ObjectArrayDeserializer to use "generic" type parameter (java.lang.Object) to remove co-variant return type
  • #4299: Some Collection and Map fallbacks don't work in GraalVM native image

Changes, data formats

  • #449: IndexOutOfBoundsException in JacksonAvroParserImpl for invalid input
  • #451: IndexOutOfBoundsException in CBORParser for invalid input
  • #458: Unexpected NullPointerException in CBORParser
  • #464: Unexpected ArrayIndexOutOfBoundsException in CBORParser for corrupt String value
  • #45: Allow skipping ending line break (CsvGenerator.Feature.WRITE_LINEFEED_AFTER_LAST_ROW)

[Ion]

  • #417: IonReader classes contain assert statement which could throw unexpected AssertionError
  • #420: IndexOutOfBoundsException thrown by IonReader implementations are not handled
  • #424: IonReader throws NullPointerException for unchecked invalid data
  • #432: More methods from IonReader could throw an unexpected AssertionError
  • #434: Unexpected NullPointerException thrown from IonParser::getNumberType()
  • #437: IonReader.next() throws NPEs for some invalid content

[Protobuf]

  • #462: ProtobufParser.currentName() returns wrong value at root level

[Smile]

  • #426: SmileParser throws unexpected IOOBE for corrupt content

Changes, datatypes

  • #274: Add 1-based Month[De]serializer enabled with JavaTimeFeature.ONE_BASED_MONTHS option
  • #294: Optional deserialization, serialization ignore contentConverter

Guava

  • #118: Support @JsonFormat(shape=STRING) on Range<T>
  • #124: Some deserializers throw unexpected NullPointerException when handling invalid input
  • #136: Fix for failing Guava Optional test
  • #138: GuavaCollectionDeserializer still throws NPE in some circumstances
  • #140: Cache deserialization fails with NPE for null valued entries
  • #142: RangeSet deserializer fails for content nulls with NPE

Clone this wiki locally