[java-shib-attribute] 04/04: IDP-2069, JSSH-27 Null Handling Task, use ensureId

Rod Widdowson rdw at steadingsoftware.com
Sat Apr 29 10:36:41 UTC 2023


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

rdw pushed a commit to branch main
in repository java-shib-attribute.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=b6b7fad86f2a347cc6c3fc2593345aed9e22d824

commit b6b7fad86f2a347cc6c3fc2593345aed9e22d824
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Apr 29 11:29:17 2023 +0100

    IDP-2069,  JSSH-27 Null Handling Task, use ensureId
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    https://shibboleth.atlassian.net/browse/JSSH-27
    
    Take a sweep acorss resolver-api and resolver-impl cleaning up a lot
    of warnings.
---
 .../dc/ldap/StringAttributeValueMappingStrategy.java  |  1 +
 .../ldap/TemplatedExecutableSearchFilterBuilder.java  | 15 +++++++++------
 .../dc/rdbms/AbstractExecutableStatementBuilder.java  |  8 ++++++--
 .../dc/rdbms/StringResultMappingStrategy.java         |  1 +
 .../dc/rdbms/TemplatedExecutableStatementBuilder.java | 15 +++++++++------
 .../resolver/ad/impl/DateTimeAttributeDefinition.java |  9 +++++----
 .../ad/impl/DecryptedAttributeDefinition.java         |  2 +-
 .../ad/impl/PrescopedAttributeDefinition.java         |  7 +++++--
 .../ad/impl/RegexSplitAttributeDefinition.java        |  2 +-
 .../resolver/ad/impl/ScopedAttributeDefinition.java   | 14 +++++++++++---
 .../resolver/ad/impl/ScriptedAttributeDefinition.java |  9 ++++++---
 .../resolver/ad/impl/ScriptedIdPAttributeImpl.java    | 10 +++++-----
 .../resolver/ad/impl/StaticAttributeDefinition.java   |  2 +-
 .../resolver/ad/impl/TemplateAttributeDefinition.java |  4 +++-
 .../resolver/dc/http/impl/TemplatedBodyBuilder.java   | 18 ++++++++++++------
 .../resolver/dc/http/impl/TemplatedURLBuilder.java    |  8 +++++---
 .../resolver/dc/impl/ScriptedDataConnector.java       | 15 ++++++++++-----
 .../resolver/dc/ldap/impl/LDAPDataConnector.java      |  6 ++++--
 .../dc/storage/impl/TemplatedSearchBuilder.java       | 19 +++++++++++++------
 .../resolver/impl/AttributeResolverImpl.java          | 14 +++++++++-----
 20 files changed, 117 insertions(+), 62 deletions(-)

diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
index 48ca3414c..a2669b549 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/StringAttributeValueMappingStrategy.java
@@ -75,6 +75,7 @@ public class StringAttributeValueMappingStrategy extends AbstractMappingStrategy
                 
                 final String originalId = attr.getName();
                 final String effectiveId = aliases.containsKey(originalId) ? aliases.get(originalId) : originalId;
+                assert effectiveId != null;
                 if (log.isDebugEnabled()) {
                     if (!effectiveId.equals(originalId)) {
                         log.debug("Remapping attribute {} to {}", originalId, effectiveId);
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
index 861b24c54..49226624d 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
@@ -55,13 +55,13 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
     private final Logger log = LoggerFactory.getLogger(TemplatedExecutableSearchFilterBuilder.class);
 
     /** Template evaluated to generate a search filter. */
-    private Template template;
+    @NonnullAfterInit private Template template;
 
     /** Template (as Text) to be evaluated. */
-    private String templateText;
+    @NonnullAfterInit private String templateText;
 
     /** VelocityEngine. */
-    private VelocityEngine engine;
+    @NonnullAfterInit private VelocityEngine engine;
 
     /** Event handler used for escaping. */
     private ReferenceInsertionEventHandler eventHandler = new EscapingReferenceInsertionEventHandler();
@@ -221,15 +221,18 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
 
-        if (null == engine) {
+        final VelocityEngine localEngine = engine;
+        final String localTemplateText = templateText;
+        if (null == localEngine) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: no velocity engine was configured");
-        } else if (null == templateText) {
+        }
+        if (null == localTemplateText) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: template text must be non null");
         }
 
-        template = Template.fromTemplate(engine, templateText);
+        template = Template.fromTemplate(localEngine, localTemplateText);
     }
 
     /** Escapes LDAP attribute values added to the template context. */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
