[java-shib-attribute] branch main updated: Fix more tests and address more layering issues.

Scott Cantor cantor.2 at osu.edu
Wed Jun 22 20:26:02 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=a19ccf98e7562413e9c7a296365eb0e254db8af8

The following commit(s) were added to refs/heads/main by this push:
     new a19ccf98e Fix more tests and address more layering issues.
a19ccf98e is described below

commit a19ccf98e7562413e9c7a296365eb0e254db8af8
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Jun 22 16:25:59 2022 -0400

    Fix more tests and address more layering issues.
---
 .../ad/impl/ScriptedAttributeDefinition.java       | 42 +++++++++++----
 .../resolver/dc/impl/ScriptedDataConnector.java    |  8 ---
 .../dc/http/impl/HTTPDataConnectorTest.java        | 10 +---
 .../impl/StorageServiceDataConnectorTest.java      |  1 -
 .../resolver/spring/BaseResolverPluginParser.java  | 38 +++++++++++--
 .../ad/impl/ScriptedAttributeDefinitionParser.java |  3 ++
 .../resolver/spring/AttributeResolverTest.java     | 32 +++--------
 .../PrescopedAttributeDefinitionParserTest.java    |  3 +-
 ...PrincipalNameAttributeDefinitionParserTest.java |  3 +-
 .../RegexSplitAttributeDefinitionParserTest.java   |  3 +-
 ...ameIdentifierAttributeDefinitionParserTest.java |  3 +-
 ...meIDdentifierAttributeDefinitionParserTest.java |  3 +-
 .../ScopedAttributeDefinitionParserTest.java       |  3 +-
 .../ad/{ => impl}/ScriptedAttributeParserTest.java |  3 +-
 .../ad/{ => impl}/SimpleAttributeParserTest.java   | 13 ++---
 .../TemplateAttributeDefinitionParserTest.java     |  3 +-
 .../MappedAttributeDefinitionParserTest.java       |  3 +-
 .../mapped/{ => impl}/SourceValueParserTest.java   |  3 +-
 .../ad/mapped/{ => impl}/ValueMapParserTest.java   |  3 +-
 .../{ => impl}/HTTPDataConnectorParserTest.java    |  3 +-
 .../dc/{ => impl}/CacheConfigParserTest.java       |  2 +-
 .../ComputedIdDataConnectorParserTest.java         |  2 +-
 .../dc/{ => impl}/ManagedConnectionTest.java       |  2 +-
 .../{ => impl}/ScriptDataConnectorParserTest.java  |  2 +-
 .../{ => impl}/StaticDataConnectorParserTest.java  |  2 +-
 .../StoredIdDataConnectorParserTest.java           |  4 +-
 .../{ => impl}/LDAPDataConnectorParserTest.java    |  4 +-
 .../{ => impl}/RDBMSDataConnectorParserTest.java   |  3 +-
 .../StorageServiceDataConnectorParserTest.java     |  3 +-
 .../spring/enc/{ => impl}/Regressions.java         |  2 +-
 .../SAML1Base64AttributeEncoderParserTest.java     |  3 +-
 ...AML1ScopedStringAttributeEncoderParserTest.java |  3 +-
 .../SAML1StringAttributeEncoderParserTest.java     |  3 +-
 .../SAML1XMLObjectAttributeEncoderParserTest.java  |  3 +-
 .../SAML2Base64AttributeEncoderParserTest.java     |  3 +-
 ...AML2ScopedStringAttributeEncoderParserTest.java |  3 +-
 .../SAML2StringAttributeEncoderParserTest.java     |  3 +-
 .../SAML2XMLObjectAttributeEncoderParserTest.java  |  3 +-
 .../failfast/AttributeResolverFailFastTest.java    |  2 +-
 .../impl}/AttributeMappingNodeProcessorTest.java   |  3 +-
 .../resolver/failfast/attributeResolverBeans.xml   |  8 +--
 .../failfast/attributeResolverBeansDefaultFF.xml   |  8 +--
 .../resolver/{phasesAndParties.xml => phases.xml}  |  1 -
 .../spring/attribute-resolver-preresolve2.xml      | 29 ----------
 .../attribute-resolver-selective-navigate.xml      |  6 +--
 .../resolver/spring/contextDerivedBeans.xml        | 11 ++--
 .../idp/attribute/resolver/spring/customBean.xml   |  5 +-
 .../http-attribute-resolver-spring-context.xml     |  3 +-
 .../resolver/spring/dc/http/spring-beans.xml       |  8 +--
 .../rdbms-attribute-resolver-spring-context.xml    |  3 +-
 ...bms-attribute-resolver-spring-props-context.xml |  3 +-
 .../dc/resolver/staticAttributesHybridSpring.xml   |  2 +-
 .../resolver/spring/dc/staticAttributesNative.xml  |  4 +-
 .../resolver/spring/dc/storage/spring-beans.xml    |  3 +-
 .../storage-attribute-resolver-spring-context.xml  |  3 +-
 .../attribute/resolver/spring/externalBeans.xml    | 10 ++--
 .../attribute/resolver/spring/idp-1676-service.xml |  6 ++-
 .../resolver/spring/mappedTemplateService.xml      |  8 +--
 .../idp/attribute/resolver/spring/mapperTest.xml   | 13 +++--
 .../attribute/resolver/spring/multiFileService.xml |  4 +-
 .../idp/attribute/resolver/spring/predicates.xml   | 24 ---------
 .../idp/attribute/resolver/spring/service.xml      |  5 +-
 .../idp/attribute/resolver/spring/service2.xml     |  6 ++-
 .../attribute/resolver/spring/serviceNullStrip.xml |  8 +--
 .../attribute/resolver/spring/storageService.xml   |  9 ++--
 .../idp/attribute/resolver/spring/velocity2.xml    |  3 +-
 .../spring => saml/attribute/impl}/customBean.xml  |  5 +-
 .../idp/saml/attribute/impl/metadata.xml           | 26 +++++++++
 .../idp/saml/attribute/impl/resolver.xml           | 33 ++++++++++++
 .../shibboleth/idp/saml/attribute/impl/service.xml | 63 ++++++++++++++++++++++
 70 files changed, 318 insertions(+), 240 deletions(-)

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 e78c84bef..63377ce7d 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
@@ -17,6 +17,8 @@
 
 package net.shibboleth.idp.attribute.resolver.ad.impl;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -39,11 +41,13 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.scripting.AbstractScriptEvaluator;
 import net.shibboleth.utilities.java.support.scripting.EvaluableScript;
+import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
 
 /**
  * An {@link net.shibboleth.idp.attribute.resolver.AttributeDefinition} that executes a script in order to populate the
@@ -79,9 +83,17 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
     /** Evaluator. */
     @NonnullAfterInit private AttributeDefinitionScriptEvaluator scriptEvaluator;
 
+    /** Extenders for script context. */
+    @Nonnull @NonnullElements private Collection<ScriptContextExtender> contextExtenders;
+    
     /** The custom object we inject into all scripts. */
     @Nullable private Object customObject;
 
+    /** Constructor. */
+    public ScriptedAttributeDefinition() {
+        contextExtenders = Collections.emptyList();
+    }
+    
     /**
      * Return the custom (externally provided) object.
      * 
@@ -96,7 +108,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
      * 
      * @param object the custom object
      */
