[java-shib-attribute] branch main updated: Fix null and annotation issues.

Scott Cantor cantor.2 at osu.edu
Wed Nov 16 00:09:06 UTC 2022


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

scantor 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=94a07705bed6e091760af026a2d72f1515d5bd73

The following commit(s) were added to refs/heads/main by this push:
     new 94a07705b Fix null and annotation issues.
94a07705b is described below

commit 94a07705bed6e091760af026a2d72f1515d5bd73
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Nov 15 19:09:03 2022 -0500

    Fix null and annotation issues.
---
 shib-attribute-resolver-api/pom.xml                |  5 --
 .../attribute/resolver/AbstractResolverPlugin.java |  6 ++-
 .../resolver/PluginDependencySupport.java          | 21 +-------
 .../resolver/ResolvedAttributeDefinition.java      |  9 ++--
 .../attribute/resolver/ResolvedDataConnector.java  | 11 ++--
 .../resolver/ResolverDataConnectorDependency.java  |  7 +--
 .../AbstractExecutableSearchFilterBuilder.java     |  2 +-
 ...ParameterizedExecutableSearchFilterBuilder.java |  5 +-
 .../TemplatedExecutableSearchFilterBuilder.java    | 10 ++--
 .../rdbms/AbstractExecutableStatementBuilder.java  |  5 +-
 .../dc/rdbms/FormatExecutableStatementBuilder.java |  7 +--
 .../rdbms/TemplatedExecutableStatementBuilder.java |  4 +-
 .../resolver/dc/storage/StorageServiceSearch.java  |  4 +-
 .../resolver/AbstractAttributeDefinitionTest.java  |  5 +-
 .../resolver/AbstractDataConnectorTest.java        |  1 +
 .../resolver/AbstractResolverPluginTest.java       |  6 ++-
 .../resolver/AttributeResolutionLookupTest.java    |  4 +-
 shib-attribute-resolver-impl/pom.xml               | 11 ++--
 .../ad/impl/DateTimeAttributeDefinition.java       |  1 +
 .../ad/impl/PrescopedAttributeDefinition.java      |  4 +-
 .../ad/impl/RegexSplitAttributeDefinition.java     |  7 +--
 .../ad/impl/ScopedAttributeDefinition.java         | 17 +++++-
 .../ad/impl/ScriptedAttributeDefinition.java       |  7 ++-
 .../ad/impl/StaticAttributeDefinition.java         |  2 +-
 .../ad/mapped/impl/MappedAttributeDefinition.java  | 14 ++---
 .../resolver/ad/mapped/impl/SourceValue.java       |  3 +-
 .../resolver/ad/mapped/impl/ValueMap.java          |  8 ++-
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    |  3 +-
 .../resolver/dc/http/impl/HTTPDataConnector.java   |  5 --
 .../http/impl/ScriptedResponseMappingStrategy.java | 15 ++----
 .../dc/http/impl/TemplatedBodyBuilder.java         |  2 +-
 .../dc/impl/AbstractSearchDataConnector.java       |  4 ++
 .../dc/impl/ContextDerivedDataConnector.java       |  6 ++-
 .../resolver/dc/impl/PairwiseIdDataConnector.java  |  4 --
 .../resolver/dc/impl/ScriptedDataConnector.java    | 19 +++----
 .../resolver/dc/impl/StaticDataConnector.java      |  6 +--
 .../resolver/dc/ldap/impl/LDAPDataConnector.java   |  8 +--
 .../resolver/dc/rdbms/impl/RDBMSDataConnector.java | 18 ++++---
 .../impl/ScriptedStorageMappingStrategy.java       | 30 ++++-------
 .../storage/impl/StorageServiceDataConnector.java  | 30 +++++------
 .../dc/storage/impl/TemplatedSearchBuilder.java    | 51 ++++++++++++------
 .../resolver/impl/AttributeResolverImpl.java       | 25 ++++-----
 .../ad/impl/DateTimeAttributeDefinitionTest.java   | 15 ++++--
 .../resolver/ad/impl/DecryptedAttributeTest.java   |  9 +++-
 .../idp/attribute/resolver/ad/impl/LogicTest.java  |  2 +
 .../resolver/ad/impl/PrescopedAtributeTest.java    |  1 +
 .../impl/PrincipalNameAttributeDefinitionTest.java | 11 ++--
 .../resolver/ad/impl/RegexAtributeTest.java        |  1 +
 .../resolver/ad/impl/ScopedAttributeTest.java      |  1 +
 .../resolver/ad/impl/ScriptedAttributeTest.java    | 12 ++++-
 .../resolver/ad/impl/SimpleAttributeTest.java      |  6 ++-
 .../ad/impl/StaticAttributeDefinitionTest.java     |  3 +-
 .../resolver/ad/impl/TemplateAttributeTest.java    | 11 ++--
 .../ad/mapped/impl/MappedAttributeTest.java        | 18 +++++--
 .../resolver/ad/mapped/impl/SourceValueTest.java   | 15 ++++--
 .../resolver/ad/mapped/impl/ValueMapTest.java      |  5 ++
 .../dc/http/impl/HTTPDataConnectorTest.java        |  4 +-
 .../dc/impl/SAMLAttributeDataConnectorTest.java    |  4 +-
 .../dc/impl/ScriptedDataConnectorTest.java         |  8 ++-
 .../resolver/dc/impl/StaticDataConnectorTest.java  |  5 +-
 .../dc/ldap/impl/LDAPDataConnectorTest.java        |  8 +--
 .../resolver/dc/ldap/impl/Regressions.java         |  2 +
 .../dc/rdbms/impl/RDBMSDataConnectorTest.java      |  6 +++
 .../impl/StorageServiceDataConnectorTest.java      |  8 +--
 .../impl/AttributeResolutionContextTest.java       |  3 +-
 .../resolver/impl/AttributeResolverImplTest.java   |  6 +--
 .../tests/PluginDependencySupportTest.java         | 32 +++++++----
 .../attribute/resolver/testing/TestSources.java    | 62 +++++++++++-----------
 68 files changed, 381 insertions(+), 289 deletions(-)

diff --git a/shib-attribute-resolver-api/pom.xml b/shib-attribute-resolver-api/pom.xml
index 70fc7a514..a811bc170 100644
--- a/shib-attribute-resolver-api/pom.xml
+++ b/shib-attribute-resolver-api/pom.xml
@@ -74,11 +74,6 @@
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>${spring.groupId}</groupId>
-            <artifactId>spring-beans</artifactId>
-        </dependency>
         
         <!-- Provided Dependencies -->
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index 456b4d1ae..95ae64420 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -181,6 +181,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
             if (null != activationCondition) {
                 final ProfileRequestContext profileRequestContext =
                         resolutionContext.getProfileRequestContextLookupStrategy().apply(resolutionContext);
+                assert activationCondition != null;
                 if (!activationCondition.test(profileRequestContext)) {
                     log.debug("Resolver plugin '{}': activation criteria not met, nothing to do", getId());
                     return null;
@@ -189,9 +190,10 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
     
             final AttributeResolverWorkContext workContext =
                     resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
-            Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
-    
             try {
+                if (workContext == null) {
+                    throw new ResolutionException("AttributeResolverWorkContext cannot be null");
+                }
                 final ResolvedType result = doResolve(resolutionContext, workContext);
                 if (null == result) {
                     log.debug("Resolver plugin '{}' produced no value.", getId());
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
index c18b10523..259572cce 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupport.java
@@ -135,7 +135,7 @@ public final class PluginDependencySupport {
      * @return the merged value set
      */
     // Checkstyle: MethodLength|CyclomaticComplexity OFF
-    public static Map<String, List<IdPAttributeValue>> getAllAttributeValues(
+    @Nonnull @NonnullElements public static Map<String, List<IdPAttributeValue>> getAllAttributeValues(
             @Nonnull final AttributeResolverWorkContext workContext,
             @Nonnull final Collection<ResolverAttributeDefinitionDependency> attributeDependencies,
             @Nonnull @NonnullElements final Collection<ResolverDataConnectorDependency> dataConnectorDependencies) {
@@ -186,23 +186,6 @@ public final class PluginDependencySupport {
     }
     // Checkstyle: MethodLength|CyclomaticComplexity ON
 
-    /**
-     * Adds the values of the attributes to the target collection of attribute values indexes by attribute ID.
-     * 
-     * @param sources the source attributes
-     * @param target current set attribute values
-     */
-    private static void mergeAttributes(@Nonnull final Map<String, IdPAttribute> sources,
-            @Nullable final Map<String, List<IdPAttributeValue>> target) {
-        for (final IdPAttribute source : sources.values()) {
-            if (source == null) {
-                continue;
-            }
-
-            addAttribute(source, target);
-        }
-    }
-
     /**
      * Adds the values of the given attribute to the target collection of attribute values.
      * 
@@ -210,7 +193,7 @@ public final class PluginDependencySupport {
      * @param target current set attribute values
      */
     private static void addAttribute(@Nullable final IdPAttribute source,
-            @Nullable final Map<String, List<IdPAttributeValue>> target) {
+            @Nonnull @NonnullElements final Map<String, List<IdPAttributeValue>> target) {
         if (source == null) {
             return;
         }
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
index 7b8e6d72e..7a266f305 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinition.java
@@ -27,6 +27,7 @@ import javax.annotation.concurrent.ThreadSafe;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 
@@ -75,12 +76,14 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+    @Override
+    @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
         return resolvedDefinition.getAttributeDependencies();
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+    @Override
+    @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
         return resolvedDefinition.getDataConnectorDependencies();
     }
 
@@ -90,7 +93,7 @@ public final class ResolvedAttributeDefinition extends AbstractAttributeDefiniti
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull public String getId() {
+    @Override @Nullable public String getId() {
         return resolvedDefinition.getId();
     }
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
index 364748f0b..82f2ce247 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
@@ -31,6 +31,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.logic.Constraint;
@@ -78,12 +79,14 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
+    @Override 
+    @NonnullAfterInit @NonnullElements public Set<ResolverAttributeDefinitionDependency> getAttributeDependencies() {
         return resolvedConnector.getAttributeDependencies();
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
+    @Override
+    @NonnullAfterInit @NonnullElements public Set<ResolverDataConnectorDependency> getDataConnectorDependencies() {
         return resolvedConnector.getDataConnectorDependencies();
     }
 
@@ -98,7 +101,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
     }
 
     /** {@inheritDoc} */
-    @Override @Nonnull public String getId() {
+    @Override @Nullable public String getId() {
         return resolvedConnector.getId();
     }
 
@@ -113,7 +116,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
     }
 
     /** {@inheritDoc} */
-    @Override public void setFailoverDataConnectorId(final String id) {
+    @Override public void setFailoverDataConnectorId(@Nullable final String id) {
         return;
     }
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
index 551b0f29d..b0da33305 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
@@ -30,6 +30,7 @@ import java.util.Objects;
 import net.shibboleth.shared.annotation.ParameterName;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.StringSupport;
 
 /**
@@ -40,7 +41,6 @@ public final class ResolverDataConnectorDependency  {
     /** ID of the plugin that will produce the attribute. */
     @Nonnull @NotEmpty private final String dependencyPluginId;
 
-    
     /** Whether to depend on all the connector's attributes. */
     private boolean allAttributes;
     
@@ -52,8 +52,9 @@ public final class ResolverDataConnectorDependency  {
      *
      * @param pluginId ID of dependency
      */
-    public ResolverDataConnectorDependency(@ParameterName(name="pluginId") final String pluginId) {
-        dependencyPluginId = pluginId;
+    public ResolverDataConnectorDependency(@Nonnull @NotEmpty @ParameterName(name="pluginId") final String pluginId) {
+        dependencyPluginId = Constraint.isNotEmpty(
+                StringSupport.trimOrNull(pluginId), "Plugin ID cannot be null or empty");
         allAttributes = false;
         attributeNames = Collections.emptySet();
     }
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
index a88e2b97c..e209c290f 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/AbstractExecutableSearchFilterBuilder.java
@@ -48,7 +48,7 @@ public abstract class AbstractExecutableSearchFilterBuilder extends AbstractInit
      * @return executable search filter
      */
     // Checkstyle: AnonInnerLength OFF
-    protected ExecutableSearchFilter build(@Nonnull final FilterTemplate searchFilter) {
+    @Nonnull protected ExecutableSearchFilter build(@Nonnull final FilterTemplate searchFilter) {
         return new ExecutableSearchFilter() {
 
             /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
index ee4c60b8b..41f251227 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
@@ -65,7 +65,8 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
     }
 
     /** {@inheritDoc} */
-    @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    @Nonnull public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         checkComponentActive();
         final FilterTemplate sf = new FilterTemplate(searchFilter);
@@ -84,4 +85,4 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
         return super.build(sf);
     }
     
-}
+}
\ No newline at end of file
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 bc01bfbe7..7111ce979 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
@@ -164,7 +164,8 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
     }
 
     /** {@inheritDoc} */
-    @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    @Nonnull public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
         final VelocityContext context = new VelocityContext();
@@ -221,9 +222,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
         if (null == engine) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: no velocity engine was configured");
-        }
-
-        if (null == templateText) {
+        } else if (null == templateText) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: template text must be non null");
         }
@@ -270,4 +269,5 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
             return value;
         }
     }
-}
+
+}
\ No newline at end of file
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 44dc595bd..f173c4e62 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
@@ -84,7 +84,8 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException;
 
     /** {@inheritDoc} */
-    @Override public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    @Nonnull public ExecutableStatement build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         final String query = getSQLQuery(resolutionContext, dependencyAttributes);
 
@@ -109,4 +110,4 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
         };
     }
 
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
index db24fa8b7..d6ac1b2c2 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
@@ -72,8 +72,9 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
                 }
             }
         } else {
-            if (resolutionContext.getPrincipal() != null) {
-                args.add(resolutionContext.getPrincipal().replace("'", "''"));
+            final String principal = resolutionContext.getPrincipal();
+            if (principal != null) {
+                args.add(principal.replace("'", "''"));
             } else {
                 args.add(null);
             }
@@ -81,4 +82,4 @@ public class FormatExecutableStatementBuilder extends AbstractExecutableStatemen
         return String.format(sqlQuery, args.toArray());
     }
 
-}
+}
\ No newline at end of file
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 7a13da88c..58af5d9ea 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
@@ -220,9 +220,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
         if (null == engine) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: no velocity engine was configured");
