[java-shib-attribute] 03/03: JSPT-98 Integrate lifecycle checking methods in base classes

Rod Widdowson rdw at steadingsoftware.com
Wed Jul 13 09:16:24 UTC 2022


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

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

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

commit 59201cf309a9becdb3d7c0fe55b19286721dbac8
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Jul 1 11:56:49 2022 +0100

    JSPT-98 Integrate lifecycle checking methods in base classes
    
    https://shibboleth.atlassian.net/browse/JSPT-98
    
    Stop using ComponentSupport and use the appropriate methods instead:
    
            shib-attribute-resolver-api shib-attribute-resolver-impl
---
 .../matcher/impl/AbstractRegexpStringMatcher.java  |  2 +-
 .../impl/TargettedAttributeValueFilterTest.java    | 18 ++++-----
 .../filter/impl/AttributeFilterImplTest.java       | 10 ++---
 .../resolver/AbstractAttributeDefinition.java      |  7 +---
 .../attribute/resolver/AbstractDataConnector.java  | 13 ++-----
 .../attribute/resolver/AbstractResolverPlugin.java | 18 +++------
 .../attribute/resolver/ResolvedDataConnector.java  |  7 +---
 .../resolver/ResolverDataConnectorDependency.java  |  2 +-
 ...ParameterizedExecutableSearchFilterBuilder.java |  5 +--
 .../TemplatedExecutableSearchFilterBuilder.java    |  7 ++--
 .../rdbms/AbstractExecutableStatementBuilder.java  |  3 +-
 .../rdbms/TemplatedExecutableStatementBuilder.java |  6 +--
 .../testing/MockStaticAttributeDefinition.java     |  6 +--
 .../resolver/testing/MockStaticDataConnector.java  |  6 +--
 .../attribute/resolver/testing/TestSources.java    |  4 +-
 .../ad/impl/ContextDerivedAttributeDefinition.java | 11 +++---
 .../ad/impl/DecryptedAttributeDefinition.java      |  4 +-
 .../ad/impl/PrescopedAttributeDefinition.java      | 13 +++----
 .../ad/impl/RegexSplitAttributeDefinition.java     | 13 +++----
 .../ad/impl/ScopedAttributeDefinition.java         | 12 ++----
 .../ad/impl/ScriptedAttributeDefinition.java       | 13 ++-----
 .../ad/impl/StaticAttributeDefinition.java         | 13 +++----
 .../ad/impl/TemplateAttributeDefinition.java       |  7 +---
 .../ad/mapped/impl/MappedAttributeDefinition.java  | 13 ++-----
 .../resolver/ad/mapped/impl/SourceValue.java       | 11 +++---
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    |  7 +---
 .../resolver/dc/http/impl/HTTPDataConnector.java   |  8 ++--
 .../dc/http/impl/TemplatedBodyBuilder.java         | 45 +++++++++-------------
 .../resolver/dc/http/impl/TemplatedURLBuilder.java | 28 ++++++--------
 .../dc/impl/AbstractSearchDataConnector.java       | 28 +++++---------
 .../resolver/dc/impl/PairwiseIdDataConnector.java  | 14 +++----
 .../resolver/dc/impl/ScriptedDataConnector.java    | 13 ++-----
 .../resolver/dc/impl/StaticDataConnector.java      |  7 +---
 .../dc/ldap/impl/ConnectionFactoryValidator.java   |  5 +--
 .../resolver/dc/ldap/impl/LDAPDataConnector.java   |  9 +----
 .../dc/rdbms/impl/DataSourceValidator.java         |  7 ++--
 .../resolver/dc/rdbms/impl/RDBMSDataConnector.java | 10 ++---
 .../storage/impl/StorageServiceDataConnector.java  | 14 ++-----
 .../dc/storage/impl/TemplatedSearchBuilder.java    | 33 ++++++----------
 .../resolver/impl/AttributeResolverImpl.java       | 15 +++-----
 .../resolver/ad/impl/RegexAtributeTest.java        |  2 +-
 .../dc/impl/ComputedIDDataConnectorTest.java       |  9 ++---
 .../dc/impl/StoredIDDataConnectorTest.java         |  9 ++---
 .../impl/testing/SAMLAttributeDataConnector.java   | 17 ++++----
 44 files changed, 187 insertions(+), 317 deletions(-)

diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcher.java
index a988995de..4f7643e90 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcher.java
@@ -63,7 +63,7 @@ public abstract class AbstractRegexpStringMatcher extends AbstractMatcher {
      * @return true if the value matches the given match string, false if not
      */
     protected boolean regexpCompare(@Nullable final String value) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         if (pattern == null || value == null) {
             return false;
         }
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
index cf672e00d..e58591426 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
@@ -105,9 +105,9 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
         final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
         engine.setApplicationContext(new MockApplicationContext());
 
-        ComponentSupport.initialize(attributeValueFilterPolicy);
-        ComponentSupport.initialize(policy);
-        ComponentSupport.initialize(engine);
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
 
         AttributeFilterContext context = new AttributeFilterContext();
         context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
@@ -174,9 +174,9 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
         engine.setApplicationContext(new MockApplicationContext());
 
 
-        ComponentSupport.initialize(attributeValueFilterPolicy);
-        ComponentSupport.initialize(policy);
-        ComponentSupport.initialize(engine);
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
 
         AttributeFilterContext context = new AttributeFilterContext();
         context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
@@ -233,9 +233,9 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
         final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
         engine.setApplicationContext(new MockApplicationContext());
 
-        ComponentSupport.initialize(attributeValueFilterPolicy);
-        ComponentSupport.initialize(policy);
-        ComponentSupport.initialize(engine);
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
 
         AttributeFilterContext context = new AttributeFilterContext();
         context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
index ffbad66a8..56eab5d3a 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
@@ -154,7 +154,7 @@ public class AttributeFilterImplTest {
         filter.setApplicationContext(new MockApplicationContext());
         attribute1Policy.initialize();
         policy.initialize();
-        ComponentSupport.initialize(filter);
+        filter.initialize();
 
         filter.filterAttributes(filterContext);
         final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
@@ -249,7 +249,7 @@ public class AttributeFilterImplTest {
         filter.setApplicationContext(new MockApplicationContext());
         attribute1Policy.initialize();
         policy.initialize();
-        ComponentSupport.initialize(filter);
+        filter.initialize();
 
         filter.filterAttributes(filterContext);
         Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
@@ -317,7 +317,7 @@ public class AttributeFilterImplTest {
         AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
         filter.setApplicationContext(new MockApplicationContext());
         policy.initialize();
-        ComponentSupport.initialize(filter);
+        filter.initialize();
 
         filter.filterAttributes(filterContext);
         Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
@@ -351,7 +351,7 @@ public class AttributeFilterImplTest {
         allowPolicy.initialize();
         denyPolicy.initialize();
         policy.initialize();
-        ComponentSupport.initialize(filter);
+        filter.initialize();
 
         filter.filterAttributes(filterContext);
         Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
@@ -380,7 +380,7 @@ public class AttributeFilterImplTest {
         policy.initialize();
         matcher.initialize();
         policyRule.initialize();
-        ComponentSupport.initialize(filter);
+        filter.initialize();
 
         Assert.assertTrue(policyRule.isInitialized());
         Assert.assertFalse(policyRule.isDestroyed());
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
index 15578d234..5a39e7d18 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
@@ -29,7 +29,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 
@@ -68,8 +67,7 @@ public abstract class AbstractAttributeDefinition extends AbstractResolverPlugin
      * @param isDependencyOnly whether this attribute definition is only a dependency
      */
     public void setDependencyOnly(final boolean isDependencyOnly) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         dependencyOnly = isDependencyOnly;
     }
@@ -84,8 +82,7 @@ public abstract class AbstractAttributeDefinition extends AbstractResolverPlugin
      * @param value what to set
      */
     public void setPreRequested(final boolean value) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         preRequested = value;
     }
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
index 22627e740..2f0f8fe78 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractDataConnector.java
@@ -38,7 +38,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /** Base class for data connector resolver plugins. */
@@ -96,8 +95,7 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
      *            experiences an error
      */
     public void setFailoverDataConnectorId(@Nullable final String id) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         failoverDataConnectorId = StringSupport.trimOrNull(id);
     }
@@ -142,8 +140,7 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
      * @param delay what to set
      */
     public void setNoRetryDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         noRetryDelay = delay;
     }
 
@@ -159,8 +156,7 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
      */
     @Deprecated(since = "4.1.0", forRemoval = true)
     public void setExportAllAttributes(final boolean what) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         exportAllAttributes = what;
     }
 
@@ -176,8 +172,7 @@ public abstract class AbstractDataConnector extends AbstractResolverPlugin<Map<S
      * @param what the list
      */
     public void setExportAttributes(@Nonnull @NonnullElements final Collection<String> what) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         exportAttributes = Set.copyOf(what);
     }
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index d9a61588a..0090e1904 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -113,9 +113,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      * @param propagate true if {@link ResolutionException}s are propagated, false if not
      */
     public void setPropagateResolutionExceptions(final boolean propagate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         propagateResolutionExceptions = propagate;
     }
 
@@ -130,9 +128,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      * @param pred what to set
      */
     public void setActivationCondition(@Nonnull final Predicate<ProfileRequestContext> pred) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         activationCondition = Constraint.isNotNull(pred, "Activation condition cannot be null");
     }
 
@@ -164,8 +160,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      */
     public void setAttributeDependencies(@Nonnull @NonnullElements
             final Set<ResolverAttributeDefinitionDependency> dependencies) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(dependencies, "Attribute Dependencies cannot be null");
 
         attributeDependencies = Set.copyOf(dependencies);
@@ -178,8 +173,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      */
     public void setDataConnectorDependencies(@Nonnull @NonnullElements
             final Set<ResolverDataConnectorDependency> dependencies) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(dependencies, "DataConnector Dependencies cannot be null");
 
         dataConnectorDependencies = Set.copyOf(dependencies);
@@ -205,9 +199,7 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      */
     @Nullable public final ResolvedType resolve(@Nonnull final AttributeResolutionContext resolutionContext)
             throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwComponentStateExceptions();
         Constraint.isNotNull(resolutionContext, "AttributeResolutionContext cannot be null");
 
         final boolean timerStarted = startTimer(resolutionContext);
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
index 1024d5fa0..8ee3867f9 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnector.java
@@ -33,7 +33,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -130,8 +129,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
 
     /** {@inheritDoc} */
     @Override public void setExportAllAttributes(@Nullable final boolean what) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
     }
 
     /** {@inheritDoc} */
@@ -141,8 +139,7 @@ public final class ResolvedDataConnector extends AbstractDataConnector {
 
     /** {@inheritDoc} */
     @Override public void setExportAttributes(@Nonnull final Collection<String> what) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
     }
 
     /** {@inheritDoc} */
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
index b1eebec6e..af4f1d635 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverDataConnectorDependency.java
@@ -131,6 +131,6 @@ public final class ResolverDataConnectorDependency  {
         
         return Objects.equals(getDependencyPluginId(), other.getDependencyPluginId())
                 && Objects.equals(getAttributeNames(), other.getAttributeNames()) 
-                && (isAllAttributes() == other.isAllAttributes());
+                && isAllAttributes() == other.isAllAttributes();
     }
 }