index f173c4e62..bcfd71f1c 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
@@ -46,7 +46,9 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
 
     /** Constructor. */
     public AbstractExecutableStatementBuilder() {
-        queryTimeout = Duration.ofSeconds(5);
+        final Duration fiveSecs = Duration.ofSeconds(5);
+        assert fiveSecs != null;
+        queryTimeout = fiveSecs;
     }
     
     /**
@@ -100,7 +102,9 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
             @Nonnull public ResultSet execute(@Nonnull final Connection connection) throws SQLException {
                 final Statement stmt = connection.createStatement();
                 stmt.setQueryTimeout((int) queryTimeout.toSeconds());
-                return stmt.executeQuery(query);
+                final ResultSet resultSet = stmt.executeQuery(query);
+                assert resultSet!= null;
+                return resultSet;
             }
 
             /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
index 44b553eee..188bb50f4 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/StringResultMappingStrategy.java
@@ -81,6 +81,7 @@ public class StringResultMappingStrategy extends AbstractMappingStrategy<ResultS
 
                     final String originalId = resultMetadata.getColumnName(i);
                     final String effectiveId = aliases.containsKey(originalId) ? aliases.get(originalId) : originalId;
+                    assert effectiveId != null;
                     if (log.isDebugEnabled()) {
                         if (!effectiveId.equals(originalId)) {
                             log.debug("Remapping column {} to {}", originalId, effectiveId);
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
index 0ebbf2f1c..f2005655f 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
@@ -54,13 +54,13 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
     private final Logger log = LoggerFactory.getLogger(TemplatedExecutableStatementBuilder.class);
 
     /** Template to be evaluated. */
-    private Template template;
+    @NonnullAfterInit private Template template;
 
     /** Template (as Text) to be evaluated. */
-    private String templateText;
+    @NonnullAfterInit private String templateText;
 
     /** VelocityEngine. */
-    private VelocityEngine engine;
+    @NonnullAfterInit private VelocityEngine engine;
 
     /** Event handler used for escaping. */
     private ReferenceInsertionEventHandler eventHandler = new EscapingReferenceInsertionEventHandler();
@@ -219,15 +219,18 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
 
-        if (null == engine) {
+        final VelocityEngine localEngine = engine;
+        final String localTemplateText = templateText;
+        if (null == localEngine) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: no velocity engine was configured");
-        } else if (null == templateText) {
+        }
+        if (null == localTemplateText) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: Template text must be non null");
         }
 
-        template = Template.fromTemplate(engine, templateText);
+        template = Template.fromTemplate(localEngine, localTemplateText);
     }
 
     /** Escapes SQL values added to the template context. */
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
index f04da659c..842a95dc3 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinition.java
@@ -151,12 +151,12 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
 
-        final IdPAttribute result = new IdPAttribute(getId());
+        final IdPAttribute result = new IdPAttribute(ensureId());
         
         final List<IdPAttributeValue> values = PluginDependencySupport.getMergedAttributeValues(workContext,
                 getAttributeDependencies(), 
                 getDataConnectorDependencies(), 
-                getId());
+                ensureId());
 
         final List<? extends IdPAttributeValue> converted = values.stream()
                 .map(v -> convert(v))
