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

Scott Cantor cantor.2 at osu.edu
Thu Nov 17 21:34:05 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=ae3e325e203b3ddedf08197d22a91d465913f358

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

commit ae3e325e203b3ddedf08197d22a91d465913f358
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Nov 17 16:34:02 2022 -0500

    Fix null and annotation issues.
---
 .../attribute/filter/spring/BaseFilterParser.java  | 30 ++++++------
 .../filter/spring/basic/impl/AndMatcherParser.java |  4 +-
 .../filter/spring/basic/impl/AnyParser.java        |  2 +-
 .../filter/spring/basic/impl/NotMatcherParser.java |  4 +-
 .../filter/spring/basic/impl/OrMatcherParser.java  |  4 +-
 .../spring/basic/impl/ScriptedMatcherParser.java   | 13 +++---
 .../impl/AttributeFilterPolicyGroupParser.java     | 14 ++++--
 .../spring/impl/AttributeFilterPolicyParser.java   | 18 +++++---
 .../impl/AttributeFilterServiceStrategy.java       |  7 ++-
 .../filter/spring/impl/AttributeRuleParser.java    | 14 +++---
 .../matcher/BaseAttributeValueMatcherParser.java   |  2 +-
 .../matcher/impl/AttributeScopeMatcherParser.java  |  3 +-
 .../impl/AttributeScopeRegexMatcherParser.java     |  2 +-
 .../impl/AttributeValueRegexMatcherParser.java     |  2 +-
 .../impl/AttributeValueStringMatcherParser.java    |  2 +-
 .../spring/policyrule/BasePolicyRuleParser.java    |  5 +-
 .../impl/AttributeRequesterRegexRuleParser.java    |  2 +-
 .../impl/AttributeRequesterRuleParser.java         |  2 +-
 .../spring/policyrule/impl/InboundRuleParser.java  |  2 +-
 .../impl/NumOfAttributeValuesRuleParser.java       |  2 +-
 .../spring/policyrule/impl/OutboundRuleParser.java |  2 +-
 .../policyrule/impl/PredicateRuleParser.java       |  9 ++--
 .../impl/PrincipalNameRegexRuleParser.java         |  2 +-
 .../policyrule/impl/PrincipalNameRuleParser.java   |  2 +-
 .../spring/policyrule/impl/ProfileRuleParser.java  |  2 +-
 .../saml/impl/AttributeInMetadataRuleParser.java   |  2 +-
 .../saml/impl/IssuerInEntityGroupRuleParser.java   |  2 +-
 .../saml/impl/IssuerNameIDFormatRuleParser.java    |  2 +-
 .../IssuerRegistrationAuthorityRuleParser.java     |  2 +-
 .../impl/MappedAttributeInMetadataRuleParser.java  |  2 +-
 .../ProxiedRequesterInEntityGroupRuleParser.java   |  3 +-
 ...edRequesterRegistrationAuthorityRuleParser.java |  2 +-
 .../impl/RequesterInEntityGroupRuleParser.java     |  2 +-
 .../saml/impl/RequesterNameIDFormatRuleParser.java |  2 +-
 .../RequesterRegistrationAuthorityRuleParser.java  |  2 +-
 .../saml/impl/ScopeMatchesShibMDScopeParser.java   |  8 ++--
 .../saml/impl/ValueMatchesShibMDScopeParser.java   |  6 +--
 .../filter/spring/AttributeFilterFailFastTest.java | 10 ++--
 .../filter/spring/basic/ScriptedTest.java          | 15 ++++--
 .../matcher/AttributeValueMatcherParserTest.java   | 11 ++++-
 .../policy/AttributeRequesterRuleParserTest.java   |  2 +
 .../filter/spring/policy/DataSources.java          | 53 +++++++++++----------
 .../policy/ProxiedRequesterRuleParserTest.java     | 24 ++++++----
 .../saml/AttributeInMetadataRuleParserTest.java    |  3 +-
 .../MappedAttributeInMetadataRuleParserTest.java   |  3 +-
 .../testing/BaseAttributeFilterParserTest.java     | 54 ++++++++++++++--------
 46 files changed, 215 insertions(+), 146 deletions(-)

diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/BaseFilterParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/BaseFilterParser.java
index a2aa57d09..73d3f1869 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/BaseFilterParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/BaseFilterParser.java
@@ -56,31 +56,31 @@ import net.shibboleth.shared.xml.ElementSupport;
 public abstract class BaseFilterParser extends AbstractCustomBeanDefinitionParser {
 
     /** Namespace The Top level filters. */
-    public static final String NAMESPACE = "urn:mace:shibboleth:2.0:afp";
+    @Nonnull @NotEmpty public static final String NAMESPACE = "urn:mace:shibboleth:2.0:afp";
 
     /** Element name. */
-    public static final QName AFP_ELEMENT_NAME = new QName(NAMESPACE,
+    @Nonnull public static final QName AFP_ELEMENT_NAME = new QName(NAMESPACE,
             "AttributeFilterPolicyGroup");
 
     /** The PolicyRequirementRule QName. */
-    public static final QName POLICY_REQUIREMENT_RULE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName POLICY_REQUIREMENT_RULE = new QName(BaseFilterParser.NAMESPACE,
             "PolicyRequirementRule");
 
     /** PermitValueRule. */
-    public static final QName PERMIT_VALUE_RULE = new QName(NAMESPACE,
+    @Nonnull public static final QName PERMIT_VALUE_RULE = new QName(NAMESPACE,
             "PermitValueRule");
 
     /** DenyValueRule. */
-    public static final QName DENY_VALUE_RULE = new QName(NAMESPACE, "DenyValueRule");
+    @Nonnull public static final QName DENY_VALUE_RULE = new QName(NAMESPACE, "DenyValueRule");
     
     /** The attribute name for the qualified id.*/
-    public static final String QUALIFIED_ID = "qualifiedId";
+    @Nonnull @NotEmpty public static final String QUALIFIED_ID = "qualifiedId";
 
     /** Generator of unique IDs. */
-    private static IdentifierGenerationStrategy idGen = IdentifierGenerationStrategy.getInstance(ProviderType.RANDOM);
+    @Nonnull private static IdentifierGenerationStrategy idGen = IdentifierGenerationStrategy.getInstance(ProviderType.RANDOM);
 
     /** Class logger. */
-    private static final Logger LOG = LoggerFactory.getLogger(BaseFilterParser.class);
+    @Nonnull private static final Logger LOG = LoggerFactory.getLogger(BaseFilterParser.class);
 
     /**
      * Generates an ID for a filter engine component. If the given localId is null a random one will be generated.
@@ -177,7 +177,9 @@ public abstract class BaseFilterParser extends AbstractCustomBeanDefinitionParse
     /** {@inheritDoc} */
     @Override @Nonnull @NotEmpty protected String resolveId(@Nonnull final Element configElement,
             @Nonnull final AbstractBeanDefinition beanDefinition, @Nonnull final ParserContext parserContext) {
-        return beanDefinition.getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        return Constraint.isNotNull(
+                beanDefinition.getAttribute(BaseFilterParser.QUALIFIED_ID),
+                BaseFilterParser.QUALIFIED_ID + " was absent").toString();
     }
 
     /**
@@ -233,10 +235,12 @@ public abstract class BaseFilterParser extends AbstractCustomBeanDefinitionParse
         for (final Element e : elements) {
             if (e != null) {
                 final BeanDefinition def = SpringSupport.parseCustomElement(e, parserContext, parentBuilder, false);
-                definitions.add(def);
-                final Object name = def.getAttribute(QUALIFIED_ID);
-                if (name != null && !beanNames.add(name.toString())) {
-                    LOG.warn("Duplicate filter element name {} found", name);
+                if (def != null) {
+                    definitions.add(def);
+                    final Object name = def.getAttribute(QUALIFIED_ID);
+                    if (name != null && !beanNames.add(name.toString())) {
+                        LOG.warn("Duplicate filter element name {} found", name);
+                    }
                 }
             }
         }
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AndMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AndMatcherParser.java
index 5522d596a..2de14bd1e 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AndMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AndMatcherParser.java
@@ -42,7 +42,7 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class AndMatcherParser extends BaseFilterParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "AND");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "AND");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
@@ -57,7 +57,7 @@ public class AndMatcherParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(configElement, parserContext, builder);
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(configElement, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", myId);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AnyParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AnyParser.java
index 52a0a6c7f..1e3dbfabe 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AnyParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/AnyParser.java
@@ -34,7 +34,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AnyParser extends BaseFilterParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ANY");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ANY");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/NotMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/NotMatcherParser.java
index c65da0ebe..4aac4156e 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/NotMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/NotMatcherParser.java
@@ -38,7 +38,7 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class NotMatcherParser extends BaseFilterParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "NOT");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "NOT");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
@@ -53,7 +53,7 @@ public class NotMatcherParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(configElement, parserContext, builder);
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(configElement, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", myId);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/OrMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/OrMatcherParser.java
index 28945ea34..774911245 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/OrMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/OrMatcherParser.java
@@ -42,7 +42,7 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class OrMatcherParser extends BaseFilterParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "OR");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "OR");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
@@ -57,7 +57,7 @@ public class OrMatcherParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(configElement, parserContext, builder);
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(configElement, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", myId);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
index af235b840..4c2e88a10 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.attribute.filter.spring.basic.impl;
 import java.util.List;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import org.slf4j.Logger;
@@ -42,19 +43,19 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class ScriptedMatcherParser extends BaseFilterParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Script");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Script");
 
     /** Script file element name. */
-    public static final QName SCRIPT_FILE_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "ScriptFile");
+    @Nonnull public static final QName SCRIPT_FILE_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "ScriptFile");
 
     /** Inline Script element name. */
-    public static final QName SCRIPT_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "Script");
+    @Nonnull public static final QName SCRIPT_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "Script");
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(ScriptedMatcherParser.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(ScriptedMatcherParser.class);
 
     /** {@inheritDoc} */
-    @Override @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
+    @Override @Nullable protected Class<?> getBeanClass(@Nonnull final Element element) {
         if (isPolicyRule(element)) {
             return ScriptedPolicyRule.class;
         }
@@ -71,7 +72,7 @@ public class ScriptedMatcherParser extends BaseFilterParser {
         
         builder.addAutowiredProperty("scriptContextExtenders");
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(config, builder.getBeanDefinition(), parserContext);
         final String logPrefix = new StringBuilder("Scipted Filter '").append(myId).append("' :").toString();
 
         final BeanDefinitionBuilder scriptBuilder =
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyGroupParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyGroupParser.java
index 6bbad7bc4..dd04b97b6 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyGroupParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyGroupParser.java
@@ -20,6 +20,8 @@ package net.shibboleth.idp.attribute.filter.spring.impl;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import org.slf4j.Logger;
@@ -46,22 +48,23 @@ import net.shibboleth.shared.xml.ElementSupport;
  */
 public class AttributeFilterPolicyGroupParser implements BeanDefinitionParser {
     /** Schema type name. */
-    public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE,
             "AttributeFilterPolicyGroupType");
 
     /** Local name of the policy requirement element. */
-    public static final QName POLICY_REQUIREMENT_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName POLICY_REQUIREMENT_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
             "PolicyRequirement");
 
     /** Local name of the value filter element. */
-    public static final QName PERMIT_VALUE_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName PERMIT_VALUE_ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
             "PermitValue");
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(AttributeFilterPolicyGroupParser.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeFilterPolicyGroupParser.class);
 
     /** {@inheritDoc} */
-    @Override public BeanDefinition parse(final Element config, final ParserContext context) {
+    @Override
+    @Nullable public BeanDefinition parse(@Nonnull final Element config, @Nonnull final ParserContext context) {
 
         final String policyId = StringSupport.trimOrNull(config.getAttributeNS(null, "id"));
 
@@ -94,4 +97,5 @@ public class AttributeFilterPolicyGroupParser implements BeanDefinitionParser {
         SpringSupport.parseCustomElements(children, context);
         return null;
     }
+
 }
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyParser.java
index 6216321b2..d92bb7eb3 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterPolicyParser.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.attribute.filter.spring.impl;
 import java.util.List;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import org.slf4j.Logger;
@@ -40,22 +41,22 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class AttributeFilterPolicyParser extends BaseFilterParser {
 
     /** Element name. */
-    public static final QName ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE,
             "AttributeFilterPolicy");
 
     /** Schema type name. */
-    public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE,
             "AttributeFilterPolicyType");
 
     /** The AttributeRule QName. */
-    private static final QName ATTRIBUTE_RULE = new QName(BaseFilterParser.NAMESPACE, "AttributeRule");
+    @Nonnull private static final QName ATTRIBUTE_RULE = new QName(BaseFilterParser.NAMESPACE, "AttributeRule");
 
     /** Class logger. */
-    private Logger log = LoggerFactory.getLogger(AttributeFilterPolicyParser.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(AttributeFilterPolicyParser.class);
 
     /** {@inheritDoc} */
     @Override
-    protected Class<?> getBeanClass(final Element arg0) {
+    @Nullable protected Class<?> getBeanClass(@Nonnull final Element arg0) {
         return AttributeFilterPolicy.class;
     }
 
@@ -66,7 +67,7 @@ public class AttributeFilterPolicyParser extends BaseFilterParser {
 
         String policyId = StringSupport.trimOrNull(config.getAttributeNS(null, "id"));
         if (null == policyId) {
-            policyId =  builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+            policyId = resolveId(config, builder.getBeanDefinition(), parserContext);
         }
         log.debug("Parsing configuration for attribute filter policy: {}", policyId);
         builder.addConstructorArgValue(policyId);
@@ -77,7 +78,9 @@ public class AttributeFilterPolicyParser extends BaseFilterParser {
         if (policyRequirements != null && policyRequirements.size() > 0) {
             final ManagedList<BeanDefinition> requirements =
                     BaseFilterParser.parseCustomElements(policyRequirements, parserContext, builder);
-            builder.addConstructorArgValue(requirements.get(0));
+            if (requirements != null) {
+                builder.addConstructorArgValue(requirements.get(0));
+            }
         }
 
         final List<Element> rules = ElementSupport.getChildElements(config, ATTRIBUTE_RULE);
@@ -86,4 +89,5 @@ public class AttributeFilterPolicyParser extends BaseFilterParser {
 
         builder.addConstructorArgValue(attributeRules);
     }
+
 }
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
index 073571f3d..39c1b4f87 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
@@ -46,8 +46,13 @@ public class AttributeFilterServiceStrategy extends AbstractIdentifiableInitiali
     private final Logger log = LoggerFactory.getLogger(AttributeFilterServiceStrategy.class);
 
     /** {@inheritDoc} */
-    @Nullable public AbstractServiceableComponent<AttributeFilter> apply(@Nullable final ApplicationContext appContext) {
+    @Nullable
+    public AbstractServiceableComponent<AttributeFilter> apply(@Nullable final ApplicationContext appContext) {
 
+        if (appContext == null) {
+            throw new ServiceException("ApplicationContext was null");
+        }
+        
         final Collection<AttributeFilterPolicy> afps = appContext.getBeansOfType(AttributeFilterPolicy.class).values();
         log.debug("Creating Attribute Filter {} with  {} Policies", getId(), afps.size());
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeRuleParser.java
index d4d7b5377..2feab30ad 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeRuleParser.java
@@ -32,6 +32,7 @@ import org.w3c.dom.Element;
 import net.shibboleth.idp.attribute.filter.AttributeRule;
 import net.shibboleth.idp.attribute.filter.Matcher;
 import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.spring.util.SpringSupport;
 import net.shibboleth.shared.xml.AttributeSupport;
@@ -43,19 +44,20 @@ import net.shibboleth.shared.xml.ElementSupport;
 public class AttributeRuleParser extends BaseFilterParser {
 
     /** Element name. */
-    public static final QName ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "AttributeRule");
+    @Nonnull public static final QName ELEMENT_NAME = new QName(BaseFilterParser.NAMESPACE, "AttributeRule");
 
     /** Schema type name. */
-    public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE, "AttributeRuleType");
+    @Nonnull public static final QName TYPE_NAME = new QName(BaseFilterParser.NAMESPACE, "AttributeRuleType");
 
     /** permitAny Attribute. */
-    public static final String PERMIT_ANY_ATTRIBUTE = "permitAny";
+    @Nonnull @NotEmpty public static final String PERMIT_ANY_ATTRIBUTE = "permitAny";
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(AttributeRuleParser.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeRuleParser.class);
 
     /** {@inheritDoc} */
-    @Override @Nonnull protected Class<?> getBeanClass(@Nullable final Element arg) {
+    @Override
+    @Nullable protected Class<?> getBeanClass(@Nonnull final Element arg) {
         return AttributeRule.class;
     }
 
@@ -64,7 +66,7 @@ public class AttributeRuleParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(config, parserContext, builder);
 
-        final String id = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String id = resolveId(config, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", id);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/BaseAttributeValueMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/BaseAttributeValueMatcherParser.java
index e9abce429..522c2d527 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/BaseAttributeValueMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/BaseAttributeValueMatcherParser.java
@@ -93,7 +93,7 @@ public abstract class BaseAttributeValueMatcherParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(element, parserContext, builder);
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(element, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", myId);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeMatcherParser.java
index 0cf70e1b9..b38d21a58 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeMatcherParser.java
@@ -29,8 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeScopeMatcherParser extends AbstractStringMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
-            "Scope");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Scope");
 
     /** {@inheritDoc} */
     @Override
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeRegexMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeRegexMatcherParser.java
index 02dd74cf8..077d20580 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeRegexMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeScopeRegexMatcherParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeScopeRegexMatcherParser extends AbstractRegexMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ScopeRegex");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ScopeRegex");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueRegexMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueRegexMatcherParser.java
index 2761469bf..801ea277a 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueRegexMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueRegexMatcherParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeValueRegexMatcherParser extends AbstractRegexMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ValueRegex");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ValueRegex");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueStringMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueStringMatcherParser.java
index 919ed7534..b3e567f5d 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueStringMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/matcher/impl/AttributeValueStringMatcherParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeValueStringMatcherParser extends AbstractStringMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Value");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Value");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<?> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/BasePolicyRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/BasePolicyRuleParser.java
index 8a96fc9f1..c368d2d7f 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/BasePolicyRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/BasePolicyRuleParser.java
@@ -18,6 +18,7 @@
 package net.shibboleth.idp.attribute.filter.spring.policyrule;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
@@ -61,7 +62,7 @@ public abstract class BasePolicyRuleParser extends BaseFilterParser {
 
     /** {@inheritDoc} */
     @Override
-    @Nonnull protected Class<?> getBeanClass(@Nonnull final Element element) {
+    @Nullable protected Class<?> getBeanClass(@Nonnull final Element element) {
         if (isPolicyRule(element)) {
             return getNativeBeanClass();
         }
@@ -76,7 +77,7 @@ public abstract class BasePolicyRuleParser extends BaseFilterParser {
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(element, parserContext, builder);
 
-        final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
+        final String myId = resolveId(element, builder.getBeanDefinition(), parserContext);
 
         builder.addPropertyValue("id", myId);
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRegexRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRegexRuleParser.java
index 15ccffdea..7d326346c 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRegexRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRegexRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeRequesterRegexRuleParser extends AbstractRegexPolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "RequesterRegex");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "RequesterRegex");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<AttributeRequesterRegexpPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRuleParser.java
index 076370152..1a18e97df 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/AttributeRequesterRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class AttributeRequesterRuleParser extends AbstractStringPolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Requester");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Requester");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<AttributeRequesterPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/InboundRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/InboundRuleParser.java
index 08b6cd9da..0869bfbae 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/InboundRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/InboundRuleParser.java
@@ -35,7 +35,7 @@ import net.shibboleth.idp.attribute.filter.spring.policyrule.BasePolicyRuleParse
 public class InboundRuleParser extends BasePolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Inbound");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Inbound");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<DirectionPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/NumOfAttributeValuesRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/NumOfAttributeValuesRuleParser.java
index c92dc0b1b..0ff04108c 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/NumOfAttributeValuesRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/NumOfAttributeValuesRuleParser.java
@@ -35,7 +35,7 @@ import net.shibboleth.shared.primitive.StringSupport;
 public class NumOfAttributeValuesRuleParser extends BasePolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "NumberOfAttributeValues");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "NumberOfAttributeValues");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<NumOfAttributeValuesPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/OutboundRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/OutboundRuleParser.java
index 6d742e175..f104d52a3 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/OutboundRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/OutboundRuleParser.java
@@ -35,7 +35,7 @@ import net.shibboleth.idp.attribute.filter.spring.policyrule.BasePolicyRuleParse
 public class OutboundRuleParser extends BasePolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Outbound");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Outbound");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<DirectionPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PredicateRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PredicateRuleParser.java
index e5977298f..d68014fcd 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PredicateRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PredicateRuleParser.java
@@ -28,7 +28,7 @@ import net.shibboleth.idp.attribute.filter.policyrule.filtercontext.impl.Predica
 import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 import net.shibboleth.idp.attribute.filter.spring.policyrule.BasePolicyRuleParser;
 import net.shibboleth.shared.primitive.DeprecationSupport;
-import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.xml.AttributeSupport;
 import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
@@ -37,7 +37,7 @@ import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 public class PredicateRuleParser extends BasePolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Predicate");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Predicate");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<PredicatePolicyRule> getNativeBeanClass() {
@@ -49,10 +49,11 @@ public class PredicateRuleParser extends BasePolicyRuleParser {
             @Nonnull final BeanDefinitionBuilder builder) {
 
         builder.addPropertyReference("rulePredicate",
-                StringSupport.trimOrNull(element.getAttributeNS(null, "rulePredicateRef")));
+                AttributeSupport.getRequiredAttributeValue(element, null, "rulePredicateRef"));
         if (element.hasAttributeNS(null, "contextStrategyRef")) {
             DeprecationSupport.warn(ObjectType.ATTRIBUTE, "contextStrategyRef",
                     parserContext.getReaderContext().getResource().getDescription(), "(removed)");
         }
     }
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRegexRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRegexRuleParser.java
index f4e786a56..c0fc19568 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRegexRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRegexRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class PrincipalNameRegexRuleParser extends AbstractRegexPolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "PrincipalNameRegex");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "PrincipalNameRegex");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<PrincipalNameRegexpPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRuleParser.java
index 14d834ec8..0926302fc 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/PrincipalNameRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class PrincipalNameRuleParser extends AbstractStringPolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "PrincipalName");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "PrincipalName");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<PrincipalNamePolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/ProfileRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/ProfileRuleParser.java
index 5bedeb057..0e897eda7 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/ProfileRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/policyrule/impl/ProfileRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class ProfileRuleParser extends AbstractStringPolicyRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Profile");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "Profile");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<ProfilePolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/AttributeInMetadataRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/AttributeInMetadataRuleParser.java
index f636343a9..7aff71950 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/AttributeInMetadataRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/AttributeInMetadataRuleParser.java
@@ -36,7 +36,7 @@ import org.w3c.dom.Element;
 public class AttributeInMetadataRuleParser extends BaseAttributeValueMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "AttributeInMetadata");
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerInEntityGroupRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerInEntityGroupRuleParser.java
index fc8eab866..9302bd9d7 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerInEntityGroupRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerInEntityGroupRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class IssuerInEntityGroupRuleParser extends AbstractEntityGroupRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "IssuerInEntityGroup");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "IssuerInEntityGroup");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<IssuerInEntityGroupPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerNameIDFormatRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerNameIDFormatRuleParser.java
index f3c687222..83a5ec03d 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerNameIDFormatRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerNameIDFormatRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class IssuerNameIDFormatRuleParser extends AbstractNameIDFormatRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "IssuerNameIDFormatExactMatch");
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerRegistrationAuthorityRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerRegistrationAuthorityRuleParser.java
index 9042b072a..eb61c0f86 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerRegistrationAuthorityRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/IssuerRegistrationAuthorityRuleParser.java
@@ -31,7 +31,7 @@ public class IssuerRegistrationAuthorityRuleParser extends AbstractRegistrationA
             "IssuerRegistrationAuthority");
 
     /** {@inheritDoc} */
