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:15 UTC

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

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(