\ No newline at end of file
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
index 9e3313ad1..c93bc90a9 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/ParameterizedExecutableSearchFilterBuilder.java
@@ -29,7 +29,6 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -54,7 +53,7 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
      * @param filter used for the LDAP search
      */
     public void setSearchFilter(@Nonnull final String filter) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         searchFilter = Constraint.isNotNull(filter, "Search filter can not be null");
     }
     
@@ -68,7 +67,7 @@ public class ParameterizedExecutableSearchFilterBuilder extends AbstractExecutab
     /** {@inheritDoc} */
     @Override public ExecutableSearchFilter build(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         final SearchFilter sf = new SearchFilter(searchFilter);
         sf.setParameter("principalName", resolutionContext.getPrincipal());
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
index 000634af9..0d4217770 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/TemplatedExecutableSearchFilterBuilder.java
@@ -40,7 +40,6 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.velocity.Template;
 
@@ -93,7 +92,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
      * @param velocityTemplate template to be evaluated
      */
     public void setTemplateText(@Nullable final String velocityTemplate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         templateText = StringSupport.trimOrNull(velocityTemplate);
     }
@@ -113,7 +112,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         engine = velocityEngine;
     }
@@ -133,7 +132,7 @@ public class TemplatedExecutableSearchFilterBuilder extends AbstractExecutableSe
      * @param handler reference insertion event handler to be used
      */
     public void setReferenceInsertionEventHandler(@Nullable final ReferenceInsertionEventHandler handler) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         eventHandler = handler;
     }
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
index 73a811af1..267fdb2eb 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
@@ -33,7 +33,6 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -65,7 +64,7 @@ public abstract class AbstractExecutableStatementBuilder extends AbstractInitial
      * @param timeout of the SQL query
      */
     public void setQueryTimeout(@Nonnull final Duration timeout) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(timeout, "Query timeout cannot be null");
         Constraint.isFalse(timeout.isNegative(), "Query timeout cannot be negative");
         
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
index aa2901c0d..541cc592b 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
@@ -92,7 +92,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
      * @param velocityTemplate template to be evaluated
      */
     public void setTemplateText(@Nullable final String velocityTemplate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         templateText = StringSupport.trimOrNull(velocityTemplate);
     }
@@ -112,7 +112,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(@Nonnull final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         engine = velocityEngine;
     }
@@ -132,7 +132,7 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
      * @param handler reference insertion event handler to be used
      */
     public void setReferenceInsertionEventHandler(@Nullable final ReferenceInsertionEventHandler handler) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         eventHandler = handler;
     }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