-        }
-
-        if (null == templateText) {
+        } else if (null == templateText) {
             throw new ComponentInitializationException(
                     "TemplatedExecutableStatementBuilder: Template text must be non null");
         }
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
index 6f863e8d3..d79d387db 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/StorageServiceSearch.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.attribute.resolver.dc.storage;
 import java.io.IOException;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import org.opensaml.storage.StorageRecord;
 import org.opensaml.storage.StorageService;
@@ -42,5 +43,6 @@ public interface StorageServiceSearch extends ExecutableSearch {
      * 
      * @throws IOException thrown if there is a problem executing the search
      */
-    @Nonnull StorageRecord<?> execute(@Nonnull StorageService storageService) throws IOException;
+    @Nullable StorageRecord<?> execute(@Nonnull StorageService storageService) throws IOException;
+
 }
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
index d2e357183..bede14389 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
@@ -26,6 +26,7 @@ import javax.annotation.Nullable;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.testng.Assert;
@@ -140,7 +141,7 @@ public class AbstractAttributeDefinitionTest {
     private static final class MockAttributeDefinition extends AbstractAttributeDefinition {
 
         /** Static attribute value returned from resolution. */
-        private IdPAttribute staticAttribute;
+        @Nullable private IdPAttribute staticAttribute;
 
         /**
          * Constructor.
@@ -148,7 +149,7 @@ public class AbstractAttributeDefinitionTest {
          * @param id id of the attribute definition, never null or empty
          * @param attribute value returned from the resolution of this attribute, may be null
          */
-        public MockAttributeDefinition(String id, IdPAttribute attribute) {
+        public MockAttributeDefinition(@Nonnull @NotEmpty String id, @Nullable IdPAttribute attribute) {
             setId(id);
             staticAttribute = attribute;
         }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
index 33d4de647..b108a7dde 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnectorTest.java
@@ -91,6 +91,7 @@ public class AbstractDataConnectorTest {
         connector.initialize();
         Map<String, IdPAttribute> result = connector.resolve(context);
         assertNotNull(result);
+        assert result != null;
         assertTrue(result.containsKey(attribute.getId()));
         assertEquals(result.get(attribute.getId()), attribute);
     }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
index 01a905767..2c9078491 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
@@ -152,7 +152,9 @@ public class AbstractResolverPluginTest {
         MockBaseAttributeResolver plugin = new MockBaseAttributeResolver("foo", "bar");
         plugin.initialize();
 
-        Assert.assertEquals(plugin.resolve(context).getId(), "foo");
+        IdPAttribute attr = plugin.resolve(context);
+        assert attr != null;
+        Assert.assertEquals(attr.getId(), "foo");
 
         context = new AttributeResolutionContext();
         plugin = new MockBaseAttributeResolver(" foo ", "bar");
@@ -160,7 +162,6 @@ public class AbstractResolverPluginTest {
 
         plugin.initialize();
         Assert.assertNull(plugin.resolve(context));
-
     }
 
     /**
@@ -205,4 +206,5 @@ public class AbstractResolverPluginTest {
         }
 
     }
+
 }
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
index 7fce9b0a2..967aa5386 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AttributeResolutionLookupTest.java
@@ -36,7 +36,9 @@ public class AttributeResolutionLookupTest {
     
     @Test public void apply() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
-        pfc.getSubcontext(AttributeResolutionContext.class, true).setAttributeIssuerID("child");
+        final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        assert arc != null;
+        arc.setAttributeIssuerID("child");
 
         final TestClass what = new TestClass();
         Assert.assertEquals(what.apply(pfc), "child");
diff --git a/shib-attribute-resolver-impl/pom.xml b/shib-attribute-resolver-impl/pom.xml
index e60660841..cbc4f203f 100644
--- a/shib-attribute-resolver-impl/pom.xml
+++ b/shib-attribute-resolver-impl/pom.xml
@@ -91,6 +91,11 @@
             <artifactId>ldaptive</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>${spring.groupId}</groupId>
+            <artifactId>spring-core</artifactId>
+        </dependency>
+
         <!-- Provided Dependencies -->
     
         <!-- Runtime Dependencies -->
@@ -171,12 +176,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>${spring.groupId}</groupId>
-            <artifactId>spring-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-
     </dependencies>
 
     <profiles>
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 7fe0165ae..36575c554 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
@@ -205,6 +205,7 @@ public class DateTimeAttributeDefinition extends AbstractAttributeDefinition {
         }
         
         try {
+            assert formatter != null;
             return new DateTimeAttributeValue(formatter.parse(stringValue, Instant::from));
         } catch (final DateTimeException e) {
             log.info("{} Error converting input value '{}' into Instant", getLogPrefix(), stringValue, e);
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 143e1fac1..8557d5e82 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
@@ -54,14 +54,14 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
     @Nonnull private final Logger log = LoggerFactory.getLogger(PrescopedAttributeDefinition.class);
 
     /** Delimiter between value and scope. Default value: @ */
-    private String scopeDelimiter = "@";
+    @Nonnull @NotEmpty private String scopeDelimiter = "@";
 
     /**
      * Get delimiter between value and scope.
      * 
      * @return delimiter between value and scope
      */
-    @Nonnull public String getScopeDelimiter() {
+    @Nonnull @NotEmpty public String getScopeDelimiter() {
         return scopeDelimiter;
     }
 
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 3708d24b6..edb0731c2 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
@@ -55,14 +55,14 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
     @Nonnull private final Logger log = LoggerFactory.getLogger(RegexSplitAttributeDefinition.class);
 
     /** Regular expression used to split values. */
-    @Nullable private Pattern regexp;
+    @NonnullAfterInit private Pattern regexp;
 
     /**
      * Gets the regular expression used to split input values.
      * 
      * @return regular expression used to split input values
      */
-    @Nullable @NonnullAfterInit public Pattern getRegularExpression() {
+    @NonnullAfterInit public Pattern getRegularExpression() {
         return regexp;
     }
 
@@ -144,4 +144,5 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
                     + "': no dependencies were configured");
         }
     }
-}
+
+}
\ No newline at end of file
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 77217a13e..f1ddfb2ee 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
@@ -114,7 +114,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
      * @throws ResolutionException if the attribute was not there or if it didn't have only one
      * string value
      */
-    private String getScopeFromSource(@Nonnull final AttributeResolverWorkContext workContext)
+    @Nonnull @NotEmpty private String getScopeFromSource(@Nonnull final AttributeResolverWorkContext workContext)
             throws ResolutionException{
         final ResolvedAttributeDefinition resolved =
                 workContext.getResolvedIdPAttributeDefinitions().get(getScopeSource());
@@ -124,7 +124,16 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
                     workContext.getResolvedIdPAttributeDefinitions().entrySet());
             throw new ResolutionException("Scope source not found in resolved dependencies");
         }