-    @Nullable public void setCustomObject(final Object object) {
+    @Nullable public void setCustomObject(@Nullable final Object object) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
@@ -124,6 +136,25 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         script = Constraint.isNotNull(definitionScript, "Attribute definition script cannot be null");
     }
 
+    /**
+     * Set any script context extenders to apply.
+     * 
+     * @param extenders script extenders
+     * 
+     * @since 5.0.0
+     */
+    @Nullable public void setScriptContextExtenders(
+            @Nullable @NonnullElements final Collection<ScriptContextExtender> extenders) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+
+        if (extenders != null) {
+            contextExtenders = List.copyOf(extenders);
+        } else {
+            contextExtenders = Collections.emptyList();
+        }
+    }
+    
     /** {@inheritDoc} */
     @Override
     protected void doInitialize() throws ComponentInitializationException {
@@ -135,15 +166,8 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
         
         scriptEvaluator = new AttributeDefinitionScriptEvaluator(script);
         scriptEvaluator.setCustomObject(customObject);
+        scriptEvaluator.setContextExtenders(contextExtenders);
         scriptEvaluator.setLogPrefix(getLogPrefix());
-        scriptEvaluator.initialize();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void doDestroy() {
-        scriptEvaluator.destroy();
-        super.doDestroy();
     }
     
     /** {@inheritDoc} */
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 ed3b1791d..8160fca7e 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
@@ -149,16 +149,8 @@ public class ScriptedDataConnector extends AbstractDataConnector {
         scriptEvaluator = new DataConnectorScriptEvaluator(script);
         scriptEvaluator.setCustomObject(customObject);
         scriptEvaluator.setLogPrefix(getLogPrefix());
-        scriptEvaluator.initialize();
     }
     
-    /** {@inheritDoc} */
-    @Override
-    protected void doDestroy() {
-        scriptEvaluator.destroy();
-        super.doDestroy();
-    }
-
     /** {@inheritDoc} */
     @Override @Nullable protected Map<String, IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
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 2bd7725c5..9fc0f0d38 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
@@ -111,7 +111,7 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
+        
         connector.setMappingStrategy(mapping);
         connector.initialize();
         
@@ -156,7 +156,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         connector.initialize();
@@ -182,7 +181,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         connector.initialize();
@@ -208,7 +206,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         connector.initialize();
@@ -231,7 +228,6 @@ public class HTTPDataConnectorTest {
         final ScriptedResponseMappingStrategy mapping = ScriptedResponseMappingStrategy.inlineScript("1");
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_NOT_FOUND));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         connector.initialize();
@@ -258,7 +254,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         
@@ -292,7 +287,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         connector.initialize();
@@ -329,7 +323,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         
@@ -363,7 +356,6 @@ public class HTTPDataConnectorTest {
         mapping.setLogPrefix(TEST_CONNECTOR_NAME + ":");
         mapping.setAcceptStatuses(Collections.singleton(HttpStatus.SC_OK));
         mapping.setAcceptTypes(Collections.singleton("application/json"));
-        mapping.initialize();
         
         connector.setMappingStrategy(mapping);
         
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 5fe80e1a0..ce4a3b1ee 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
@@ -179,7 +179,6 @@ public class StorageServiceDataConnectorTest {
         
         final ScriptedStorageMappingStrategy mapper = ScriptedStorageMappingStrategy.resourceScript(
                 ResourceHelper.of(new ClassPathResource((SCRIPT_PATH) + "test.js")));
-        mapper.initialize();
         
         connector.setMappingStrategy(mapper);
         connector.initialize();
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
index c113d5aac..0e57ed48c 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
@@ -18,6 +18,7 @@
 package net.shibboleth.idp.attribute.resolver.spring;
 
 import java.util.List;
+import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -34,7 +35,6 @@ import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.attribute.resolver.logic.ResolutionLabelPredicate;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputDataConnectorParser;
-import net.shibboleth.idp.profile.logic.RelyingPartyIdPredicate;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.PredicateSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
@@ -45,12 +45,32 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 /** Bean definition parser for a {@link net.shibboleth.idp.attribute.resolver.ResolverPlugin}. */
 public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinitionParser {
 
+    /** Name of class to attempt to instantiate to handle relying party predicates. */
+    @Nonnull @NotEmpty private static final String RELYING_PARTIES_PREDICATE_CLASS =
+            "net.shibboleth.idp.profile.logic.RelyingPartyIdPredicate";
+
+    /** Name of factory method to handle relying party predicates. */
+    @Nonnull @NotEmpty private static final String RELYING_PARTIES_PREDICATE_METHOD = "fromCandidates";
+
+    /** Stores class of the predicate handling the relyingParties setting. */
+    @Nullable private Class<? extends Predicate<?>> relyingPartyPredicateClass;
+    
     /** An Id for the definition, used for debugging messages and creating names of children. */
     @Nonnull @NotEmpty private String defnId = "<Unnamed Attribute or Connector>";
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(BaseResolverPluginParser.class);
 
+    /** Constructor. */
+    @SuppressWarnings("unchecked")
+    public BaseResolverPluginParser() {
+        try {
+            relyingPartyPredicateClass = (Class<? extends Predicate<?>>) Class.forName(RELYING_PARTIES_PREDICATE_CLASS);
+        } catch (final ClassNotFoundException e) {
+            // Will warn later any time we encounter a relevant setting.
+        }
+    }
+    
     /**
      * Helper for logging.
      * 
@@ -133,17 +153,25 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
         BeanDefinitionBuilder phasesBuilder = null;
         
         if (config.hasAttributeNS(null, "relyingParties")) {
+            if (relyingPartyPredicateClass == null) {
+                log.warn("Ignoring relyingParties setting due to class instantiation failure at startup");
+                return null;
+            }
             if (config.hasAttributeNS(null, "excludeRelyingParties")) {
                 log.warn("excludeRelyingParties ignored, using relyingParties");
             }
-            rpBuilder = BeanDefinitionBuilder.genericBeanDefinition(RelyingPartyIdPredicate.class);
-            rpBuilder.setFactoryMethod("fromCandidates");
+            rpBuilder = BeanDefinitionBuilder.genericBeanDefinition(relyingPartyPredicateClass);
+            rpBuilder.setFactoryMethod(RELYING_PARTIES_PREDICATE_METHOD);
             rpBuilder.addConstructorArgValue(
                     SpringSupport.getAttributeValueAsList(config.getAttributeNodeNS(null, "relyingParties")));
         } else if (config.hasAttributeNS(null, "excludeRelyingParties")) {
+            if (relyingPartyPredicateClass == null) {
+                log.warn("Ignoring relyingParties setting due to class instantiation failure at startup");
+                return null;
+            }
             final BeanDefinitionBuilder unnegated =
-                    BeanDefinitionBuilder.genericBeanDefinition(RelyingPartyIdPredicate.class);
-            unnegated.setFactoryMethod("fromCandidates");
+                    BeanDefinitionBuilder.genericBeanDefinition(relyingPartyPredicateClass);
+            unnegated.setFactoryMethod(RELYING_PARTIES_PREDICATE_METHOD);
             unnegated.addConstructorArgValue(
                     SpringSupport.getAttributeValueAsList(
                             config.getAttributeNodeNS(null, "excludeRelyingParties")));
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeDefinitionParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeDefinitionParser.java
index c08735d73..511364b0f 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeDefinitionParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeDefinitionParser.java
@@ -66,9 +66,12 @@ public class ScriptedAttributeDefinitionParser extends BaseAttributeDefinitionPa
     @Override protected void doParse(@Nonnull final Element config, @Nonnull final ParserContext parserContext,
             @Nonnull final BeanDefinitionBuilder builder) {
         super.doParse(config, parserContext, builder);
+        
+        builder.addAutowiredProperty("scriptContextExtenders");
 
         final BeanDefinitionBuilder scriptBuilder =
                 BeanDefinitionBuilder.genericBeanDefinition(EvaluableScriptFactoryBean.class);
+        
         scriptBuilder.addPropertyValue("sourceId", getLogPrefix());
         if (config.hasAttributeNS(null, "language")) {
             final String scriptLanguage = StringSupport.trimOrNull(config.getAttributeNS(null, "language"));
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
index 54a09d0e9..0bd561a90 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeResolverTest.java
@@ -33,6 +33,7 @@ import javax.annotation.Nullable;
 import javax.sql.DataSource;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
+import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -416,30 +417,6 @@ public class AttributeResolverTest extends OpenSAMLInitBaseTestCase {
         assertEquals(postOnly.getValues().get(0).getDisplayValue(), "preOnly");
     }
 
-    @Test public void preResolve2() throws ResolutionException {
-        final GenericApplicationContext context = new GenericApplicationContext();
-        setTestContext(context);
-        context.setDisplayName("ApplicationContext: " + AttributeResolverTest.class);
-
-        final SchemaTypeAwareXMLBeanDefinitionReader beanDefinitionReader =
-                new SchemaTypeAwareXMLBeanDefinitionReader(context);
-
-        beanDefinitionReader.loadBeanDefinitions(new ClassPathResource(
-                "net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-preresolve2.xml"),
-                new ClassPathResource("net/shibboleth/idp/attribute/resolver/spring/predicates.xml"));
-        context.refresh();
-
-        final AttributeResolver resolver = BaseAttributeDefinitionParserTest.getResolver(context);
-        AttributeResolutionContext resolutionContext =
-                TestSources.createResolutionContext("PETER", "issuer", "recipient");
-
-        resolver.resolveAttributes(resolutionContext);
-        assertEquals(resolutionContext.getResolvedIdPAttributes().size(), 1);
-        final IdPAttribute pre =  resolutionContext.getResolvedIdPAttributes().get("EPE");
-        assertEquals(pre.getValues().size(), 1);
-        assertEquals(pre.getValues().get(0).getDisplayValue(), "urn:org:example:attribute");
-    }
-
     @Test public void selectiveNavigate() throws ResolutionException {
         final GenericApplicationContext context = new GenericApplicationContext();
         setTestContext(context);
@@ -456,12 +433,13 @@ public class AttributeResolverTest extends OpenSAMLInitBaseTestCase {
         final AttributeResolver resolver =  BaseAttributeDefinitionParserTest.getResolver(context);
         AttributeResolutionContext resolutionContext =
                 TestSources.createResolutionContext("PETER", "issuer", "recipient");
+        resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
         resolver.resolveAttributes(resolutionContext);
         // this should fail since navigation failed.
         assertEquals(resolutionContext.getResolvedIdPAttributes().size(), 0);
 
-        resolutionContext =
-                TestSources.createResolutionContext("PETER", "issuer", "recipient");
+        resolutionContext = TestSources.createResolutionContext("PETER", "issuer", "recipient");
+        resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
         // add a child so we can navigate via that
         resolutionContext.getSubcontext(ProfileRequestContext.class, true);
         resolver.resolveAttributes(resolutionContext);
@@ -469,12 +447,14 @@ public class AttributeResolverTest extends OpenSAMLInitBaseTestCase {
         assertNotNull(resolutionContext.getResolvedIdPAttributes().get("EPA1"));
 
         resolutionContext = TestSources.createResolutionContext("PRINCIPAL", "ISSUER", "recipient");
+        resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
         resolutionContext.getSubcontext(ProfileRequestContext.class, true);
         resolver.resolveAttributes(resolutionContext);
         assertEquals(resolutionContext.getResolvedIdPAttributes().size(), 1);
         assertNotNull(resolutionContext.getResolvedIdPAttributes().get("EPE"));
 
         resolutionContext = TestSources.createResolutionContext("OTHER", "issuer", "recipient");
+        resolutionContext.setProfileRequestContextLookupStrategy(new ChildContextLookup<>(ProfileRequestContext.class));
         resolver.resolveAttributes(resolutionContext);
         assertTrue(resolutionContext.getResolvedIdPAttributes().isEmpty());
     }
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrescopedAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrescopedAttributeDefinitionParserTest.java
similarity index 92%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrescopedAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrescopedAttributeDefinitionParserTest.java
index 81a4e9ff8..7487e4d26 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrescopedAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrescopedAttributeDefinitionParserTest.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.impl.PrescopedAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.PrescopedAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrincipalNameAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrincipalNameAttributeDefinitionParserTest.java
similarity index 90%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrincipalNameAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrincipalNameAttributeDefinitionParserTest.java
index e498ecbb4..db44b9d4e 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/PrincipalNameAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/PrincipalNameAttributeDefinitionParserTest.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.impl.PrincipalNameAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.PrincipalNameAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/RegexSplitAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/RegexSplitAttributeDefinitionParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/RegexSplitAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/RegexSplitAttributeDefinitionParserTest.java
index 2e4c4864c..3596ad585 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/RegexSplitAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/RegexSplitAttributeDefinitionParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.impl.RegexSplitAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.PrescopedAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML1NameIdentifierAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML1NameIdentifierAttributeDefinitionParserTest.java
similarity index 93%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML1NameIdentifierAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML1NameIdentifierAttributeDefinitionParserTest.java
index 63a1c94a7..78cb312df 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML1NameIdentifierAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML1NameIdentifierAttributeDefinitionParserTest.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SAML1NameIdentifierAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.idp.saml.attribute.resolver.impl.SAML1NameIdentifierAttributeDefinition;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML2NameIDdentifierAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML2NameIDdentifierAttributeDefinitionParserTest.java
similarity index 93%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML2NameIDdentifierAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML2NameIDdentifierAttributeDefinitionParserTest.java
index 017e41099..024f79039 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SAML2NameIDdentifierAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SAML2NameIDdentifierAttributeDefinitionParserTest.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SAML1NameIdentifierAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.idp.saml.attribute.resolver.impl.SAML2NameIDAttributeDefinition;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScopedAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScopedAttributeDefinitionParserTest.java
similarity index 93%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScopedAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScopedAttributeDefinitionParserTest.java
index 88421c0b2..b99ca154a 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScopedAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScopedAttributeDefinitionParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.fail;
@@ -27,7 +27,6 @@ import static org.testng.Assert.assertEquals;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.impl.ScopedAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SAML1NameIdentifierAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScriptedAttributeParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
similarity index 96%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScriptedAttributeParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
index 15dc760f6..ee7185b92 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/ScriptedAttributeParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/ScriptedAttributeParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
@@ -29,7 +29,6 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.ad.impl.ScriptedAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.ScriptedAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
index bff109e75..e3d16f4b8 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SimpleAttributeParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.*;
 
@@ -38,7 +38,7 @@ import net.shibboleth.idp.attribute.resolver.ResolverDataConnectorDependency;
 import net.shibboleth.idp.attribute.resolver.ad.impl.SimpleAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.logic.ResolutionLabelPredicate;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SimpleAttributeDefinitionParser;
+import net.shibboleth.idp.attribute.resolver.spring.ad.BaseAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
@@ -161,7 +161,7 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
         assertFalse(pre.test(prc));
     }
 
-    @Test public void phasesAndParties() throws ComponentInitializationException {
+    @Test public void phases() throws ComponentInitializationException {
         final GenericApplicationContext context = new FilesystemGenericApplicationContext();
         final MutablePropertySources propertySources = context.getEnvironment().getPropertySources();
         final MockPropertySource mockEnvVars = new MockPropertySource();
@@ -176,18 +176,15 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
         placeholderConfig.setPropertySources(propertySources);
         context.addBeanFactoryPostProcessor(placeholderConfig);
 
-        final AttributeDefinition attr = getAttributeDefn("resolver/phasesAndParties.xml", SimpleAttributeDefinition.class, context);
+        final AttributeDefinition attr = getAttributeDefn("resolver/phases.xml", SimpleAttributeDefinition.class, context);
         final Predicate<ProfileRequestContext> pre = attr.getActivationCondition();
         final ProfileRequestContext prc = new ProfileRequestContext();
         final AttributeResolutionContext resContext = prc.getSubcontext(AttributeResolutionContext.class, true);
         
         resContext.setResolutionLabel("p1");
-        assertFalse(pre.test(prc));
+        assertTrue(pre.test(prc));
         resContext.setResolutionLabel("p2 p3");
         assertFalse(pre.test(prc));
-        resContext.setResolutionLabel("p3");
-        assertFalse(pre.test(prc));
-        
         resContext.setResolutionLabel("p3");
         assertTrue(pre.test(prc));
     }
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/TemplateAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/TemplateAttributeDefinitionParserTest.java
similarity index 94%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/TemplateAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/TemplateAttributeDefinitionParserTest.java
index c026596a3..590d182f6 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/TemplateAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/TemplateAttributeDefinitionParserTest.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad;
+package net.shibboleth.idp.attribute.resolver.spring.ad.impl;
 
 import static org.testng.Assert.*;
 
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.impl.TemplateAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.TemplateAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/MappedAttributeDefinitionParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/MappedAttributeDefinitionParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/MappedAttributeDefinitionParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/MappedAttributeDefinitionParserTest.java
index 74c0e9a17..2c8c887be 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/MappedAttributeDefinitionParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/MappedAttributeDefinitionParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad.mapped;
+package net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.MappedAttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl.MappedAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/SourceValueParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/SourceValueParserTest.java
similarity index 96%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/SourceValueParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/SourceValueParserTest.java
index 48259ce2a..2da707f7d 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/SourceValueParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/SourceValueParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad.mapped;
+package net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -30,7 +30,6 @@ import org.testng.annotations.Test;
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.MappedAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.SourceValue;
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.ValueMap;
-import net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl.SourceValueParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/ValueMapParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/ValueMapParserTest.java
similarity index 94%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/ValueMapParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/ValueMapParserTest.java
index cb4c9e45b..3eec5af0e 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/ValueMapParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/mapped/impl/ValueMapParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.ad.mapped;
+package net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
@@ -26,7 +26,6 @@ import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.MappedAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.ad.mapped.impl.ValueMap;
-import net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl.ValueMapParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/HTTPDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParserTest.java
similarity index 99%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/HTTPDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParserTest.java
index a3268cb8d..ea94a7d8b 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/HTTPDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc.http;
+package net.shibboleth.idp.attribute.resolver.spring.dc.http.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -44,7 +44,6 @@ import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.http.impl.HTTPDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.dc.http.impl.HTTPDataConnectorParser;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 import net.shibboleth.utilities.java.support.test.repository.RepositorySupport;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParserTest.java
index 09d1d45be..139f8a971 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import java.io.IOException;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ComputedIdDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ComputedIdDataConnectorParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ComputedIdDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ComputedIdDataConnectorParserTest.java
index dbbbac018..9d74e890c 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ComputedIdDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ComputedIdDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ManagedConnectionTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ManagedConnectionTest.java
similarity index 99%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ManagedConnectionTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ManagedConnectionTest.java
index b0351a6a9..93a9a34f7 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ManagedConnectionTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ManagedConnectionTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import static org.testng.Assert.assertEquals;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
index 8c74bd859..2dc6a33da 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ScriptDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StaticDataConnectorParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StaticDataConnectorParserTest.java
index f70237346..48148cb56 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StaticDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StaticDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StoredIdDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIdDataConnectorParserTest.java
similarity index 97%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StoredIdDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIdDataConnectorParserTest.java
index 985bdf63e..51702bdd4 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/StoredIdDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIdDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc;
+package net.shibboleth.idp.attribute.resolver.spring.dc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
@@ -36,7 +36,7 @@ import net.shibboleth.idp.attribute.impl.JDBCPairwiseIdStore;
 import net.shibboleth.idp.attribute.resolver.ResolverAttributeDefinitionDependency;
 import net.shibboleth.idp.attribute.resolver.dc.impl.PairwiseIdDataConnector;
 import net.shibboleth.idp.attribute.resolver.spring.dc.impl.StoredIdDataConnectorParser;
-import net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.RDBMSDataConnectorParserTest;
+import net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.impl.RDBMSDataConnectorParserTest;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
similarity index 99%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
index 18d3a2329..515e6679c 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc.ldap;
+package net.shibboleth.idp.attribute.resolver.spring.dc.ldap.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -38,7 +38,6 @@ import org.ldaptive.BindConnectionInitializer;
 import org.ldaptive.ConnectionConfig;
 import org.ldaptive.DefaultConnectionFactory;
 import org.ldaptive.RandomConnectionStrategy;
-import org.ldaptive.RoundRobinConnectionStrategy;
 import org.ldaptive.SearchExecutor;
 import org.ldaptive.pool.BlockingConnectionPool;
 import org.ldaptive.pool.IdlePruneStrategy;
@@ -92,7 +91,6 @@ import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.StringAttributeValueMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.impl.ConnectionFactoryValidator;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.impl.LDAPDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.dc.ldap.impl.LDAPDataConnectorParser;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/RDBMSDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/RDBMSDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
index dd11c26c1..710d09913 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/RDBMSDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc.rdbms;
+package net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -56,7 +56,6 @@ import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.StringResultMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.DataSourceValidator;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.RDBMSDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.impl.RDBMSDataConnectorParser;
 import net.shibboleth.utilities.java.support.testing.DatabaseTestingSupport;
 
 /** Test for {@link RDBMSDataConnectorParser}. */
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/StorageServiceDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/impl/StorageServiceDataConnectorParserTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/StorageServiceDataConnectorParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/impl/StorageServiceDataConnectorParserTest.java
index 3a1dd9f90..dfb0d9f3c 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/StorageServiceDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/storage/impl/StorageServiceDataConnectorParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.dc.storage;
+package net.shibboleth.idp.attribute.resolver.spring.dc.storage.impl;
 
 import static org.testng.Assert.*;
 
@@ -43,7 +43,6 @@ import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.resolver.NoResultAnErrorResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.storage.impl.StorageServiceDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.dc.storage.impl.StorageServiceDataConnectorParser;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 
 /** Test for {@link StorageServiceDataConnectorParser}. */
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/Regressions.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/Regressions.java
similarity index 97%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/Regressions.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/Regressions.java
index cd2c2d830..07769adf4 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/Regressions.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/Regressions.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.*;
 
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1Base64AttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1Base64AttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1Base64AttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1Base64AttributeEncoderParserTest.java
index 58de2699e..0aedb5374 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1Base64AttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1Base64AttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML1Base64AttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML1AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1ScopedStringAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1ScopedStringAttributeEncoderParserTest.java
similarity index 96%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1ScopedStringAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1ScopedStringAttributeEncoderParserTest.java
index 8d952b6fe..1b5fe5968 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1ScopedStringAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1ScopedStringAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML1ScopedStringAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML1AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1StringAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1StringAttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1StringAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1StringAttributeEncoderParserTest.java
index 4aff2f3c8..6d430dc2d 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1StringAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1StringAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML1StringAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML1AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1XMLObjectAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1XMLObjectAttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1XMLObjectAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1XMLObjectAttributeEncoderParserTest.java
index be215c62f..73e6c5759 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML1XMLObjectAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML1XMLObjectAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML1XMLObjectAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML1AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2Base64AttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2Base64AttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2Base64AttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2Base64AttributeEncoderParserTest.java
index cfec1645b..a233bd362 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2Base64AttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2Base64AttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML2Base64AttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML2AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2ScopedStringAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2ScopedStringAttributeEncoderParserTest.java
similarity index 96%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2ScopedStringAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2ScopedStringAttributeEncoderParserTest.java
index 5da6161bf..e6eaefc66 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2ScopedStringAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2ScopedStringAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML2ScopedStringAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML2AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2StringAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2StringAttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2StringAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2StringAttributeEncoderParserTest.java
index 63a360738..c8c067dd1 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2StringAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2StringAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML2StringAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML2AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2XMLObjectAttributeEncoderParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2XMLObjectAttributeEncoderParserTest.java
similarity index 95%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2XMLObjectAttributeEncoderParserTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2XMLObjectAttributeEncoderParserTest.java
index e257d1832..1b990a844 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/SAML2XMLObjectAttributeEncoderParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/enc/impl/SAML2XMLObjectAttributeEncoderParserTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring.enc;
+package net.shibboleth.idp.attribute.resolver.spring.enc.impl;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.attribute.resolver.spring.enc.impl.SAML2XMLObjectAttributeEncoderParser;
 import net.shibboleth.idp.attribute.resolver.spring.testing.BaseEncoderDefinitionParserTest;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.saml.attribute.transcoding.SAML2AttributeTranscoder;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/failfast/AttributeResolverFailFastTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/failfast/AttributeResolverFailFastTest.java
index e12cead3e..51c520dba 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/failfast/AttributeResolverFailFastTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/failfast/AttributeResolverFailFastTest.java
@@ -40,7 +40,7 @@ import com.unboundid.util.ssl.SSLUtil;
 import com.unboundid.util.ssl.TrustStoreTrustManager;
 
 import net.shibboleth.idp.attribute.resolver.AttributeResolver;
-import net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.RDBMSDataConnectorParserTest;
+import net.shibboleth.idp.attribute.resolver.spring.dc.rdbms.impl.RDBMSDataConnectorParserTest;
 import net.shibboleth.spring.testing.AbstractFailFastTest;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
 import net.shibboleth.utilities.java.support.service.ServiceableComponent;
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/saml/attribute/impl/AttributeMappingNodeProcessorTest.java
similarity index 98%
rename from shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java
rename to shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/saml/attribute/impl/AttributeMappingNodeProcessorTest.java
index c1941d223..294982884 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/AttributeMappingNodeProcessorTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/saml/attribute/impl/AttributeMappingNodeProcessorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.spring;
+package net.shibboleth.idp.saml.attribute.impl;
 
 import static org.testng.Assert.*;
 
@@ -43,7 +43,6 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPRequestedAttribute;
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
-import net.shibboleth.idp.saml.attribute.impl.AttributeMappingNodeProcessor;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
 
 /**
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeans.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeans.xml
index d9b874f30..5981ae884 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeans.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeans.xml
@@ -9,11 +9,12 @@
 
 	default-init-method="initialize" default-destroy-method="destroy">
 
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
+    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer" destroy-method=""
         class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
-   <bean id="shibboleth.IdentifiableBeanPostProcessor" class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
+        class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
 
     <!-- This bean MUST be called "conversionService" to work properly. -->
     <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
@@ -30,7 +31,8 @@
         </property>
     </bean>
     
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+        class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeansDefaultFF.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeansDefaultFF.xml
index 737fa7105..57062fd25 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeansDefaultFF.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/failfast/attributeResolverBeansDefaultFF.xml
@@ -9,11 +9,12 @@
 
 	default-init-method="initialize" default-destroy-method="destroy">
 
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
+    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer" destroy-method=""
         class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
-   <bean id="shibboleth.IdentifiableBeanPostProcessor" class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
+        class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
 
     <!-- This bean MUST be called "conversionService" to work properly. -->
     <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
@@ -30,7 +31,8 @@
         </property>
     </bean>
 
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phasesAndParties.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phases.xml
similarity index 84%
rename from shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phasesAndParties.xml
rename to shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phases.xml
index 3680dfb26..caae97012 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phasesAndParties.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/resolver/phases.xml
@@ -2,7 +2,6 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="urn:mace:shibboleth:2.0:resolver"
     xsi:type="Simple" id="attry"
-    relyingParties="%{prop1} %{prop2} %{prop3}"
     resolutionPhases="%{prop1} %{prop2} %{prop3}"
     xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
     <InputAttributeDefinition ref="fii"/>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-preresolve2.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-preresolve2.xml
deleted file mode 100644
index c2b0491bb..000000000
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-preresolve2.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-	xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
-
-    <!-- ========================================== -->
-    <!--      Attribute Definitions                 -->
-    <!-- ========================================== -->
-
-    <AttributeDefinition xsi:type="Simple"
-        id="EPA1" preRequested="true" dependencyOnly="true">
-        <InputDataConnector ref="staticAttributes" attributeNames="staticEpA"/>
-    </AttributeDefinition>
-
-    <AttributeDefinition xsi:type="Simple"
-        id="EPE"
-        activationConditionRef="byAttr">
-        <InputDataConnector ref="staticAttributes" attributeNames="eduPersonEntitlement"/>
-    </AttributeDefinition>
-
-    <DataConnector id="staticAttributes"
-        xsi:type="Static">
-        <Attribute id="staticEpA">
-            <Value>member</Value>
-        </Attribute>
-        <Attribute id="eduPersonEntitlement">
-            <Value>urn:org:example:attribute</Value>
-        </Attribute>
-    </DataConnector>
-</AttributeResolver>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-selective-navigate.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-selective-navigate.xml
index 911c4ea32..944ac619b 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-selective-navigate.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/attribute-resolver-selective-navigate.xml
@@ -9,15 +9,13 @@
 
 	<AttributeDefinition xsi:type="Simple"
 		id="EPA1"
-		activationConditionRef="peter"
-		profileContextStrategyRef="findProfileCtx">
+		activationConditionRef="peter">
 		<InputDataConnector ref="staticAttributes" attributeNames="staticEpA"/>
 	</AttributeDefinition>
 
 	<AttributeDefinition xsi:type="Simple"
 		id="EPE"
-		activationConditionRef="principal"
-		profileContextStrategyRef="findProfileCtx">
+		activationConditionRef="principal">
 		<InputDataConnector ref="staticAttributes" attributeNames="eduPersonEntitlement"/>
 	</AttributeDefinition>
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/contextDerivedBeans.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/contextDerivedBeans.xml
index bb41b7e66..82e1818fa 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/contextDerivedBeans.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/contextDerivedBeans.xml
@@ -11,10 +11,13 @@
        default-init-method="initialize"
        default-destroy-method="destroy">
        
-    <bean id="princialAttributeValuesFunction" class="net.shibboleth.idp.attribute.resolver.ad.impl.IdPAttributePrincipalValuesFunction" 
-    p:attributeName="BeanWhatever"/>    
+    <bean id="princialAttributeValuesFunction" destroy-method=""
+        class="net.shibboleth.idp.attribute.resolver.ad.impl.IdPAttributePrincipalValuesFunction" 
+        p:attributeName="BeanWhatever"/>    
        
-    <bean id="ctxAttributeValuesFunction" class="net.shibboleth.idp.attribute.resolver.ad.impl.SubjectDerivedAttributeValuesFunction" 
-    p:attributeValuesFunction-ref="princialAttributeValuesFunction" p:id="ctxAttributeFunction"/>
+    <bean id="ctxAttributeValuesFunction" destroy-method=""
+        class="net.shibboleth.idp.attribute.resolver.ad.impl.SubjectDerivedAttributeValuesFunction" 
+        p:attributeValuesFunction-ref="princialAttributeValuesFunction" p:id="ctxAttributeFunction"/>
+        
 </beans>
        
\ No newline at end of file
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
index 19a1bb35e..247e20bbb 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
@@ -19,9 +19,10 @@
         <entry key="bar" value="foo"/>
     </util:map>
     
-    <bean id="shibboleth.Predicate" class="com.google.common.base.Predicates" factory-method="alwaysFalse"/>
+    <bean id="shibboleth.Predicate" destroy-method=""
+        class="com.google.common.base.Predicates" factory-method="alwaysFalse"/>
     
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
+    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer" destroy-method=""
         class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/http-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/http-attribute-resolver-spring-context.xml
index c8e435895..aa9a127c5 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/http-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/http-attribute-resolver-spring-context.xml
@@ -3,8 +3,7 @@
     xmlns:c="http://www.springframework.org/schema/c"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
     
     <bean id="cacheBuilder" class="com.google.common.cache.CacheBuilder" factory-method="from">
         <constructor-arg value="expireAfterAccess=10s,maximumSize=25" />
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/spring-beans.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/spring-beans.xml
index 008a03ef4..3dfaadf14 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/spring-beans.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/http/spring-beans.xml
@@ -3,13 +3,12 @@
     xmlns:p="http://www.springframework.org/schema/p"
     xmlns:c="http://www.springframework.org/schema/c"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
 
     <bean id="CustomObject" class="java.lang.String" c:_0="foo" />
 
     <bean id="NoTrustEngineHttpClient"
-        class="net.shibboleth.idp.profile.spring.relyingparty.metadata.HttpClientFactoryBean"
+        class="net.shibboleth.spring.http.HttpClientFactoryBean"
         p:userAgent="%{userAgent}"
         p:connectionTimeout="PT30S" />
 
@@ -33,7 +32,8 @@
         class="org.opensaml.security.httpclient.HttpClientSecurityParameters"
         p:TLSProtocols="SSLv3" />
 
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine"
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
index 90b3047c4..aa78c493f 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
@@ -4,8 +4,7 @@
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
 
     <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" p:driverClassName="org.hsqldb.jdbc.JDBCDriver"
         p:maxTotal="20" p:maxIdle="5" p:maxWaitMillis="5000" p:url="jdbc:hsqldb:mem:RDBMSDataConnectorStore" p:username="SA" p:password=""  />
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
index eba4c994d..26321627e 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
@@ -3,8 +3,7 @@
     xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
     <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" p:driverClassName="org.hsqldb.jdbc.JDBCDriver"
         p:maxTotal="20" p:maxIdle="5" p:maxWaitMillis="5000" p:url="jdbc:hsqldb:mem:RDBMSDataConnectorStore" p:username="SA" p:password=""  />
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/resolver/staticAttributesHybridSpring.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/resolver/staticAttributesHybridSpring.xml
index a12a49e39..90ae7a6d2 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/resolver/staticAttributesHybridSpring.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/resolver/staticAttributesHybridSpring.xml
@@ -5,7 +5,7 @@
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
                             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-    default-init-method="initialize" default-destroy-method="destroy">
+    default-init-method="initialize">
 
 <util:list id="values">
     <bean class="net.shibboleth.idp.attribute.IdPAttribute" c:attributeId="staticEpA">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/staticAttributesNative.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/staticAttributesNative.xml
index 722b4ddce..677173dde 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/staticAttributesNative.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/staticAttributesNative.xml
@@ -5,9 +5,9 @@
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
                             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-    default-init-method="initialize" default-destroy-method="destroy">
+    default-init-method="initialize">
 
-    <bean class="net.shibboleth.idp.attribute.resolver.dc.impl.StaticDataConnector" id="staticAttributes">
+    <bean class="net.shibboleth.idp.attribute.resolver.dc.impl.StaticDataConnector" id="staticAttributes" destroy-method="destroy">
         <property name="values">
             <list>
                 <bean class="net.shibboleth.idp.attribute.IdPAttribute" c:attributeId="staticEpA">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/spring-beans.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/spring-beans.xml
index 20d5b6205..7d4456ce9 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/spring-beans.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/spring-beans.xml
@@ -3,8 +3,7 @@
     xmlns:p="http://www.springframework.org/schema/p"
     xmlns:c="http://www.springframework.org/schema/c"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
 
     <bean id="CustomObject" class="java.lang.String" c:_0="foo" />
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/storage-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/storage-attribute-resolver-spring-context.xml
index c2022342a..a496305f1 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/storage-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/storage/storage-attribute-resolver-spring-context.xml
@@ -3,8 +3,7 @@
     xmlns:c="http://www.springframework.org/schema/c"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
-    default-init-method="initialize"
-    default-destroy-method="destroy">
+    default-init-method="initialize">
     
     <bean id="cacheBuilder" class="com.google.common.cache.CacheBuilder" factory-method="from">
         <constructor-arg value="expireAfterAccess=10s,maximumSize=25" />
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/externalBeans.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/externalBeans.xml
index 0c4bf6ace..1efd3a604 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/externalBeans.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/externalBeans.xml
@@ -11,7 +11,8 @@
         default-init-method="initialize"
         default-destroy-method="destroy">
     
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -37,18 +38,19 @@
         </property>
     </bean>
    
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
+    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer" destroy-method=""
         class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
-    <bean id="cacheBuilderExternal" class="com.google.common.cache.CacheBuilder" factory-method="from">
+    <bean id="cacheBuilderExternal" destroy-method=""
+            class="com.google.common.cache.CacheBuilder" factory-method="from">
         <constructor-arg value="expireAfterAccess=10s,maximumSize=25" />
     </bean>
     
     <util:list id="emptyList"/>
     
     <util:list id="rdbmsResource">
-        <bean class="org.springframework.core.io.ClassPathResource" 
+        <bean class="org.springframework.core.io.ClassPathResource" destroy-method=""
                 c:path="net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml"/>
     </util:list>
     
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/idp-1676-service.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/idp-1676-service.xml
index 1ae358fec..9ce82bf46 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/idp-1676-service.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/idp-1676-service.xml
@@ -9,11 +9,12 @@
         default-destroy-method="destroy">
                             
     <!-- This BeanPostProcessor auto-sets identifiable beans with the bean name (if not already set). -->
-    <bean id="shibboleth.IdentifiableBeanPostProcessor"
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
         class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />     
  
                            
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -26,6 +27,7 @@
             </props>
         </property>
     </bean>
+    
     <bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
         depends-on="shibboleth.VelocityEngine"
         p:beanPostProcessors-ref="shibboleth.IdentifiableBeanPostProcessor"
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplateService.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplateService.xml
index f52557d8d..c58c66d12 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplateService.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplateService.xml
@@ -10,10 +10,11 @@
                             >
                             
     <!-- This BeanPostProcessor auto-sets identifiable beans with the bean name (if not already set). -->
-    <bean id="shibboleth.IdentifiableBeanPostProcessor"
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
         class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />     
                             
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -26,7 +27,8 @@
             </props>
         </property>
     </bean>
-        <bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
+    
+    <bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
         depends-on="shibboleth.VelocityEngine"
         p:beanPostProcessors-ref="shibboleth.IdentifiableBeanPostProcessor"
         p:failFast="false" p:reloadCheckDelay="0">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest.xml
index 74ec70bf8..4cbffdb96 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest.xml
@@ -15,7 +15,8 @@
 
     <import resource="customBean.xml" />
     
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -45,17 +46,19 @@
         </property>
     </bean>
 
-    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction"
+    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction" destroy-method=""
             c:claz="org.opensaml.saml.saml2.core.Attribute">
         <constructor-arg name="function">
-            <bean class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTranscoder.NamingFunction" />
+            <bean destroy-method=""
+                class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTranscoder.NamingFunction" />
         </constructor-arg>    
     </bean>
 
-    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction"
+    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction" destroy-method=""
             c:claz="org.opensaml.saml.saml1.core.AttributeDesignator">
         <constructor-arg name="function">
-            <bean class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML1AttributeTranscoder.NamingFunction" />
+            <bean destroy-method=""
+                class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML1AttributeTranscoder.NamingFunction" />
         </constructor-arg>    
     </bean>
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/multiFileService.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/multiFileService.xml
index 7013aa4db..ee111a9cb 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/multiFileService.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/multiFileService.xml
@@ -5,7 +5,8 @@
 	default-init-method="initialize" default-destroy-method="destroy"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
-	<bean id="shibboleth.VelocityEngine"
+                            
+	<bean id="shibboleth.VelocityEngine" destroy-method=""
 		class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
 		<property name="velocityProperties">
 			<props>
@@ -19,6 +20,7 @@
 			</props>
 		</property>
 	</bean>
+	
 	<bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
 		depends-on="shibboleth.VelocityEngine" p:failFast="false"
 		p:reloadCheckDelay="0">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/predicates.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/predicates.xml
index b075b0b64..6e36645a5 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/predicates.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/predicates.xml
@@ -26,28 +26,4 @@
         <value>https://example.org/sp</value>
     </util:list>
 
-    <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate" id="byAttr" >
-        <property name="attributeValueMap">
-            <map>
-                <entry key="EPA1">
-                    <list>
-                        <value>*</value>
-                    </list>
-                </entry>
-            </map>
-        </property>
-        <property name="attributeContextLookupStrategy">
-            <bean id="shibboleth.Functions.Compose"
-                    class="net.shibboleth.utilities.java.support.logic.FunctionSupport" factory-method="compose">
-                <constructor-arg name="g">
-                    <bean id="shibboleth.ChildLookupOrCreate.AttributeContext"
-                        class="org.opensaml.messaging.context.navigate.ChildContextLookup"
-                        c:type="#{ T(net.shibboleth.idp.attribute.context.AttributeContext) }"/>
-                </constructor-arg>
-                <constructor-arg name="f">
-                    <bean class="org.opensaml.messaging.context.navigate.ChildContextLookup" c:type="#{ T(net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext) }" />
-                </constructor-arg>
-            </bean>
-        </property>
-     </bean>
 </beans>
\ No newline at end of file
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service.xml
index 8dbd23f1b..59a349ff6 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service.xml
@@ -9,11 +9,12 @@
         default-destroy-method="destroy">
                             
     <!-- This BeanPostProcessor auto-sets identifiable beans with the bean name (if not already set). -->
-    <bean id="shibboleth.IdentifiableBeanPostProcessor"
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
         class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />     
  
                            
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service2.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service2.xml
index 47b47db36..d1578b26f 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service2.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/service2.xml
@@ -5,8 +5,9 @@
 	default-init-method="initialize" default-destroy-method="destroy"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
-	<bean id="shibboleth.VelocityEngine"
-		class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+                            
+	<bean id="shibboleth.VelocityEngine" destroy-method=""
+		  class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
 		<property name="velocityProperties">
 			<props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -19,6 +20,7 @@
 			</props>
 		</property>
 	</bean>
+	
 	<bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
 		depends-on="shibboleth.VelocityEngine" p:failFast="false"
 		p:reloadCheckDelay="0">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/serviceNullStrip.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/serviceNullStrip.xml
index d80de1c45..e1c4ecf1c 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/serviceNullStrip.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/serviceNullStrip.xml
@@ -10,10 +10,11 @@
                             >
                             
     <!-- This BeanPostProcessor auto-sets identifiable beans with the bean name (if not already set). -->
-    <bean id="shibboleth.IdentifiableBeanPostProcessor"
+    <bean id="shibboleth.IdentifiableBeanPostProcessor" destroy-method=""
         class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />     
                             
-    <bean id="shibboleth.VelocityEngine" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
@@ -26,7 +27,8 @@
             </props>
         </property>
     </bean>
-        <bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
+    
+    <bean id="shibboleth.AttributeResolverService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
         depends-on="shibboleth.VelocityEngine"
         p:beanPostProcessors-ref="shibboleth.IdentifiableBeanPostProcessor"
         p:failFast="false" p:reloadCheckDelay="0">
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/storageService.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/storageService.xml
index e2fd196f5..7d3463c33 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/storageService.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/storageService.xml
@@ -9,12 +9,13 @@
        default-destroy-method="destroy">
        
     <!-- This bean MUST be called "conversionService" to work properly. -->
-    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
+    <bean id="conversionService" destroy-method=""
+            class="org.springframework.context.support.ConversionServiceFactoryBean">
         <property name="converters">
             <list>
-                <bean class="net.shibboleth.ext.spring.config.StringToIPRangeConverter"/>
-                <bean class="net.shibboleth.ext.spring.config.StringToDurationConverter"/>
-        <bean class="net.shibboleth.ext.spring.config.StringToResourceConverter" />
+                <bean class="net.shibboleth.ext.spring.config.StringToIPRangeConverter" destroy-method=""/>
+                <bean class="net.shibboleth.ext.spring.config.StringToDurationConverter" destroy-method=""/>
+                <bean class="net.shibboleth.ext.spring.config.StringToResourceConverter" destroy-method="" />
             </list>
         </property>
     </bean>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/velocity2.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/velocity2.xml
index 72b495ae7..1ddba4380 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/velocity2.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/velocity2.xml
@@ -4,7 +4,8 @@
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 
-    <bean id="otherVe" class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+    <bean id="otherVe" destroy-method=""
+            class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
         <property name="velocityProperties">
             <props>
                 <prop key="resource.loaders">classpath, string</prop>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/customBean.xml
similarity index 91%
copy from shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
copy to shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/customBean.xml
index 19a1bb35e..247e20bbb 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/customBean.xml
@@ -19,9 +19,10 @@
         <entry key="bar" value="foo"/>
     </util:map>
     
-    <bean id="shibboleth.Predicate" class="com.google.common.base.Predicates" factory-method="alwaysFalse"/>
+    <bean id="shibboleth.Predicate" destroy-method=""
+        class="com.google.common.base.Predicates" factory-method="alwaysFalse"/>
     
-    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer"
+    <bean id="shibboleth.PropertySourcesPlaceholderConfigurer" destroy-method=""
         class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/metadata.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/metadata.xml
new file mode 100644
index 000000000..b94e1651f
--- /dev/null
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/metadata.xml
@@ -0,0 +1,26 @@
+<EntityDescriptor entityID="https://example.org/shibboleth"
+	xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
+	<Extensions xmlns:mdattr="urn:oasis:names:tc:SAML:metadata:attribute">
+		<mdattr:EntityAttributes xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
+			<saml:Attribute Name="http://macedir.org/entity-category"
+				NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+				<saml:AttributeValue>http://id.incommon.org/category/research-and-scholarship
+				</saml:AttributeValue>
+			</saml:Attribute>
+		</mdattr:EntityAttributes>
+	</Extensions>
+	<SPSSODescriptor
+		protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+        <AssertionConsumerService Location="https://foo" index="1" Binding="urn:foo" />
+		<AttributeConsumingService xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+			index="1">
+            <ServiceName xml:lang="en">Foo</ServiceName>
+			<RequestedAttribute FriendlyName="displayName"
+				Name="urn:mace:dir:attribute-def:displayName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri" />
+			<RequestedAttribute FriendlyName="displayName" isRequired="true"
+				Name="urn:oid:2.16.840.1.113730.3.1.241" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
+			<RequestedAttribute FriendlyName="eduPersonPrincipalName"
+				Name="urn:mace:dir:attribute-def:eduPersonPrincipalName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri" />
+		</AttributeConsumingService>
+	</SPSSODescriptor>
+</EntityDescriptor>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/resolver.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/resolver.xml
new file mode 100644
index 000000000..04f4be695
--- /dev/null
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/resolver.xml
@@ -0,0 +1,33 @@
+<AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+	id="TestID"
+	xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
+
+	<DataConnector id="staticAttributes" xsi:type="Static">
+		<Attribute id="eduPersonAffiliation"><Value>member</Value></Attribute>
+		<Attribute id="eduPersonEntitlement">
+			<Value>urn:example.org:entitlement:entitlement1</Value>
+			<Value>urn:mace:dir:entitlement:common-lib-terms</Value>
+		</Attribute>
+	</DataConnector>
+
+	<AttributeDefinition id="dn1" xsi:type="Simple" >
+	<InputDataConnector ref="staticAttributes" attributeNames="dn1"></InputDataConnector>
+		<AttributeEncoder xsi:type="SAML2String"
+			name="urn:mace:dir:attribute-def:displayName" nameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"
+			friendlyName="dn1" />
+	</AttributeDefinition>
+
+	<AttributeDefinition id="dn2" xsi:type="Simple" >
+        <InputDataConnector ref="staticAttributes" attributeNames="dn2"/>
+		<AttributeEncoder xsi:type="SAML2String"
+			name="urn:oid:2.16.840.1.113730.3.1.241" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+			friendlyName="dn2" />
+	</AttributeDefinition>
+
+	<AttributeDefinition id="eppn" xsi:type="Simple" >
+		<AttributeEncoder xsi:type="SAML2String" name="urn:mace:dir:attribute-def:eduPersonPrincipalName" friendlyName="dn2"  
+			nameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"/>
+        <InputDataConnector ref="staticAttributes" allAttributes="true"/>
+	</AttributeDefinition>
+
+</AttributeResolver>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/service.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/service.xml
new file mode 100644
index 000000000..4345991d4
--- /dev/null
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/saml/attribute/impl/service.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:context="http://www.springframework.org/schema/context"
+    xmlns:util="http://www.springframework.org/schema/util"
+	xmlns:p="http://www.springframework.org/schema/p"
+    xmlns:c="http://www.springframework.org/schema/c"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
+	default-init-method="initialize" default-destroy-method="destroy">
+
+    <context:annotation-config />
+
+	<bean id="shibboleth.AttributeRegistryService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
+		depends-on="shibboleth.VelocityEngine" p:failFast="true"
+		p:reloadCheckDelay="0">
+
+		<constructor-arg name="claz"
+			value="net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry" />
+		<constructor-arg name="strategy">
+			<bean class="net.shibboleth.idp.attribute.transcoding.impl.AttributeRegistryServiceStrategy"
+				p:id="shibboleth.AttributeRegistryService" />
+		</constructor-arg>
+		<property name="serviceConfigurations">
+			<util:list>
+				<value>/net/shibboleth/idp/saml/attribute/impl/resolver.xml</value>
+			</util:list>
+		</property>
+	</bean>
+
+    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction" destroy-method=""
+            c:claz="org.opensaml.saml.saml2.core.Attribute">
+        <constructor-arg name="function">
+            <bean destroy-method=""
+                class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTranscoder.NamingFunction" />
+        </constructor-arg>    
+    </bean>
+
+    <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction" destroy-method=""
+            c:claz="org.opensaml.saml.saml1.core.AttributeDesignator">
+        <constructor-arg name="function">
+            <bean destroy-method=""
+                class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML1AttributeTranscoder.NamingFunction" />
+        </constructor-arg>    
+    </bean>
+
+    <bean id="shibboleth.VelocityEngine" destroy-method=""
+        class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
+        <property name="velocityProperties">
+            <props>
+                <prop key="resource.loaders">classpath, string</prop>
+                <prop key="resource.loader.classpath.class">
+                    org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
+                </prop>
+                <prop key="resource.loader.string.class">
+                    org.apache.velocity.runtime.resource.loader.StringResourceLoader
+                </prop>
+            </props>
+        </property>
+    </bean>
+
+</beans>
\ 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