index c453fb717..188934a37 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
@@ -49,8 +49,7 @@ public class MockStaticAttributeDefinition extends AbstractAttributeDefinition {
      * @param newAttribute what to set.
      */
     public void setValue(@Nullable IdPAttribute newAttribute) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         if (null != newAttribute) {
             value = newAttribute;
@@ -71,8 +70,7 @@ public class MockStaticAttributeDefinition extends AbstractAttributeDefinition {
     @Nullable protected IdPAttribute doAttributeDefinitionResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         log.debug("Attribute definition '{}': Resolving static attribute {}", getId(), value);
         return value;
     }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
index b19b70254..8cf434805 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
@@ -62,8 +62,7 @@ public class MockStaticDataConnector extends AbstractDataConnector {
      * @param newValues static values returned by this connector
      */
     public void setValues(@Nullable Collection<IdPAttribute> newValues) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         if (null == newValues) {
             attributes = null;
@@ -86,8 +85,7 @@ public class MockStaticDataConnector extends AbstractDataConnector {
     @Nullable protected Map<String, IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         log.debug("Data connector '{}': Resolving static attribute {}", getId(), attributes);
         return attributes;
     }
diff --git a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
index d96397360..7902bed21 100644
--- a/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
+++ b/shib-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
@@ -242,9 +242,7 @@ public final class TestSources {
          * @param newAttribute what to set.
          */
         public void setValue(@Nullable final IdPAttribute newAttribute) {
-            ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-            ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+            throwSetterPreconditionExceptions();
             value = newAttribute;
         }
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
index 854511b90..1d82085f3 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.java
@@ -23,6 +23,10 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.profile.context.ProfileRequestContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition;
@@ -31,13 +35,8 @@ 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.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * An attribute definition which returns an attribute whose values are derived from the
  * {@link ProfileRequestContext} associated with the request via a plugged in {@link Function}.
@@ -61,7 +60,7 @@ public class ContextDerivedAttributeDefinition extends AbstractAttributeDefiniti
      */
     public void setAttributeValuesFunction(
             @Nonnull final Function<ProfileRequestContext,List<IdPAttributeValue>> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         attributeValuesFunction = Constraint.isNotNull(function, "Attribute Function cannot be null");
     }
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
index eb9f3a7e3..04b3f5fc3 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DecryptedAttributeDefinition.java
@@ -38,7 +38,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.security.DataSealer;
 
@@ -66,8 +65,7 @@ public class DecryptedAttributeDefinition extends AbstractAttributeDefinition {
      * @param newSealer what to set
      */
     public void setDataSealer(@Nonnull final DataSealer newSealer) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         sealer = Constraint.isNotNull(newSealer, "DataSealer cannot be null");
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
index 76387ab04..081d173a7 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/PrescopedAttributeDefinition.java
@@ -24,6 +24,9 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
@@ -37,13 +40,9 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * An attribute definition that creates {@link ScopedStringAttributeValue}s by taking a source attribute value splitting
  * it at a delimiter. The first atom becomes the attribute value and the second value becomes the scope.
@@ -72,8 +71,7 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
      * @param newScopeDelimiter delimiter between value and scope
      */
     public void setScopeDelimiter(@Nonnull @NotEmpty final String newScopeDelimiter) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         scopeDelimiter =
                 Constraint.isNotNull(StringSupport.trimOrNull(newScopeDelimiter), getLogPrefix()
@@ -85,8 +83,7 @@ public class PrescopedAttributeDefinition extends AbstractAttributeDefinition {
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         Constraint.isNotNull(workContext, getLogPrefix() + " AttributeResolverWorkContext cannot be null");
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
index 740f26632..52c2f5b7b 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexSplitAttributeDefinition.java
@@ -26,6 +26,9 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.EmptyAttributeValue.EmptyType;
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -39,12 +42,8 @@ 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.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * An {@link net.shibboleth.idp.attribute.resolver.AttributeDefinition} that produces its attribute values by taking the
  * first group match of a regular expression evaluating against the values of this definition's dependencies.
@@ -73,8 +72,7 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
      * @param expression regular expression used to split input values
      */
     public void setRegularExpression(@Nonnull final Pattern expression) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         regexp = Constraint.isNotNull(expression, "Regular expression cannot be null");
     }
@@ -85,8 +83,7 @@ public class RegexSplitAttributeDefinition extends AbstractAttributeDefinition {
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
         Constraint.isNotNull(workContext, "AttributeResolverWorkContext cannot be null");
 
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
 
         final List<IdPAttributeValue> resultantValues = new ArrayList<>();
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
index 4f6f45a3e..915bf15c8 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScopedAttributeDefinition.java
@@ -45,7 +45,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
@@ -83,8 +82,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
      * @param newScope what to set.
      */
     public void setScope(@Nonnull @NotEmpty final String newScope) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         scope = Constraint.isNotNull(StringSupport.trimOrNull(newScope), "Scope can not be null or empty");
     }
@@ -104,8 +102,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
      * @param attributeId what to set.
      */
     public void setScopeSource(@Nonnull @NotEmpty final String attributeId) {
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         scopeSource = Constraint.isNotNull(
                 StringSupport.trimOrNull(attributeId), "ScopeSource can not be null or empty");
@@ -135,7 +132,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
             throw new ResolutionException("Exactly one value for scope source required");
         }
         final IdPAttributeValue value = values.get(0);
-        if ((value instanceof StringAttributeValue) && !(value instanceof ScopedStringAttributeValue)) {
+        if (value instanceof StringAttributeValue && !(value instanceof ScopedStringAttributeValue)) {
             return ((StringAttributeValue) value).getValue();
         }
         log.error("{} Attribute {} must return a StringAttributeValue returned a {}", getLogPrefix(),
@@ -148,8 +145,7 @@ public class ScopedAttributeDefinition extends AbstractAttributeDefinition {
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
 
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         final IdPAttribute resultantAttribute = new IdPAttribute(getId());
         final String scopeValue;
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 f305f184b..5e7c1f1ac 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
@@ -44,7 +44,6 @@ import net.shibboleth.idp.attribute.resolver.scripted.ResolverScriptContextExten
 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;
@@ -110,9 +109,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
      * @param object the custom object
      */
     @Nullable public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         customObject = object;
     }
 
@@ -131,9 +128,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
      * @param definitionScript the script to be evaluated
      */
     public void setScript(@Nonnull final EvaluableScript definitionScript) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         script = Constraint.isNotNull(definitionScript, "Attribute definition script cannot be null");
     }
 
@@ -146,9 +141,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
      */
     @Nullable public void setScriptContextExtenders(
             @Nullable @NonnullElements final Collection<ResolverScriptContextExtender> extenders) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         if (extenders != null) {
             contextExtenders = List.copyOf(extenders);
         } else {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
index 57b2b1ff6..c38ff3f4f 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/StaticAttributeDefinition.java
@@ -21,6 +21,9 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -28,10 +31,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** An attribute definition that simply returns a static value. */
 @ThreadSafe
@@ -49,8 +48,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
      * @param newAttribute what to set.
      */
     public void setValue(@Nullable final IdPAttribute newAttribute) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         value = newAttribute;
     }
@@ -68,8 +66,7 @@ public class StaticAttributeDefinition extends AbstractAttributeDefinition {
     @Override @Nonnull protected IdPAttribute doAttributeDefinitionResolve(
             final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         log.debug("{} resolving static attribute {}", getLogPrefix(), value);
 
         return value;
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
index ec8a344e8..e34f93546 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/TemplateAttributeDefinition.java
@@ -47,7 +47,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.utilities.java.support.collection.LazyMap;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.velocity.Template;
@@ -100,8 +99,7 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
      * @param velocityTemplate template to be evaluated
      */
     public void setTemplateText(@Nullable final String velocityTemplate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         templateText = StringSupport.trimOrNull(velocityTemplate);
     }
@@ -121,8 +119,7 @@ public class TemplateAttributeDefinition extends AbstractAttributeDefinition {
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(@Nonnull final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         engine = Constraint.isNotNull(velocityEngine, "VelocityEngine cannot be null");
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index c0943743a..4e936652c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -45,7 +45,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContex
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
@@ -89,8 +88,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * @param mappings functions used to map an input value to an output value
      */
     public void setValueMaps(@Nullable @NonnullElements final Collection<ValueMap> mappings) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         valueMaps = mappings != null ? Set.copyOf(mappings) : Collections.emptySet();
     }
@@ -122,8 +120,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * @param newDefaultValue the default return value
      */
     public void setDefaultValue(@Nullable final String newDefaultValue) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         final String trimmedDefault = StringSupport.trimOrNull(newDefaultValue);
         if (null == trimmedDefault) {
             defaultValue = null;
@@ -147,8 +144,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * @param newPassThru whether the definition passes unmatched values unchanged or suppresses them.
      */
     public void setPassThru(final boolean newPassThru) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         passThru = newPassThru;
     }
 
@@ -192,8 +188,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
     @Override @Nullable protected IdPAttribute doAttributeDefinitionResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         Constraint.isNotNull(resolutionContext, "Attribute resolution context can not be null");
 
         final List<IdPAttributeValue> unmappedResults =
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
index f00fc3a6e..2099f9394 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/SourceValue.java
@@ -26,7 +26,6 @@ import com.google.common.base.MoreObjects;
 
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
@@ -75,7 +74,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * @param theCaseSensitive whether case should be ignored when matching.  Null taken as default;
      */
     public void setCaseSensitive(final boolean theCaseSensitive) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         caseSensitive = theCaseSensitive;
     }
 
@@ -96,7 +95,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * @deprecated in V4 - use setCaseSensitive
      */
     @Deprecated public void setIgnoreCase(final boolean theIgnoreCase) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         DeprecationSupport.warnOnce(ObjectType.METHOD, "setIgnoreCase", null, "setCaseSensitive");
             setCaseSensitive(!theIgnoreCase);
     }
@@ -119,7 +118,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * @param thePartialMatch whether partial matches should be allowed.  Null defaults to false;
      */
     public void setPartialMatch(final boolean thePartialMatch) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         partialMatch = thePartialMatch;
     }
     
@@ -138,7 +137,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * @param theValue value string This may contain regular expressions.
      */
     public void setValue(@Nullable final String theValue) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         value = StringSupport.trimOrNull(theValue);
     }
     
@@ -159,7 +158,7 @@ public class SourceValue extends AbstractInitializableComponent {
      * @return Returns the pattern.
      */
     @Nonnull public Pattern getPattern() {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         Constraint.isFalse(isPartialMatch(), "getPattern is only meaningful for a non partial Match, use getValue()");
         return pattern;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index c36f3c668..aeeb608e4 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -47,7 +47,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
@@ -93,8 +92,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      * @param headers map of headers
      */
     public void setHeaders(@Nonnull @NonnullElements final Map<String,String> headers) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
                 
         Constraint.isNotNull(headers, "Map of headers cannot be null");
         
@@ -130,8 +128,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
      * @param params client security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         httpClientSecurityParameters = params;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index 56813bac1..3045a6aed 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -31,6 +31,7 @@ import org.apache.http.client.HttpClient;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
@@ -40,7 +41,6 @@ import net.shibboleth.idp.attribute.resolver.dc.http.HTTPSearch;
 import net.shibboleth.idp.attribute.resolver.dc.impl.AbstractSearchDataConnector;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -79,8 +79,7 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
      * @param client client to use
      */
     public void setHttpClient(@Nonnull final HttpClient client) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
     }
@@ -91,8 +90,7 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
      * @param params the new client security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         httpClientSecurityParameters = params;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
index cc85980c9..767dead9d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedBodyBuilder.java
@@ -24,17 +24,6 @@ import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.resolver.ResolutionException;
-import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.velocity.Template;
-
 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
@@ -51,6 +40,16 @@ import com.google.common.escape.Escaper;
 import com.google.common.net.UrlEscapers;
 import com.google.common.xml.XmlEscapers;
 
+import net.shibboleth.idp.attribute.IdPAttributeValue;
+import net.shibboleth.idp.attribute.resolver.ResolutionException;
+import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.utilities.java.support.velocity.Template;
+
 /**
  * An {@link net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder} that generates a
  * request by evaluating {@link Template}s against the currently resolved attributes within an
@@ -167,8 +166,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param text template to be evaluated
      */
     public void setURLTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         urlTemplateText = StringSupport.trimOrNull(text);
     }
@@ -188,8 +186,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param text template to be evaluated
      */
     public void setBodyTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         bodyTemplateText = StringSupport.trimOrNull(text);
     }
@@ -209,8 +206,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param text template to be evaluated
      */
     public void setCacheKeyTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         cacheKeyTemplateText = StringSupport.trimOrNull(text);
     }
@@ -230,8 +226,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(@Nonnull final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         engine = Constraint.isNotNull(velocityEngine, "Velocity engine cannot be null");
     }
@@ -244,8 +239,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param m method
      */
     public void setMethod(@Nonnull @NotEmpty final String m) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         method = Constraint.isNotNull(StringSupport.trimOrNull(m), "HTTP method cannot be null or empty");
         Constraint.isTrue(HttpPost.METHOD_NAME.equals(method) || HttpPut.METHOD_NAME.equals(method),
@@ -260,8 +254,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param type MIME type
      */
     public void setMIMEType(@Nonnull @NotEmpty final String type) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         mimeType = Constraint.isNotNull(StringSupport.trimOrNull(type), "MIME type cannot be null or empty");
     }
@@ -272,8 +265,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param c character set
      */
     public void setCharacterSet(@Nullable final String c) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         charset = StringSupport.trimOrNull(c);
     }
@@ -284,8 +276,7 @@ public class TemplatedBodyBuilder extends AbstractHTTPSearchBuilder {
      * @param object the custom object
      */
     public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         customObject = object;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index 04abe6220..4f5c7ae90 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -24,26 +24,25 @@ import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.VelocityException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.escape.Escaper;
+import com.google.common.net.UrlEscapers;
+
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.velocity.Template;
 
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.exception.VelocityException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.escape.Escaper;
-import com.google.common.net.UrlEscapers;
-
 /**
  * An {@link net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder} that generates the URL to
  * request by evaluating a {@link Template} against the currently resolved attributes within an
@@ -106,8 +105,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
      * @param text template to be evaluated
      */
     public void setTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         templateText = StringSupport.trimOrNull(text);
     }
@@ -127,8 +125,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(@Nonnull final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         engine = Constraint.isNotNull(velocityEngine, "Velocity engine cannot be null");
     }
@@ -140,8 +137,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
      * @param object the custom object
      */
     public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         customObject = object;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
index 4d51ebf15..f289d5b8f 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
@@ -24,6 +24,11 @@ import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.cache.Cache;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.AbstractDataConnector;
@@ -37,14 +42,8 @@ import net.shibboleth.idp.attribute.resolver.dc.MappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.Validator;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 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 org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.cache.Cache;
-
 /**
  * A {@link net.shibboleth.idp.attribute.resolver.DataConnector} containing functionality common to data connectors that
  * retrieve attribute data by searching a data source.
@@ -88,9 +87,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
      * @param builder builder used to create the executable searches
      */
     public void setExecutableSearchBuilder(@Nonnull final ExecutableSearchBuilder<T1> builder) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         searchBuilder = Constraint.isNotNull(builder, "Executable search builder cannot be null");
     }
 
@@ -109,9 +106,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
      * @param validator used to validate this connector
      */
     public void setValidator(@Nonnull final Validator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         connectorValidator = Constraint.isNotNull(validator, "Validator cannot be null");
     }
 
@@ -130,9 +125,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
      * @param strategy strategy for mapping from search results to a collection of {@link IdPAttribute}s
      */
     public void setMappingStrategy(@Nonnull final T2 strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         mappingStrategy = Constraint.isNotNull(strategy, "Mapping strategy cannot be null");
     }
 
@@ -151,9 +144,6 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
      * @param cache cache used to cache search results
      */
     public void setResultsCache(@Nullable final Cache<String,Map<String,IdPAttribute>> cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
         if (cache != null) {
             cache.invalidateAll();
         }
@@ -176,7 +166,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
     @Override @Nullable protected Map<String, IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         final Map<String, List<IdPAttributeValue>> dependsAttributes =
                 PluginDependencySupport.getAllAttributeValues(workContext,
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
index eea1281a4..8dad4d2f4 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/PairwiseIdDataConnector.java
@@ -45,7 +45,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
@@ -75,7 +74,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
      * @return source attribute ID
      */
     @Nullable @NonnullAfterInit public String getSourceAttributeInformation() {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         return sourceInformation;
     }
 
@@ -94,7 +93,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
      * @param newAttributeId what to set.
      */
     public void setGeneratedAttributeId(@Nullable final String newAttributeId) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         generatedAttribute = newAttributeId;
     }
@@ -114,7 +113,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
      * @param store ID store
      */
     public void setPairwiseIdStore(@Nonnull final PairwiseIdStore store) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         pidStore = Constraint.isNotNull(store, "PairwiseIdStore cannot be null");
     }
@@ -191,8 +190,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
      * @return the value, or null in any of the failure cases.
      */
     @Nullable protected String resolveSourceAttribute(@Nonnull final AttributeResolverWorkContext workContext) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
 
         final List<IdPAttributeValue> attributeValues =
                 PluginDependencySupport.getMergedAttributeValues(workContext,
@@ -244,7 +242,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
 
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         final String principalName = resolutionContext.getPrincipal();
         if (Strings.isNullOrEmpty(principalName)) {
@@ -297,7 +295,7 @@ public class PairwiseIdDataConnector extends AbstractDataConnector {
      * @return null or the attribute.
      */
     @Nullable protected Map<String, IdPAttribute> encodeAsAttribute(@Nullable final String value) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         if (null == value) {
             // The message will have been logged above
             return null;
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 d2b9c21d5..a1fe10c9e 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
@@ -47,7 +47,6 @@ import net.shibboleth.idp.attribute.resolver.scripted.ResolverScriptContextExten
 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;
@@ -95,9 +94,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
      * @param object the custom object
      */
     @Nullable public void setCustomObject(final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         customObject = object;
     }
 
@@ -116,9 +113,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
      * @param definitionScript the script to be evaluated
      */
     public void setScript(@Nonnull final EvaluableScript definitionScript) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         script = Constraint.isNotNull(definitionScript, "Attribute definition script cannot be null");
     }
 
@@ -131,9 +126,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
      */
     @Nullable public void setScriptContextExtenders(
             @Nullable @NonnullElements final Collection<ResolverScriptContextExtender> extenders) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         if (extenders != null) {
             contextExtenders = List.copyOf(extenders);
         } else {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
index 0edd9ff14..8a7519ff4 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
@@ -37,7 +37,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -68,8 +67,7 @@ public class StaticDataConnector extends AbstractDataConnector {
      * @param newValues static values returned by this connector
      */
     public void setValues(@Nonnull @NonnullElements final Collection<IdPAttribute> newValues) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(newValues, "Values must not be null");
 
@@ -86,8 +84,7 @@ public class StaticDataConnector extends AbstractDataConnector {
     @Nonnull protected Map<String, IdPAttribute> doDataConnectorResolve(
             @Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         log.trace("{} Resolved attributes: {}", getLogPrefix(), attributes);
         return attributes;
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
index f0123d613..65df5774d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
@@ -29,7 +29,6 @@ import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
 import net.shibboleth.idp.attribute.resolver.dc.Validator;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -67,7 +66,7 @@ public class ConnectionFactoryValidator extends AbstractInitializableComponent i
      * @param factory the connection factory
      */
     @Nonnull public void setConnectionFactory(@Nonnull final ConnectionFactory factory) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         connectionFactory = Constraint.isNotNull(factory, "Connection factory must be non-null");
     }
 
@@ -83,7 +82,7 @@ public class ConnectionFactoryValidator extends AbstractInitializableComponent i
 
     /** {@inheritDoc} */
     public void setThrowValidateError(final boolean what) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         throwOnValidateError = what;
     }
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
index 68b829ff0..6d88548fc 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
@@ -44,7 +44,6 @@ import net.shibboleth.idp.attribute.resolver.dc.ldap.ExecutableSearchFilter;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.SearchResultMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.ldap.StringAttributeValueMappingStrategy;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -89,9 +88,7 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
      * @param factory connection factory for retrieving {@link Connection}s
      */
     public void setConnectionFactory(@Nonnull final ConnectionFactory factory) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         connectionFactory = Constraint.isNotNull(factory, "LDAP connection factory can not be null");
     }
 
@@ -110,9 +107,7 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
      * @param executor search executor for executing searches
      */
     public void setSearchExecutor(@Nonnull final SearchExecutor executor) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         searchExecutor = Constraint.isNotNull(executor, "LDAP search executor can not be null");
     }
 
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
index 1ecdfbfb1..df5db5497 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
@@ -31,7 +31,6 @@ import net.shibboleth.idp.attribute.resolver.dc.Validator;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -72,7 +71,7 @@ public class DataSourceValidator extends AbstractInitializableComponent implemen
      * @param source the data source
      */
     public void setDataSource(@Nonnull final DataSource source) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         dataSource =  Constraint.isNotNull(source, "Data Source should not be null");
     }
 
@@ -88,7 +87,7 @@ public class DataSourceValidator extends AbstractInitializableComponent implemen
 
     /** {@inheritDoc} */
     public void setThrowValidateError(final boolean value) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         throwOnValidateError = value;
     }
 
@@ -100,7 +99,7 @@ public class DataSourceValidator extends AbstractInitializableComponent implemen
 
     /** {@inheritDoc} */
     @Override public void validate() throws ValidationException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         
         Connection connection = null;
         try {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
index 75ae12f42..30b03520e 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
@@ -26,6 +26,9 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.sql.DataSource;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
@@ -35,12 +38,8 @@ import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.ResultMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.StringResultMappingStrategy;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * A {@link net.shibboleth.idp.attribute.resolver.DataConnector} that queries a relation database in order to retrieve
  * attribute data.
@@ -80,8 +79,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
      * @param source JDBC data source for retrieving {@link Connection}s
      */
     public void setDataSource(@Nonnull final DataSource source) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         dataSource = Constraint.isNotNull(source, "JDBC data source can not be null");
     }
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
index 0853b16b4..d2b129355 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
@@ -32,6 +32,7 @@ import org.opensaml.storage.StorageRecord;
 import org.opensaml.storage.StorageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.NoResultAnErrorResolutionException;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -42,7 +43,6 @@ import net.shibboleth.idp.attribute.resolver.dc.storage.StorageMappingStrategy;
 import net.shibboleth.idp.attribute.resolver.dc.storage.StorageServiceSearch;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
@@ -88,9 +88,7 @@ public class StorageServiceDataConnector
      * @param service storage service to use
      */
     public void setStorageService(@Nonnull final StorageService service) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         storageService = Constraint.isNotNull(service, "StorageService cannot be null");
     }
     
@@ -109,9 +107,7 @@ public class StorageServiceDataConnector
      * @param flag flag to set
      */
     public void setNoResultAnError(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         noResultAnError = flag;
     }
     
@@ -121,9 +117,7 @@ public class StorageServiceDataConnector
      * @param id what to set.
      */
     public void setGeneratedAttributeID(@Nullable final String id) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         generatedAttributeID = StringSupport.trimOrNull(id);
     }
     
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
index 13e072321..eb0e8f99a 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/TemplatedSearchBuilder.java
@@ -25,6 +25,14 @@ import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.VelocityException;
+import org.opensaml.storage.StorageRecord;
+import org.opensaml.storage.StorageService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
@@ -34,19 +42,10 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.velocity.Template;
 
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.exception.VelocityException;
-import org.opensaml.storage.StorageRecord;
-import org.opensaml.storage.StorageService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * An {@link ExecutableSearchBuilder} that generates the {@link StorageService} context and key
  * using Velocity templates.
@@ -110,9 +109,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
      * @param text template to be evaluated
      */
     public void setContextTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         contextTemplateText = StringSupport.trimOrNull(text);
     }
 
@@ -131,9 +128,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
      * @param text template to be evaluated
      */
     public void setKeyTemplateText(@Nullable final String text) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         keyTemplateText = StringSupport.trimOrNull(text);
     }
 