-        final List<IdPAttributeValue> values = resolved.getResolvedAttribute().getValues();
+        
+        final IdPAttribute scopeAttribute = resolved.getResolvedAttribute();
+        if (scopeAttribute == null) {
+            log.error("{} Scope source '{}' not found in resolved dependencies", getLogPrefix(), getScopeSource());
+            log.debug("{} Attributes available {}", getLogPrefix(),
+                    workContext.getResolvedIdPAttributeDefinitions().entrySet());
+            throw new ResolutionException("Scope source not found in resolved dependencies");
+        }
+        
+        final List<IdPAttributeValue> values = scopeAttribute.getValues();
         if (values.size() != 1) {
             log.error("{} Exactly one value required for {}, {} found", getLogPrefix(),
                     getScopeSource(), values.size());
@@ -154,6 +163,10 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
         } else {
             scopeValue = getScopeFromSource(workContext);
         }
+        
+        if (scopeValue == null) {
+            throw new ResolutionException(getLogPrefix() + " Scope was null or empty");
+        }
 
         final List<IdPAttributeValue> dependencyValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
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 f27fcf831..c8e04ac94 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
@@ -210,6 +210,11 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         @Override
         protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
 
+            if (input == null || !(input[1] instanceof AttributeResolverWorkContext)) {
+                log.error("{} AttributeResolverWorkContext missing from script context inputs", getLogPrefix());
+                return;
+            }
+            
             final Map<String, List<IdPAttributeValue>> dependencyAttributes =
                     PluginDependencySupport.getAllAttributeValues(
                             (AttributeResolverWorkContext) input[1], 
@@ -271,4 +276,4 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         }
     }
 
