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(