@@ -152,9 +147,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
      * @param velocityEngine engine to be used
      */
     public void setVelocityEngine(@Nonnull final VelocityEngine velocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         engine = Constraint.isNotNull(velocityEngine, "Velocity engine cannot be null");
     }
     
@@ -164,9 +157,7 @@ public class TemplatedSearchBuilder extends AbstractInitializableComponent
      * @param object the custom object
      */
     public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         customObject = object;
     }
     
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index 730096602..d704747bb 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -114,7 +114,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * @param definitions attribute definitions loaded in to this resolver
      */
     public void setAttributeDefinitions(@Nonnull @NonnullElements final Collection<AttributeDefinition> definitions) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(definitions, "Attribute Defintions should be non-null");
         
         final Map<String, AttributeDefinition> checkedDefinitions = new HashMap<>(definitions.size());
@@ -144,7 +144,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * @param connectors data connectors loaded in to this resolver
      */
     public void setDataConnectors(@Nonnull @NonnullElements  final Collection<DataConnector> connectors){
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(connectors, "Data Connectors should be non-null");
         
         final Map<String, DataConnector> checkedConnectors = new HashMap<>(connectors.size());
@@ -182,8 +182,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * @param doStripNulls what to set 
      */
     public void setStripNulls(final Boolean doStripNulls) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         stripNulls = doStripNulls;
     }
 