-}
+}
\ No newline at end of file
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 bcda43c50..616ace8bc 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
@@ -64,7 +64,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
 
     /** {@inheritDoc} */
     @Override @Nonnull protected IdPAttribute doAttributeDefinitionResolve(
-            final AttributeResolutionContext resolutionContext,
+            @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         checkComponentActive();
         log.debug("{} resolving static attribute {}", getLogPrefix(), value);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index 3f8639917..e7801b6cd 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -108,10 +108,10 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * @return the default return value.
      */
     @Nullable public String getDefaultValue() {
-        if (null == defaultValue) {
-            return null;
+        if (null != defaultValue) {
+            return defaultValue.getValue();
         }
-        return defaultValue.getValue();
+        return null;
     }
 
     /**
@@ -171,6 +171,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
 
             if (!valueMapMatch) {
                 if (passThru) {
+                    assert value != null;
                     mappedValues.add(new StringAttributeValue(value));
                 } else if (defaultValue != null) {
                     mappedValues.add(defaultValue);
@@ -227,13 +228,6 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
         return resultAttribute;
     }
 
-    /** {@inheritDoc} */
-    @Override protected void doDestroy() {
-        valueMaps = null;
-
-        super.doDestroy();
-    }
-
     /** {@inheritDoc} */
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
index 0da0e6ad7..724e5a252 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
@@ -19,7 +19,6 @@ package net.shibboleth.idp.attribute.resolver.ad.mapped.impl;
 
 import java.util.regex.Pattern;
 
-import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import com.google.common.base.MoreObjects;
@@ -157,7 +156,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * 
      * @return Returns the pattern.
      */
-    @Nonnull public Pattern getPattern() {
+    @Nullable public Pattern getPattern() {
         checkComponentActive();
         Constraint.isFalse(isPartialMatch(), "getPattern is only meaningful for a non partial Match, use getValue()");
         return pattern;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
index 239cc972a..ac2c8dc81 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
@@ -23,6 +23,7 @@ import java.util.HashSet;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import javax.annotation.Nonnull;
@@ -128,7 +129,12 @@ public class ValueMap implements Function<String, Set<StringAttributeValue>> {
             } else {
                 log.debug("Performing regular expression based comparison");
                 try {
-                    final Matcher m = sourceValue.getPattern().matcher(attributeValue);
+                    final Pattern p = sourceValue.getPattern();
+                    if (p == null) {
+                        log.debug("Error matching value '{}', pattern was null", attributeValue);
+                        continue;
+                    }
+                    final Matcher m = p.matcher(attributeValue);
                     if (m.matches()) {
                         newValue = returnValue != null ? m.replaceAll(returnValue) : null;
                         log.debug("Attribute value '{}' matches regular expression, will be mapped to '{}'",
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index 88d54f204..eb6747d4d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -134,7 +134,8 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
     }
     
     /** {@inheritDoc} */
-    @Override public HTTPSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    @Nonnull public HTTPSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         
         final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index ead6328f8..3fcd0b87d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -29,8 +29,6 @@ import javax.annotation.Nullable;
 
 import org.apache.http.client.HttpClient;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -48,9 +46,6 @@ import net.shibboleth.shared.logic.Constraint;
  * that obtains data from an HTTP service.
  */
 public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HTTPResponseMappingStrategy> {
-    
-    /** Class logging. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPDataConnector.class);
 
     /** The {@link HttpClient} to use. */
     @NonnullAfterInit private HttpClient httpClient;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
index cca3ca9cb..cb0313927 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/ScriptedResponseMappingStrategy.java
@@ -160,7 +160,7 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
         log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
         scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
         
-        scriptContext.setAttribute("response", input[0], ScriptContext.ENGINE_SCOPE);
+        scriptContext.setAttribute("response", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
         scriptContext.setAttribute("log", log, ScriptContext.ENGINE_SCOPE);
     }
     
@@ -187,12 +187,8 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
         for (final Object o : outputCollection) {
             if (o instanceof IdPAttribute) {
                 final IdPAttribute attribute = (IdPAttribute) o;
-                if (null == attribute.getId()) {
-                    log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
-                } else {
-                    checkValues(attribute);
-                    outputMap.put(attribute.getId(), attribute);
-                }
+                checkValues(attribute);
+                outputMap.put(attribute.getId(), attribute);
             } else {
                 log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
                         o.getClass().getName());
@@ -262,11 +258,6 @@ public final class ScriptedResponseMappingStrategy extends AbstractScriptEvaluat
      */
     private void checkValues(final IdPAttribute attribute) {
 
-        if (null == attribute.getValues()) {
-            log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
-            attribute.setValues(Collections.<IdPAttributeValue> emptyList());
-            return;
-        }
         log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
                 attribute.getValues().size());
         final List<IdPAttributeValue> inputValues = attribute.getValues();
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 7ae718e2f..ca36abfea 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
@@ -378,7 +378,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull @NotEmpty protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
+    @Nullable @NotEmpty protected String getResultCacheKey(@Nonnull final HttpUriRequest request,
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) {
         
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
index db933982a..b4c9abe37 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
@@ -144,6 +144,8 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
      * @param cache cache used to cache search results
      */
     public void setResultsCache(@Nullable final Cache<String,Map<String,IdPAttribute>> cache) {
+        checkSetterPreconditions();
+        
         if (cache != null) {
             cache.invalidateAll();
         }
@@ -177,12 +179,14 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
         if (resultsCache != null && resolutionContext.getAllowCachedResults()) {
             final String cacheKey = executable.getResultCacheKey();
             if (cacheKey != null) {
+                assert resultsCache != null;
                 resolvedAttributes = resultsCache.getIfPresent(cacheKey);
                 log.trace("{} Cache found, resolved attributes {} using cache {}", new Object[] {getLogPrefix(),
                         resolvedAttributes, resultsCache,});
                 if (resolvedAttributes == null) {
                     resolvedAttributes = retrieveAttributes(executable);
                     log.trace("{} Resolved attributes {}", getLogPrefix(), resolvedAttributes);
+                    assert resultsCache != null;
                     resultsCache.put(cacheKey, resolvedAttributes != null ? resolvedAttributes
                             : Collections.<String,IdPAttribute>emptyMap());
                 }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
index 31fe89150..f53af0d1c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ContextDerivedDataConnector.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.attribute.resolver.dc.impl;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -35,6 +36,7 @@ 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.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
 
@@ -104,7 +106,7 @@ public class ContextDerivedDataConnector extends AbstractDataConnector {
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull protected Map<String,IdPAttribute> doDataConnectorResolve(
+    @Nonnull @NonnullElements protected Map<String,IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
 
@@ -117,7 +119,7 @@ public class ContextDerivedDataConnector extends AbstractDataConnector {
                 throw new NoResultAnErrorResolutionException(getLogPrefix() + " No attributes returned");
             }
             log.debug("{} Generated no attributes", getLogPrefix());
-            return null;
+            return Collections.emptyMap();
         }
         
         log.debug("{} Generated {} attributes", getLogPrefix(), results.size());
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
index 7a2fc3233..a132fa801 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
@@ -230,10 +230,6 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
             return null;
         }
 
-        if (val == null) {
-            log.warn("{} Attribute value {} for connector {} resolved as empty or null", getLogPrefix(),
-                    getSourceAttributeInformation(), getId());
-        }
         return val;
     }
 
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 5a9c9fa21..091df1ea6 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
@@ -138,10 +138,12 @@ public class ScriptedDataConnector extends AbstractDataConnector {
     @Override
     protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
+        
         if (null == script) {
             throw new ComponentInitializationException(getLogPrefix() + ": No script supplied");
         }
         
+        assert script != null;
         scriptEvaluator = new DataConnectorScriptEvaluator(script);
         scriptEvaluator.setCustomObject(customObject);
         scriptEvaluator.setContextExtenders(contextExtenders);
@@ -154,7 +156,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         Constraint.isNotNull(resolutionContext, "AttributeResolutionContext cannot be null");
         Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
-
+        
         return scriptEvaluator.execute(resolutionContext, workContext);
     }
 
@@ -196,6 +198,8 @@ public class ScriptedDataConnector extends AbstractDataConnector {
         @Override
         protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
 
+            assert(input != null);
+            
             log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
             scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
 
@@ -250,12 +254,8 @@ public class ScriptedDataConnector extends AbstractDataConnector {
             for (final Object o : outputCollection) {
                 if (o instanceof IdPAttribute) {
                     final IdPAttribute attribute = (IdPAttribute) o;
-                    if (null == attribute.getId()) {
-                        log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
-                    } else {
-                        checkValues(attribute);
-                        outputMap.put(attribute.getId(), attribute);
-                    }
+                    checkValues(attribute);
+                    outputMap.put(attribute.getId(), attribute);
                 } else {
                     log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
                             o.getClass().getName());
@@ -272,11 +272,6 @@ public class ScriptedDataConnector extends AbstractDataConnector {
          */
         private void checkValues(final IdPAttribute attribute) {
 
-            if (null == attribute.getValues()) {
-                log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
-                attribute.setValues(Collections.<IdPAttributeValue> emptyList());
-                return;
-            }
             log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
                     attribute.getValues().size());
             final List<IdPAttributeValue> inputValues = attribute.getValues();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
index 9e0c69464..c38622782 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
@@ -22,7 +22,6 @@ 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;
@@ -57,7 +56,7 @@ public class StaticDataConnector extends AbstractDataConnector {
      * 
      * @return static values returned by this connector
      */
-    @Nullable @NonnullAfterInit public Map<String, IdPAttribute> getAttributes() {
+    @NonnullAfterInit public Map<String, IdPAttribute> getAttributes() {
         return attributes;
     }
 
@@ -84,8 +83,9 @@ public class StaticDataConnector extends AbstractDataConnector {
     @Nonnull protected Map<String, IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        checkComponentActive();
+        
         log.trace("{} Resolved attributes: {}", getLogPrefix(), attributes);
+        assert attributes != null;
         return attributes;
     }
 
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 9853bd45a..f786684ad 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
@@ -199,12 +199,14 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
      * 
      * @throws ResolutionException thrown if there is a problem retrieving data from the LDAP
      */
-    @Override @Nullable protected Map<String, IdPAttribute> retrieveAttributes(final ExecutableSearchFilter filter)
-            throws ResolutionException {
-
+    @Override @Nullable protected Map<String, IdPAttribute> retrieveAttributes(
+            @Nullable final ExecutableSearchFilter filter) throws ResolutionException {
+        
+        // The base class method defines the parameter is non-null, so this is arguably unneeded.
         if (filter == null) {
             throw new ResolutionException(getLogPrefix() + " Search filter cannot be null");
         }
+        
         try {
             final SearchResponse result = filter.execute(searchOperation, connectionFactory);
             log.trace("{} Search returned {}", getLogPrefix(), result);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
index 8baa1d5ab..39566950c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
@@ -37,6 +37,7 @@ import net.shibboleth.idp.attribute.resolver.dc.impl.AbstractSearchDataConnector
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.ResultMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.StringResultMappingStrategy;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
 
@@ -47,21 +48,23 @@ import net.shibboleth.shared.logic.Constraint;
 public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableStatement,ResultMappingStrategy> {
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(RDBMSDataConnector.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(RDBMSDataConnector.class);
 
     /** JDBC data source for retrieving {@link Connection}s. */
-    private DataSource dataSource;
+    @NonnullAfterInit private DataSource dataSource;
 
     /** Whether the default validator is being used. */
-    private boolean defaultValidator = true;
+    private boolean defaultValidator;
 
     /** Whether the default mapping strategy is being used. */
-    private boolean defaultMappingStrategy = true;
+    private boolean defaultMappingStrategy;
 
     /**
      * Constructor.
      */
     public RDBMSDataConnector() {
+        defaultValidator = true;
+        defaultMappingStrategy = true;
     }
 
     /**
@@ -69,7 +72,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
      * 
      * @return JDBC data source for retrieving {@link Connection}s
      */
-    public DataSource getDataSource() {
+    @NonnullAfterInit public DataSource getDataSource() {
         return dataSource;
     }
 
@@ -104,6 +107,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
 
         if (defaultValidator) {
             final DataSourceValidator validator = new DataSourceValidator();
+            assert dataSource != null;
             validator.setDataSource(dataSource);
             validator.setThrowValidateError(isFailFastInitialize());
             validator.initialize();
@@ -135,12 +139,14 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
      *             data into {@link IdPAttribute}s
      */
     @Override
-    @Nullable protected Map<String, IdPAttribute> retrieveAttributes(final ExecutableStatement statement)
+    @Nullable protected Map<String, IdPAttribute> retrieveAttributes(@Nullable final ExecutableStatement statement)
             throws ResolutionException {
 
+        // The base class method defines the parameter is non-null, so this is arguably unneeded.
         if (statement == null) {
             throw new ResolutionException("Executable statement cannot be null");
         }
+        
         Connection connection = null;
         try {
             connection = dataSource.getConnection();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
index 04da977a5..c81ce9792 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/ScriptedStorageMappingStrategy.java
@@ -75,14 +75,13 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
     @Nonnull public Map<String,IdPAttribute> map(@Nonnull final StorageRecord<?> results)
             throws ResolutionException {
         log.debug("{} Handling StorageRecord", getLogPrefix());
-        
-        if (results == null) {
-            log.debug("{} StorageRecord was missing", getLogPrefix());
-            throw new ResolutionException(getLogPrefix() + " StorageRecord was missing");
-        }
-        
+
         try {
-            return (Map<String,IdPAttribute>) evaluate(results);
+            final Object map = (Map<String, IdPAttribute>) evaluate(results);
+            if (map instanceof Map) {
+                return (Map<String, IdPAttribute>) map;
+            }
+            throw new ResolutionException(getLogPrefix() + "Script finalization did not return a map");
         } catch (final RuntimeException e) {
             throw new ResolutionException(getLogPrefix() + " Script did not run successfully", e);
         }
@@ -94,7 +93,7 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
         log.debug("{} Adding to-be-populated attribute set '{}' to script context", getLogPrefix(), RESULTS_STRING);
         scriptContext.setAttribute(RESULTS_STRING, new HashSet<>(), ScriptContext.ENGINE_SCOPE);
         
-        scriptContext.setAttribute("record", input[0], ScriptContext.ENGINE_SCOPE);
+        scriptContext.setAttribute("record", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
         scriptContext.setAttribute("log", log, ScriptContext.ENGINE_SCOPE);
     }
     
@@ -121,12 +120,8 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
         for (final Object o : outputCollection) {
             if (o instanceof IdPAttribute) {
                 final IdPAttribute attribute = (IdPAttribute) o;
-                if (null == attribute.getId()) {
-                    log.warn("{} Anonymous Attribute encountered, ignored", getLogPrefix());
-                } else {
-                    checkValues(attribute);
-                    outputMap.put(attribute.getId(), attribute);
-                }
+                checkValues(attribute);
+                outputMap.put(attribute.getId(), attribute);
             } else {
                 log.warn("{} Output collection contained an object of type '{}', ignored", getLogPrefix(),
                         o.getClass().getName());
@@ -141,13 +136,8 @@ public final class ScriptedStorageMappingStrategy extends AbstractScriptEvaluato
      * 
      * @param attribute the attribute to look at
      */
-    private void checkValues(final IdPAttribute attribute) {
+    private void checkValues(@Nonnull final IdPAttribute attribute) {
 
-        if (null == attribute.getValues()) {
-            log.info("{} Attribute '{}' has no values provided.", getLogPrefix(), attribute.getId());
-            attribute.setValues(Collections.<IdPAttributeValue> emptyList());
-            return;
-        }
         log.debug("{} Attribute '{}' has {} value(s).", getLogPrefix(), attribute.getId(),
                 attribute.getValues().size());
         final List<IdPAttributeValue> inputValues = attribute.getValues();
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
index c1fb00de1..21eef1de0 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
@@ -30,8 +30,6 @@ import javax.annotation.Nullable;
 
 import org.opensaml.storage.StorageRecord;
 import org.opensaml.storage.StorageService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.NoResultAnErrorResolutionException;
@@ -55,14 +53,11 @@ import net.shibboleth.shared.primitive.StringSupport;
 public class StorageServiceDataConnector
         extends AbstractSearchDataConnector<StorageServiceSearch,StorageMappingStrategy> {
     
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(StorageServiceDataConnector.class);
-
     /** The {@link StorageService} to use. */
     @NonnullAfterInit private StorageService storageService;
     
     /** ID of the attribute generated by this data connector if simple result mapping used. */
-    @NonnullAfterInit private String generatedAttributeID;
+    @Nullable private String generatedAttributeID;
     
     /** Whether no record is an error. */
     private boolean noResultAnError;
@@ -92,15 +87,6 @@ public class StorageServiceDataConnector
         storageService = Constraint.isNotNull(service, "StorageService cannot be null");
     }
     
-    /**
-     * Get the ID of the attribute generated by this connector if simple result mapping used.
-     * 
-     * @return ID of the attribute generated by this connector
-     */
-    @NonnullAfterInit public String getGeneratedAttributeID() {
-        return generatedAttributeID;
-    }
-
     /**
      * Sets whether the lack of a returned record constitutes an error.
      * 
@@ -111,6 +97,15 @@ public class StorageServiceDataConnector
         noResultAnError = flag;
     }
     
+    /**
+     * Get the ID of the attribute generated by this connector if simple result mapping used.
+     * 
+     * @return ID of the attribute generated by this connector
+     */
+    @Nullable public String getGeneratedAttributeID() {
+        return generatedAttributeID;
+    }
+    
     /**
      * Set the ID of the attribute generated by this connector if simple result mapping used.
      * 
@@ -133,6 +128,7 @@ public class StorageServiceDataConnector
                 throw new ComponentInitializationException(
                         getLogPrefix() + " No mapping strategy or generated attribute ID set");
             }
+            assert generatedAttributeID != null; 
             setMappingStrategy(new SimpleStorageMappingStrategy(generatedAttributeID));
         }
         
@@ -143,9 +139,9 @@ public class StorageServiceDataConnector
     @Override
     @Nullable protected Map<String,IdPAttribute> retrieveAttributes(@Nonnull final StorageServiceSearch executable)
             throws ResolutionException {
-
+        
         try {
-            
+            assert storageService != null;
             final StorageRecord<?> record = executable.execute(storageService);
             if (record == null) {
                 if (noResultAnError) {
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 16c2fa82c..4de9ce9ea 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
@@ -39,7 +39,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
 import net.shibboleth.idp.attribute.resolver.dc.storage.StorageServiceSearch;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.collection.Pair;
 import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
@@ -166,9 +165,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
 
         if (null == engine) {
             throw new ComponentInitializationException("Velocity engine cannot be null");
-        }
-
-        if (null == contextTemplateText) {
+        } else if (null == contextTemplateText) {
             throw new ComponentInitializationException("Context template text cannot be null");
         } else if (null == keyTemplateText) {
             throw new ComponentInitializationException("Key template text cannot be null");
@@ -179,35 +176,57 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
     }
 
     /** {@inheritDoc} */
-    @Override public StorageServiceSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    @Nonnull public StorageServiceSearch build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         
-        final Pair<String,String> searchParams = getContextAndKey(resolutionContext, dependencyAttributes);
+        final ContextAndKey searchParams = getContextAndKey(resolutionContext, dependencyAttributes);
         
         return new StorageServiceSearch() {
             
             /** {@inheritDoc} */
             @Nullable public String getResultCacheKey() {
-                if (searchParams.getFirst() != null && searchParams.getSecond() != null) {
-                    return searchParams.getFirst() + "!" + searchParams.getSecond();
-                }
-                return null;
+                return searchParams.context() + "!" + searchParams.key();
             }
 
             /** {@inheritDoc} */
-            public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
-                return storageService.read(searchParams.getFirst(), searchParams.getSecond());
+            @Nullable public StorageRecord<?> execute(@Nonnull final StorageService storageService) throws IOException {
+                return storageService.read(searchParams.context(), searchParams.key());
             }
         };
     }
     
-    /** Helper method to extract the parameters needed for the {@link StorageServiceSearch}
+    /**
+     * Record encapsulating storage context and key.
+     * 
+     * @param context context
+     * @param key key
+     */
+    public record ContextAndKey(@Nonnull String context, @Nonnull String key) {
+        
+        /**
+         * Constructor.
+         *
+         * @param context context
+         * @param key key
+         */
+        public ContextAndKey(@Nonnull final String context, @Nonnull final String key) {
+            this.context = Constraint.isNotEmpty(context, "Context cannot be null or empty");
+            this.key = Constraint.isNotEmpty(key, "Key cannot be null or empty");
+        }
+    }
+    
+    /**
+     * Helper method to extract the parameters needed for the {@link StorageServiceSearch}
+     * 
      * @param resolutionContext the context of the resolution
      * @param dependencyAttributes the attributes we depend upon
-     * @return the derived {@link StorageService} context and context 
+     * 
+     * @return the derived {@link StorageService} context and key
+     *  
      * @throws ResolutionException if the velocity operations failed resolution failed.
      */
-    @Nonnull private Pair<String,String> getContextAndKey(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Nonnull private ContextAndKey getContextAndKey(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
 
         final VelocityContext context = new VelocityContext();
@@ -231,7 +250,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
             final String ctx = contextTemplate.merge(context);
             final String key = keyTemplate.merge(context);
             log.debug("Produced search context '{}', key '{}'", ctx, key);
-            return new Pair<>(ctx, key);
+            return new ContextAndKey(ctx, key);
         } catch (final VelocityException e) {
             log.error("Error running template engine: {}", e.getMessage());
             throw new ResolutionException("Error running template engine", e);
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 ca76558af..f8d2c4fa6 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
@@ -27,7 +27,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
@@ -35,9 +34,7 @@ import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
 import org.opensaml.messaging.context.BaseContext;
-import org.opensaml.messaging.context.navigate.ParentContextLookup;
 import org.opensaml.profile.context.MetricContext;
-import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -123,7 +120,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * 
      * @return attribute definitions loaded in to this resolver
      */
-    @Nonnull @NonnullElements @Unmodifiable public Map<String, AttributeDefinition>
+    @NonnullAfterInit @NonnullElements @Unmodifiable public Map<String, AttributeDefinition>
         getAttributeDefinitions() {
         return attributeDefinitions;
     }
@@ -153,7 +150,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * 
      * @return data connectors loaded in to this resolver
      */
-    @Nonnull @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
+    @NonnullAfterInit @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
         return dataConnectors;
     }
     
@@ -194,6 +191,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
 
         final AttributeResolverWorkContext workContext =
                 resolutionContext.getSubcontext(AttributeResolverWorkContext.class, true);
+        assert workContext != null;
         AttributeContext attributeContext = null;
 
         final boolean timerStarted = startTimer(resolutionContext);
@@ -288,7 +286,8 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
         Constraint.isNotNull(attributeId, "Attribute ID can not be null");
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         log.trace("{} Beginning to resolve attribute definition '{}'", logPrefix, attributeId);
 
@@ -334,7 +333,8 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
         Constraint.isNotNull(connectorId, "Data connector ID can not be null");
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
         
         if (workContext.getResolvedDataConnectors().containsKey(connectorId)) {
             log.trace("{} Data connector '{}' was already resolved, nothing to do", logPrefix, connectorId);
@@ -348,9 +348,9 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
         }
 
         final Instant resolveTime = Instant.now();
-        
-        if (connector.getLastFail() != null
-                && resolveTime.isBefore(connector.getLastFail().plus(connector.getNoRetryDelay()))) {
+        final Instant lastFailTime = connector.getLastFail();
+        if (lastFailTime != null
+                && resolveTime.isBefore(lastFailTime.plus(connector.getNoRetryDelay()))) {
             log.debug("{} Data connector '{}' failed to resolve previously, still waiting", logPrefix, 
                     connectorId);
             final String failoverDataConnectorId = connector.getFailoverDataConnectorId();
@@ -574,7 +574,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
     protected void finalizeResolvedAttributes(@Nonnull final AttributeResolutionContext resolutionContext) {
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
 
         final Map<String, IdPAttribute> resolvedAttributes = new LazyMap<>();
 
@@ -597,7 +597,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      protected void finalizePreResolvedAttributes(@Nonnull final AttributeResolutionContext resolutionContext) {
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
 
         final Map<String, IdPAttribute> resolvedAttributes = new LazyMap<>();
 
@@ -608,6 +608,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
         }
 
         final AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class, true);
+        assert context != null;
         log.debug("Pre-resolved Attributes: {}", resolvedAttributes.keySet());
         context.setIdPAttributes(resolvedAttributes.values());
         context.setUnfilteredIdPAttributes(resolvedAttributes.values());
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
index caeda9d96..fad9ef822 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DateTimeAttributeDefinitionTest.java
@@ -26,6 +26,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.DateTimeAttributeValue;
@@ -42,6 +44,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.LazySet;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
@@ -49,10 +52,10 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 public class DateTimeAttributeDefinitionTest {
 
     /** The name. */
-    private static final String TEST_ATTRIBUTE_NAME = "datetime";
-    private static final String STRING_SECS = "1659979872";
-    private static final String STRING_MSECS = "1659979872969";
-    private static final String STRING_ISO = "2022-08-08T17:31:12.969Z";
+    @Nonnull @NotEmpty private static final String TEST_ATTRIBUTE_NAME = "datetime";
+    @Nonnull @NotEmpty private static final String STRING_SECS = "1659979872";
+    @Nonnull @NotEmpty private static final String STRING_MSECS = "1659979872969";
+    @Nonnull @NotEmpty private static final String STRING_ISO = "2022-08-08T17:31:12.969Z";
 
     /**
      * Test resolution of an empty definition to nothing.
@@ -75,7 +78,8 @@ public class DateTimeAttributeDefinitionTest {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final IdPAttribute result = simple.resolve(context);
-
+        assert result != null;
+        
         assertTrue(result.getValues().isEmpty());
     }
 
@@ -149,6 +153,7 @@ public class DateTimeAttributeDefinitionTest {
         datetime.initialize();
 
         final Instant now = Instant.now();
+        assert now != null;
         
         final IdPAttribute attr = new IdPAttribute(TestSources.DEPENDS_ON_ATTRIBUTE_NAME_ATTR);
         attr.setValues(List.of(new DateTimeAttributeValue(now), StringAttributeValue.valueOf(STRING_SECS)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
index fe3ad01c8..6dbab1134 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeTest.java
@@ -25,6 +25,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.springframework.core.io.ClassPathResource;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -45,6 +47,7 @@ import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
 import net.shibboleth.idp.attribute.resolver.testing.ResolverTestSupport;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.LazySet;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.resource.Resource;
@@ -57,7 +60,7 @@ import net.shibboleth.shared.spring.resource.ResourceHelper;
 @SuppressWarnings("javadoc")
 public class DecryptedAttributeTest {
 
-    private static final String TEST_ATTRIBUTE_NAME = "decrypted";
+    @Nonnull @NotEmpty private static final String TEST_ATTRIBUTE_NAME = "decrypted";
 
     private DataSealer dataSealer;
 
@@ -116,6 +119,7 @@ public class DecryptedAttributeTest {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final IdPAttribute result = decrypted.resolve(context);
+        assert result != null;
 
         assertTrue(result.getValues().isEmpty());
     }
@@ -240,7 +244,8 @@ public class DecryptedAttributeTest {
         decrypted.initialize();
 
         final IdPAttribute result = decrypted.resolve(resolutionContext);
-
+        assert result != null;
+        
         final List<IdPAttributeValue> outValues = result.getValues();
         assertEquals(outValues.size(), 1);
         assertFalse(outValues.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
index b4810536a..09cdba10a 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/LogicTest.java
@@ -58,6 +58,7 @@ public class LogicTest {
     @Test public void wrong() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
         final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        assert arc != null;
         
         arc.setAttributeIssuerID("badValue");
         arc.setPrincipal("badValue");
@@ -71,6 +72,7 @@ public class LogicTest {
     @Test public void correct() {
         final ProfileRequestContext pfc = new ProfileRequestContext();
         final AttributeResolutionContext arc = pfc.getSubcontext(AttributeResolutionContext.class, true);
+        assert arc != null;
         
         arc.setAttributeIssuerID("AII");
         arc.setPrincipal("Principal");
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
index f57001327..eff204000 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAtributeTest.java
@@ -182,6 +182,7 @@ public class PrescopedAtributeTest {
         attrDef.setDataConnectorDependencies(Collections.singleton(depend));
         attrDef.initialize();
         final IdPAttribute result = attrDef.resolve(resolutionContext);
+        assert result != null;
         
         final Collection<?> f = result.getValues();
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
index e7e89d8e1..c25f95410 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrincipalNameAttributeDefinitionTest.java
@@ -36,8 +36,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 public class PrincipalNameAttributeDefinitionTest {
 
     @Test public void nullContext() throws ComponentInitializationException {
-        PrincipalNameAttributeDefinition defn;
-        defn = new PrincipalNameAttributeDefinition();
+        final PrincipalNameAttributeDefinition defn = new PrincipalNameAttributeDefinition();
         defn.setId("id");
         defn.initialize();
 
@@ -53,8 +52,7 @@ public class PrincipalNameAttributeDefinitionTest {
 
     @Test
     public void nullName() throws ComponentInitializationException{
-        PrincipalNameAttributeDefinition defn;
-        defn = new PrincipalNameAttributeDefinition();
+        final PrincipalNameAttributeDefinition defn = new PrincipalNameAttributeDefinition();
         defn.setId("id");
         defn.initialize();
         
@@ -73,11 +71,12 @@ public class PrincipalNameAttributeDefinitionTest {
         defn.setId("id");
         defn.initialize();
         
-        IdPAttribute result = defn.resolve(TestSources.createResolutionContext("principal", "issuer", "recipient"));
+        final IdPAttribute result = defn.resolve(TestSources.createResolutionContext("principal", "issuer", "recipient"));
+        assert result != null;
         
         assertEquals(result.getValues().size(), 1);
         
-        StringAttributeValue value = (StringAttributeValue) result.getValues().iterator().next();
+        final StringAttributeValue value = (StringAttributeValue) result.getValues().iterator().next();
         assertEquals(value.getValue(), "principal");
 
         
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
index fe63773de..92ab036d9 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
@@ -121,6 +121,7 @@ public class RegexAtributeTest {
         attrDef.initialize();
 
         final IdPAttribute result = attrDef.resolve(resolutionContext);
+        assert result != null;
         
         final Collection<?> f = result.getValues();
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
index c56ede5ba..ba9cbf151 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeTest.java
@@ -194,6 +194,7 @@ public class ScopedAttributeTest {
         attrDef.initialize();
 
         final IdPAttribute  result = attrDef.resolve(resolutionContext);
+        assert result != null;
         
         final Collection<?> f = result.getValues();
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
index a8a55a3b4..0a8cdb4d9 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
@@ -32,6 +32,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.script.ScriptException;
 
@@ -82,7 +83,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         return "/net/shibboleth/idp/attribute/resolver/impl/ad/" + fileName;
     }
 
-    private EvaluableScript getScript(String fileName) throws ComponentInitializationException, IOException {
+    @Nonnull private EvaluableScript getScript(String fileName) throws ComponentInitializationException, IOException {
         EvaluableScript es = new EvaluableScript ();
         es.setEngineName(SCRIPT_LANGUAGE);
         es.setScript(getClass().getResourceAsStream(fileNameToPath(fileName)));
@@ -113,6 +114,8 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
+        
         final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -144,6 +147,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
         final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -174,6 +178,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
         final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -196,6 +201,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
         final List<IdPAttributeValue> results = val.getValues();
 
         assertEquals(results.size(), 1, "Scripted result value count");
@@ -216,6 +222,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         attr.initialize();
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
         final List<IdPAttributeValue> results = val.getValues();
 
         assertEquals(results.size(), 2, "Scripted result value count");
@@ -237,6 +244,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         assertNotNull(attr.getScript());
 
         final IdPAttribute val = attr.resolve(generateContext());
+        assert val != null;
         final List<IdPAttributeValue> results = val.getValues();
 
         assertTrue(test.equals(val), "Scripted result is the same as bases");
@@ -294,6 +302,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
             ComponentInitializationException {
 
         final IdPAttribute result = buildTest("addAfterGetValues.script", true).resolve(generateContext());
+        assert result != null;
         final List<IdPAttributeValue> values = result.getValues();
         assertEquals(values.size(), 1);
         assertTrue(values.contains(new StringAttributeValue("newValue")));
@@ -369,6 +378,7 @@ public class ScriptedAttributeTest extends XMLObjectBaseTestCase {
         scripted.initialize();
 
         final IdPAttribute result = scripted.resolve(resolutionContext);
+        assert result != null;
 
         final List<IdPAttributeValue> outValues = result.getValues();
 
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
index be1735e4d..171c63f8a 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/SimpleAttributeTest.java
@@ -77,6 +77,7 @@ public class SimpleAttributeTest {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final IdPAttribute result = simple.resolve(context);
+        assert result != null;
 
         assertTrue(result.getValues().isEmpty());
     }
@@ -225,8 +226,9 @@ public class SimpleAttributeTest {
         simple.initialize();
 
         final IdPAttribute result = simple.resolve(resolutionContext);
-
-       final List<IdPAttributeValue> outValues = result.getValues();
+        assert result != null;
+        
+        final List<IdPAttributeValue> outValues = result.getValues();
         assertEquals(outValues.size(), 2);
         assertTrue(outValues.contains(TestSources.COMMON_ATTRIBUTE_VALUE_RESULT));
         assertTrue(outValues.contains(new EmptyAttributeValue(EmptyType.NULL_VALUE)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
index 45ee244b4..4f6269819 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinitionTest.java
@@ -77,8 +77,7 @@ public class StaticAttributeDefinitionTest {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         IdPAttribute result = attrDef.resolve(context);
-
-        assertNotNull(result);
+        assert result != null;
         assertEquals(result.getId(), "attribute");
         
         try {
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
index e1bf4dc1d..d1138556c 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeTest.java
@@ -25,6 +25,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.runtime.RuntimeConstants;
 import org.testng.annotations.Test;
@@ -77,7 +79,7 @@ public class TemplateAttributeTest {
      * 
      * @return a new engine suitable groomed
      */
-    private VelocityEngine getEngine() {
+    @Nonnull private VelocityEngine getEngine() {
         if (null == engineSingleton) {
             engineSingleton = new VelocityEngine();
             try {
@@ -145,6 +147,7 @@ public class TemplateAttributeTest {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final IdPAttribute val = attr.resolve(context);
+        assert val != null;
         final Collection<?> results = val.getValues();
 
         assertEquals(results.size(), 0, "Templated value count");
@@ -387,12 +390,12 @@ public class TemplateAttributeTest {
                 // (to show that a non string object gets injected)
                 new IdPAttributeValue() {
                     
-                    public Object getNativeValue() {
+                    @Nonnull public Object getNativeValue() {
                         return new StringAttributeValue("NativeValue");
                     }
                     
-                    public String getDisplayValue() {
-                        return null;
+                    @Nonnull public String getDisplayValue() {
+                        return "";
                     }
                 }));
         final StaticAttributeDefinition simple = new StaticAttributeDefinition();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
index ae588aaff..90f437750 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeTest.java
@@ -108,6 +108,7 @@ public class MappedAttributeTest {
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         assertTrue(result.getValues().isEmpty());
     }
@@ -132,6 +133,7 @@ public class MappedAttributeTest {
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         assertFalse(result.getValues().isEmpty());
         assertTrue(result.getValues().contains(new StringAttributeValue("default")));
@@ -177,6 +179,7 @@ public class MappedAttributeTest {
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         // mapped attribute definition should return no values for empty and null
         assertTrue(result.getValues().isEmpty());
@@ -199,6 +202,7 @@ public class MappedAttributeTest {
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         assertFalse(result.getValues().isEmpty());
         assertEquals(result.getValues().size(), 2);
@@ -219,11 +223,15 @@ public class MappedAttributeTest {
         assertTrue(definition.getValueMaps().isEmpty());
         definition.setValueMaps(Collections.singleton(substringValueMapping("elephant", false, "banana")));
         definition.setDefaultValue("default");
-        assertEquals(definition.getDefaultAttributeValue().getValue(), "default");
+        
+        final StringAttributeValue defValue = definition.getDefaultAttributeValue();
+        assert defValue != null;
+        assertEquals(defValue.getValue(), "default");
         assertFalse(definition.isPassThru());
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         assertFalse(result.getValues().isEmpty());
         assertEquals(result.getValues().size(), 3);
@@ -246,11 +254,15 @@ public class MappedAttributeTest {
         assertTrue(definition.getValueMaps().isEmpty());
         definition.setValueMaps(Collections.singleton(substringValueMapping("elephant", false, "banana")));
         definition.setDefaultValue("default");
-        assertEquals(definition.getDefaultAttributeValue().getValue(), "default");
+        
+        final StringAttributeValue defValue = definition.getDefaultAttributeValue();
+        assert defValue != null;
+        assertEquals(defValue.getValue(), "default");
         definition.setPassThru(true);
         definition.initialize();
 
         final IdPAttribute result = definition.resolve(resolutionContext);
+        assert result != null;
         assertEquals(result.getId(), TEST_ATTRIBUTE_NAME);
         assertFalse(result.getValues().isEmpty());
         assertEquals(result.getValues().size(), ResolverTestSupport.EPA3_VALUES.length);
@@ -293,4 +305,4 @@ public class MappedAttributeTest {
         definition.resolve(resolutionContext);
     }
     
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
index d029fc53c..020006b49 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValueTest.java
@@ -21,6 +21,10 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import java.util.regex.Pattern;
+
+import javax.annotation.Nonnull;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
@@ -45,8 +49,9 @@ public class SourceValueTest {
         log.info("Value = 'value', ignore = true, partial = false", value.toString());
 
         value = newSourceValue("eulaV", true, false);
-
-        assertEquals(value.getPattern().pattern(), "eulaV");
+        final Pattern pattern = value.getPattern();
+        assert pattern != null;
+        assertEquals(pattern.pattern(), "eulaV");
         assertFalse(value.isPartialMatch());
         assertFalse(value.isCaseSensitive());
         log.info("Value = 'eulaV', ignore = false, partial = true", value.toString());
@@ -68,8 +73,8 @@ public class SourceValueTest {
         assertTrue(value.isIgnoreCase());
     }
 
-    public static SourceValue newSourceValue(final String value, final boolean ignoreCase, final boolean partialMatch)
-            throws ComponentInitializationException {
+    @Nonnull public static SourceValue newSourceValue(final String value, final boolean ignoreCase,
+            final boolean partialMatch) throws ComponentInitializationException {
 
         final SourceValue sourceValue = new SourceValue();
         sourceValue.setValue(value);
@@ -79,4 +84,4 @@ public class SourceValueTest {
         return sourceValue;
     }
 
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
index 22d93ba75..5b3e8d024 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMapTest.java
@@ -59,10 +59,13 @@ public class ValueMapTest {
         map.setReturnValue("return");
         
         Set<StringAttributeValue> result = map.apply("elephant");
+        assert result != null;
         
         assertTrue(result.isEmpty());
 
         result = map.apply("elephantvaluegiraffe");
+        assert result != null;
+        
         assertEquals(result.size(), 1);
         assertTrue(result.contains(new StringAttributeValue("return")));
     }
@@ -77,9 +80,11 @@ public class ValueMapTest {
         map.setReturnValue("foo$1");
         
         Set<StringAttributeValue> result = map.apply("elephant");
+        assert result != null;
         assertTrue(result.isEmpty());
 
         result = map.apply("Recursion");
+        assert result != null;
         assertEquals(result.size(), 2);
         assertTrue(result.contains(new StringAttributeValue("fooecursion")));
         assertTrue(result.contains(new StringAttributeValue("foocursion")));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
index 4fdac47e9..453374eae 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnectorTest.java
@@ -121,6 +121,7 @@ public class HTTPDataConnectorTest {
         
         final Map<String,IdPAttribute> attrs = connector.resolve(context);
 
+        assert attrs != null;
         assertEquals(attrs.size(), 2);
         
         assertEquals(attrs.get("foo").getValues().size(), 1);
@@ -296,7 +297,7 @@ public class HTTPDataConnectorTest {
                         TestSources.SP_ENTITY_ID);
         
         final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
+        assert attrs != null;
         assertEquals(attrs.size(), 2);
         
         assertEquals(attrs.get("foo").getValues().size(), 1);
@@ -388,6 +389,7 @@ public class HTTPDataConnectorTest {
         
         final InputStream certStream = FileBackedHTTPMetadataResolver.class.getResourceAsStream(SCRIPT_PATH + cert);
         final X509Certificate entityCert = X509Support.decodeCertificate(ByteStreams.toByteArray(certStream));
+        assert entityCert != null;
         final X509Credential entityCredential = new BasicX509Credential(entityCert);
         return new ExplicitKeyTrustEngine(new StaticCredentialResolver(entityCredential));
         
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
index cf58b82db..ee4e26352 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/SAMLAttributeDataConnectorTest.java
@@ -61,6 +61,7 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final Map<String, IdPAttribute> attributes = connector.resolve(context);
+        assert attributes != null;
         assertEquals(attributes.size(), 2);
         
         List<IdPAttributeValue> attributeValues = attributes.get("SamlName").getValues();
@@ -88,4 +89,5 @@ public class SAMLAttributeDataConnectorTest extends XMLObjectBaseTestCase {
         }
 
     }
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
index 47dcdb806..b294bb013 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnectorTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.util.Collections;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
 import javax.script.ScriptException;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -44,7 +45,7 @@ import net.shibboleth.shared.scripting.EvaluableScript;
 @SuppressWarnings("javadoc")
 public class ScriptedDataConnectorTest {
 
-    private EvaluableScript getScript(String fileName) throws IOException, ComponentInitializationException {
+    @Nonnull private EvaluableScript getScript(String fileName) throws IOException, ComponentInitializationException {
         final String name = "/net/shibboleth/idp/attribute/resolver/impl/dc/" + fileName;
         final EvaluableScript es = new EvaluableScript();
         es.setEngineName("javascript");
@@ -62,6 +63,7 @@ public class ScriptedDataConnectorTest {
         connector.initialize();
 
         final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class,  true);
+        assert context != null;
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         
         connector.resolve(context);
@@ -81,9 +83,11 @@ public class ScriptedDataConnectorTest {
         connector.initialize();
 
         final AttributeResolutionContext context = new ProfileRequestContext().getSubcontext(AttributeResolutionContext.class,  true);
+        assert context != null;
         context.getSubcontext(AttributeResolverWorkContext.class, true);
         final Map<String, IdPAttribute> result = connector.resolve(context);
-
+        assert result != null;
+        
         assertEquals(result.size(), 1);
         assertEquals(result.get(attribute.getId()),attribute);
     }
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
index b9b5d7eee..a9ddccb8c 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnectorTest.java
@@ -77,8 +77,9 @@ public class StaticDataConnectorTest {
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
-        Map<String, IdPAttribute> result = connector.resolve(context);
-
+        final Map<String, IdPAttribute> result = connector.resolve(context);
+        assert result != null;
+        
         assertEquals(result.size(), 2);
         assertTrue(result.containsKey("attribute"));
         assertTrue(result.containsKey("thingy"));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
index 3ea77ff35..4c2335c19 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
@@ -364,7 +364,7 @@ public class LDAPDataConnectorTest {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
-        assertNotNull(attrs);
+        assert attrs != null;
         // check total attributes: uid, cn, sn, mail
         assertEquals(attrs.size(), 4);
         // check uid
@@ -394,7 +394,8 @@ public class LDAPDataConnectorTest {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
-        assertNotNull(attrs);
+        assert attrs != null;
+
         // check total attributes: uid, cn, sn, mail
         assertEquals(attrs.size(), 4);
         // check uid
@@ -546,7 +547,8 @@ public class LDAPDataConnectorTest {
                 TestSources.createResolutionContext("PHILIP_THE_PRINCIPAL", TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
-        assertNotNull(attrs);
+        assert attrs != null;
+
         // check total attributes: uid, cn, sn, mail
         assertEquals(attrs.size(), 4);
         // check uid
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
index 92e138e71..aea23948f 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/Regressions.java
@@ -124,6 +124,8 @@ public class Regressions {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
+        assert attrs != null;
+        
         final List<IdPAttributeValue> values = attrs.get("mail").getValues();
         assertEquals(values.size(), 4);
         assertTrue(values.contains(new EmptyAttributeValue(EmptyType.ZERO_LENGTH_VALUE)));
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
index d9b21f465..8d1218d3d 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
@@ -253,6 +253,8 @@ public class RDBMSDataConnectorTest {
                         TestSources.SP_ENTITY_ID);
 
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
+        assert attrs != null;
+
         // check total attributes: userid, name, homephone, mail
         assertTrue(attrs.size() == 4);
         // check userid
@@ -359,6 +361,8 @@ public class RDBMSDataConnectorTest {
                         TestSources.SP_ENTITY_ID);
 
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
+        assert attrs != null;
+
         // check total attributes: name
         assertTrue(attrs.size() == 1);
         // check name
@@ -382,6 +386,8 @@ public class RDBMSDataConnectorTest {
                         TestSources.SP_ENTITY_ID);
 
         final Map<String, IdPAttribute> attrs = connector.resolve(context);
+        assert attrs != null;
+
         // check total attributes: userid, name, homephone, mail
         assertTrue(attrs.size() == 4);
         // check userid
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
index c4fb88653..bea83117d 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnectorTest.java
@@ -90,7 +90,7 @@ public class StorageServiceDataConnectorTest {
                         TestSources.SP_ENTITY_ID);
 
         final Map<String,IdPAttribute> attrs = connector.resolve(context);
-        
+        assert attrs != null;
         assertTrue(attrs.isEmpty());
     }
 
@@ -132,7 +132,7 @@ public class StorageServiceDataConnectorTest {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
+        assert attrs != null;
         assertEquals(attrs.size(), 1);
         
         assertEquals(attrs.get("foobar").getValues().size(), 1);
@@ -189,9 +189,9 @@ public class StorageServiceDataConnectorTest {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
         final Map<String,IdPAttribute> attrs = connector.resolve(context);
-
-        assertEquals(attrs.size(), 2);
+        assert attrs != null;
         
+        assertEquals(attrs.size(), 2);
         assertEquals(attrs.get("foo").getValues().size(), 1);
         assertEquals(((StringAttributeValue) attrs.get("foo").getValues().get(0)).getValue(), "foo1");
         
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
index acd9b5757..51e5c7505 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolutionContextTest.java
@@ -104,7 +104,8 @@ public class AttributeResolutionContextTest {
     @Test public void lookupsParent() {
         final ProfileRequestContext profileCtx = new ProfileRequestContext();
         final AttributeResolutionContext context = profileCtx.getSubcontext(AttributeResolutionContext.class, true);
-        
+        assert context != null;
+
         context.setPrincipal(THE_PRINCIPAL);
         context.setAttributeIssuerID(THE_ISSUER);
         context.setAttributeRecipientID(THE_RECIPIENT);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
index adf102db6..ad259f1e8 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImplTest.java
@@ -221,7 +221,7 @@ public class AttributeResolverImplTest {
 
         // IDP-1623 Connector 4 contributes nullness
         final StaticDataConnector connector4 = new StaticDataConnector() {
-            public java.util.Map<String,IdPAttribute> doDataConnectorResolve(@Nonnull final AttributeResolutionContext resolutionContext,
+            @Nonnull public Map<String,IdPAttribute> doDataConnectorResolve(@Nonnull final AttributeResolutionContext resolutionContext,
                     @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
                 return null;
             }
@@ -1055,8 +1055,8 @@ public class AttributeResolverImplTest {
         @Nullable protected IdPAttribute doAttributeDefinitionResolve(
                 @Nonnull final AttributeResolutionContext resolutionContext,
                 @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-            AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class);
-            assertNotNull(context);
+            final AttributeContext context = resolutionContext.getSubcontext(AttributeContext.class);
+            assert context != null;
             assertEquals(context.getIdPAttributes().size(), 1);
             assertTrue(context.getIdPAttributes().containsKey(preResolvedName));
             return super.doAttributeDefinitionResolve(resolutionContext, workContext);
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
index ff1b9c285..363070b16 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/tests/PluginDependencySupportTest.java
@@ -44,7 +44,8 @@ public class PluginDependencySupportTest {
                 ResolverTestSupport.buildResolutionContext(ResolverTestSupport.buildAttributeDefinition(
                         ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -63,7 +64,8 @@ public class PluginDependencySupportTest {
                 ResolverTestSupport.buildResolutionContext(ResolverTestSupport.buildAttributeDefinition(
                         ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final List<IdPAttributeValue> result =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -84,7 +86,8 @@ public class PluginDependencySupportTest {
                                 ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
                                 ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(Collections.singletonList(ResolverTestSupport.EPE_ATTRIB_ID));
@@ -108,7 +111,8 @@ public class PluginDependencySupportTest {
                                 ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
                                 ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(Collections.singleton(ResolverTestSupport.EPE_ATTRIB_ID));
@@ -132,7 +136,8 @@ public class PluginDependencySupportTest {
                                 ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
                                 ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAttributeNames(List.of(ResolverTestSupport.EPE_ATTRIB_ID, ResolverTestSupport.EPA_ATTRIB_ID));
@@ -159,7 +164,8 @@ public class PluginDependencySupportTest {
                                 ResolverTestSupport.EPE1_VALUES), ResolverTestSupport.buildAttribute(
                                 ResolverTestSupport.EPA_ATTRIB_ID, ResolverTestSupport.EPA1_VALUES)));
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAllAttributes(true);
@@ -191,7 +197,8 @@ public class PluginDependencySupportTest {
         final AttributeResolutionContext resolutionContext =
                 ResolverTestSupport.buildResolutionContext(connector1, definition1);
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency dependConnector = new ResolverDataConnectorDependency("connector1");
         
@@ -223,7 +230,8 @@ public class PluginDependencySupportTest {
         final AttributeResolutionContext resolutionContext =
                 ResolverTestSupport.buildResolutionContext(connector1, definition1);
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
         depend.setAllAttributes(true);
@@ -263,7 +271,8 @@ public class PluginDependencySupportTest {
         final AttributeResolutionContext resolutionContext =
                 ResolverTestSupport.buildResolutionContext(connector1, definition1);
         final AttributeResolverWorkContext workContext =
-                resolutionContext.getSubcontext(AttributeResolverWorkContext.class, false);
+                resolutionContext.getSubcontext(AttributeResolverWorkContext.class);
+        assert workContext != null;
 
         final ResolverDataConnectorDependency depend = new ResolverDataConnectorDependency("connector1");
 
@@ -333,5 +342,6 @@ public class PluginDependencySupportTest {
         Assert.assertNotEquals(dc1.hashCode(), dc2.hashCode());
         Assert.assertNotEquals(dc2.hashCode(), dc3.hashCode());
         
-}
-}
+    }
+
+}
\ No newline at end of file
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
index 323c391df..8d1e479e6 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
@@ -44,80 +44,81 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NullableElements;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** Basic data sources for testing the attribute generators. */
 public final class TestSources {
     /** The name we use in this test for the static connector. */
-    public static final String STATIC_CONNECTOR_NAME = "staticCon";
+    @Nonnull @NotEmpty public static final String STATIC_CONNECTOR_NAME = "staticCon";
 
     /** The name of the attribute we use as source. */
-    public static final String DEPENDS_ON_ATTRIBUTE_NAME_ATTR = "at1";
+    @Nonnull @NotEmpty public static final String DEPENDS_ON_ATTRIBUTE_NAME_ATTR = "at1";
 
     /** The name of the connector we use as source. */
-    public static final String DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR = "ac1";
+    @Nonnull @NotEmpty public static final String DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR = "ac1";
 
     /** The name of another attribute we use as source. */
-    public static final String DEPENDS_ON_SECOND_ATTRIBUTE_NAME = "at2";
+    @Nonnull @NotEmpty public static final String DEPENDS_ON_SECOND_ATTRIBUTE_NAME = "at2";
 
     /** Another attributes values. */
-    public static final String[] SECOND_ATTRIBUTE_VALUE_STRINGS = {"at2-Val1", "at2-Val2"};
+    @Nonnull @NotEmpty public static final String[] SECOND_ATTRIBUTE_VALUE_STRINGS = {"at2-Val1", "at2-Val2"};
 
     /** Some test attributes. */
-    public static final StringAttributeValue[] SECOND_ATTRIBUTE_VALUE_RESULTS = {
+    @Nonnull public static final StringAttributeValue[] SECOND_ATTRIBUTE_VALUE_RESULTS = {
             new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),
             new StringAttributeValue(SECOND_ATTRIBUTE_VALUE_STRINGS[0]),};
 
     /** A value from both providers. */
-    public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
+    @Nonnull @NotEmpty public static final String COMMON_ATTRIBUTE_VALUE_STRING = "at1-Data";
 
     /** A test attribute value.  */
-    public static final StringAttributeValue COMMON_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+    @Nonnull public static final StringAttributeValue COMMON_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
             COMMON_ATTRIBUTE_VALUE_STRING);
 
     /** A value from the connector. */
-    public static final String CONNECTOR_ATTRIBUTE_VALUE_STRING = "at1-Connector";
+    @Nonnull @NotEmpty public static final String CONNECTOR_ATTRIBUTE_VALUE_STRING = "at1-Connector";
 
     /** A test attribute value.  */
-    public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+    @Nonnull public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
             CONNECTOR_ATTRIBUTE_VALUE_STRING);
 
     /** A value from the attribute. */
-    public static final String ATTRIBUTE_ATTRIBUTE_VALUE_STRING = "at1-Attribute";
+    @Nonnull @NotEmpty public static final String ATTRIBUTE_ATTRIBUTE_VALUE_STRING = "at1-Attribute";
 
     /** A test attribute value.  */
-    public static final StringAttributeValue ATTRIBUTE_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
+    @Nonnull public static final StringAttributeValue ATTRIBUTE_ATTRIBUTE_VALUE_RESULT = new StringAttributeValue(
             ATTRIBUTE_ATTRIBUTE_VALUE_STRING);
 
     /** Regexp (as string). for CONNECTOR_ATTRIBUTE_VALUE (for map and regexp testing). */
-    public static final String CONNECTOR_ATTRIBUTE_VALUE_REGEXP = "at1-(.+)or";
+    @Nonnull @NotEmpty public static final String CONNECTOR_ATTRIBUTE_VALUE_REGEXP = "at1-(.+)or";
 
     /** Regexp. for CONNECTOR_ATTRIBUTE_VALUE (for map and regexp testing). */
-    public static final Pattern CONNECTOR_ATTRIBUTE_VALUE_REGEXP_PATTERN = Pattern
+    @Nonnull public static final Pattern CONNECTOR_ATTRIBUTE_VALUE_REGEXP_PATTERN = Pattern
             .compile(CONNECTOR_ATTRIBUTE_VALUE_REGEXP);
 
     /** Result from a regexp. */
-    public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_REGEXP_RESULT = new StringAttributeValue(
+    @Nonnull public static final StringAttributeValue CONNECTOR_ATTRIBUTE_VALUE_REGEXP_RESULT = new StringAttributeValue(
             "Connect");
 
     /** Principal name for Principal method tests */
-    public static final String TEST_PRINCIPAL = "PrincipalName";
+    @Nonnull @NotEmpty public static final String TEST_PRINCIPAL = "PrincipalName";
 
     /** Relying party name for Principal method tests */
-    public static final String TEST_RELYING_PARTY = "RP1";
+    @Nonnull @NotEmpty public static final String TEST_RELYING_PARTY = "RP1";
 
     /** Authentication method for Principal method tests */
-    public static final String TEST_AUTHN_METHOD = "AuthNmEthod";
+    @Nonnull @NotEmpty public static final String TEST_AUTHN_METHOD = "AuthNmEthod";
 
     /** A standard IdP EntityID */
-    public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
+    @Nonnull @NotEmpty public static final String IDP_ENTITY_ID = "https://idp.example.org/idp";
 
     /** A standard Principal Name*/
-    public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
+    @Nonnull @NotEmpty public static final String PRINCIPAL_ID = "PETER_THE_PRINCIPAL";
 
     /** A standard SP EntityID */
-    public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
+    @Nonnull @NotEmpty public static final String SP_ENTITY_ID = "https://sp.example.org/sp";
 
     /** Constructor. */
     private TestSources() {
@@ -130,7 +131,7 @@ public final class TestSources {
      * @return The connector
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
+    @Nonnull public static DataConnector populatedStaticConnector(@Nonnull @NonnullElements final List<IdPAttribute> attributes)
             throws ComponentInitializationException {
 
         final StaticDataConnector connector = new StaticDataConnector();
@@ -147,7 +148,7 @@ public final class TestSources {
      * @return The connector
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
+    @Nonnull public static DataConnector populatedStaticConnector() throws ComponentInitializationException {
         List<IdPAttribute> attributeSet = new ArrayList<>(2);
 
         IdPAttribute attr = new IdPAttribute(DEPENDS_ON_ATTRIBUTE_NAME_CONNECTOR);
@@ -169,7 +170,7 @@ public final class TestSources {
      * @return the attribute definition
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
+    @Nonnull public static AttributeDefinition populatedStaticAttribute() throws ComponentInitializationException {
         return populatedStaticAttribute(DEPENDS_ON_ATTRIBUTE_NAME_ATTR, 2);
     }
     
@@ -179,7 +180,7 @@ public final class TestSources {
      * @return the definition
      * @throws ComponentInitializationException if intialization fails
      */
-    public static AttributeDefinition populatedStaticAttribute(String attributeName,
+    @Nonnull public static AttributeDefinition populatedStaticAttribute(String attributeName,
             int attributeValuesCount) throws ComponentInitializationException {
         
         final List<IdPAttributeValue> valuesList = new ArrayList<>();
@@ -206,7 +207,7 @@ public final class TestSources {
      * @return the attribute definition
      * @throws ComponentInitializationException if we cannot initialized (unlikely)
      */
-    public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
+    @Nonnull public static AttributeDefinition populatedStaticAttribute(@Nonnull final IdPAttribute attribute)
             throws ComponentInitializationException {
         
         final StaticAttributeDefinition definition = new StaticAttributeDefinition();
@@ -222,7 +223,7 @@ public final class TestSources {
      * @param recipientId the recipient
      * @return the context
      */
-    public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
+    @Nonnull public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
             String recipientId) {
         ProfileRequestContext parent = new ProfileRequestContext();
         AttributeResolutionContext retVal = parent.getSubcontext(AttributeResolutionContext.class, true);
@@ -239,9 +240,8 @@ public final class TestSources {
      * @param attributeId what to depend on
      * @return the dependency
      */
-    public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(String attributeId) {
-        ResolverAttributeDefinitionDependency retVal = new ResolverAttributeDefinitionDependency(attributeId);
-        return retVal;
+    @Nonnull public static ResolverAttributeDefinitionDependency makeAttributeDefinitionDependency(String attributeId) {
+        return new ResolverAttributeDefinitionDependency(attributeId);
     }
     
     /** Summon up appropriate {@link  ResolverDataConnectorDependency}.
@@ -249,7 +249,7 @@ public final class TestSources {
      * @param attributeId attribute to depend on
      * @return the dependency
      */
-    public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
+    @Nonnull public static ResolverDataConnectorDependency makeDataConnectorDependency(@Nonnull String connectorId, @Nullable String attributeId) {
         ResolverDataConnectorDependency retVal = new ResolverDataConnectorDependency(connectorId);
         if (null == attributeId) {
             retVal.setAllAttributes(true);

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


More information about the commits mailing list