Merge pull request #149 from apache/object-mapper-config

ScimJacksonProvider now handles extensions
diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
index a2b99c1..f7ea920 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
@@ -19,10 +19,14 @@
 
 package org.apache.directory.scim.core.repository;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.AnnotationIntrospector;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
+import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.BooleanNode;
 import com.fasterxml.jackson.databind.node.DoubleNode;
@@ -32,12 +36,13 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.databind.node.POJONode;
 import com.fasterxml.jackson.databind.node.TextNode;
+import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector;
+import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
 import com.flipkart.zjsonpatch.JsonDiff;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
 import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
 import org.apache.directory.scim.spec.patch.PatchOperation;
 import org.apache.directory.scim.spec.patch.PatchOperation.Type;
@@ -75,7 +80,8 @@
   private static final String PATH = "path";
   private static final String VALUE = "value";
 
-  private final ObjectMapper objectMapper;
+  // Create a Jackson ObjectMapper that reads JaxB annotations
+  private final ObjectMapper objectMapper = createObjectMapper();
 
   @Getter
   private String id;
@@ -93,10 +99,6 @@
 
   public UpdateRequest(SchemaRegistry schemaRegistry) {
     this.schemaRegistry = schemaRegistry;
-
-    //Create a Jackson ObjectMapper that reads JaxB annotations
-    objectMapper = ObjectMapperFactory.getObjectMapper();
-    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
   }
 
   public UpdateRequest(String id, T original, T resource, SchemaRegistry schemaRegistry) {
@@ -598,4 +600,18 @@
     }
   }
 
+  private static ObjectMapper createObjectMapper() {
+    ObjectMapper objectMapper = new ObjectMapper();
+
+    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    objectMapper.registerModule(new JakartaXmlBindAnnotationModule());
+
+    AnnotationIntrospector pair = new AnnotationIntrospectorPair(
+      new JakartaXmlBindAnnotationIntrospector(objectMapper.getTypeFactory()),
+      new JacksonAnnotationIntrospector());
+    objectMapper.setAnnotationIntrospector(pair);
+
+    return objectMapper;
+  }
 }
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
index a22a835..24c10b2 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
@@ -19,7 +19,6 @@
 
 package org.apache.directory.scim.server.rest;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.directory.scim.server.exception.AttributeDoesNotExistException;
@@ -54,13 +53,8 @@
 
   SchemaRegistry schemaRegistry;
 