-    @Override protected Class<IssuerRegistrationAuthorityPolicyRule> getNativeBeanClass() {
+    @Override @Nonnull protected Class<IssuerRegistrationAuthorityPolicyRule> getNativeBeanClass() {
         return IssuerRegistrationAuthorityPolicyRule.class;
     }
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/MappedAttributeInMetadataRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/MappedAttributeInMetadataRuleParser.java
index 0b0b6701f..afd01978f 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/MappedAttributeInMetadataRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/MappedAttributeInMetadataRuleParser.java
@@ -35,7 +35,7 @@ import org.w3c.dom.Element;
 public class MappedAttributeInMetadataRuleParser extends AttributeInMetadataRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "MappedAttributeInMetadata");
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterInEntityGroupRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterInEntityGroupRuleParser.java
index 987609f31..072bee1c0 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterInEntityGroupRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterInEntityGroupRuleParser.java
@@ -29,7 +29,8 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class ProxiedRequesterInEntityGroupRuleParser extends AbstractEntityGroupRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "ProxiedRequesterInEntityGroup");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+            "ProxiedRequesterInEntityGroup");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<ProxiedRequesterInEntityGroupPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterRegistrationAuthorityRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterRegistrationAuthorityRuleParser.java
index a6d94b069..17f1288cc 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterRegistrationAuthorityRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ProxiedRequesterRegistrationAuthorityRuleParser.java
@@ -31,7 +31,7 @@ public class ProxiedRequesterRegistrationAuthorityRuleParser extends AbstractReg
             "ProxiedRequesterRegistrationAuthority");
 
     /** {@inheritDoc} */
