You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2022/06/03 14:56:14 UTC

[directory-scimple] branch remove-nulls created (now 5002119)

This is an automated email from the ASF dual-hosted git repository.

bdemers pushed a change to branch remove-nulls
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git


      at 5002119  Remove null values from JSON payload

This branch includes the following new commits:

     new 5002119  Remove null values from JSON payload

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[directory-scimple] 01/01: Remove null values from JSON payload

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdemers pushed a commit to branch remove-nulls
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git

commit 5002119695f465fc55f878eff436ec8ee5a463e0
Author: Brian Demers <bd...@apache.org>
AuthorDate: Fri Jun 3 10:56:10 2022 -0400

    Remove null values from JSON payload
    
    This often creates noise. The SCIM spec treats missing and null values the same way, and "MAY be omitted for compactness"
    https://datatracker.ietf.org/doc/html/rfc7643#section-2.5
---
 .../scim/server/provider/UpdateRequest.java        |  2 +-
 .../server/rest/ObjectMapperContextResolver.java   | 46 ----------------------
 .../scim/server/provider/UpdateRequestTest.java    | 16 +++++---
 .../scim/spec/json/ObjectMapperFactory.java        |  3 ++
 4 files changed, 14 insertions(+), 53 deletions(-)

diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
index e1d8057..fc58542 100644
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
+++ b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/UpdateRequest.java
@@ -228,7 +228,7 @@ public class UpdateRequest<T extends ScimResource> {
       if (!objectsToDelete.isEmpty() && node instanceof ObjectNode) {
         ObjectNode on = (ObjectNode)node;
         for(String name : objectsToDelete) {
-          on.putNull(name);
+          on.remove(name);
         }
       }
     }
diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperContextResolver.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperContextResolver.java
deleted file mode 100644
index 8e375c2..0000000
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperContextResolver.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
- 
-* http://www.apache.org/licenses/LICENSE-2.0
-
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-package org.apache.directory.scim.server.rest;
-
-import jakarta.inject.Inject;
-import jakarta.ws.rs.ext.ContextResolver;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import org.apache.directory.scim.server.schema.Registry;
-
-/**
- * @deprecated Use {@link ScimJacksonXmlBindJsonProvider} instead.
- */
-@Deprecated
-public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
-
-  private ObjectMapper objectMapper;
-
-  @Inject
-  public ObjectMapperContextResolver(Registry registry) {
-    objectMapper = new ObjectMapperFactory(registry).createObjectMapper();
-  }
-
-  @Override
-  public ObjectMapper getContext(Class<?> type) {
-    return objectMapper;
-  }
-}
diff --git a/scim-server/scim-server-common/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java b/scim-server/scim-server-common/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
index da02311..82cd065 100644
--- a/scim-server/scim-server-common/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
+++ b/scim-server/scim-server-common/src/test/java/org/apache/directory/scim/server/provider/UpdateRequestTest.java
@@ -69,6 +69,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import static org.assertj.core.groups.Tuple.tuple;
+
 @Slf4j
 @ExtendWith(MockitoExtension.class)
 public class UpdateRequestTest {
@@ -550,12 +552,14 @@ public class UpdateRequestTest {
     
     updateRequest.initWithResource("1234", user1, user2);
     List<PatchOperation> operations = updateRequest.getPatchOperations();
-    assertNotNull(operations);
-    assertEquals(3, operations.size());
-    PatchOperation operation = operations.get(0);
-    assertNotNull(operation.getValue());
-    assertEquals(Type.ADD, operation.getOperation());
-    assertEquals(Photo.class, operation.getValue().getClass());
+
+    Assertions.assertThat(operations)
+      .hasSize(3)
+      .extracting("operation","value")
+      .contains(
+        tuple(Type.ADD, photo),
+        tuple(Type.ADD, "first"),
+        tuple(Type.ADD, "second"));
   }
   
   @Test
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/json/ObjectMapperFactory.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/json/ObjectMapperFactory.java
index 6ee0121..6421434 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/json/ObjectMapperFactory.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/json/ObjectMapperFactory.java
@@ -19,6 +19,7 @@
 
 package org.apache.directory.scim.spec.json;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.AnnotationIntrospector;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
@@ -31,6 +32,8 @@ public class ObjectMapperFactory {
   public static ObjectMapper getObjectMapper() {
     ObjectMapper objectMapper = new ObjectMapper();
 
+    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
     objectMapper.registerModule(new JakartaXmlBindAnnotationModule());
 
     AnnotationIntrospector pair = new AnnotationIntrospectorPair(