[java-identity-provider] 04/04: IDP-1516 Reduce guava dependence idp-attribute-resolver-impl

Rod Widdowson rdw at steadingsoftware.com
Wed Oct 30 07:35:29 EDT 2019


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=b1bd3f062da8bd4bedd1e459e6b1b3df24b19fb9

commit b1bd3f062da8bd4bedd1e459e6b1b3df24b19fb9
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Wed Oct 30 11:22:42 2019 +0000

    IDP-1516 Reduce guava dependence idp-attribute-resolver-impl
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
---
 .../impl/IdPAttributePrincipalValuesFunction.java  |  8 ++--
 .../ad/mapped/impl/MappedAttributeDefinition.java  | 21 +++------
 .../resolver/ad/mapped/impl/ValueMap.java          | 12 +----
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    | 32 ++++++-------
 .../http/impl/ScriptedResponseMappingStrategy.java |  1 +
 .../resolver/dc/impl/ScriptedDataConnector.java    |  1 +
 .../resolver/dc/impl/StaticDataConnector.java      | 38 +++++++--------
 .../resolver/impl/AttributeResolverImpl.java       | 55 +++++++++-------------
 .../impl/AttributeResolverServiceGaugeSet.java     |  7 ++-
 .../ad/mapped/impl/MappedAttributeTest.java        |  5 +-
 .../dc/http/impl/HTTPDataConnectorTest.java        |  3 ++
 .../resolver/dc/impl/StaticDataConnectorTest.java  |  8 ----
 .../impl/AttributeResolutionContextTest.java       |  7 ---
 .../resolver/impl/AttributeResolverImplTest.java   | 12 ++---
 14 files changed, 80 insertions(+), 130 deletions(-)

diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
index 2068aae..e194014 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/IdPAttributePrincipalValuesFunction.java
@@ -24,8 +24,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import com.google.common.base.Strings;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.authn.principal.IdPAttributePrincipal;
@@ -34,6 +32,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /** Engine to mine values from {@link IdPAttributePrincipal}s. */
 public class IdPAttributePrincipalValuesFunction extends AbstractInitializableComponent implements
@@ -48,9 +47,8 @@ public class IdPAttributePrincipalValuesFunction extends AbstractInitializableCo
      * @param attrName the attribute name to read values from
      */
     public void setAttributeName(@Nonnull @NotEmpty final String attrName) {
-        Constraint.isFalse(Strings.isNullOrEmpty(attrName), "Attribute Name cannot be null or empty");
-        
-        attributeName = attrName;
+        attributeName = Constraint.isNotNull(StringSupport.trimOrNull(attrName),
+                "Attribute Name cannot be null or empty");
     }
 
     /** {@inheritDoc} */
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index ecbeb4a..cf0715a 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -27,6 +27,11 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
@@ -38,20 +43,12 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
-import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
-
 /**
  * Implementation of Mapped Attributes. <br/>
  * An attribute definition that takes the values from previous resolution stages and converts them as it creates the
@@ -88,15 +85,11 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * 
      * @param mappings functions used to map an input value to an output value
      */
-    public void setValueMaps(@Nullable @NullableElements final Collection<ValueMap> mappings) {
+    public void setValueMaps(@Nullable final Collection<ValueMap> mappings) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        if (mappings != null) {
-            valueMaps = Set.copyOf(Collections2.filter(mappings, Predicates.notNull()));
-        } else {
-            valueMaps = Collections.emptySet();
-        }
+        valueMaps = mappings != null ? Set.copyOf(mappings) : Collections.emptySet();
     }
 
     /**
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
index 003e1fa..ab445d6 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
@@ -31,13 +31,9 @@ import javax.annotation.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -86,13 +82,9 @@ public class ValueMap implements Function<String, Set<StringAttributeValue>> {
      *
      * @param newValues functions used to map an input value to an output value
      */