-    @Override protected Class<ProxiedRequesterRegistrationAuthorityPolicyRule> getNativeBeanClass() {
+    @Override @Nonnull protected Class<ProxiedRequesterRegistrationAuthorityPolicyRule> getNativeBeanClass() {
         return ProxiedRequesterRegistrationAuthorityPolicyRule.class;
     }
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterInEntityGroupRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterInEntityGroupRuleParser.java
index ab97461f7..0b15d220d 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterInEntityGroupRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterInEntityGroupRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class RequesterInEntityGroupRuleParser extends AbstractEntityGroupRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "InEntityGroup");
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE, "InEntityGroup");
 
     /** {@inheritDoc} */
     @Override @Nonnull protected Class<RequesterInEntityGroupPolicyRule> getNativeBeanClass() {
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterNameIDFormatRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterNameIDFormatRuleParser.java
index dbe99d537..51570789a 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterNameIDFormatRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterNameIDFormatRuleParser.java
@@ -29,7 +29,7 @@ import net.shibboleth.idp.attribute.filter.spring.BaseFilterParser;
 public class RequesterNameIDFormatRuleParser extends AbstractNameIDFormatRuleParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "NameIDFormatExactMatch");
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterRegistrationAuthorityRuleParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterRegistrationAuthorityRuleParser.java
index 7b5f23ca7..6b9870b74 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterRegistrationAuthorityRuleParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/RequesterRegistrationAuthorityRuleParser.java
@@ -31,7 +31,7 @@ public class RequesterRegistrationAuthorityRuleParser extends AbstractRegistrati
             "RegistrationAuthority");
 
     /** {@inheritDoc} */