@@ -192,8 +192,9 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
         
         try {
             final Long longValue = Long.valueOf(stringValue);
-            return new DateTimeAttributeValue(
-                    epochInSeconds ? Instant.ofEpochSecond(longValue) : Instant.ofEpochMilli(longValue));
+            final Instant val = epochInSeconds ? Instant.ofEpochSecond(longValue) : Instant.ofEpochMilli(longValue);
+            assert val != null;
+            return new DateTimeAttributeValue(val);
         } catch (final DateTimeException e) {
             log.info("{} Epoch value was out of range", getLogPrefix(), e);
             return null;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
index 29b444900..6607a8ba6 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
@@ -117,7 +117,7 @@ public class DecryptedAttributeDefinition extends AbstractAttributeDefinition {
             }
         }
     
-        final IdPAttribute decryptedAttribute = new IdPAttribute(getId());
+        final IdPAttribute decryptedAttribute = new IdPAttribute(ensureId());
         decryptedAttribute.setValues(decryptedValues);
 
         return decryptedAttribute;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
index 3ccc7938f..fd7e391c0 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
@@ -85,7 +85,7 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
         Constraint.isNotNull(workContext, getLogPrefix() + " AttributeResolverWorkContext cannot be null");
         checkComponentActive();
 
-        final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+        final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
 
         final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext, 
@@ -137,7 +137,10 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
 
         log.debug("{} Value '{}' was split into {} at scope delimiter '{}'",
                 new Object[] {getLogPrefix(), value.getValue(), stringValues, scopeDelimiter,});
-        return ScopedStringAttributeValue.valueOf(stringValues[0], stringValues[1]);
+        final String val0 = stringValues[0];
+        final String val1 = stringValues[1];
+        assert val1 != null && val0 != null;
+        return ScopedStringAttributeValue.valueOf(val0, val1);
     }
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
index ac4ed347c..521a660d4 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
@@ -86,7 +86,7 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
         checkComponentActive();
 
         final List<IdPAttributeValue> resultantValues = new ArrayList<>();
-        final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+        final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
 
         final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext, 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
index 10faf058c..6ce315778 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
@@ -96,6 +96,15 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
         return scopeSource;
     }
 
+    /** Null safe getter for {@link #nonScopeAttributeDependencies}.
+     * @return Returns the nonScopeAttributeDependencies.
+     */
+    @Nonnull private Collection<ResolverAttributeDefinitionDependency> getNonScopeAttributeDependencies() {
+        checkComponentActive();
+        assert nonScopeAttributeDependencies!=null;
+        return nonScopeAttributeDependencies;
+    }
+
     /**
      * Set the source of the scope for this definition.
      *
@@ -156,7 +165,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
 
         checkComponentActive();
 
-        final IdPAttribute resultantAttribute = new IdPAttribute(getId());
+        final IdPAttribute resultantAttribute = new IdPAttribute(ensureId());
         final String scopeValue;
         if (scopeSource == null) {
             scopeValue = scope;
@@ -167,10 +176,9 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
         if (scopeValue == null) {
             throw new ResolutionException(getLogPrefix() + " Scope was null or empty");
         }
-
         final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
-                        nonScopeAttributeDependencies,
+                        getNonScopeAttributeDependencies(),
                         getDataConnectorDependencies(), 
                         ensureId());
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
index 003b79ac7..ec4a6e25c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
@@ -18,7 +18,6 @@
 package net.shibboleth.idp.attribute.resolver.ad.impl;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -217,9 +216,11 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
                 return;
             }
             
+            final AttributeResolverWorkContext input1 =  (AttributeResolverWorkContext) input[1];
+            assert input1!=null;
             final Map<String, List<IdPAttributeValue>> dependencyAttributes =
                     PluginDependencySupport.getAllAttributeValues(
-                            (AttributeResolverWorkContext) input[1], 
+                            input1,
                             getAttributeDependencies(), 
                             getDataConnectorDependencies());
 
@@ -246,7 +247,9 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
             for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
                 log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
                         new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
-                final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
+                final String key = dependencyAttribute.getKey();
+                assert key != null;
+                final IdPAttribute pseudoAttribute = new IdPAttribute(key);
                 pseudoAttribute.setValues(dependencyAttribute.getValue());
 
                 scriptContext.setAttribute(dependencyAttribute.getKey(),
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
index 963c66f65..0cdedf747 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedIdPAttributeImpl.java
@@ -50,7 +50,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
 public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
 
     /** The {@link IdPAttribute} we are encapsulating. */
