Skip to content

UnboundID SCIM 2 SDK 4.0.0

Latest
Compare
Choose a tag to compare
@kqarryzada kqarryzada released this 10 Jun 18:57
· 2 commits to master since this release

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 longer final, allowing applications to extend 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
  • (#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 the FAIL_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 to false, 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 a Filter object directly. This simplifies calls such as builder.filter(filterObj.toString()) to builder.filter(filterObj). If you have any calls that pass in the null keyword, they may be updated to filter((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 existing hasComplexValue() 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 the EqualFilter 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. The DateTimeUtils 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