-    @Override protected Class<RequesterRegistrationAuthorityPolicyRule> getNativeBeanClass() {
+    @Override @Nonnull protected Class<RequesterRegistrationAuthorityPolicyRule> getNativeBeanClass() {
         return RequesterRegistrationAuthorityPolicyRule.class;
     }
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ScopeMatchesShibMDScopeParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ScopeMatchesShibMDScopeParser.java
index 868b6be1c..11a4d901a 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ScopeMatchesShibMDScopeParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ScopeMatchesShibMDScopeParser.java
@@ -34,7 +34,7 @@ import net.shibboleth.idp.attribute.filter.spring.matcher.BaseAttributeValueMatc
 public class ScopeMatchesShibMDScopeParser extends BaseAttributeValueMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "ScopeMatchesShibMDScope");
 
     /** {@inheritDoc} */
@@ -43,9 +43,9 @@ public class ScopeMatchesShibMDScopeParser extends BaseAttributeValueMatcherPars
     }
 
     /** {@inheritDoc} */
-    protected void doNativeParse(final Element element,
-            final ParserContext parserContext, final BeanDefinitionBuilder builder) {
+    protected void doNativeParse(@Nonnull final Element element, @Nonnull final ParserContext parserContext,
+            @Nonnull final BeanDefinitionBuilder builder) {
         // Nothing to do
     }
 
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ValueMatchesShibMDScopeParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ValueMatchesShibMDScopeParser.java
index 1b484f73d..e18d8d74d 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ValueMatchesShibMDScopeParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/saml/impl/ValueMatchesShibMDScopeParser.java
@@ -34,7 +34,7 @@ import net.shibboleth.idp.attribute.filter.spring.matcher.BaseAttributeValueMatc
 public class ValueMatchesShibMDScopeParser extends BaseAttributeValueMatcherParser {
 
     /** Schema type. */
-    public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
+    @Nonnull public static final QName SCHEMA_TYPE = new QName(BaseFilterParser.NAMESPACE,
             "ValueMatchesShibMDScope");
 
     /** {@inheritDoc} */
@@ -43,8 +43,8 @@ public class ValueMatchesShibMDScopeParser extends BaseAttributeValueMatcherPars
     }
 
     /** {@inheritDoc} */
-    protected void doNativeParse(final Element element,
-            final ParserContext parserContext, final BeanDefinitionBuilder builder) {
+    protected void doNativeParse(@Nonnull final Element element, @Nonnull final ParserContext parserContext,
+            @Nonnull final BeanDefinitionBuilder builder) {
         // Nothing to do
     }
 }
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterFailFastTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterFailFastTest.java
index 479925e26..004f27dff 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterFailFastTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterFailFastTest.java
@@ -22,10 +22,13 @@ import static org.testng.Assert.assertNull;
 
 import java.io.IOException;
 
+import javax.annotation.Nonnull;
+
 import org.testng.annotations.Ignore;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.filter.AttributeFilter;
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.service.ReloadableService;
 import net.shibboleth.shared.service.ServiceableComponent;
 import net.shibboleth.spring.testing.AbstractFailFastTest;
@@ -37,7 +40,7 @@ import net.shibboleth.spring.testing.AbstractFailFastTest;
 @SuppressWarnings({"unchecked", "javadoc"})
 public class AttributeFilterFailFastTest extends AbstractFailFastTest {
     
-    protected String getPath() {
+    @Nonnull protected String getPath() {
         return "/net/shibboleth/idp/attribute/filter/failfast/";
     }
     
@@ -46,8 +49,9 @@ public class AttributeFilterFailFastTest extends AbstractFailFastTest {
         final Object bean = getBean(propertySource("ServiceConfiguration", makePath("attributeFilterGood.xml")), "filterBeansDefaultFF.xml");
         final ReloadableService<AttributeFilter > service = (ReloadableService<AttributeFilter>) bean;
         assertNotNull(service);
-        final AttributeFilter resolver = service.getServiceableComponent().getComponent();
-        assertNotNull(resolver);
+        final AttributeFilter filter =
+                Constraint.isNotNull(service.getServiceableComponent(), "Component was null").getComponent();
+        assertNotNull(filter);
     }
 
     private void badFilter(final Boolean failFast, String filterFile) throws IOException {
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
index 054fc907f..a2d0f2339 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
@@ -24,6 +24,8 @@ import static org.testng.Assert.assertTrue;
 import java.util.Map;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.springframework.beans.factory.BeanCreationException;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -37,6 +39,7 @@ import net.shibboleth.idp.attribute.filter.matcher.impl.ScriptedMatcher;
 import net.shibboleth.idp.attribute.filter.policyrule.impl.ScriptedPolicyRule;
 import net.shibboleth.idp.attribute.filter.spring.testing.BaseAttributeFilterParserTest;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** 
@@ -47,9 +50,9 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
 
     private Map<String, IdPAttribute> epaUid;
     
-    private final String NASHORN_SCRIPT = "scripted.xml";
+    @Nonnull @NotEmpty private final String NASHORN_SCRIPT = "scripted.xml";
 
-    private final String RHINO_SCRIPT = "scripted-rhino.xml";
+    @Nonnull @NotEmpty private final String RHINO_SCRIPT = "scripted-rhino.xml";
 
 
     @BeforeClass public void setupAttributes() throws ComponentInitializationException, ResolutionException {
@@ -84,7 +87,8 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
         
         final AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        final Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert x != null;
         assertEquals(x.size(), 1);
         String val = ((StringAttributeValue) x.iterator().next()).getValue();
         assertTrue(val.equals("jsmith") || val.equals("daffyDuck"));
@@ -95,7 +99,8 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
         
         final AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
-        Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        final Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert x != null;
         assertEquals(x.size(), 1);
         String val = ((StringAttributeValue) x.iterator().next()).getValue();
         assertTrue(val.equals("jsmith") || val.equals("daffyDuck"));
@@ -115,7 +120,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
         final ScriptedPolicyRule what = (ScriptedPolicyRule) getPolicyRule(NASHORN_SCRIPT);
         
         final Map<?,?> custom = (Map<?,?>) what.getCustomObject();
-     
+        assert custom != null;
         assertEquals(custom.size(), 1);
         assertEquals(custom.get("bar"), "foo");
     }
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
index 7d533a13e..6a61e300b 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/matcher/AttributeValueMatcherParserTest.java
@@ -117,16 +117,19 @@ public class AttributeValueMatcherParserTest extends BaseAttributeFilterParserTe
         AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
         Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
 
         filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUidJS.values());
         result = matcher.getMatchingValues(epaUidJS.get("uid"), filterContext);
+        assert result != null;
         assertEquals(result.size(), 1);
         
         filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(uidEpaJS.values());
         result = matcher.getMatchingValues(uidEpaJS.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
         
         AttributeValueStringMatcher avm = (AttributeValueStringMatcher) matcher;
@@ -141,16 +144,19 @@ public class AttributeValueMatcherParserTest extends BaseAttributeFilterParserTe
         AttributeFilterContext filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
         Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
 
         filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(epaUidJS.values());
         result = matcher.getMatchingValues(epaUidJS.get("uid"), filterContext);
+        assert result != null;
         assertEquals(result.size(), 2);
         
         filterContext = new AttributeFilterContext();
         filterContext.setPrefilteredIdPAttributes(uidEpaJS.values());
         result = matcher.getMatchingValues(uidEpaJS.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
     }
     
@@ -180,8 +186,9 @@ public class AttributeValueMatcherParserTest extends BaseAttributeFilterParserTe
         propertyCaseSensitive("false", false);
     }
 
-    @Test(expectedExceptions = {BeanCreationException.class}) public void propertyEmptyCaseSensitive() throws ComponentInitializationException {
+    @Test(expectedExceptions = {BeanCreationException.class})
+    public void propertyEmptyCaseSensitive() throws ComponentInitializationException {
         propertyCaseSensitive("", false);
     }
 
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
index bb0394e4e..f8fd68a75 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/AttributeRequesterRuleParserTest.java
@@ -122,11 +122,13 @@ public class AttributeRequesterRuleParserTest extends BaseAttributeFilterParserT
         AttributeFilterContext filterContext = DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
         Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
 
         filterContext = DataSources.populatedFilterContext("principal", "issuer", "https://service.example.edu/shibboleth-sp");
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
         result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertEquals(result.size(), 1);
         assertEquals(((StringAttributeValue) result.iterator().next()).getValue(), "daffyDuck");
     }
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
index 2cb81dd26..310c4523b 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/DataSources.java
@@ -26,6 +26,7 @@ import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.context.MessageContext;
 
@@ -35,53 +36,57 @@ import org.opensaml.messaging.context.MessageContext;
 @SuppressWarnings("javadoc")
 public abstract class DataSources {
 
-    public final static String TEST_STRING = "nibbleahappywarthog";
+    @Nonnull @NotEmpty public final static String TEST_STRING = "nibbleahappywarthog";
 
-    public final static String TEST_STRING_UPPER = TEST_STRING.toUpperCase();
+    @Nonnull @NotEmpty public final static String TEST_STRING_UPPER = TEST_STRING.toUpperCase();
 
-    public final static String NON_MATCH_STRING = "ThisIsADifferentString";
+    @Nonnull @NotEmpty public final static String NON_MATCH_STRING = "ThisIsADifferentString";
 
-    public final static String TEST_REGEX = "^n.*g";
+    @Nonnull @NotEmpty public final static String TEST_REGEX = "^n.*g";
 
-    public final static StringAttributeValue STRING_VALUE = new StringAttributeValue(TEST_STRING);
+    @Nonnull public final static StringAttributeValue STRING_VALUE = new StringAttributeValue(TEST_STRING);
     
-    public final static StringAttributeValue STRING_VALUE_UPPER = new StringAttributeValue(TEST_STRING.toUpperCase());
+    @Nonnull public final static StringAttributeValue STRING_VALUE_UPPER = new StringAttributeValue(TEST_STRING.toUpperCase());
 
-    public final static StringAttributeValue NON_MATCH_STRING_VALUE = new StringAttributeValue(NON_MATCH_STRING);
+    @Nonnull public final static StringAttributeValue NON_MATCH_STRING_VALUE = new StringAttributeValue(NON_MATCH_STRING);
 
-    public final static ScopedStringAttributeValue SCOPED_VALUE_VALUE_MATCH = new ScopedStringAttributeValue(
+    @Nonnull public final static ScopedStringAttributeValue SCOPED_VALUE_VALUE_MATCH = new ScopedStringAttributeValue(
             TEST_STRING, NON_MATCH_STRING);
 
-    public final static ScopedStringAttributeValue SCOPED_VALUE_SCOPE_MATCH = new ScopedStringAttributeValue(
+    @Nonnull public final static ScopedStringAttributeValue SCOPED_VALUE_SCOPE_MATCH = new ScopedStringAttributeValue(
             NON_MATCH_STRING, TEST_STRING);
 
-    public final static ByteAttributeValue BYTE_ATTRIBUTE_VALUE = new ByteAttributeValue(TEST_STRING.getBytes());
+    @Nonnull public final static ByteAttributeValue BYTE_ATTRIBUTE_VALUE = new ByteAttributeValue(TEST_STRING.getBytes());
 
-    public final static IdPAttributeValue OTHER_VALUE = new IdPAttributeValue() {
-
-        @Override @Nonnull public Object getNativeValue() {
-            return TEST_STRING;
-        }
-        public String getDisplayValue() {
-            return TEST_STRING;
-        }
-    };
+    @Nonnull public final static IdPAttributeValue OTHER_VALUE = new IdPAttributeValue() {
+    
+            @Override @Nonnull public Object getNativeValue() {
+                return TEST_STRING;
+            }
+            @Nonnull public String getDisplayValue() {
+                return TEST_STRING;
+            }
+        };
 
-    public static AttributeFilterContext populatedFilterContext(String principal, String issuerID, String recipientId) {
+    @Nonnull public static AttributeFilterContext populatedFilterContext(String principal, String issuerID, String recipientId) {
 
         final MessageContext parent = new MessageContext();
         parent.addSubcontext(TestSources.createResolutionContext(principal, issuerID, recipientId));
-        AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
+        final AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
+        assert retVal != null;
         retVal.setPrincipal(principal);
         retVal.setAttributeIssuerID(issuerID);
         retVal.setAttributeRecipientID(recipientId);
         return retVal;
     }
 
-    public static AttributeFilterContext unPopulatedFilterContext() {
+    @Nonnull public static AttributeFilterContext unPopulatedFilterContext() {
 
         final MessageContext parent = new MessageContext();
         parent.addSubcontext(new AttributeResolutionContext());
-        return parent.getSubcontext(AttributeFilterContext.class, true);
+        final AttributeFilterContext afc = parent.getSubcontext(AttributeFilterContext.class, true);
+        assert afc != null;
+        return afc;
     }
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
index 15acefb79..4c81130eb 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/policy/ProxiedRequesterRuleParserTest.java
@@ -46,22 +46,25 @@ public class ProxiedRequesterRuleParserTest extends BaseAttributeFilterParserTes
 
     private Map<String, IdPAttribute> epaUid;
 
-    @BeforeClass public void setupAttributes() throws ComponentInitializationException, ResolutionException {
-
+    @BeforeClass
+    public void setupAttributes() throws ComponentInitializationException, ResolutionException {
         epaUid = getAttributes("epa-uid.xml");
     }
 
     @Test public void policy() throws ComponentInitializationException {
         final PolicyRequirementRule rule = getPolicyRule("proxiedRequester.xml");
 
-        AttributeFilterContext filterContext = DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
+        final AttributeFilterContext filterContext = DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
         filterContext.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
-        filterContext.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
+        
+        final ProxiedRequesterContext prc = filterContext.getSubcontext(ProxiedRequesterContext.class, true); 
+        assert prc != null;
+        prc.getRequesters().addAll(Arrays.asList("foo", "bar"));
         
         
         assertEquals(rule.matches(filterContext), Tristate.FALSE);
-        filterContext.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("https://service.example.edu/shibboleth-sp");
+        prc.getRequesters().add("https://service.example.edu/shibboleth-sp");
         assertEquals(rule.matches(filterContext), Tristate.TRUE);
 
         final ProxiedRequesterPolicyRule arRule = (ProxiedRequesterPolicyRule) rule;
@@ -72,17 +75,22 @@ public class ProxiedRequesterRuleParserTest extends BaseAttributeFilterParserTes
     @Test public void matcher() throws ComponentInitializationException {
         final Matcher matcher = getMatcher("proxiedRequester.xml");
 
-        AttributeFilterContext filterContext = DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
+        final AttributeFilterContext filterContext =
+                DataSources.populatedFilterContext("principal", "issuer", "http://example.org");
         filterContext.setProxiedRequesterContextLookupStrategy(
                 new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
-        filterContext.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
+        final ProxiedRequesterContext prc = filterContext.getSubcontext(ProxiedRequesterContext.class, true); 
+        assert prc != null;
+        prc.getRequesters().addAll(Arrays.asList("foo", "bar"));
 
         filterContext.setPrefilteredIdPAttributes(epaUid.values());
         Set<IdPAttributeValue> result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertTrue(result.isEmpty());
 
-        filterContext.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("https://service.example.edu/shibboleth-sp");
+        prc.getRequesters().add("https://service.example.edu/shibboleth-sp");
         result = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
+        assert result != null;
         assertEquals(result.size(), 1);
         assertEquals(((StringAttributeValue)result.iterator().next()).getValue(), "daffyDuck");
     }
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/AttributeInMetadataRuleParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/AttributeInMetadataRuleParserTest.java
index c999281e7..a9d428973 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/AttributeInMetadataRuleParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/AttributeInMetadataRuleParserTest.java
@@ -44,7 +44,8 @@ public class AttributeInMetadataRuleParserTest extends  BaseAttributeFilterParse
 
         rule.initialize();
         AttributeInMetadataMatcher matcher = (AttributeInMetadataMatcher) rule.getMatcher();
-     
+        assert matcher != null;
+        
         assertTrue(matcher.getMatchIfMetadataSilent());
         assertTrue(matcher.getOnlyIfRequired());
         assertTrue(matcher.getId().endsWith(":PermitRule"));
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/MappedAttributeInMetadataRuleParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/MappedAttributeInMetadataRuleParserTest.java
index 4389b01ff..89a64299a 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/MappedAttributeInMetadataRuleParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/saml/MappedAttributeInMetadataRuleParserTest.java
@@ -45,7 +45,8 @@ public class MappedAttributeInMetadataRuleParserTest extends  BaseAttributeFilte
         final AttributeRule rule = getAttributeRulesAttributeFilterPolicy(MATCHER_PATH + "mappedInMetadata.xml", context).get(0);
         rule.initialize();
         AttributeInMetadataMatcher matcher = (AttributeInMetadataMatcher) rule.getMatcher();
-
+        assert matcher != null;
+        
         assertTrue(matcher.getId().endsWith(":PermitRule"));
         assertEquals(matcher.getMatchIfMetadataSilent(), metadataSilentResult);
         assertTrue(matcher.getOnlyIfRequired());
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
index 4cdfed5d8..d7e2f13c8 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/BaseAttributeFilterParserTest.java
@@ -23,6 +23,9 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
 import org.opensaml.saml.ext.saml2mdattr.EntityAttributes;
 import org.springframework.context.support.GenericApplicationContext;
@@ -41,7 +44,10 @@ 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.idp.attribute.resolver.dc.impl.testing.SAMLAttributeDataConnector;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.FunctionSupport;
 import net.shibboleth.shared.spring.context.FilesystemGenericApplicationContext;
 import net.shibboleth.shared.spring.custom.SchemaTypeAwareXMLBeanDefinitionReader;
@@ -84,43 +90,46 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
      * @throws ComponentInitializationException ...
      * @throws ResolutionException ...
      */
-    protected Map<String, IdPAttribute> getAttributes(String xmlFileName) throws ComponentInitializationException,
-            ResolutionException {
+    @Nonnull protected Map<String, IdPAttribute> getAttributes(@Nonnull @NotEmpty String xmlFileName)
+            throws ComponentInitializationException, ResolutionException {
 
         final EntityAttributes obj = (EntityAttributes) unmarshallElement(ATTRIBUTE_PATH + xmlFileName);
-
-        SAMLAttributeDataConnector connector = new SAMLAttributeDataConnector();
+        assert obj != null;
+        
+        final SAMLAttributeDataConnector connector = new SAMLAttributeDataConnector();
         connector.setId(xmlFileName);
         connector.setAttributesStrategy(FunctionSupport.constant(obj.getAttributes()));
         connector.initialize();
 
         final AttributeResolutionContext context = new AttributeResolutionContext();
         context.getSubcontext(AttributeResolverWorkContext.class, true);
-        return connector.resolve(context);
+        return Constraint.isNotNull(connector.resolve(context), "Attributes were null");
     }
     
-    protected <Type> Type getBean(Class<Type> claz, GenericApplicationContext context) {
-        Collection<Type> beans = context.getBeansOfType(claz).values();
+    @Nonnull protected <Type> Type getBean(@Nonnull final Class<Type> claz, @Nonnull final GenericApplicationContext context) {
+        final Collection<Type> beans = context.getBeansOfType(claz).values();
         assertEquals(beans.size(), 1);
 
         return beans.iterator().next();
     }
     
-    protected PolicyRequirementRule getPolicyRuleFromAttributeFilterPolicy(GenericApplicationContext ctx) {
+    @Nonnull protected PolicyRequirementRule getPolicyRuleFromAttributeFilterPolicy(@Nonnull final GenericApplicationContext ctx) {
         final AttributeFilterPolicy afp = ctx.getBean(AttributeFilterPolicy.class);
         return afp.getPolicyRequirementRule();
     }
     
-    protected List<AttributeRule> getAttributeRulesAttributeFilterPolicy(String fileName, GenericApplicationContext ctx) {
+    @Nonnull @NonnullElements protected List<AttributeRule> getAttributeRulesAttributeFilterPolicy(
+            @Nonnull @NotEmpty final String fileName, @Nonnull final GenericApplicationContext ctx) {
         final AttributeFilterPolicy afp = getBean(fileName,  AttributeFilterPolicy.class, ctx); 
                 
         return afp.getAttributeRules();
     }
 
 
-    protected <Type> Type getBean(String fileName, Class<Type> claz, GenericApplicationContext context) {
+    @Nonnull protected <Type> Type getBean(@Nonnull @NotEmpty final String fileName, @Nonnull final Class<Type> claz,
+            @Nonnull final GenericApplicationContext context) {
 
-        SchemaTypeAwareXMLBeanDefinitionReader beanDefinitionReader =
+        final SchemaTypeAwareXMLBeanDefinitionReader beanDefinitionReader =
                 new SchemaTypeAwareXMLBeanDefinitionReader(context);
 
         beanDefinitionReader.loadBeanDefinitions(fileName, MATCHER_PATH + "customBean.xml");
@@ -129,7 +138,8 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         return getBean(claz, context);
     }
 
-    protected PolicyRequirementRule getPolicyRule(final String fileName, final GenericApplicationContext context) throws ComponentInitializationException {
+    @Nonnull protected PolicyRequirementRule getPolicyRule(@Nonnull @NotEmpty final String fileName,
+            @Nonnull final GenericApplicationContext context) throws ComponentInitializationException {
 
         context.setDisplayName("ApplicationContext: Policy Rule");
 
@@ -142,11 +152,13 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         return policy.getPolicyRequirementRule();
     }
 
-    protected PolicyRequirementRule getPolicyRule(String fileName) throws ComponentInitializationException {
+    @Nonnull protected PolicyRequirementRule getPolicyRule(@Nonnull @NotEmpty String fileName)
+            throws ComponentInitializationException {
         return getPolicyRule(fileName, new FilesystemGenericApplicationContext());
     }
 
-    protected Matcher getMatcher(final String fileName, final GenericApplicationContext context) throws ComponentInitializationException {
+    @Nonnull protected Matcher getMatcher(@Nonnull @NotEmpty final String fileName,
+            @Nonnull final GenericApplicationContext context) throws ComponentInitializationException {
 
         context.setDisplayName("ApplicationContext: Matcher");
         setTestContext(context);
@@ -154,19 +166,20 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         final String path = MATCHER_PATH + fileName; 
 
         final AttributeRule rule = getBean(path, AttributeRule.class, context);
-
         rule.initialize();
-        return rule.getMatcher();
+        
+        return Constraint.isNotNull(rule.getMatcher(), "Matcher cannot be null");
     }
     
-    protected Matcher getMatcher(final String fileName) throws ComponentInitializationException {
+    @Nonnull protected Matcher getMatcher(@Nonnull @NotEmpty final String fileName)
+            throws ComponentInitializationException {
 
         GenericApplicationContext context = new FilesystemGenericApplicationContext();
         context.setDisplayName("ApplicationContext: Matcher");
         return getMatcher(fileName, context);
     }
 
-    protected Class<?> rootCause(Throwable what) {
+    @Nonnull protected Class<?> rootCause(@Nonnull final Throwable what) {
         Throwable preLast = what;
         do {
             final Throwable next = preLast.getCause();
@@ -177,7 +190,7 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         } while (true);
     }
     
-    protected GenericApplicationContext contextWithPropertyValue(final String propValue) {
+    @Nonnull protected GenericApplicationContext contextWithPropertyValue(@Nonnull @NotEmpty final String propValue) {
         final GenericApplicationContext context = new FilesystemGenericApplicationContext();
         final MutablePropertySources propertySources = context.getEnvironment().getPropertySources();
         final MockPropertySource mockEnvVars = new MockPropertySource();
@@ -192,4 +205,5 @@ public class BaseAttributeFilterParserTest extends XMLObjectBaseTestCase {
         return context;
 
     }
-}
+
+}
\ No newline at end of file

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


More information about the commits mailing list