We have just released versions 5.1.0 and 6.0.0 of the UnboundID SCIM 2 SDK. They are available for download from GitHub and the Maven Central Repository. The 6.0.0 release contains everything within 5.1.0, plus support for Jackson version 3. Further background, as well as a migration guide, is available in the wiki: https://github.com/pingidentity/scim2/wiki/Migration-Guide:-Upgrading-to-use-version-6.0.0-(Jackson-3)
(#278) This release of the SCIM SDK uses version 3.1.3 of the Jackson library. This change aligns the SCIM SDK with HTTP libraries such as Spring Framework 7/Spring Boot 4, which are moving away from Jackson 2.x. Jackson 2 can no longer be supported since Jackson 3 contains many backwards-incompatible API changes, design changes, and updated default values. The most notable updates for applications that use the UnboundID SCIM SDK have been highlighted below:
-
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIEShas been set tofalseby default in Jackson 3. The SCIM SDK will no longer throw exceptions when extra unknown fields are present in JSON objects. This behavior is aligned with modern API handling, and provides better resilience for applications interacting with external APIs that may add new fields over time. -
Jackson exception objects are no longer checked exceptions. In Jackson 2, exceptions were based on
java.io.IOException, but in Jackson 3, they are based onjava.lang.RuntimeException. -
Jackson ObjectMappers are now read-only, and their configuration cannot be modified after they have been built with
JsonMapper.Builder.build(). To avoid managing object mappers for SCIM uses, always useJsonUtils.createJsonMapper()instead ofnew ObjectMapper()whenever possible. -
Many Jackson classes have been moved or renamed.
TextNodeobjects are nowStringNode, andJsonProcessingExceptionobjects from Jackson 2 no longer exist (these can be replaced withJacksonException). SCIM SDK classes removed or renamed in this release are listed below.
Other changes in this release include:
-
Removed the
com.unboundid.scim2.server.PATCHannotation class from scim2-sdk-server, which was deprecated in 5.1.0. Applications should use thejakarta.ws.rs.PATCHannotation instead. -
Removed several fields in the
MapperFactoryclass that were deprecated in 5.1.0. Customizations should be appended to theJsonMapper.Builderobject as described by the class-level Javadoc. If you do not customize the SCIM SDK object mapper, no change is required. -
The default values of two configurable SCIM SDK properties have been updated in this release. For details on how to restore the previous values (not recommended), see the migration guide.
BaseScimResource.IGNORE_UNKNOWN_FIELDSis nowtrueby default so that unknown JSON fields on BaseScimResources are ignored instead of throwing exceptions. This change is intended to align with Jackson 3's new default setting forFAIL_ON_UNKNOWN_PROPERTIES(referenced above).DateTimeUtils.USE_GMT_CALENDARS(added in 5.1.0) is nowfalseso that Calendars use theUTCtimezone when they are initialized from a JSON timestamp. This is intended to provide better default values, since it is common to use UTC instead of "GMT+00:00", which complicatedequals()checks in tests.
-
Renamed
JsonProcessingExceptionMapper.javatoJacksonExceptionMapper.javato reflect the new naming convention in Jackson. -
Removed
throws ScimExceptionfrom several methods which no longer threw them. Note that the SCIM SDK still defines ScimException and its subclasses as a checked exception, so this was not changed like Jackson exceptions were. ScimExceptions generally indicate failure cases that should be explicitly handled, such as invalid client requests. -
DateDeserializer has been updated to support UNIX timestamp values. As a result, JSON values that use UNIX timestamp values can now be set to fields on Java objects that have a
Datetype. -
See the 5.1.0 release for other features and improvements.