-    private final IdPAttribute encapsulatedAttribute;
+    @Nonnull private final IdPAttribute encapsulatedAttribute;
 
     /** Logger. */
     private final Logger log = LoggerFactory.getLogger(ScriptedIdPAttributeImpl.class);
@@ -69,7 +69,7 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
     private List<Object> attributeValues;
 
     /** The prefix for logging. Derived from the definition's logPrefix and the attribute ID. */
-    private final String logPrefix;
+    @Nonnull final String logPrefix;
 
     /**
      * Constructor.
@@ -79,10 +79,10 @@ public class ScriptedIdPAttributeImpl implements ScriptedIdPAttribute {
      */
     public ScriptedIdPAttributeImpl(@Nonnull final IdPAttribute attribute, final String prefix) {
         encapsulatedAttribute = attribute;
-
-        logPrefix =
-                new StringBuilder(prefix).append(" scripted attribute '").append(attribute.getId()).append("':")
+        final String lpf = new StringBuilder(prefix).append(" scripted attribute '").append(attribute.getId()).append("':")
                         .toString();
+        assert lpf != null;
+        logPrefix=lpf;
     }
 
     /**
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
index 72b9bb46a..2c754e569 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
@@ -68,7 +68,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         checkComponentActive();
         log.debug("{} resolving static attribute {}", getLogPrefix(), value);
-
+        assert value!=null;
         return value;
     }
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
index 5df6ae384..1bdf0175a 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
@@ -258,7 +258,9 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
         int valueCount = 0;
 
         for (final Entry<String, List<IdPAttributeValue>> entry : dependencyAttributes.entrySet() ) {
-            valueCount = addAttributeValues(entry.getKey(), entry.getValue(), sourceValues, valueCount);
+            final String key = entry.getKey();
+            assert key != null;
+            valueCount = addAttributeValues(key, entry.getValue(), sourceValues, valueCount);
         }
 
         return valueCount;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
index 4d1237f23..73eaf60aa 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
@@ -284,21 +284,24 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
 
-        if (null == engine) {
+        final VelocityEngine localEngine = engine;
+        final String localUrlTemplateText = urlTemplateText;
+        final String localBodyTemplateText = bodyTemplateText;
+        if (null == localEngine) {
             throw new ComponentInitializationException("Velocity engine cannot be null");
         }
 
-        if (null == urlTemplateText) {
+        if (null == localUrlTemplateText) {
             throw new ComponentInitializationException("URL template text cannot be null");
-        } else if (null == bodyTemplateText) {
+        } else if (null == localBodyTemplateText) {
             throw new ComponentInitializationException("Body template text cannot be null");
         }
 
-        urlTemplate = Template.fromTemplate(engine, urlTemplateText);
-        bodyTemplate = Template.fromTemplate(engine, bodyTemplateText);
+        urlTemplate = Template.fromTemplate(localEngine, localUrlTemplateText);
+        bodyTemplate = Template.fromTemplate(localEngine, localBodyTemplateText);
         
         if (null != cacheKeyTemplateText) {
-            cacheKeyTemplate = Template.fromTemplate(engine, cacheKeyTemplateText);
+            cacheKeyTemplate = Template.fromTemplate(localEngine, cacheKeyTemplateText);
         }
         
         contentType = ContentType.create(mimeType, charset);
@@ -322,6 +325,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
     @Nonnull protected ClassicHttpRequest getHttpRequest(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
+        checkComponentActive();
         final VelocityContext context = new VelocityContext();
         log.trace("Creating request using attribute resolution context {}", resolutionContext);
         context.put("resolutionContext", resolutionContext);
@@ -351,7 +355,9 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
         final ClassicHttpRequest request;
         
         try {
+            assert urlTemplate!=null;
             url = merge(urlTemplate, context);
+            assert bodyTemplate!=null;
             body = merge(bodyTemplate, context);
         } catch (final VelocityException e) {
             log.error("Error running template engine: {}", e.getMessage());
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index c2fdcba2e..86b03718b 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -145,16 +145,18 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
     /** {@inheritDoc} */
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
+        final VelocityEngine localEngine = engine;
+        final String localTemplateText = templateText;
 
