We have just released version 4.0.0 of the UnboundID SCIM 2 SDK. It is available for download from GitHub and the Maven Central Repository. This release includes the following changes:
-
Removed support for Java 11. The UnboundID SCIM 2 SDK now requires Java 17 or a later release.
-
(#102) Previous releases of the SCIM SDK set many classes as
final
to encourage applications to follow strict compliance to the SCIM standard. However, this also makes it difficult to integrate with services that do not properly follow the standard. An example of this is a SCIM error response that contains extra fields in the JSON body. To ensure this library remains useful for working with other types of SCIM services, and to help accommodate these integrations, the SCIM SDK has been updated so that several model classes are no longerfinal
, allowing applications toextend
them if needed. The following classes were updated:- scim2-sdk-client builder classes such as
CreateRequestBuilder.java
ErrorResponse.java
GenericScimResource.java
ListResponse.java
Meta.java
SearchRequest.java
- scim2-sdk-client builder classes such as
-
(#81) Added a new property that allows ignoring unknown fields when converting JSON text to Java objects that inherit from
BaseScimResource
. A common problem when working with non-compliant SCIM services is when extra fields are present in the JSON, which would cause the SCIM SDK to throw JsonProcessingException errors. This new property behaves similarly to theFAIL_ON_UNKNOWN_PROPERTIES
setting from the Jackson library, and allows for easier integration with SCIM service providers that include extra non-standard attributes in their responses. To enable this setting, set the following property in your application code:BaseScimResource.IGNORE_UNKNOWN_FIELDS = true;
-
Updated the default behavior for ADD patch requests with value filters (e.g.,
emails[type eq "work"].display
). Previously, for this example path, the SCIM SDK would always add a new email to the list of existing emails, but this is not always desired when an application wishes to target a user's existing work email. The SCIM SDK will now target existing values within the multi-valued attribute (emails
in this example). If you previously had code that set this property tofalse
, it may now be removed. For more background on this type of patch request, see the release notes for the 3.2.0 release where this was introduced (but not made the default). To restore the old behavior, set the following property in your application.PatchOperation.APPEND_NEW_PATCH_VALUES_PROPERTY = true;
-
(#97, #150) Updated
SearchRequestBuilder
to be null-safe and more permissive of ListResponse JSON objects with non-standard attribute casing (e.g., if a response includes a"resources"
array instead of"Resources"
). -
Updated the
Meta
class so that its setters may be chained together with the builder pattern (e.g.,new Meta().setResourceType("User").setVersion("version")
). A new class-level Javadoc describing this attribute has been added, and explains how the new pattern may be used. -
Fixed an issue with methods that interface with schema extensions such as
BaseScimResource.getExtensionValues(String)
. These methods, which accepted paths as a string, previously performed updates to the extension data incorrectly. -
Added a new variant of
SearchRequestBuilder.filter()
that accepts aFilter
object directly. This simplifies calls such asbuilder.filter(filterObj.toString())
tobuilder.filter(filterObj)
. If you have any calls that pass in thenull
keyword, they may be updated tofilter((String) null)
to address compilation errors. -
Created new Filter.complex() methods that will create a complex value filter. This is equivalent to the existing
Filter.hasComplexValue()
methods, but with a less ambiguous name. The existinghasComplexValue()
methods are not deprecated and may still be used. -
Updated the filter documentation to provide more details, particularly with regard to AND, OR, and complex filters. The method Javadocs have also been updated to point to relevant classes for more information. For example, the documentation for
Filter.eq()
now includes a link to theEqualFilter
class documentation. -
Updated the class-level documentation of
SearchRequest
to provide more background about how searches are performed in the SCIM standard. -
Removed the deprecated
ScimDateFormat
class, which utilized deprecated Jackson APIs. TheDateTimeUtils
class has been responsible for timestamp conversions between JSON strings and Java objects since the 2.3.0 release of the SCIM SDK. -
Simplified the implementation of the
StaticUtils#toLowerCase()
method. This had an optimization for Java versions before JDK 9 that was especially beneficial for the most common case of handling ASCII characters. Since JDK 9, however, the String class has been updated so that the class is backed by a byte array as opposed to a character array, so it is more optimal to use the JDK's implementation directly while handling null values. -
Updated the following dependencies:
- Jackson: 2.18.3
- Jakarta RS: 4.0.0
- Jersey: 3.1.10