@@ -214,8 +213,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      */
     public void setProfileContextLookupStrategy(
             @Nonnull final Function<AttributeResolutionContext,ProfileRequestContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();        
         profileContextStrategy = Constraint.isNotNull(strategy, "ProfileRequestContext lookup strategy cannot be null");
     }
     
@@ -233,8 +231,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
     // CheckStyle: CyclomaticComplexity OFF
     @Override public void resolveAttributes(@Nonnull final AttributeResolutionContext resolutionContext)
             throws ResolutionException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
 
         Constraint.isNotNull(resolutionContext, "Attribute resolution context cannot be null");
 
@@ -666,7 +663,6 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
     /** {@inheritDoc} */
     @SuppressWarnings("removal")
     @Override protected void doInitialize() throws ComponentInitializationException {
-        super.doInitialize();
         
         logPrefix = new StringBuilder("Attribute Resolver '").append(getId()).append("':").toString();
 
@@ -699,6 +695,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
                 ((AbstractResolverPlugin<?>) plugin).setSuppressDisplayInformation(isSuppressDisplayInformation());
             }
         }
+        super.doInitialize();
     }
 
     /**
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
index 4cf476845..a2779d8d7 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/RegexAtributeTest.java
@@ -242,7 +242,7 @@ public class RegexAtributeTest {
         try {
             attrDef.setRegularExpression(TestSources.CONNECTOR_ATTRIBUTE_VALUE_REGEXP_PATTERN);
             fail("setRegExp after destroy");
-        } catch (final UnmodifiableComponentException e) {
+        } catch (final UnmodifiableComponentException | DestroyedComponentException e) {
             // OK
         }
         try {
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
index c0ed518ad..bb4e24628 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/ComputedIDDataConnectorTest.java
@@ -50,7 +50,6 @@ import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImplTest;
 import net.shibboleth.idp.attribute.resolver.testing.ResolverTestSupport;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.component.InitializableComponent;
 
 /**
@@ -181,7 +180,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
     @Test public void altDataConnector() throws ComponentInitializationException, ResolutionException {
         AttributeResolverImpl resolver = constructResolver(1);
         connectorFromResolver(resolver).initialize();
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
 
         AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
@@ -199,7 +198,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         //
         resolver = constructResolver(3);
         connectorFromResolver(resolver).initialize();
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
 
         context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
@@ -217,7 +216,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         resolver = constructResolver(1);
 
         connectorFromResolver(resolver).initialize();
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
 
         context = TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID, "foo");
         resolver.resolveAttributes(context);
@@ -255,7 +254,7 @@ public class ComputedIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
 
         final AttributeResolverImpl resolver =
                 AttributeResolverImplTest.newAttributeResolverImpl("atresolver", Collections.singleton((AttributeDefinition) simple), set);
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
 
         final AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
index 9c26ac849..8a4ada024 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/StoredIDDataConnectorTest.java
@@ -41,7 +41,6 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
 import net.shibboleth.idp.attribute.resolver.testing.TestSources;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.testing.DatabaseTestingSupport;
 
 /**
@@ -91,7 +90,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
     @Test(dependsOnMethods={"noSalt",}) public void storeEntry() throws ComponentInitializationException, SQLException, ResolutionException {
         final AttributeResolverImpl resolver = constructResolver(1);
 
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
         
         ComputedIDDataConnectorTest.connectorFromResolver(resolver).initialize();
 
@@ -120,7 +119,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
     @Test public void noSalt() throws ComponentInitializationException, SQLException, ResolutionException {
         final AttributeResolverImpl resolver = constructResolver(1, true);
 
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
         ComputedIDDataConnectorTest.connectorFromResolver(resolver).initialize();
 
         final AttributeResolutionContext context =
@@ -163,7 +162,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
         AttributeResolverImpl resolver = constructResolver(1);
 
         ComputedIDDataConnectorTest.connectorFromResolver(resolver).initialize();
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
 
         AttributeResolutionContext context =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
@@ -184,7 +183,7 @@ public class StoredIDDataConnectorTest extends OpenSAMLInitBaseTestCase {
 
         
         final PairwiseIdDataConnector connector = ComputedIDDataConnectorTest.connectorFromResolver(resolver);
-        ComponentSupport.initialize(resolver);
+        resolver.initialize();
         connector.initialize();
         
         final PairwiseId pid = new PairwiseId();
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
index c403c9853..ad5eaa638 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
@@ -26,6 +26,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.XSString;
+import org.opensaml.saml.saml2.core.Assertion;
+import org.opensaml.saml.saml2.core.Attribute;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
@@ -36,14 +43,6 @@ 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.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.core.xml.schema.XSString;
-import org.opensaml.saml.saml2.core.Assertion;
-import org.opensaml.saml.saml2.core.Attribute;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Data Connector to extra attributes from a saml2 {@link Assertion}. It is hoped that this connector will eventually
@@ -75,7 +74,7 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
      * @param strategy to set.
      */
     public void setAttributesStrategy(Function<AttributeResolutionContext, List<Attribute>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         attributesStrategy = strategy;
     }
 

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


More information about the commits mailing list