-        if (null == engine) {
+        if (null == localEngine) {
             throw new ComponentInitializationException("Velocity engine cannot be null");
         }
 
-        if (null == templateText) {
+        if (null == localTemplateText) {
             throw new ComponentInitializationException("Template text cannot be null");
         }
 
-        template = Template.fromTemplate(engine, templateText);
+        template = Template.fromTemplate(localEngine, localTemplateText);
     }
 
     /**
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
index 63cc735be..638283c41 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
@@ -205,10 +205,13 @@ public class ScriptedDataConnector extends AbstractDataConnector {
 
             log.debug("{} Adding current attribute resolution contexts to script context", getLogPrefix());
             scriptContext.setAttribute("resolutionContext", input[0], ScriptContext.ENGINE_SCOPE);
+
+            final AttributeResolutionContext input0 = (AttributeResolutionContext) input[0];
+            final AttributeResolverWorkContext input1 = (AttributeResolverWorkContext) input[1];
+            assert input0!=null && input1!=null;
             
             final ProfileRequestContext prc =
-                    ((AttributeResolutionContext) input[0]).getProfileRequestContextLookupStrategy().apply(
-                            (AttributeResolutionContext) input[0]);
+                    input0.getProfileRequestContextLookupStrategy().apply(input0);
             if (null == prc) {
                 log.error("{} ProfileRequestContext could not be located", getLogPrefix());
             }
@@ -216,14 +219,16 @@ public class ScriptedDataConnector extends AbstractDataConnector {
             
             final Map<String, List<IdPAttributeValue>> dependencyAttributes =
                     PluginDependencySupport.getAllAttributeValues(
-                            (AttributeResolverWorkContext) input[1],
+                            input1,
                             getAttributeDependencies(),
                             getDataConnectorDependencies());
 
             for (final Entry<String,List<IdPAttributeValue>> dependencyAttribute : dependencyAttributes.entrySet()) {
+                final String key = dependencyAttribute.getKey();
+                assert key != null;
                 log.trace("{} Adding dependent attribute '{}' with the following values to the script context: {}",
-                        new Object[] {getLogPrefix(), dependencyAttribute.getKey(), dependencyAttribute.getValue(),});
-                final IdPAttribute pseudoAttribute = new IdPAttribute(dependencyAttribute.getKey());
+                        new Object[] {getLogPrefix(), key, dependencyAttribute.getValue(),});
+                final IdPAttribute pseudoAttribute = new IdPAttribute(key);
                 pseudoAttribute.setValues(dependencyAttribute.getValue());
 
                 scriptContext.setAttribute(dependencyAttribute.getKey(), new ScriptedIdPAttributeImpl(pseudoAttribute,
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
index 43985af99..8b6be5aa1 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
@@ -42,6 +42,7 @@ import net.shibboleth.idp.attribute.resolver.dc.impl.AbstractSearchDataConnector
 import net.shibboleth.idp.attribute.resolver.dc.ldap.ExecutableSearchFilter;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.SearchResultMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.StringAttributeValueMappingStrategy;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -56,10 +57,10 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
     @Nonnull private final Logger log = LoggerFactory.getLogger(LDAPDataConnector.class);
 
     /** Factory for retrieving LDAP connections. */
-    private ConnectionFactory connectionFactory;
+    @NonnullAfterInit private ConnectionFactory connectionFactory;
 
     /** For executing LDAP searches. */
-    private SearchOperation searchOperation;
+    @NonnullAfterInit private SearchOperation searchOperation;
 
     /** Whether the default validator is being used. */
     private boolean defaultValidator = true;
@@ -197,6 +198,7 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
         }
         
         try {
+            assert searchOperation!=null && connectionFactory!=null;
             final SearchResponse result = filter.execute(searchOperation, connectionFactory);
             log.trace("{} Search returned {}", getLogPrefix(), result);
             return getMappingStrategy().map(result);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
index 99fa75eeb..663864799 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
@@ -162,17 +162,21 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
     
     /** {@inheritDoc} */
     @Override protected void doInitialize() throws ComponentInitializationException {
+        
+        final VelocityEngine localEngine = engine;
+        final String localKeyTemplateText = keyTemplateText;
+        final String localContextTemplateText = contextTemplateText;
 
-        if (null == engine) {
+        if (null == localEngine) {
             throw new ComponentInitializationException("Velocity engine cannot be null");
-        } else if (null == contextTemplateText) {
+        } else if (null == localContextTemplateText) {
             throw new ComponentInitializationException("Context template text cannot be null");
-        } else if (null == keyTemplateText) {
+        } else if (null == localKeyTemplateText) {
             throw new ComponentInitializationException("Key template text cannot be null");
         }
 
-        contextTemplate = Template.fromTemplate(engine, contextTemplateText);
-        keyTemplate = Template.fromTemplate(engine, keyTemplateText);
+        contextTemplate = Template.fromTemplate(localEngine, localContextTemplateText);
+        keyTemplate = Template.fromTemplate(localEngine, localKeyTemplateText);
     }
 
     /** {@inheritDoc} */
@@ -191,7 +195,10 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
 
             /** {@inheritDoc} */
             @Nullable public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
-                return storageService.read(searchParams.context(), searchParams.key());
+                final String ctx = searchParams.context();
+                final String key = searchParams.key();
+                assert ctx != null && key!=null;
+                return storageService.read(ctx, key);
             }
         };
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index 0d543721c..41ed70f9f 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -20,7 +20,6 @@ package net.shibboleth.idp.attribute.resolver.impl;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -361,7 +360,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
                 log.debug("{} Data connector '{}' invoking failover data connector '{}'", logPrefix, connectorId,
                         failoverDataConnectorId);
                 resolveDataConnector(failoverDataConnectorId, resolutionContext);