-    public void setSourceValues(@Nullable @NullableElements final Collection<SourceValue> newValues) {
+    public void setSourceValues(@Nullable final Collection<SourceValue> newValues) {
 
-        if (newValues != null) {
-            sourceValues = Set.copyOf(Collections2.filter(newValues, Predicates.notNull()));
-        } else {
-            sourceValues = Collections.emptySet();
-        }
+        sourceValues = newValues != null ? Set.copyOf(newValues) : Collections.emptySet();
     }
 
     /**
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index bba795c..aa3e8b8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -19,9 +19,9 @@ package net.shibboleth.idp.attribute.resolver.dc.http.impl;
 
 import java.io.IOException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -34,8 +34,6 @@ import org.apache.http.client.protocol.HttpClientContext;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
 import org.opensaml.security.httpclient.HttpClientSecuritySupport;
 
-import com.google.common.collect.ImmutableMap;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -45,6 +43,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -65,14 +64,14 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
         ExecutableSearchBuilder<HTTPSearch> {
     
     /** Map of headers to set. */
-    @Nonnull @NonnullElements private Map<String,String> headerMap;
+    @Nonnull @NonnullElements @Unmodifiable private List<Pair<String,String>> headerList;
     
     /** HTTP client security parameters. */
     @Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
     
     /** Constructor. */
     public AbstractHTTPSearchBuilder() {
-        headerMap = Collections.emptyMap();
+        headerList = Collections.emptyList();
     }
     
     /**
@@ -80,8 +79,8 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      * 
      * @return map of headers
      */
-    @Nonnull @NonnullElements @NotLive @Unmodifiable public Map<String,String> getHeaders() {
-        return ImmutableMap.copyOf(headerMap);
+    @Nonnull @NonnullElements @NotLive @Unmodifiable public List<Pair<String,String>> getHeaders() {
+        return headerList;
     }
     
     /**
@@ -96,15 +95,14 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
                 
         Constraint.isNotNull(headers, "Map of headers cannot be null");
-        headerMap = new HashMap<>(headers.size());
         
-        for (final Map.Entry<String,String> entry : headers.entrySet()) {
-            final String key = StringSupport.trimOrNull(entry.getKey());
-            final String value = StringSupport.trimOrNull(entry.getValue());
-            if (key != null && value != null) {
-                headerMap.put(key, value);
-            }
-        }
+         headerList = headers.
+                entrySet().
+                stream().
+                map(e-> new Pair<>(
+                        Constraint.isNotNull(StringSupport.trimOrNull(e.getKey()), "header name  must be non null"),
+                        Constraint.isNotNull(StringSupport.trimOrNull(e.getValue()), "header value must be non null"))).
+                collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
     }
     
     /**
@@ -142,8 +140,8 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
         
         final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
         
-        for (final Map.Entry<String,String> entry : headerMap.entrySet()) {
-            request.setHeader(entry.getKey(), entry.getValue());
+        for (final Pair<String,String> entry : headerList) {
+            request.setHeader(entry.getFirst(), entry.getSecond());
         }
 
 // Checkstyle: AnonInnerLength OFF
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
index 688e9a9..8d6ae11 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
@@ -124,6 +124,7 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
     }
     
     /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
     public Map<String,IdPAttribute> handleResponse(final HttpResponse response) throws IOException {
         
         log.debug("{} Handling HTTP response", getLogPrefix());
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
index 67932d3..2f457dc 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
@@ -205,6 +205,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
          * @return script result
          * @throws ResolutionException if the script fails
          */
+        @SuppressWarnings("unchecked")
         @Nullable protected Map<String,IdPAttribute> execute(
                 @Nonnull final AttributeResolutionContext resolutionContext,
                 @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
index d80650f..8d3b466 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
@@ -18,27 +18,27 @@
 package net.shibboleth.idp.attribute.resolver.dc.impl;
 
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.AbstractDataConnector;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.ImmutableMap;
+import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
  * A {@link net.shibboleth.idp.attribute.resolver.DataConnector} that just returns a static collection of
@@ -51,7 +51,7 @@ public class StaticDataConnector extends AbstractDataConnector {
     @Nonnull private final Logger log = LoggerFactory.getLogger(StaticDataConnector.class);
 
     /** Static collection of values returned by this connector. */
-    private Map<String, IdPAttribute> attributes;
+    private @NonnullAfterInit @NonnullElements Map<String, IdPAttribute> attributes;
 
     /**
      * Get the static values returned by this connector.
@@ -67,24 +67,18 @@ public class StaticDataConnector extends AbstractDataConnector {
      * 
      * @param newValues static values returned by this connector
      */
-    public void setValues(@Nullable @NullableElements final Collection<IdPAttribute> newValues) {
+    public void setValues(@Nonnull @NonnullElements final Collection<IdPAttribute> newValues) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
-        if (null == newValues) {
-            attributes = null;
-            return;
-        }
-
-        final Map<String, IdPAttribute> map = new HashMap<>(newValues.size());
-        for (final IdPAttribute attr : newValues) {
-            if (null == attr) {
-                continue;
-            }
-            map.put(attr.getId(), attr);
-        }
+        Constraint.isNotNull(newValues, "Values must not be null");
 
-        attributes = ImmutableMap.copyOf(map);
+        attributes = newValues.
+                stream().
+                map(e -> Constraint.isNotNull(e, "non null Attribute in connector")).
+                collect(Collectors.collectingAndThen(
+                            Collectors.toMap(IdPAttribute::getId, i -> i),
+                            Collections::unmodifiableMap));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index 6e02ddd..d68750e 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -42,8 +42,6 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableMap;
-
 import net.shibboleth.ext.spring.service.AbstractServiceableComponent;
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -62,7 +60,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.collection.LazyList;
 import net.shibboleth.utilities.java.support.collection.LazyMap;
@@ -112,25 +109,21 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
     /** Sets the attribute definitions for this resolver.
      * @param definitions attribute definitions loaded in to this resolver
      */
-    public void setAttributeDefinitions(@Nullable @NullableElements final Collection<AttributeDefinition> definitions) {
+    public void setAttributeDefinitions(@Nonnull @NonnullElements final Collection<AttributeDefinition> definitions) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        Constraint.isNotNull(definitions, "Attribute Defintions should be non-null");
         
-        final Map<String, AttributeDefinition> checkedDefinitions;
-        if (definitions != null) {
-            checkedDefinitions = new HashMap<>(definitions.size());
-            for (final AttributeDefinition definition : definitions) {
-                if (definition != null) {
-                    if (checkedDefinitions.containsKey(definition.getId())) {
-                        throw new IllegalArgumentException(logPrefix + " Duplicate Attribute Definition with id '"
-                                + definition.getId() + "'");
-                    }
-                    checkedDefinitions.put(definition.getId(), definition);
+        final Map<String, AttributeDefinition> checkedDefinitions = new HashMap<>(definitions.size());
+        for (final AttributeDefinition definition : definitions) {
+            if (definition != null) {
+                if (checkedDefinitions.containsKey(definition.getId())) {
+                    throw new IllegalArgumentException(logPrefix + " Duplicate Attribute Definition with id '"
+                            + definition.getId() + "'");
                 }
+                checkedDefinitions.put(definition.getId(), definition);
             }
-        } else {
-            checkedDefinitions = Collections.emptyMap();
         }
-        attributeDefinitions = ImmutableMap.copyOf(checkedDefinitions);
+        attributeDefinitions = Map.copyOf(checkedDefinitions);
     }
 
     /**
@@ -146,25 +139,21 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
     /** Sets the data connectors for this resolver.
      * @param connectors data connectors loaded in to this resolver
      */
-    public void setDataConnectors( @Nullable @NullableElements final Collection<DataConnector> connectors){
+    public void setDataConnectors(@Nonnull @NonnullElements  final Collection<DataConnector> connectors){
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        Constraint.isNotNull(connectors, "Attribute Defintions should be non-null");
         
-        final Map<String, DataConnector> checkedConnectors;
-        if (connectors != null) {
-            checkedConnectors = new HashMap<>(connectors.size());
-            for (final DataConnector connector : connectors) {
-                if (connector != null) {
-                    if (checkedConnectors.containsKey(connector.getId())) {
-                        throw new IllegalArgumentException(logPrefix + " Duplicate Data Connector Definition with id '"
-                                + connector.getId() + "'");
-                    }
-                    checkedConnectors.put(connector.getId(), connector);
+        final Map<String, DataConnector> checkedConnectors = new HashMap<>(connectors.size());
+        for (final DataConnector connector : connectors) {
+            if (connector != null) {
+                if (checkedConnectors.containsKey(connector.getId())) {
+                    throw new IllegalArgumentException(logPrefix + " Duplicate Data Connector Definition with id '"
+                            + connector.getId() + "'");
                 }
+                checkedConnectors.put(connector.getId(), connector);
             }
-        } else {
-            checkedConnectors = Collections.emptyMap();
         }
-        dataConnectors = ImmutableMap.copyOf(checkedConnectors);
+        dataConnectors = Map.copyOf(checkedConnectors);
     }
 
     /**
@@ -619,10 +608,8 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * </p>
      *
      * @param resolutionContext current resolution context
-     * @return a populated Attribute Context, or nothing
      */
-    @Nullable protected void  finalizePreResolvedAttributes(@Nonnull
-            final AttributeResolutionContext resolutionContext) {
+     protected void finalizePreResolvedAttributes(@Nonnull final AttributeResolutionContext resolutionContext) {
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
         final AttributeResolverWorkContext workContext =
                 resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
index fbfcaea..3a42f38 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
@@ -18,6 +18,7 @@ package net.shibboleth.idp.attribute.resolver.impl;
 
 import java.time.Instant;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -29,8 +30,6 @@ import com.codahale.metrics.Gauge;
 import com.codahale.metrics.MetricFilter;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.MetricSet;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
 
 import net.shibboleth.idp.attribute.resolver.AttributeResolver;
 import net.shibboleth.idp.attribute.resolver.DataConnector;
@@ -63,7 +62,7 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet<
                 MetricRegistry.name(DEFAULT_METRIC_NAME, metricName, "failure"),
                 new Gauge<Map<String,Instant>>() {
                     public Map<String,Instant> getValue() {
-                        final Builder<String,Instant> mapBuilder = ImmutableMap.<String,Instant>builder();
+                        final Map<String,Instant> mapBuilder = new HashMap<>();
                         final ServiceableComponent<AttributeResolver> component =
                                 getService().getServiceableComponent();
                         if (component != null) {
@@ -89,7 +88,7 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet<
                                 component.unpinComponent();
                             }
                         }
-                        return mapBuilder.build();
+                        return Map.copyOf(mapBuilder);
                     }
                 });
 // Checkstyle: AnonInnerLength ON
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
index bba88e1..57e7ff1 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
@@ -208,9 +208,8 @@ public class MappedAttributeTest {
     @Test public void defaultCase() throws Exception {
         final AttributeResolutionContext resolutionContext =
                 ResolverTestSupport.buildResolutionContext(ResolverTestSupport.buildDataConnector("connector1",
-                        ResolverTestSupport.buildAttribute(ResolverTestSupport.EPE_ATTRIB_ID,
-                                ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
-                                ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA3_VALUES)));
+                        ResolverTestSupport.buildAttribute(ResolverTestSupport.EPE_ATTRIB_ID, ResolverTestSupport.EPE1_VALUES), 
+                        ResolverTestSupport.buildAttribute(ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA3_VALUES)));
 
         final MappedAttributeDefinition definition = new MappedAttributeDefinition();
         definition.setId(TEST_ATTRIBUTE_NAME);
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
index cf83ac5..e4fe530 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
@@ -81,9 +81,12 @@ public class HTTPDataConnectorTest {
         builder.setTemplateText(TEST_URL);
         builder.setVelocityEngine(VelocityEngine.newVelocityEngine());
         builder.setHttpClientSecurityParameters(params);
+        builder.setHeaders(Collections.singletonMap("Accept", "test/html"));
         builder.initialize();
+        
         connector.setExecutableSearchBuilder(builder);
         
+        
         final ScriptedResponseMappingStrategy mapping =
                 ScriptedResponseMappingStrategy.resourceScript(
                         ResourceHelper.of(new ClassPathResource((TestSupport.isJavaV8OrLater() ? SCRIPT_PATH_V8 : SCRIPT_PATH) + "test.js")));
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
index d405872..9381b89 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
@@ -54,8 +54,6 @@ public class StaticDataConnectorTest {
         connector.setId("Static");
 
         assertNull(connector.getAttributes());
-        connector.setValues(null);
-        assertNull(connector.getAttributes());
 
         try {
             connector.initialize();
@@ -68,12 +66,7 @@ public class StaticDataConnectorTest {
         connector.setValues(input);
         assertNotNull(connector.getAttributes());
 
-        input.add(null);
-        connector.setValues(input);
-        assertNotNull(connector.getAttributes());        
-
         input.add(attribute);
-        input.add(null);
         input.add(new IdPAttribute("thingy"));
         
         connector.setValues(input);
@@ -97,7 +90,6 @@ public class StaticDataConnectorTest {
         connector.setId("Static");
 
         List<IdPAttribute> input = new ArrayList<>();
-        input.add(null);
         connector.setValues(input);
         
         try {
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
index 2dffdb7..838b319 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
@@ -79,7 +79,6 @@ public class AttributeResolutionContextTest {
     @Test public void setResolvedAttributes() {
         AttributeResolutionContext context = new AttributeResolutionContext();
 
-        context.setResolvedIdPAttributes(null);
         assertNotNull(context.getResolvedIdPAttributes());
         assertTrue(context.getResolvedIdPAttributes().isEmpty());
 
@@ -88,13 +87,7 @@ public class AttributeResolutionContextTest {
         assertNotNull(context.getResolvedIdPAttributes());
         assertTrue(context.getResolvedIdPAttributes().isEmpty());
 
-        attributes.add(null);
-        context.setResolvedIdPAttributes(attributes);
-        assertNotNull(context.getResolvedIdPAttributes());
-        assertTrue(context.getResolvedIdPAttributes().isEmpty());
-
         attributes.add(new IdPAttribute("foo"));
-        attributes.add(null);
         attributes.add(new IdPAttribute("bar"));
         context.setResolvedIdPAttributes(attributes);
         assertNotNull(context.getResolvedIdPAttributes());
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
index 40a77dd..e75560b 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
@@ -44,10 +44,10 @@ import org.testng.annotations.Test;
 import net.shibboleth.ext.spring.service.MockApplicationContext;
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.EmptyAttributeValue.EmptyType;
-import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
+import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.AttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.DataConnector;
@@ -62,7 +62,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
 import net.shibboleth.idp.attribute.resolver.dc.impl.StaticDataConnector;
 import net.shibboleth.idp.saml.impl.TestSources;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.collection.LazySet;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.DestroyedComponentException;
@@ -924,12 +923,13 @@ public class AttributeResolverImplTest {
     }
 
     public static AttributeResolverImpl newAttributeResolverImpl(@Nonnull @NotEmpty final String resolverId,
-            @Nullable @NullableElements final Collection<AttributeDefinition> definitions,
-            @Nullable @NullableElements final Collection<DataConnector> connectors) {
+            @Nullable final Collection<AttributeDefinition> definitions,
+            @Nullable final Collection<DataConnector> connectors) {
         final AttributeResolverImpl result = new AttributeResolverImpl();
         result.setId(resolverId);
-        result.setAttributeDefinitions(definitions);
-        result.setDataConnectors(connectors);
+        
+        result.setAttributeDefinitions(definitions == null ? Collections.EMPTY_LIST : definitions);
+        result.setDataConnectors(connectors == null ? Collections.EMPTY_LIST : connectors);
         result.setApplicationContext(new MockApplicationContext());
         return result;
     }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list