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 2023/09/06 19:47:15 UTC

[directory-scimple] branch add-spotbugs created (now d50d3905)

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

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


      at d50d3905 Move dependency-check out of `ci` profile

This branch includes the following new commits:

     new a1a8e51f Add Spotbugs & FindSecBugs
     new 09b60b0c Adding missing Serialization config
     new aba11855 Fixing minor issues found by SpotBugs
     new 2a337804 Replacing ObjectOutputStream deep clone with Jackson
     new d9f9a360 Setting locale to ROOT for string toUpper and toLower
     new d50d3905 Move dependency-check out of `ci` profile

The 6 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] 05/06: Setting locale to ROOT for string toUpper and toLower

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

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

commit d9f9a3601b3b0f68d0b005b03d5a1e94c1e2d786
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 01:11:43 2023 -0400

    Setting locale to ROOT for string toUpper and toLower
---
 .../scim/core/repository/UpdateRequest.java        |  2 +-
 .../spec/filter/ExpressionBuildingListener.java    |  9 +++---
 .../directory/scim/spec/resources/PhoneNumber.java | 37 ++++++++++++++--------
 3 files changed, 30 insertions(+), 18 deletions(-)

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 c5e0ff34..a39adac3 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
@@ -293,7 +293,7 @@ public class UpdateRequest<T extends ScimResource> {
   private List<PatchOperation> convertNodeToPatchOperations(String operationNode, String diffPath, JsonNode valueNode) throws IllegalArgumentException, IllegalAccessException, JsonProcessingException {
     log.debug("convertNodeToPatchOperations: {} , {}", operationNode, diffPath);
     List<PatchOperation> operations = new ArrayList<>();
-    PatchOperation.Type patchOpType = PatchOperation.Type.valueOf(operationNode.toUpperCase());
+    PatchOperation.Type patchOpType = PatchOperation.Type.valueOf(operationNode.toUpperCase(Locale.ROOT));
 
     if (diffPath != null && diffPath.length() >= 1) {
       ParseData parseData = new ParseData(diffPath);
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
index fed02927..33eb6e7b 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
@@ -21,6 +21,7 @@ package org.apache.directory.scim.spec.filter;
 
 import java.util.ArrayDeque;
 import java.util.Deque;
+import java.util.Locale;
 
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.slf4j.Logger;
@@ -92,7 +93,7 @@ public class ExpressionBuildingListener extends FilterBaseListener {
     AttributeComparisonExpression attributeComparisonExpression;
     String attributePathText = ctx.attributePath.getText();
     AttributeReference attributePath = new AttributeReference(attributePathText);
-    CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase());
+    CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase(Locale.ROOT));
     String compareValueText = ctx.compareValue.getText();
     Object compareValue = parseJsonType(compareValueText);
     attributeComparisonExpression = new AttributeComparisonExpression(attributePath, compareOperator, compareValue);
@@ -102,7 +103,7 @@ public class ExpressionBuildingListener extends FilterBaseListener {
 
   @Override
   public void exitFilterLogicExpression(FilterLogicExpressionContext ctx) {
-    String op = ctx.op.getText().toUpperCase();
+    String op = ctx.op.getText().toUpperCase(Locale.ROOT);
     LogicalOperator logicalOperator = LogicalOperator.valueOf(op);
     FilterExpression right = expressionStack.pop();
     FilterExpression left = expressionStack.pop();
@@ -113,7 +114,7 @@ public class ExpressionBuildingListener extends FilterBaseListener {
 
   @Override
   public void exitAttributeLogicExpression(AttributeLogicExpressionContext ctx) {
-    String op = ctx.op.getText().toUpperCase();
+    String op = ctx.op.getText().toUpperCase(Locale.ROOT);
     LogicalOperator logicalOperator = LogicalOperator.valueOf(op);
     FilterExpression right = expressionStack.pop();
     FilterExpression left = expressionStack.pop();
@@ -134,7 +135,7 @@ public class ExpressionBuildingListener extends FilterBaseListener {
   @Override
   public void exitAttributeCompareExpression(AttributeCompareExpressionContext ctx) {
     String attributeName = ctx.attributeName.getText();
-    CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase());
+    CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase(Locale.ROOT));
     Object value = parseJsonType(ctx.compareValue.getText());
     AttributeReference attributeReference = new AttributeReference(attributeName);
     AttributeComparisonExpression expression = new AttributeComparisonExpression(attributeReference, compareOperator, value);
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
index 17943593..4f8a7c94 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
@@ -24,8 +24,10 @@ package org.apache.directory.scim.spec.resources;
 
 import java.io.Serializable;
 import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 import jakarta.xml.bind.annotation.XmlAccessType;
 import jakarta.xml.bind.annotation.XmlAccessorType;
@@ -213,7 +215,7 @@ public class PhoneNumber implements Serializable, TypedAttribute {
     if (subAddress == null) {
       if (other.subAddress != null)
         return false;
-    } else if (!subAddress.equalsIgnoreCase(other.subAddress))
+    } else if (!equalsIgnoreCase(subAddress, other.subAddress))
       return false;
 
     String phoneContextTemp = phoneContext;
@@ -229,7 +231,7 @@ public class PhoneNumber implements Serializable, TypedAttribute {
     if (phoneContextTemp == null) {
       if (otherPhoneContextTemp != null)
         return false;
-    } else if (!phoneContextTemp.equalsIgnoreCase(otherPhoneContextTemp))
+    } else if (!equalsIgnoreCase(phoneContextTemp, otherPhoneContextTemp))
       return false;
 
     if (!equalsIgnoreCaseAndOrderParams(other.params)) {
@@ -244,7 +246,7 @@ public class PhoneNumber implements Serializable, TypedAttribute {
 
     if (type == null) {
         return other.type == null;
-    } else return type.equalsIgnoreCase(other.type);
+    } else return equalsIgnoreCase(type, other.type);
   }
 
   /*
@@ -258,23 +260,33 @@ public class PhoneNumber implements Serializable, TypedAttribute {
     result = prime * result + (isGlobalNumber ? 1231 : 1237);
     result = prime * result + ((number == null) ? 0 : number.replaceAll(VISUAL_SEPARATORS, "").hashCode());
     result = prime * result + ((extension == null) ? 0 : extension.replaceAll(VISUAL_SEPARATORS, "").hashCode());
-    result = prime * result + ((subAddress == null) ? 0 : subAddress.toLowerCase().hashCode());
-    result = prime * result + ((phoneContext == null) ? 0 : (isDomainPhoneContext ? phoneContext.toLowerCase().hashCode() : phoneContext.replaceAll(VISUAL_SEPARATORS, "").hashCode()));
+    result = prime * result + ((subAddress == null) ? 0 : subAddress.toLowerCase(Locale.ROOT).hashCode());
+    result = prime * result + ((phoneContext == null) ? 0 : (isDomainPhoneContext ? phoneContext.toLowerCase(Locale.ROOT).hashCode() : phoneContext.replaceAll(VISUAL_SEPARATORS, "").hashCode()));
     result = prime * result + ((params == null) ? 0 : paramsToLowerCase().hashCode());
     result = prime * result + ((primary == null) ? 0 : primary.hashCode());
-    result = prime * result + ((type == null) ? 0 : type.toLowerCase().hashCode());
+    result = prime * result + ((type == null) ? 0 : type.toLowerCase(Locale.ROOT).hashCode());
     return result;
   }
 
   Map<String, String> paramsToLowerCase() {
     Map<String, String> paramsLowercase = new LinkedHashMap<>();
     for (Entry<String, String> entry : params.entrySet()) {
-      paramsLowercase.put(entry.getKey().toLowerCase(), entry.getValue().toLowerCase());
+      paramsLowercase.put(entry.getKey().toLowerCase(Locale.ROOT), entry.getValue().toLowerCase(Locale.ROOT));
     }
 
     return paramsLowercase;
   }
 
+  private static boolean equalsIgnoreCase(String a, String b) {
+    if (a == b) {
+      return true;
+    }
+    if (a == null || b == null) {
+      return false;
+    }
+    return a.toLowerCase(Locale.ROOT).equals(b.toLowerCase(Locale.ROOT));
+  }
+
   boolean equalsIgnoreCaseAndOrderParams(Map<String, String> otherParams) {
     if (params == null && otherParams == null) {
       return true;
@@ -287,9 +299,9 @@ public class PhoneNumber implements Serializable, TypedAttribute {
     Map<String, String> paramsLowercase = paramsToLowerCase();
 
     for (Entry<String, String> entry : otherParams.entrySet()) {
-      String foundValue = paramsLowercase.get(entry.getKey().toLowerCase());
+      String foundValue = paramsLowercase.get(entry.getKey().toLowerCase(Locale.ROOT));
 
-      if (!entry.getValue().equalsIgnoreCase(foundValue)) {
+      if (!entry.getValue().toLowerCase(Locale.ROOT).equals(foundValue)) {
         return false;
       }
     }
@@ -391,11 +403,10 @@ public class PhoneNumber implements Serializable, TypedAttribute {
 
     String getFormattedParams() {
       String paramsFormatted = "";
-
       if (params != null) {
-        for (Map.Entry<String, String> entry : params.entrySet()) {
-          paramsFormatted += String.format(PARAMS_STRING, entry.getKey(), entry.getValue() != null ? entry.getValue() : "");
-        }
+        paramsFormatted = params.entrySet().stream()
+          .map(entry -> String.format(PARAMS_STRING, entry.getKey(), entry.getValue() != null ? entry.getValue() : ""))
+          .collect(Collectors.joining());
       }
 
       return !paramsFormatted.isEmpty() ? paramsFormatted : null;


[directory-scimple] 04/06: Replacing ObjectOutputStream deep clone with Jackson

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

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

commit 2a337804cf6b467b7f02a3df9eac21a5af03714b
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 01:06:07 2023 -0400

    Replacing ObjectOutputStream deep clone with Jackson
---
 .../directory/scim/server/rest/AttributeUtil.java  | 26 ++++++----------------
 .../scim/server/rest/AttributeUtilTest.java        | 13 ++---------
 2 files changed, 9 insertions(+), 30 deletions(-)

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 24c10b26..d0814a87 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,8 +19,10 @@
 
 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.core.json.ObjectMapperFactory;
 import org.apache.directory.scim.server.exception.AttributeDoesNotExistException;
 import org.apache.directory.scim.server.exception.AttributeException;
 import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
@@ -35,11 +37,6 @@ import org.apache.directory.scim.spec.schema.Schema.Attribute.Returned;
 import org.apache.directory.scim.spec.schema.Schema.Attribute.Type;
 import org.apache.directory.scim.core.schema.SchemaRegistry;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -53,8 +50,11 @@ class AttributeUtil {
 
   SchemaRegistry schemaRegistry;
 
+  private final ObjectMapper objectMapper;
+
   AttributeUtil(SchemaRegistry schemaRegistry) {
     this.schemaRegistry = schemaRegistry;
+    this.objectMapper = ObjectMapperFactory.createObjectMapper(schemaRegistry);
   }
 
   public <T extends ScimResource> T keepAlwaysAttributesForDisplay(T resource) throws AttributeException {
@@ -165,20 +165,8 @@ class AttributeUtil {
   }
 
   @SuppressWarnings("unchecked")
-  private <T extends ScimResource> T cloneScimResource(T original) throws AttributeException {
-    try {
-    ByteArrayOutputStream boas = new ByteArrayOutputStream();
-    ObjectOutputStream oos = new ObjectOutputStream(boas);
-    oos.writeObject(original);
-
-    ByteArrayInputStream bais = new ByteArrayInputStream(boas.toByteArray());
-    ObjectInputStream ois = new ObjectInputStream(bais);
-    return (T) ois.readObject();
-    } catch (ClassNotFoundException e) {
-      throw new IllegalStateException(e);
-    } catch (IOException e) {
-      throw new AttributeException(e);
-    }
+  private <T extends ScimResource> T cloneScimResource(T original) {
+      return (T) this.objectMapper.convertValue(original, original.getClass());
   }
 
   private void removeAttributesOfType(Object object, AttributeContainer attributeContainer, Returned returned) throws AttributeException {
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 df38c6d6..93c80c70 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
@@ -64,19 +64,10 @@ public class AttributeUtilTest {
 
   @BeforeEach
   public void setup() {
-    schemaRegistry = Mockito.mock(SchemaRegistry.class);
+    schemaRegistry = new SchemaRegistry();
+    schemaRegistry.addSchema(ScimUser.class, List.of(EnterpriseExtension.class, ExampleObjectExtension.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)));
   }
 
   @Test


[directory-scimple] 02/06: Adding missing Serialization config

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

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

commit 09b60b0c920cda09db6e1ed70cf81c149530ad32
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 01:02:03 2023 -0400

    Adding missing Serialization config
    
    Chasing down the tree of objects that _should_ be serializable based on interactions with other serializable classes
---
 .../directory/scim/core/json/ObjectMapperFactory.java   |  2 ++
 .../scim/core/json/ScimResourceDeserializer.java        |  2 ++
 .../scim/core/repository/PrioritySortingComparator.java |  6 ++++--
 .../directory/scim/core/schema/SchemaRegistry.java      |  4 +++-
 .../directory/scim/protocol/data/BulkOperation.java     | 12 +++++++++---
 .../directory/scim/protocol/data/BulkRequest.java       |  4 +++-
 .../scim/spec/filter/AttributeComparisonExpression.java |  1 +
 .../scim/spec/filter/AttributePresentExpression.java    |  1 +
 .../org/apache/directory/scim/spec/filter/Filter.java   |  7 +++++--
 .../directory/scim/spec/filter/FilterExpression.java    |  3 ++-
 .../directory/scim/spec/filter/ValuePathExpression.java |  2 ++
 .../directory/scim/spec/patch/PatchOperation.java       |  8 ++++++--
 .../directory/scim/spec/patch/PatchOperationPath.java   |  6 +++++-
 .../directory/scim/spec/schema/AttributeContainer.java  |  3 ++-
 .../apache/directory/scim/spec/schema/ResourceType.java |  6 +++++-
 .../org/apache/directory/scim/spec/schema/Schema.java   | 17 ++++++++++-------
 .../scim/spec/schema/ServiceProviderConfiguration.java  | 11 +++++++++--
 17 files changed, 71 insertions(+), 24 deletions(-)

diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/json/ObjectMapperFactory.java b/scim-core/src/main/java/org/apache/directory/scim/core/json/ObjectMapperFactory.java
index 468d0b7e..e9b7ad41 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/json/ObjectMapperFactory.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/json/ObjectMapperFactory.java
@@ -79,6 +79,8 @@ public class ObjectMapperFactory {
 
   static class ScimResourceModule extends SimpleModule {
 
+    private static final long serialVersionUID = 6849840952304999849L;
+
     private final SchemaRegistry schemaRegistry;
 
     public ScimResourceModule(SchemaRegistry schemaRegistry) {
diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/json/ScimResourceDeserializer.java b/scim-core/src/main/java/org/apache/directory/scim/core/json/ScimResourceDeserializer.java
index 04346b35..f0b5c4c8 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/json/ScimResourceDeserializer.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/json/ScimResourceDeserializer.java
@@ -32,6 +32,8 @@ import java.util.Objects;
 import java.util.stream.StreamSupport;
 
 public class ScimResourceDeserializer extends StdDeserializer<ScimResource> {
+
+  private static final long serialVersionUID = -2125441391108866034L;
   private final SchemaRegistry schemaRegistry;
 
   public ScimResourceDeserializer(SchemaRegistry schemaRegistry) {
diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
index 9f56ea89..3c72fc3d 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
@@ -19,14 +19,16 @@
 
 package org.apache.directory.scim.core.repository;
 
+import java.io.Serializable;
 import java.util.Comparator;
 import java.util.Set;
 
 import org.apache.directory.scim.spec.resources.TypedAttribute;
 
-class PrioritySortingComparator implements Comparator<Object> {
+class PrioritySortingComparator implements Comparator<Object>, Serializable {
 
-  private Set<Object> priorities;
+  private static final long serialVersionUID = -8759531575215428525L;
+  private final Set<Object> priorities;
 
   public PrioritySortingComparator(Set<Object> priorities) {
     this.priorities = priorities;
diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java b/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
index 95ada68c..7f6c829e 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
@@ -19,6 +19,7 @@
 
 package org.apache.directory.scim.core.schema;
 
+import java.io.Serializable;
 import java.util.*;
 
 import org.apache.directory.scim.spec.annotation.ScimExtensionType;
@@ -33,8 +34,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.directory.scim.spec.schema.Schemas;
 
 @Slf4j
-public class SchemaRegistry {
+public class SchemaRegistry implements Serializable {
 
+  private static final long serialVersionUID = 2644269305703474835L;
   private final Map<String, Schema> schemaMap = new HashMap<>();
   
   private final Map<String, Class<? extends ScimResource>> schemaUrnToScimResourceClass = new HashMap<>();
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkOperation.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkOperation.java
index 869275f6..4a65946b 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkOperation.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkOperation.java
@@ -32,10 +32,14 @@ import org.apache.directory.scim.spec.resources.ScimResource;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
 @XmlType(propOrder = {"method","path","bulkId","data"})
 @XmlAccessorType(XmlAccessType.NONE)
-public class BulkOperation {
+public class BulkOperation implements Serializable {
+
+  private static final long serialVersionUID = 6528874816710788132L;
 
   public enum Method {
     @XmlEnumValue("POST") POST,
@@ -47,8 +51,10 @@ public class BulkOperation {
   @Data
   @AllArgsConstructor
   @XmlAccessorType(XmlAccessType.NONE)
-  public static class StatusWrapper {
-    
+  public static class StatusWrapper implements Serializable {
+
+    private static final long serialVersionUID = 1544738718748608248L;
+
     public static StatusWrapper wrap(Status code) {
       return new StatusWrapper(code);
     }
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkRequest.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkRequest.java
index 0ad7b699..63b5756b 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkRequest.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/BulkRequest.java
@@ -37,7 +37,9 @@ import lombok.EqualsAndHashCode;
 public class BulkRequest extends BaseResource<BulkRequest> {
 
   public static final String SCHEMA_URI = "urn:ietf:params:scim:api:messages:2.0:BulkRequest";
-  
+
+  private static final long serialVersionUID = -296570866318702047L;
+
   @XmlElement
   Integer failOnErrors;
   
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
index 50573ae4..4800aae1 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
@@ -32,6 +32,7 @@ import lombok.Value;
 
 @Value
 public class AttributeComparisonExpression implements FilterExpression, ValueFilterExpression {
+  private static final long serialVersionUID = -2865840428089850575L;
   AttributeReference attributePath;
   CompareOperator operation;
   Object compareValue;
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
index 8e542450..5842ac14 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
@@ -24,6 +24,7 @@ import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
 
 @Value
 public class AttributePresentExpression implements FilterExpression, ValueFilterExpression {
+  private static final long serialVersionUID = -4491412651236977273L;
   AttributeReference attributePath;
 
   @Override
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
index df8ef65b..a327f317 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
@@ -27,6 +27,7 @@ import org.antlr.v4.runtime.*;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 
+import java.io.Serializable;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 
@@ -38,8 +39,10 @@ import static java.nio.charset.StandardCharsets.UTF_8;
  */
 @Data
 @Slf4j
-public class Filter {
-  
+public class Filter implements Serializable {
+
+  private static final long serialVersionUID = -363511683199922297L;
+
   @Setter(AccessLevel.NONE)
   private FilterExpression expression;
   private String filter;
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
index dfb9ce1e..79ae5f8a 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
@@ -19,9 +19,10 @@
 
 package org.apache.directory.scim.spec.filter;
 
+import java.io.Serializable;
 import java.util.function.Function;
 
-public interface FilterExpression {
+public interface FilterExpression extends Serializable {
   
   String toFilter();
 
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
index a39a5aa9..1d9e0597 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
@@ -28,6 +28,8 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 public class ValuePathExpression implements FilterExpression {
+
+  private static final long serialVersionUID = 2615135752981305135L;
   // urn:parentAttribute[attributeExpression].subAttribute
 
   AttributeReference attributePath;
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
index 5b1733b5..aac75c77 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
@@ -31,12 +31,16 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.apache.directory.scim.spec.adapter.PatchOperationPathAdapter;
 
+import java.io.Serializable;
+
 @Data
 @EqualsAndHashCode
 @XmlType(propOrder={"operation", "path", "value"})
 @XmlAccessorType(XmlAccessType.NONE)
-public class PatchOperation {
-  
+public class PatchOperation implements Serializable {
+
+  private static final long serialVersionUID = 7748584008639433236L;
+
   @XmlEnum(String.class)
   public enum Type {
     @XmlEnumValue("add") ADD,
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
index 5191042e..10144a5f 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
@@ -34,9 +34,13 @@ import org.apache.directory.scim.spec.filter.ValuePathExpression;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import java.io.Serializable;
+
 @Data
 @Slf4j
-public class PatchOperationPath {
+public class PatchOperationPath implements Serializable {
+
+  private static final long serialVersionUID = 449365558879593512L;
 
   private ValuePathExpression valuePathExpression;
 
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/AttributeContainer.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/AttributeContainer.java
index 5aeadbdc..c7af0dbc 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/AttributeContainer.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/AttributeContainer.java
@@ -19,11 +19,12 @@
 
 package org.apache.directory.scim.spec.schema;
 
+import java.io.Serializable;
 import java.util.List;
 
 import org.apache.directory.scim.spec.schema.Schema.Attribute;
 
-public interface AttributeContainer {
+public interface AttributeContainer extends Serializable {
   List<Attribute> getAttributes();
 
   Attribute getAttribute(String attributeName);
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ResourceType.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ResourceType.java
index b882cdef..7999b199 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ResourceType.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ResourceType.java
@@ -19,6 +19,7 @@
 
 package org.apache.directory.scim.spec.schema;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -50,9 +51,12 @@ public class ResourceType extends ScimResourceWithOptionalId {
   
   public static final String RESOURCE_NAME = "ResourceType";
   public static final String SCHEMA_URI = "urn:ietf:params:scim:schemas:core:2.0:ResourceType";
+  private static final long serialVersionUID = -696969911228870476L;
 
   @Data
-  public static class SchemaExtensionConfiguration {
+  public static class SchemaExtensionConfiguration implements Serializable {
+
+    private static final long serialVersionUID = 7351651561572744255L;
 
     @XmlElement(name = "schema")
     @Urn
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schema.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schema.java
index 9983aa9e..2c3a05e4 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schema.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schema.java
@@ -49,8 +49,9 @@ public class Schema implements AttributeContainer {
   
   public static final String RESOURCE_NAME = "Schema";
   public static final String SCHEMA_URI = "urn:ietf:params:scim:schemas:core:2.0:Schema";
-  
-  
+  private static final long serialVersionUID = 1869782412244161741L;
+
+
   /**
    * Defines the structure of attributes included in SCIM schemas as defined by
    * section 7 of the SCIM schema specification. See
@@ -64,6 +65,8 @@ public class Schema implements AttributeContainer {
   @Data
   public static class Attribute implements AttributeContainer {
 
+    private static final long serialVersionUID = 1683400114899587851L;
+
     public enum Mutability {
 
       @XmlEnumValue("immutable") IMMUTABLE,
@@ -148,7 +151,7 @@ public class Schema implements AttributeContainer {
     @XmlElement
     List<String> referenceTypes;
 
-    AttributeAccessor accessor;
+    transient AttributeAccessor accessor;
 
     private boolean scimResourceIdReference;
 
@@ -169,7 +172,7 @@ public class Schema implements AttributeContainer {
           LOG.warn("Attribute name was null, skipping name indexing");
           continue;
         }
-        subAttributeNamesMap.put(name.toLowerCase(), attribute);
+        subAttributeNamesMap.put(name.toLowerCase(Locale.ENGLISH), attribute);
       }
       
       if(action.equals(AddAction.REPLACE)) {
@@ -186,7 +189,7 @@ public class Schema implements AttributeContainer {
       if (name == null) {
         return null;
       }
-      return subAttributeNamesMap.get(name.toLowerCase());
+      return subAttributeNamesMap.get(name.toLowerCase(Locale.ENGLISH));
     }
 
   }
@@ -228,7 +231,7 @@ public class Schema implements AttributeContainer {
         LOG.warn("Attribute name was null, skipping name indexing");
         continue;
       }
-      attributeNamesMap.put(name.toLowerCase(), attribute);
+      attributeNamesMap.put(name.toLowerCase(Locale.ENGLISH), attribute);
     }
     
     this.attributes = attributes;
@@ -238,7 +241,7 @@ public class Schema implements AttributeContainer {
     if (name == null) {
       return null;
     }
-    return attributeNamesMap.get(name.toLowerCase());
+    return attributeNamesMap.get(name.toLowerCase(Locale.ENGLISH));
   }
 
   public Attribute getAttributeFromPath(String path) {
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
index 7c457c0e..fbc55f05 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
@@ -19,6 +19,7 @@
 
 package org.apache.directory.scim.spec.schema;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -44,11 +45,14 @@ public class ServiceProviderConfiguration extends ScimResourceWithOptionalId {
 
   public static final String RESOURCE_NAME = "ServiceProviderConfig";
   public static final String SCHEMA_URI = "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig";
+  private static final long serialVersionUID = -6526116522184446474L;
 
   @Data
   @XmlType
   @XmlAccessorType(XmlAccessType.NONE)
-  public static class AuthenticationSchema {
+  public static class AuthenticationSchema implements Serializable {
+
+    private static final long serialVersionUID = 1286852277186580002L;
 
     public enum Type {
       @XmlEnumValue("oauth") OAUTH(
@@ -137,13 +141,15 @@ public class ServiceProviderConfiguration extends ScimResourceWithOptionalId {
   }
 
   @Data
-  public static class SupportedConfiguration {
+  public static class SupportedConfiguration implements Serializable {
+    private static final long serialVersionUID = 3646886915978382920L;
     boolean supported;
   }
 
   @Data
   @EqualsAndHashCode(callSuper = true)
   public static class BulkConfiguration extends SupportedConfiguration {
+    private static final long serialVersionUID = 8312025367100671778L;
     int maxOperations;
     int maxPayloadSize;
   }
@@ -151,6 +157,7 @@ public class ServiceProviderConfiguration extends ScimResourceWithOptionalId {
   @Data
   @EqualsAndHashCode(callSuper = true)
   public static class FilterConfiguration extends SupportedConfiguration {
+    private static final long serialVersionUID = 1887771731291732875L;
     int maxResults;
   }
 


[directory-scimple] 03/06: Fixing minor issues found by SpotBugs

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

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

commit aba1185550868261311bc3d429516f2fb886aea8
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 01:04:33 2023 -0400

    Fixing minor issues found by SpotBugs
---
 .../scim/core/repository/PatchHandlerImpl.java          |  6 +++---
 .../scim/example/jersey/JerseyApplication.java          |  2 +-
 .../directory/scim/server/rest/ScimResourceHelper.java  | 12 ------------
 .../directory/scim/protocol/data/ErrorResponse.java     |  2 +-
 .../directory/scim/protocol/data/StatusAdapter.java     |  2 +-
 .../org/apache/directory/scim/spec/filter/Filter.java   |  2 +-
 .../directory/scim/spec/resources/PhoneNumber.java      | 15 ++++++++-------
 .../directory/scim/spec/schema/ScimSpecSchema.java      | 17 +++++++----------
 8 files changed, 22 insertions(+), 36 deletions(-)

diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/repository/PatchHandlerImpl.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PatchHandlerImpl.java
index dce8310f..ac704c98 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/repository/PatchHandlerImpl.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PatchHandlerImpl.java
@@ -221,7 +221,7 @@ public class PatchHandlerImpl implements PatchHandler {
     <T extends ScimResource> void applyMultiValue(final T source, Map<String, Object> sourceAsMap, Schema schema, Attribute attribute, ValuePathExpression valuePathExpression, Object value);
   }
 
-  private class AddOperationHandler implements PatchOperationHandler {
+  private static class AddOperationHandler implements PatchOperationHandler {
 
     @Override
     public <T extends ScimResource> void applyExtensionValue(T source, Map<String, Object> sourceAsMap, Schema schema, Attribute attribute, ValuePathExpression valuePathExpression, String urn, Object value) {
@@ -314,7 +314,7 @@ public class PatchHandlerImpl implements PatchHandler {
     }
   }
 
-  private class ReplaceOperationHandler implements PatchOperationHandler {
+  private static class ReplaceOperationHandler implements PatchOperationHandler {
 
     @Override
     public void applySingleValue(Map<String, Object> sourceAsMap, Attribute attribute, AttributeReference attributeReference, Object value) {
@@ -366,7 +366,7 @@ public class PatchHandlerImpl implements PatchHandler {
     }
   }
 
-  private class RemoveOperationHandler implements PatchOperationHandler {
+  private static class RemoveOperationHandler implements PatchOperationHandler {
 
     @Override
     public void applySingleValue(Map<String, Object> sourceAsMap, Attribute attribute, AttributeReference attributeReference, Object value) {
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
index 090d43bc..aa012fa0 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
@@ -76,7 +76,7 @@ public class JerseyApplication extends Application {
         .thenAccept(instance -> instance.stopOnShutdown(stopResult -> container.close()));
       URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();
 
-      System.out.printf("Application started: %s\nStop the application using CTRL+C%n", uri.toString());
+      System.out.printf("Application started: %s%nStop the application using CTRL+C%n", uri.toString());
 
       // block and wait shut down signal, like CTRL+C
       Thread.currentThread().join();
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
index af6011e7..4a5aef01 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
@@ -72,18 +72,6 @@ public final class ScimResourceHelper {
     // Make this a utility class
   }
 
-  /**
-   * Provides a set of JAX-RS annotated classes for the basic SCIM protocol
-   * functionality.
-   * 
-   * @return the JAX-RS annotated classes.
-   * @deprecated use {@link ScimResourceHelper#scimpleFeatureAndResourceClasses}
-   */
-  @Deprecated
-  public static Set<Class<?>> getScimClassesToLoad() {
-    return SCIMPLE_CLASSES;
-  }
-
   public static Set<Class<?>> scimpleFeatureAndResourceClasses() {
     Set<Class<?>> classes = new HashSet<>(RESOURCE_CLASSES);
     classes.add(ScimpleFeature.class);
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/ErrorResponse.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/ErrorResponse.java
index 23cc8e6d..7b025d42 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/ErrorResponse.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/ErrorResponse.java
@@ -40,7 +40,7 @@ public class ErrorResponse extends BaseResource<ErrorResponse> {
 
   private static final long serialVersionUID = 9045421198080348116L;
 
-  public static String SCHEMA_URI = "urn:ietf:params:scim:api:messages:2.0:Error";
+  public static final String SCHEMA_URI = "urn:ietf:params:scim:api:messages:2.0:Error";
 
   @XmlElement(nillable = true)
   private String detail;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/StatusAdapter.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/StatusAdapter.java
index 4a133972..7cbfe8b2 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/StatusAdapter.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/data/StatusAdapter.java
@@ -31,7 +31,7 @@ public class StatusAdapter extends XmlAdapter<String, Status> {
     }
 
     for (Status status : Status.values()) {
-      if (status.getStatusCode() == Integer.valueOf(v)) {
+      if (status.getStatusCode() == Integer.parseInt(v)) {
         return status;
       }
     }
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
index a327f317..36dfa109 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
@@ -71,7 +71,7 @@ public class Filter implements Serializable {
   }
 
   protected FilterExpression parseFilter(String filter) throws FilterParseException {
-    FilterLexer l = new FilterLexer(new ANTLRInputStream(filter));
+    FilterLexer l = new FilterLexer(CharStreams.fromString(filter));
     FilterParser p = new FilterParser(new CommonTokenStream(l));
     p.setBuildParseTree(true);
 
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
index 66567e46..17943593 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java
@@ -149,13 +149,7 @@ public class PhoneNumber implements Serializable, TypedAttribute {
       PhoneNumberLexer phoneNumberLexer = new PhoneNumberLexer(new ANTLRInputStream(value));
       PhoneNumberParser p = new PhoneNumberParser(new CommonTokenStream(phoneNumberLexer));
       p.setBuildParseTree(true);
-  
-      p.addErrorListener(new BaseErrorListener() {
-        @Override
-        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
-          throw new IllegalStateException("failed to parse at line " + line + " due to " + msg, e);
-        }
-      });
+      p.addErrorListener(new PhoneNumberErrorListener());
   
       PhoneNumberParseTreeListener tpl = new PhoneNumberParseTreeListener();
       try {
@@ -303,6 +297,13 @@ public class PhoneNumber implements Serializable, TypedAttribute {
     return true;
   }
 
+  private static class PhoneNumberErrorListener extends BaseErrorListener {
+    @Override
+    public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
+      throw new IllegalStateException("failed to parse at line " + line + " due to " + msg, e);
+    }
+  }
+
   @Data
   public abstract static class PhoneNumberBuilder {
 
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ScimSpecSchema.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ScimSpecSchema.java
index 7a03547e..1d33ea0d 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ScimSpecSchema.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ScimSpecSchema.java
@@ -19,7 +19,6 @@
 
 package org.apache.directory.scim.spec.schema;
 
-import java.util.HashSet;
 import java.util.Set;
 
 import lombok.Data;
@@ -29,13 +28,11 @@ import lombok.Getter;
 public class ScimSpecSchema {
   
   @Getter
-  static Set<String> schemaNames = new HashSet<>();
-  
-  static {
-    schemaNames.add("urn:ietf:params:scim:schemas:core:2.0:Group");
-    schemaNames.add("urn:ietf:params:scim:schemas:core:2.0:ResourceType");
-    schemaNames.add("urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig");
-    schemaNames.add("urn:ietf:params:scim:schemas:core:2.0:User");
-    schemaNames.add("urn:ietf:params:scim:schemas:extension:enterprise:2.0:User");
-  }
+  final static Set<String> schemaNames = Set.of(
+    "urn:ietf:params:scim:schemas:core:2.0:Group",
+    "urn:ietf:params:scim:schemas:core:2.0:ResourceType",
+    "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig",
+    "urn:ietf:params:scim:schemas:core:2.0:User",
+    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
+  );
 }


[directory-scimple] 01/06: Add Spotbugs & FindSecBugs

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

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

commit a1a8e51f6473a480de15ecbb743221443e045a63
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 00:56:02 2023 -0400

    Add Spotbugs & FindSecBugs
---
 pom.xml                   | 37 +++++++++++++++++++++++++++
 src/spotbugs/excludes.xml | 64 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 101 insertions(+)

diff --git a/pom.xml b/pom.xml
index 2e1528a8..dc20389b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -619,6 +619,30 @@
             <rulesets>
               <ruleset>${session.executionRootDirectory}/src/pmd/ruleset.xml</ruleset>
             </rulesets>
+            <excludeRoots>
+              <excludeRoot>${project.build.directory}/generated-sources/</excludeRoot>
+            </excludeRoots>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>com.github.spotbugs</groupId>
+          <artifactId>spotbugs-maven-plugin</artifactId>
+          <version>4.7.3.5</version>
+          <configuration>
+            <plugins>
+              <plugin>
+                <groupId>com.h3xstream.findsecbugs</groupId>
+                <artifactId>findsecbugs-plugin</artifactId>
+                <version>1.12.0</version>
+              </plugin>
+            </plugins>
+            <effort>Max</effort>
+            <threshold>Medium</threshold>
+            <failOnError>true</failOnError>
+            <omitVisitors>CrlfLogInjectionDetector</omitVisitors>
+            <xmlOutput>true</xmlOutput>
+            <fork>false</fork>
+            <excludeFilterFile>${session.executionRootDirectory}/src/spotbugs/excludes.xml</excludeFilterFile>
           </configuration>
         </plugin>
       </plugins>
@@ -654,6 +678,19 @@
               </execution>
             </executions>
           </plugin>
+          <plugin>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>scan</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>check</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
         </plugins>
       </build>
     </profile>
diff --git a/src/spotbugs/excludes.xml b/src/spotbugs/excludes.xml
new file mode 100644
index 00000000..b50f714f
--- /dev/null
+++ b/src/spotbugs/excludes.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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. -->
+
+<FindBugsFilter>
+  <Class name="~org.apache.directory.scim.spec.filter\.[^.]+"/>
+  <Class name="~org.apache.directory.scim.spec.phonenumber\.[^.]+"/>
+  <Bug pattern="EI_EXPOSE_REP"/>
+  <Bug pattern="EI_EXPOSE_REP2"/>
+
+  <Match>
+    <Class name="org.apache.directory.scim.spec.resources.PhoneNumber$PhoneNumberBuilder"/>
+    <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/>
+  </Match>
+
+  <Match>
+    <Or>
+      <Class name="org.apache.directory.scim.spec.resources.PhoneNumber$LocalPhoneNumberBuilder"/>
+      <Class name="org.apache.directory.scim.spec.resources.PhoneNumber$GlobalPhoneNumberBuilder"/>
+    </Or>
+    <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR"/>
+  </Match>
+
+  <Match>
+    <Class name="org.apache.directory.scim.spec.resources.PhoneNumber"/>
+    <Method name="equalsIgnoreCaseAndOrderParams"/>
+    <Bug pattern="NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE"/>
+  </Match>
+
+  <Match>
+    <Class name="org.apache.directory.scim.spec.validator.UrnValidator"/>
+    <Bug pattern="REDOS"/>
+  </Match>
+
+  <Match>
+    <!-- false positive -->
+    <Class name="org.apache.directory.scim.core.json.ObjectMapperFactory"/>
+    <Bug pattern="MS_EXPOSE_REP"/>
+  </Match>
+
+  <!-- Used for integration testing only -->
+  <Match>
+    <Class name="org.apache.directory.scim.compliance.junit.EmbeddedServerExtension"/>
+    <Bug pattern="UNENCRYPTED_SERVER_SOCKET"/>
+  </Match>
+
+  <!-- doesn't seem to play well with lombok -->
+  <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/>
+
+</FindBugsFilter>


[directory-scimple] 06/06: Move dependency-check out of `ci` profile

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

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

commit d50d3905c4d8add2a99de67b08dbc23a9340431e
Author: Brian Demers <bd...@apache.org>
AuthorDate: Sat Sep 2 00:56:49 2023 -0400

    Move dependency-check out of `ci` profile
    
    enabling 'ci' profile is run... durring CI
---
 .github/workflows/build.yml |  2 +-
 .github/workflows/cron.yml  |  2 +-
 pom.xml                     | 11 -----------
 3 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b0ebca84..f6cf38cc 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -44,7 +44,7 @@ jobs:
           cache: maven
 
       - name: Build with Maven
-        run: ./mvnw verify -V -B --no-transfer-progress
+        run: ./mvnw verify -Pci -V -B --no-transfer-progress
         env:
           GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }}
 
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index 8e79eafa..fa1ab9ed 100644
--- a/.github/workflows/cron.yml
+++ b/.github/workflows/cron.yml
@@ -42,6 +42,6 @@ jobs:
           cache: maven
 
       - name: Build with Maven
-        run: ./mvnw verify -Pci -V -B --no-transfer-progress
+        run: ./mvnw verify dependency-check:check -Pci -V -B --no-transfer-progress
         env:
           GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }}
diff --git a/pom.xml b/pom.xml
index dc20389b..f89b7e56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -654,17 +654,6 @@
       <id>ci</id>
       <build>
         <plugins>
-          <plugin>
-            <groupId>org.owasp</groupId>
-            <artifactId>dependency-check-maven</artifactId>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>check</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-pmd-plugin</artifactId>