-                workContext.recordFailoverResolution(connector, dataConnectors.get(failoverDataConnectorId));
+                final DataConnector dc = dataConnectors.get(failoverDataConnectorId);
+                assert dc!=null;
+                workContext.recordFailoverResolution(connector, dc);
                 return;
             }
             if (connector.isPropagateResolutionExceptions()) {
@@ -387,7 +388,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
                             failoverDataConnectorId, e);
                 }
                 resolveDataConnector(failoverDataConnectorId, resolutionContext);
-                workContext.recordFailoverResolution(connector, dataConnectors.get(failoverDataConnectorId));
+                final DataConnector dc = dataConnectors.get(failoverDataConnectorId);
+                assert dc!=null;
+                workContext.recordFailoverResolution(connector, dc);
                 return;
             }
             // Pass it on. Do not look at propagateException because this is handled in the
@@ -583,8 +586,9 @@ public class AttributeResolverImpl extends AbstractIdentifiableInitializableComp
         collectResolvedAttributes(resolvedAttributes, workContext, false) ;
 
         collectExportingDataConnectors(resolvedAttributes, resolutionContext, workContext);
-
-        resolutionContext.setResolvedIdPAttributes(resolvedAttributes.values());
+        final Collection<IdPAttribute> resolved = resolvedAttributes.values();
+        assert resolved !=null;
+        resolutionContext.setResolvedIdPAttributes(resolved);
     }
 
     /**

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


More information about the commits mailing list