-  ObjectMapper objectMapper;
-
   AttributeUtil(SchemaRegistry schemaRegistry) {
     this.schemaRegistry = schemaRegistry;
-
-    // TODO move this to a CDI producer
-    objectMapper = new ObjectMapperFactory(schemaRegistry).createObjectMapper();
   }
 
   public <T extends ScimResource> T keepAlwaysAttributesForDisplay(T resource) throws AttributeException {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/EtagGenerator.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/EtagGenerator.java
index 19e85d4..73476f4 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/EtagGenerator.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/EtagGenerator.java
@@ -19,12 +19,13 @@
 
 package org.apache.directory.scim.server.rest;
 
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.enterprise.context.ApplicationScoped;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jdk.jfr.Name;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
 import org.apache.directory.scim.spec.resources.ScimResource;
 import org.apache.directory.scim.spec.schema.Meta;
 
@@ -38,13 +39,7 @@
 @ApplicationScoped
 public class EtagGenerator {
 
-  private final ObjectMapper objectMapper;
-
-  public EtagGenerator() {
-    objectMapper = ObjectMapperFactory.getObjectMapper();
-    objectMapper.setSerializationInclusion(Include.NON_NULL);
-    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-  }
+  private final ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
 
   public EntityTag generateEtag(ScimResource resource) throws JsonProcessingException, NoSuchAlgorithmException, UnsupportedEncodingException {
 
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
index bbc7153..891e0e3 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
@@ -24,10 +24,11 @@
 import com.fasterxml.jackson.core.Version;
 import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
+import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
+import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
 import com.fasterxml.jackson.databind.module.SimpleModule;
-import jakarta.enterprise.inject.Produces;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.ext.Provider;
+import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector;
+import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
 import org.apache.directory.scim.core.schema.SchemaRegistry;
 import org.apache.directory.scim.spec.resources.ScimExtension;
 import org.apache.directory.scim.spec.resources.ScimResource;
@@ -37,23 +38,40 @@
 /**
  * Creates and configures an {@link ObjectMapper} used for {@code application/scim+json} parsing.
  */
-@Provider
-public class ObjectMapperFactory {
+class ObjectMapperFactory {
 
-  private final SchemaRegistry schemaRegistry;
+  private final static ObjectMapper objectMapper = createObjectMapper();
 
-  @Inject
-  public ObjectMapperFactory(SchemaRegistry schemaRegistry) {
-    this.schemaRegistry = schemaRegistry;
+  /**
+   * Returns an ObjectMapper configured for use with Jackson and Jakarta bindings.
+   * This ObjectMapper does NOT unmarshal SCIM Extension values, use {@link #createObjectMapper(SchemaRegistry)} when
+   * serializing REST response and requests.
+   * @return an ObjectMapper configured for use with Jackson and Jakarta bindings.
+   */
+  static ObjectMapper getObjectMapper() {
+    return objectMapper;
   }
 
-  @Produces
-  public ObjectMapper createObjectMapper() {
+  private static ObjectMapper createObjectMapper() {
+    ObjectMapper objectMapper = new ObjectMapper();
 
-    ObjectMapper objectMapper = org.apache.directory.scim.spec.json.ObjectMapperFactory.getObjectMapper().copy();
+    AnnotationIntrospector pair = new AnnotationIntrospectorPair(
+      new JakartaXmlBindAnnotationIntrospector(objectMapper.getTypeFactory()),
+      new JacksonAnnotationIntrospector());
+    objectMapper.setAnnotationIntrospector(pair);
+
     objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
     objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 
+    return objectMapper;
+  }
+
+  /**
+   * Creates and configures an {@link ObjectMapper} SCIM Resource in REST request and responses {@code application/scim+json}.
+   */
+  static ObjectMapper createObjectMapper(SchemaRegistry schemaRegistry) {
+    ObjectMapper objectMapper = createObjectMapper().copy();
+    objectMapper.registerModule(new JakartaXmlBindAnnotationModule());
     objectMapper.registerModule(new ScimResourceModule(schemaRegistry));
     return objectMapper;
   }
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
index 446d16f..45536ef 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
@@ -20,7 +20,8 @@
 package org.apache.directory.scim.server.rest;
 
 import com.fasterxml.jackson.jakarta.rs.json.JacksonXmlBindJsonProvider;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
+import jakarta.enterprise.context.ApplicationScoped;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
 import org.apache.directory.scim.protocol.Constants;
 
 import jakarta.inject.Inject;
@@ -34,10 +35,12 @@
 @Provider
 @Consumes(Constants.SCIM_CONTENT_TYPE)
 @Produces(Constants.SCIM_CONTENT_TYPE)
+@ApplicationScoped
 public class ScimJacksonXmlBindJsonProvider extends JacksonXmlBindJsonProvider {
 
   @Inject
-  public ScimJacksonXmlBindJsonProvider() {
-    super(ObjectMapperFactory.getObjectMapper(), DEFAULT_ANNOTATIONS);
+  public ScimJacksonXmlBindJsonProvider(SchemaRegistry schemaRegistry) {
+    super(ObjectMapperFactory.createObjectMapper(schemaRegistry), DEFAULT_ANNOTATIONS);
+
   }
 }
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/CustomExtensionIT.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/CustomExtensionIT.java
new file mode 100644
index 0000000..ab45541
--- /dev/null
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/CustomExtensionIT.java
@@ -0,0 +1,42 @@
+package org.apache.directory.scim.server.it;
+
+import org.apache.directory.scim.compliance.junit.EmbeddedServerExtension;
+import org.apache.directory.scim.compliance.tests.ScimpleITSupport;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import static org.hamcrest.Matchers.*;
+
+@ExtendWith(EmbeddedServerExtension.class)
+public class CustomExtensionIT extends ScimpleITSupport {
+
+  @Test
+  public void extensionDataTest() {
+
+    String body = "{" +
+      "\"schemas\":[\"urn:ietf:params:scim:schemas:core:2.0:User\"]," +
+      "\"userName\":\"test@example.com\"," +
+      "\"name\":{" +
+        "\"givenName\":\"Tester\"," +
+        "\"familyName\":\"McTest\"}," +
+      "\"emails\":[{" +
+        "\"primary\":true," +
+        "\"value\":\"test@example.com\"," +
+        "\"type\":\"work\"}]," +
+      "\"displayName\":\"Tester McTest\"," +
+      "\"active\":true," +
+      "\"urn:mem:params:scim:schemas:extension:LuckyNumberExtension\": {" +
+        "\"luckyNumber\": \"1234\"}" + // This value can be a number or string, but will always be a number in the body
+      "}";
+
+    post("/Users", body)
+      .statusCode(201)
+      .body(
+        "schemas", contains("urn:ietf:params:scim:schemas:core:2.0:User", "urn:mem:params:scim:schemas:extension:LuckyNumberExtension"),
+        "active", is(true),
+        "id", not(emptyString()),
+        "'urn:mem:params:scim:schemas:extension:LuckyNumberExtension'", notNullValue(),
+        "'urn:mem:params:scim:schemas:extension:LuckyNumberExtension'.luckyNumber", is(1234)
+      );
+  }
+}
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
index 241b428..a42ba05 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
@@ -87,6 +87,8 @@
     email.setPrimary(true);
     user.setEmails(List.of(email));
 
+    user.addExtension(new LuckyNumberExtension().setLuckyNumber(DEFAULT_USER_LUCKY_NUMBER));
+
     users.put(user.getId(), user);
   }
 
@@ -174,6 +176,6 @@
    */
   @Override
   public List<Class<? extends ScimExtension>> getExtensionList() {
-    return Collections.emptyList();
+    return List.of(LuckyNumberExtension.class);
   }
 }
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/LuckyNumberExtension.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/LuckyNumberExtension.java
new file mode 100644
index 0000000..fa3e47f
--- /dev/null
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/LuckyNumberExtension.java
@@ -0,0 +1,61 @@
+/*
+* 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.it.testapp;
+
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import lombok.Data;
+import org.apache.directory.scim.spec.annotation.ScimAttribute;
+import org.apache.directory.scim.spec.annotation.ScimExtensionType;
+import org.apache.directory.scim.spec.resources.ScimExtension;
+import org.apache.directory.scim.spec.schema.Schema;
+
+/**
+ * Allows a User's lucky number to be passed as part of the User's entry via
+ * the SCIM protocol.
+ * 
+ * @author Chris Harm &lt;crh5255@psu.edu&gt;
+ */
+@XmlRootElement( name = "LuckyNumberExtension", namespace = "http://www.psu.edu/schemas/psu-scim" )
+@XmlAccessorType(XmlAccessType.NONE)
+@Data
+@ScimExtensionType(id = LuckyNumberExtension.SCHEMA_URN, description="Lucky Numbers", name="LuckyNumbers", required=true)
+public class LuckyNumberExtension implements ScimExtension {
+  
+  public static final String  SCHEMA_URN = "urn:mem:params:scim:schemas:extension:LuckyNumberExtension";
+
+  @ScimAttribute(returned=Schema.Attribute.Returned.DEFAULT, required=true)
+  @XmlElement
+  private long luckyNumber;
+  
+  /**
+   * Provides the URN associated with this extension which, as defined by the
+   * SCIM specification is the extension's unique identifier.
+   * 
+   * @return The extension's URN.
+   */
+  @Override
+  public String getUrn() {
+    return SCHEMA_URN;
+  }
+
+}
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
index 0a553a4..24286a3 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
@@ -28,7 +28,6 @@
 import org.apache.directory.scim.server.utility.ExampleObjectExtension.ComplexObject;
 import org.apache.directory.scim.spec.extension.EnterpriseExtension;
 import org.apache.directory.scim.spec.extension.EnterpriseExtension.Manager;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
 import org.apache.directory.scim.spec.phonenumber.PhoneNumberParseException;
 import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
 import org.apache.directory.scim.spec.resources.Address;
@@ -62,28 +61,23 @@
 
   AttributeUtil attributeUtil;
 
-  private ObjectMapper objectMapper;
+  final private ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
 
   @BeforeEach
   public void setup() {
     schemaRegistry = Mockito.mock(SchemaRegistry.class);
+
     attributeUtil = new AttributeUtil(schemaRegistry);
     Schema scimUserSchema = Schemas.schemaFor(ScimUser.class);
     Schema scimEnterpriseUserSchema = Schemas.schemaForExtension(EnterpriseExtension.class);
     Schema scimExampleSchema = Schemas.schemaForExtension(ExampleObjectExtension.class);
 
-
     Mockito.when(schemaRegistry.getBaseSchemaOfResourceType(ScimUser.RESOURCE_NAME)).thenReturn(scimUserSchema);
     Mockito.when(schemaRegistry.getSchema(ScimUser.SCHEMA_URI)).thenReturn(scimUserSchema);
     Mockito.when(schemaRegistry.getSchema(EnterpriseExtension.URN)).thenReturn(scimEnterpriseUserSchema);
     Mockito.when(schemaRegistry.getSchema(ExampleObjectExtension.URN)).thenReturn(scimExampleSchema);
     Mockito.when(schemaRegistry.getAllSchemas()).thenReturn(Arrays.asList(scimUserSchema, scimEnterpriseUserSchema, scimExampleSchema));
     Mockito.when(schemaRegistry.getAllSchemaUrns()).thenReturn(new HashSet<>(Arrays.asList(ScimUser.SCHEMA_URI, EnterpriseExtension.URN, ExampleObjectExtension.URN)));
-
-    objectMapper = ObjectMapperFactory.getObjectMapper();
-    objectMapper.setSerializationInclusion(Include.NON_NULL);
-    objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
-
   }
 
   @Test
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/ObjectMapperFactoryTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/ObjectMapperFactoryTest.java
index a3dec7f..9cf7de5 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/ObjectMapperFactoryTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/ObjectMapperFactoryTest.java
@@ -42,7 +42,7 @@
     ExampleObjectExtension extension = new ExampleObjectExtension().setValueDefault("test-value");
     resource.addExtension(extension);
 
-    ObjectMapper objectMapper = new ObjectMapperFactory(schemaRegistry).createObjectMapper();
+    ObjectMapper objectMapper = ObjectMapperFactory.createObjectMapper(schemaRegistry);
     String json = objectMapper.writeValueAsString(resource);
 
     ScimResource actual = objectMapper.readValue(json, ScimResource.class);
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/test/java/org/apache/directory/scim/spec/ObjectMapperFactory.java
similarity index 97%
rename from scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/json/ObjectMapperFactory.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/ObjectMapperFactory.java
index 747006c..2e15d63 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/test/java/org/apache/directory/scim/spec/ObjectMapperFactory.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.directory.scim.spec.json;
+package org.apache.directory.scim.spec;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.AnnotationIntrospector;
diff --git a/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/resources/PhoneNumberJsonTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/resources/PhoneNumberJsonTest.java
index 97eb971..df6976d 100644
--- a/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/resources/PhoneNumberJsonTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/resources/PhoneNumberJsonTest.java
@@ -23,7 +23,7 @@
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
+import org.apache.directory.scim.spec.ObjectMapperFactory;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,9 +39,7 @@
     ObjectMapper objectMapper = getObjectMapper();
     
     String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(phoneNumber);
-    
-    log.info(json);
-    
+
     PhoneNumber readValue = objectMapper.readValue(json, PhoneNumber.class);
     
     assertEquals(phoneNumber.getNumber(), readValue.getNumber());
@@ -65,5 +63,4 @@
     objectMapper.setSerializationInclusion(Include.NON_NULL);
     return objectMapper;
   }
-  
 }
diff --git a/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/SchemaTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/SchemaTest.java
index b38003e..a5aaa3f 100644
--- a/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/SchemaTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/SchemaTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.scim.spec.schema;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
+import org.apache.directory.scim.spec.ObjectMapperFactory;
 import org.apache.directory.scim.spec.schema.Schema.Attribute;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
@@ -67,6 +67,7 @@
       "schemas/urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig.json",
       "schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.json"
   })
+
   public void testUnmarshallingProvidedSchemas(String schemaFileName) {
     ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
     InputStream inputStream = classLoader.getResourceAsStream(schemaFileName);