[java-opensaml] 06/14: JSPT-98 Integrate lifecycle checking methods in base classes

Rod Widdowson rdw at steadingsoftware.com
Mon Jun 13 19:42:37 UTC 2022


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

rdw pushed a commit to branch dev/JSPT-98
in repository java-opensaml.

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

commit ca6d9ecec3bf37b2892808e8a1dbf223cb8900f8
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Jun 12 15:36:20 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: saml-impl
---
 .../artifact/impl/BasicSAMLArtifactMap.java        | 19 ++++----
 .../impl/StorageServiceSAMLArtifactMap.java        | 20 ++++----
 .../StorageServiceSAMLArtifactMapEntryFactory.java | 21 ++++-----
 .../impl/AddChannelBindingsHeaderHandler.java      |  7 ++-
 .../binding/impl/CheckMessageVersionHandler.java   |  5 +-
 .../PopulateSignatureSigningParametersHandler.java | 18 +++-----
 .../binding/impl/SAMLMetadataLookupHandler.java    | 24 ++++------
 .../binding/impl/SAMLProtocolAndRoleHandler.java   |  4 +-
 .../BaseSAMLSimpleSignatureSecurityHandler.java    |  3 +-
 ...ecordServerTLSEntityAuthenticationtHandler.java |  7 ++-
 .../impl/MessageLifetimeSecurityHandler.java       | 11 ++---
 .../impl/MessageReplaySecurityHandler.java         | 18 ++++----
 .../impl/ReceivedEndpointSecurityHandler.java      |  7 +--
 .../impl/SAMLMDClientCertAuthSecurityHandler.java  | 11 ++---
 .../SAMLOutboundProtocolMessageSigningHandler.java |  5 +-
 ...ProtocolMessageXMLSignatureSecurityHandler.java |  4 +-
 .../impl/AddAudienceRestrictionToAssertions.java   | 21 ++++-----
 .../profile/impl/AddInResponseToToResponse.java    | 20 ++++----
 .../impl/AddNotBeforeConditionToAssertions.java    |  8 ++--
 .../impl/AddNotOnOrAfterConditionToAssertions.java | 13 ++----
 .../impl/PopulateSignatureSigningParameters.java   | 19 +++-----
 .../saml/common/profile/impl/SignAssertions.java   | 13 ++----
 .../common/profile/impl/VerifyChannelBindings.java | 16 +++----
 .../resolver/filter/impl/AlgorithmFilter.java      | 15 +++---
 .../filter/impl/EntityAttributesFilter.java        | 14 +++---
 .../resolver/filter/impl/NameIDFormatFilter.java   | 19 ++++----
 .../filter/impl/NodeProcessingMetadataFilter.java  | 16 +++----
 .../impl/AbstractBatchMetadataResolver.java        | 13 ++----
 .../impl/AbstractDynamicHTTPMetadataResolver.java  |  8 +---
 .../impl/AbstractDynamicMetadataResolver.java      | 51 +++++++-------------
 .../resolver/impl/AbstractMetadataResolver.java    | 54 +++++++++-------------
 .../impl/AbstractReloadingMetadataResolver.java    | 20 +++-----
 .../resolver/impl/CompositeMetadataResolver.java   | 24 +++++-----
 .../impl/FileBackedHTTPMetadataResolver.java       | 18 +++-----
 .../resolver/impl/FilesystemMetadataResolver.java  | 10 ++--
 .../FunctionDrivenDynamicHTTPMetadataResolver.java |  4 +-
 .../resolver/impl/HTTPMetadataResolver.java        |  8 ++--
 .../impl/PredicateRoleDescriptorResolver.java      | 21 +++------
 .../binding/encoding/impl/HTTPArtifactEncoder.java |  4 +-
 .../binding/encoding/impl/HTTPPostEncoder.java     |  7 +--
 .../impl/AddDoNotCacheConditionToAssertions.java   | 10 ++--
 .../profile/impl/AddNameIdentifierToSubjects.java  | 26 ++++-------
 .../saml/saml1/profile/impl/AddResponseShell.java  | 15 +++---
 .../saml1/profile/impl/AddStatusToResponse.java    | 37 ++++++---------
 .../impl/AddSubjectConfirmationToSubjects.java     | 22 ++++-----
 .../impl/CopyNameIdentifierFromRequest.java        | 21 ++++-----
 .../saml/saml1/profile/impl/ResolveArtifacts.java  | 19 ++++----
 .../binding/decoding/impl/HTTPArtifactDecoder.java | 28 ++++-------
 .../binding/encoding/impl/HTTPArtifactEncoder.java | 18 +++-----
 .../binding/encoding/impl/HTTPPostEncoder.java     |  7 +--
 .../impl/ExtractChannelBindingsHeadersHandler.java |  6 +--
 .../SAML2HTTPPostSimpleSignSecurityHandler.java    |  5 +-
 .../saml2/profile/impl/AbstractDecryptAction.java  | 15 +++---
 .../saml2/profile/impl/AbstractEncryptAction.java  | 24 +++++-----
 .../profile/impl/AbstractResponseShellAction.java  | 15 +++---
 .../impl/AddChannelBindingsToAssertions.java       | 11 ++---
 .../profile/impl/AddGeneratedKeyToAssertions.java  | 15 +++---
 .../saml2/profile/impl/AddNameIDToSubjects.java    | 36 +++++++--------
 .../impl/AddOneTimeUseConditionToAssertions.java   |  9 ++--
 .../impl/AddProxyRestrictionToAssertions.java      | 18 ++++----
 .../saml2/profile/impl/AddStatusResponseShell.java | 19 ++++----
 .../saml2/profile/impl/AddStatusToResponse.java    | 30 ++++++------
 .../impl/AddSubjectConfirmationToSubjects.java     | 34 +++++++-------
 .../saml2/profile/impl/CopyNameIDFromRequest.java  | 18 ++++----
 .../saml/saml2/profile/impl/EncryptAssertions.java |  9 ++--
 .../saml/saml2/profile/impl/EncryptAttributes.java |  9 ++--
 .../saml/saml2/profile/impl/EncryptNameIDs.java    | 13 +++---
 .../saml2/profile/impl/PopulateECPContext.java     | 13 +++---
 .../saml/saml2/profile/impl/ResolveArtifact.java   | 19 ++++----
 .../saml2/profile/impl/ValidateAssertions.java     | 19 +++-----
 ...ecuritySAML20AssertionTokenSecurityHandler.java | 16 ++-----
 .../security/impl/MetadataCredentialResolver.java  | 49 ++++++++++++++------
 72 files changed, 505 insertions(+), 700 deletions(-)

diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/BasicSAMLArtifactMap.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/BasicSAMLArtifactMap.java
index 4cf111c6b..60391f72d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/BasicSAMLArtifactMap.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/BasicSAMLArtifactMap.java
@@ -29,20 +29,19 @@ import java.util.concurrent.ConcurrentHashMap;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.saml.common.SAMLObject;
+import org.opensaml.saml.common.binding.artifact.ExpiringSAMLArtifactMapEntry;
+import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 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.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.TimerSupport;
 
-import org.opensaml.saml.common.SAMLObject;
-import org.opensaml.saml.common.binding.artifact.ExpiringSAMLArtifactMapEntry;
-import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /** Basic artifact map implementation. */
 public class BasicSAMLArtifactMap extends AbstractInitializableComponent implements
         SAMLArtifactMap {
@@ -123,7 +122,7 @@ public class BasicSAMLArtifactMap extends AbstractInitializableComponent impleme
      * @param lifetime artifact entry lifetime
      */
     public void setArtifactLifetime(@Nonnull final Duration lifetime) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(lifetime, "Lifetime cannot be null");
         Constraint.isFalse(lifetime.isNegative() || lifetime.isZero(), "Lifetime must be positive");
         
@@ -136,7 +135,7 @@ public class BasicSAMLArtifactMap extends AbstractInitializableComponent impleme
      * @param interval  cleanup interval
      */
     public void setCleanupInterval(@Nonnull final Duration interval) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(interval, "Interval cannot be null");
         Constraint.isFalse(interval.isNegative(), "Interval cannot be negative");
 
@@ -149,7 +148,7 @@ public class BasicSAMLArtifactMap extends AbstractInitializableComponent impleme
      * @param factory map entry factory
      */
     public void setEntryFactory(@Nonnull final SAMLArtifactMapEntryFactory factory) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         entryFactory = Constraint.isNotNull(factory, "SAMLArtifactMapEntryFactory cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
index d83c2c7df..93218b790 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMap.java
@@ -24,22 +24,20 @@ import java.time.Instant;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-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.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 org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap;
-import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap.SAMLArtifactMapEntryFactory;
 import org.opensaml.storage.StorageRecord;
 import org.opensaml.storage.StorageSerializer;
 import org.opensaml.storage.StorageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+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.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /** Artifact map implementation backed by {@link StorageService}. */
 public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponent implements SAMLArtifactMap {
 
@@ -113,7 +111,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
      * @param store the artifact store
      */
     public void setStorageService(@Nonnull final StorageService store) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         artifactStore = Constraint.isNotNull(store, "StorageService cannot be null");
     }
@@ -124,7 +122,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
      * @param lifetime artifact entry lifetime
      */
     public void setArtifactLifetime(@Nonnull final Duration lifetime) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(lifetime, "Lifetime cannot be null");
         Constraint.isFalse(lifetime.isNegative() || lifetime.isZero(), "Lifetime must be positive");
         
@@ -143,7 +141,7 @@ public class StorageServiceSAMLArtifactMap extends AbstractInitializableComponen
      * @param factory map entry factory
      */
     public void setEntryFactory(@Nonnull final SAMLArtifactMapEntryFactory factory) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         Constraint.isTrue(factory != null && factory instanceof StorageSerializer<?>,
                 "SAMLArtifactMapEntryFactory cannot be null and must support the StorageSerializer interface");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMapEntryFactory.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMapEntryFactory.java
index 7a1630678..1e1fe484b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMapEntryFactory.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/artifact/impl/StorageServiceSAMLArtifactMapEntryFactory.java
@@ -23,16 +23,6 @@ import java.io.StringReader;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-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.xml.ElementSupport;
-import net.shibboleth.utilities.java.support.xml.ParserPool;
-import net.shibboleth.utilities.java.support.xml.QNameSupport;
-import net.shibboleth.utilities.java.support.xml.SerializeSupport;
-import net.shibboleth.utilities.java.support.xml.XMLParserException;
-
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLRuntimeException;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -50,6 +40,15 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.xml.ElementSupport;
+import net.shibboleth.utilities.java.support.xml.ParserPool;
+import net.shibboleth.utilities.java.support.xml.QNameSupport;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+
 /**
  * A factory and {@link StorageSerializer} for instances of {@link BasicSAMLArtifactMapEntry}.
  * 
@@ -85,7 +84,7 @@ public class StorageServiceSAMLArtifactMapEntryFactory extends AbstractInitializ
      * @param pool parser pool used to parse serialized data
      */
     public void setParserPool(@Nonnull final ParserPool pool) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         parserPool = Constraint.isNotNull(pool, "ParserPool cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
index f13fa198e..b219c5dd2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandler.java
@@ -22,9 +22,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -39,6 +36,8 @@ import org.opensaml.soap.util.SOAPSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * MessageHandler to add {@link ChannelBindings} headers to an outgoing SOAP envelope.
  */
@@ -65,7 +64,7 @@ public class AddChannelBindingsHeaderHandler extends AbstractMessageHandler {
      */
     public void setChannelBindingsContextLookupStrategy(
             @Nonnull final Function<MessageContext,ChannelBindingsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         channelBindingsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "ChannelBindingsContext lookup strategy cannot be null");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandler.java
index 65ecbf881..e68241e04 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandler.java
@@ -19,8 +19,6 @@ package org.opensaml.saml.common.binding.impl;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
@@ -45,8 +43,7 @@ public class CheckMessageVersionHandler extends AbstractMessageHandler {
      * @param flag  flag to set
      */
     public void setIgnoreMissingOrUnrecognized(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         ignoreMissingOrUnrecognized = flag;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
index c48f396cc..fa5c6e649 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/PopulateSignatureSigningParametersHandler.java
@@ -42,7 +42,6 @@ import org.slf4j.LoggerFactory;
 
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -96,7 +95,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      */
     public void setSecurityParametersContextLookupStrategy(
             @Nonnull final Function<MessageContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         securityParametersContextLookupStrategy = Constraint.isNotNull(strategy,
                 "SecurityParametersContext lookup strategy cannot be null");
@@ -110,8 +109,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      */
     public void setExistingParametersContextLookupStrategy(
             @Nullable final Function<MessageContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         existingParametersContextLookupStrategy = strategy;
     }
     
@@ -122,8 +120,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      */
     public void setMetadataContextLookupStrategy(
             @Nullable final Function<MessageContext,SAMLMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         metadataContextLookupStrategy = strategy;
     }
 
@@ -134,8 +131,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      */
     public void setConfigurationLookupStrategy(
             @Nonnull final Function<MessageContext,List<SignatureSigningConfiguration>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         configurationLookupStrategy = Constraint.isNotNull(strategy,
                 "SignatureSigningConfiguration lookup strategy cannot be null");
     }
@@ -147,8 +143,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      */
     public void setSignatureSigningParametersResolver(
             @Nonnull final SignatureSigningParametersResolver newResolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         resolver = Constraint.isNotNull(newResolver, "SignatureSigningParametersResolver cannot be null");
     }
 
@@ -162,8 +157,7 @@ public class PopulateSignatureSigningParametersHandler extends AbstractMessageHa
      * @since 3.4.0
      */
     public void setNoResultIsError(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         noResultIsError = flag;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandler.java
index 696bac936..8907ab9ec 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandler.java
@@ -24,13 +24,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
-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.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
@@ -49,6 +42,12 @@ import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 /**
  * Handler for inbound SAML protocol messages that attempts to locate SAML metadata for
  * a SAML entity, and attaches it as a {@link SAMLMetadataContext} child of a
@@ -92,8 +91,7 @@ public class SAMLMetadataLookupHandler extends AbstractMessageHandler {
      * @param strategy the strategy function
      */
     public void setCopyContextStrategy(@Nullable final Function<MessageContext, SAMLMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         copyContextStrategy = strategy;
     }
 
@@ -105,8 +103,7 @@ public class SAMLMetadataLookupHandler extends AbstractMessageHandler {
      * @param clazz the entity context class type
      */
     public void setEntityContextClass(@Nonnull final Class<? extends AbstractSAMLEntityContext> clazz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         entityContextClass = Constraint.isNotNull(clazz, "SAML entity context class may not be null");
     }
 
@@ -116,8 +113,7 @@ public class SAMLMetadataLookupHandler extends AbstractMessageHandler {
      * @param resolver  the resolver to use
      */
     public void setRoleDescriptorResolver(@Nonnull final RoleDescriptorResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         metadataResolver = Constraint.isNotNull(resolver, "RoleDescriptorResolver cannot be null");
     }
     
@@ -134,7 +130,7 @@ public class SAMLMetadataLookupHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     @Override
     protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         final AbstractSAMLEntityContext entityCtx = messageContext.getSubcontext(entityContextClass);
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
index 42764ce56..325518106 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandler.java
@@ -33,7 +33,6 @@ import org.opensaml.saml.common.messaging.context.SAMLProtocolContext;
 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;
 
@@ -81,8 +80,7 @@ public class SAMLProtocolAndRoleHandler extends AbstractMessageHandler {
      * @param clazz the entity context class type
      */
     public void setEntityContextClass(@Nonnull final Class<? extends AbstractSAMLEntityContext> clazz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         entityContextClass = Constraint.isNotNull(clazz, "SAML entity context class may not be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
index c397ef137..0fca9acff 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/BaseSAMLSimpleSignatureSecurityHandler.java
@@ -50,7 +50,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.DecodingException;
 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.resolver.CriteriaSet;
 
@@ -99,7 +98,7 @@ public abstract class BaseSAMLSimpleSignatureSecurityHandler extends AbstractMes
      * @param request The to set.
      */
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         httpServletRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
index ec26c44c5..30f7a2595 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/CheckAndRecordServerTLSEntityAuthenticationtHandler.java
@@ -35,7 +35,6 @@ import org.opensaml.security.httpclient.HttpClientSecurityConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -80,7 +79,7 @@ public class CheckAndRecordServerTLSEntityAuthenticationtHandler extends Abstrac
      */
     public void setHttpClientContextLookup(
             @Nonnull final ContextDataLookupFunction<MessageContext, HttpClientContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         httpClientContextLookup = Constraint.isNotNull(strategy, 
                 "The HttpClientContext lookup strategy may not be null");
     }
@@ -93,7 +92,7 @@ public class CheckAndRecordServerTLSEntityAuthenticationtHandler extends Abstrac
      * @param clazz the entity context class type
      */
     public void setEntityContextClass(@Nonnull final Class<? extends AbstractAuthenticatableSAMLEntityContext> clazz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         entityContextClass = Constraint.isNotNull(clazz, "The SAML entity context class may not be null");
     }
 
@@ -103,7 +102,7 @@ public class CheckAndRecordServerTLSEntityAuthenticationtHandler extends Abstrac
      * @param strategy the new strategy function, or null
      */
     public void setEntityIDLookup(@Nullable final ContextDataLookupFunction<MessageContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         entityIDLookup = strategy;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
index 64088893a..bc4365238 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandler.java
@@ -22,9 +22,6 @@ import java.time.Instant;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
@@ -32,6 +29,8 @@ import org.opensaml.saml.common.messaging.context.SAMLMessageInfoContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Security message handler implementation that checks for validity of SAML message issue instant date and time.
  */
@@ -73,7 +72,7 @@ public class MessageLifetimeSecurityHandler extends AbstractMessageHandler {
      * @param skew clock skew to set
      */
     public void setClockSkew(@Nonnull final Duration skew) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
                 
         clockSkew = Constraint.isNotNull(skew, "Clock skew cannot be null");
     }
@@ -93,7 +92,7 @@ public class MessageLifetimeSecurityHandler extends AbstractMessageHandler {
      * @param lifetime amount of time for which a message is valid
      */
     public synchronized void setMessageLifetime(@Nonnull final Duration lifetime) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(lifetime, "Lifetime cannot be null");
         Constraint.isFalse(lifetime.isNegative(), "Lifetime cannot be negative");
         
@@ -115,7 +114,7 @@ public class MessageLifetimeSecurityHandler extends AbstractMessageHandler {
      * @param required whether this rule is required to be met
      */
     public void setRequiredRule(final boolean required) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         requiredRule = required;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
index afa86702e..ae86f6f39 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandler.java
@@ -22,12 +22,6 @@ import java.time.Instant;
 
 import javax.annotation.Nonnull;
 
-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;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
@@ -37,6 +31,11 @@ import org.opensaml.storage.ReplayCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Security message handler implementation that which checks for replay of SAML messages.
  */
@@ -75,7 +74,7 @@ public class MessageReplaySecurityHandler extends AbstractMessageHandler {
      * @param cache The replayCache to set.
      */
     public void setReplayCache(@Nonnull final ReplayCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         replayCache = Constraint.isNotNull(cache, "ReplayCache cannot be null");
     }
@@ -86,8 +85,7 @@ public class MessageReplaySecurityHandler extends AbstractMessageHandler {
      * @param flag  flag to set
      */
     public void setRequiredRule(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         requiredRule = flag;
     }
 
@@ -106,7 +104,7 @@ public class MessageReplaySecurityHandler extends AbstractMessageHandler {
      * @param exp lifetime of entries
      */
     public void setExpires(@Nonnull final Duration exp) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(exp, "Lifetime cannot be null");
         Constraint.isFalse(exp.isNegative(), "Lifetime cannot be negative");
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
index d3cac8288..25d0a2bca 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
@@ -31,7 +31,6 @@ import jakarta.servlet.http.HttpServletRequest;
 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.net.URIComparator;
 import net.shibboleth.utilities.java.support.net.URIException;
@@ -74,8 +73,7 @@ public class ReceivedEndpointSecurityHandler extends AbstractMessageHandler {
      * @param comparator the new URI comparator to use
      */
     public void setURIComparator(@Nonnull final URIComparator comparator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         uriComparator = Constraint.isNotNull(comparator, "URIComparator cannot be null");
     }
     
@@ -94,8 +92,7 @@ public class ReceivedEndpointSecurityHandler extends AbstractMessageHandler {
      * @param request The to set.
      */
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         httpServletRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
index a40cce6b4..9c389bd49 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandler.java
@@ -20,11 +20,6 @@ package org.opensaml.saml.common.binding.security.impl;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.messaging.context.AbstractAuthenticatableSAMLEntityContext;
@@ -36,6 +31,10 @@ import org.opensaml.security.messaging.impl.BaseClientCertAuthSecurityHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+
 /**
  * SAML specialization of {@link BaseClientCertAuthSecurityHandler} which provides support for X509Credential 
  * trust engine validation based on SAML metadata.
@@ -81,7 +80,7 @@ public class SAMLMDClientCertAuthSecurityHandler extends BaseClientCertAuthSecur
      * @param clazz the entity context class type
      */
     public void setEntityContextClass(@Nonnull final Class<? extends AbstractAuthenticatableSAMLEntityContext> clazz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         entityContextClass = Constraint.isNotNull(clazz, "The SAML entity context class may not be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandler.java
index fbd987c61..202aefb8b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandler.java
@@ -20,8 +20,6 @@ package org.opensaml.saml.common.binding.security.impl;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
@@ -60,8 +58,7 @@ public class SAMLOutboundProtocolMessageSigningHandler extends AbstractMessageHa
      * @param flag  flag to set
      */
     public void setSignErrorResponses(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         signErrorResponses = flag;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandler.java
index a8ae11100..9c4ba267a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandler.java
@@ -20,8 +20,6 @@ package org.opensaml.saml.common.binding.security.impl;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.SignableSAMLObject;
@@ -83,7 +81,7 @@ public class SAMLProtocolMessageXMLSignatureSecurityHandler extends BaseSAMLXMLS
      * @param validator The prevalidator to set.
      */
     public void setSignaturePrevalidator(@Nullable final SignaturePrevalidator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         signaturePrevalidator = validator;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
index 27ef68f4a..52740de3b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertions.java
@@ -23,18 +23,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-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.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml1.core.AudienceRestrictionCondition;
@@ -44,6 +39,9 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action adds an audience restriction condition to every assertion contained in a SAML 1/2
  * response, with the audiences obtained from a lookup function. If the containing Conditions is not present,
@@ -90,8 +88,7 @@ public class AddAudienceRestrictionToAssertions extends AbstractConditionalProfi
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
@@ -103,8 +100,7 @@ public class AddAudienceRestrictionToAssertions extends AbstractConditionalProfi
      *            another one
      */
     public void setAddingAudiencesToExistingRestriction(final boolean addingToExistingRestriction) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         addingAudiencesToExistingRestriction = addingToExistingRestriction;
     }
 
@@ -115,8 +111,7 @@ public class AddAudienceRestrictionToAssertions extends AbstractConditionalProfi
      */
     public void setAudienceRestrictionsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Collection<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         audienceRestrictionsLookupStrategy =
                 Constraint.isNotNull(strategy, "Audience restriction lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
index 9d47543bc..6371e0383 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddInResponseToToResponse.java
@@ -26,19 +26,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.messaging.context.MessageContext;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-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.opensaml.messaging.context.MessageContext;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.messaging.context.SAMLMessageInfoContext;
@@ -47,6 +41,10 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Action that adds the <code>InResponseTo</code> attribute to a response message if a SAML message ID is set on
  * the inbound message context.
@@ -85,8 +83,7 @@ public class AddInResponseToToResponse extends AbstractConditionalProfileAction
      * @param strategy strategy used to locate the message to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
@@ -96,8 +93,7 @@ public class AddInResponseToToResponse extends AbstractConditionalProfileAction
      * @param strategy lookup strategy
      */
     public void setRequestIdLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         requestIdLookupStrategy = Constraint.isNotNull(strategy, "Request ID lookup strategy cannot be null");
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
index 596a5d777..c4ad72012 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotBeforeConditionToAssertions.java
@@ -22,9 +22,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -37,6 +34,8 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that adds the <code>NotBefore</code> attribute to every assertion in a SAML 1/2
  * response message. If the containing Conditions is not present, it will be created.
@@ -66,8 +65,7 @@ public class AddNotBeforeConditionToAssertions extends AbstractConditionalProfil
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
index 3e11122d5..8d92d30d7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/AddNotOnOrAfterConditionToAssertions.java
@@ -24,9 +24,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -39,6 +36,8 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that adds the <code>NotBefore</code> attribute to every assertion in a SAML 1/2
  * response message. If the containing Conditions is not present, it will be created.
@@ -76,8 +75,7 @@ public class AddNotOnOrAfterConditionToAssertions extends AbstractConditionalPro
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
@@ -87,8 +85,7 @@ public class AddNotOnOrAfterConditionToAssertions extends AbstractConditionalPro
      * @param strategy strategy function
      */
     public void setAssertionLifetimeStrategy(@Nullable final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         assertionLifetimeStrategy = strategy;
     }
     
@@ -98,7 +95,7 @@ public class AddNotOnOrAfterConditionToAssertions extends AbstractConditionalPro
      * @param lifetime  default lifetime
      */
     public void setDefaultAssertionLifetime(@Nonnull final Duration lifetime) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(lifetime, "Lifetime cannot be null");
         Constraint.isFalse(lifetime.isNegative(), "Lifetime cannot be negative");
         
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
index e460cc3fc..787ac0335 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/PopulateSignatureSigningParameters.java
@@ -42,7 +42,6 @@ import org.slf4j.LoggerFactory;
 
 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;
 
 /**
@@ -105,8 +104,7 @@ public class PopulateSignatureSigningParameters
      */
     public void setSecurityParametersContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         securityParametersContextLookupStrategy = Constraint.isNotNull(strategy,
                 "SecurityParametersContext lookup strategy cannot be null");
     }
@@ -119,8 +117,7 @@ public class PopulateSignatureSigningParameters
      */
     public void setExistingParametersContextLookupStrategy(
             @Nullable final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         existingParametersContextLookupStrategy = strategy;
     }
     
@@ -131,8 +128,7 @@ public class PopulateSignatureSigningParameters
      */
     public void setMetadataContextLookupStrategy(
             @Nullable final Function<ProfileRequestContext,SAMLMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         metadataContextLookupStrategy = strategy;
     }
 
@@ -143,8 +139,7 @@ public class PopulateSignatureSigningParameters
      */
     public void setConfigurationLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<SignatureSigningConfiguration>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         configurationLookupStrategy = Constraint.isNotNull(strategy,
                 "SignatureSigningConfiguration lookup strategy cannot be null");
     }
@@ -156,8 +151,7 @@ public class PopulateSignatureSigningParameters
      */
     public void setSignatureSigningParametersResolver(
             @Nonnull final SignatureSigningParametersResolver newResolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         resolver = Constraint.isNotNull(newResolver, "SignatureSigningParametersResolver cannot be null");
     }
 
@@ -171,8 +165,7 @@ public class PopulateSignatureSigningParameters
      * @since 3.4.0
      */
     public void setNoResultIsError(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         noResultIsError = flag;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
index 1da6e0738..4280f31a4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/SignAssertions.java
@@ -22,10 +22,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.xml.SerializeSupport;
-
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -46,6 +42,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+
 /**
  * Action that signs assertions in a SAML 1/2 Response returned by a lookup strategy,
  * by default the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -85,8 +84,7 @@ public class SignAssertions extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
 
@@ -97,8 +95,7 @@ public class SignAssertions extends AbstractProfileAction {
      */
     public void setSecurityParametersLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         securityParametersLookupStrategy = Constraint.isNotNull(strategy,
                 "SecurityParameterContext lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
index 644b91c9a..e00b13263 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/profile/impl/VerifyChannelBindings.java
@@ -23,10 +23,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-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.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -40,6 +36,9 @@ import org.opensaml.soap.messaging.context.SOAP11Context;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Action that verifies two sets of {@link ChannelBindings} from two different {@link ChannelBindingsContext}
  * objects obtained via lookup functions, by default from below the inbound message context and from below
@@ -101,8 +100,7 @@ public class VerifyChannelBindings extends AbstractProfileAction {
      */
     public void setChannelBindingsLookupStrategy1(
             @Nonnull final Function<ProfileRequestContext,ChannelBindingsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         channelBindingsLookupStrategy1 = Constraint.isNotNull(strategy,
                 "First ChannelBindingsContext lookup strategy cannot be null");
     }
@@ -114,8 +112,7 @@ public class VerifyChannelBindings extends AbstractProfileAction {
      */
     public void setChannelBindingsLookupStrategy2(
             @Nonnull final Function<ProfileRequestContext,ChannelBindingsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         channelBindingsLookupStrategy2 = Constraint.isNotNull(strategy,
                 "Second ChannelBindingsContext lookup strategy cannot be null");
     }
@@ -127,8 +124,7 @@ public class VerifyChannelBindings extends AbstractProfileAction {
      */
     public void setChannelBindingsCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,ChannelBindingsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         channelBindingsCreationStrategy = Constraint.isNotNull(strategy,
                 "ChannelBindingsContext creation strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
index 5c8256f2a..eb99a5f72 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
@@ -29,12 +29,6 @@ import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-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 org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.MarshallingException;
@@ -62,6 +56,11 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * A filter that adds algorithm extension content to entities in order to drive software
  * behavior based on them.
@@ -99,9 +98,9 @@ public class AlgorithmFilter extends AbstractInitializableComponent implements M
      * @param rules rules to apply
      */
     public void setRules(@Nonnull @NonnullElements final Map<Predicate<EntityDescriptor>,Collection<XMLObject>> rules) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(rules, "Rules map cannot be null");
-        
+
         rules.values().stream()
             .flatMap(Collection::stream)
             .filter(DigestMethod.class::isInstance)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
index 8844a7270..ab1edf459 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
@@ -28,11 +28,6 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-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 org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.MarshallingException;
@@ -54,6 +49,10 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * A filter that adds {@link EntityAttributes} extension content to entities in order to drive software
  * behavior based on them.
@@ -98,7 +97,7 @@ public class EntityAttributesFilter extends AbstractInitializableComponent imple
      * @param rules rules to apply
      */
     public void setRules(@Nonnull @NonnullElements final Map<Predicate<EntityDescriptor>,Collection<Attribute>> rules) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(rules, "Rules map cannot be null");
         
         applyMap = ArrayListMultimap.create(rules.size(), 1);
@@ -120,8 +119,7 @@ public class EntityAttributesFilter extends AbstractInitializableComponent imple
      * @since 3.4.0
      */
     public void setAttributeFilter(@Nullable final Predicate<Attribute> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         attributeFilter = condition;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
index 8180bf6c4..ce28c206d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
@@ -27,12 +27,6 @@ import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-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;
-
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
@@ -52,6 +46,11 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * A filter that adds {@link NameIDFormat} content to entities in order to drive software
  * behavior based on them.
@@ -89,8 +88,7 @@ public class NameIDFormatFilter extends AbstractInitializableComponent implement
      * @param flag flag to set
      */
     public void setRemoveExistingFormats(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         removeExistingFormats = flag;
     }
     
@@ -100,7 +98,7 @@ public class NameIDFormatFilter extends AbstractInitializableComponent implement
      * @param rules rules to apply
      */
     public void setRules(@Nonnull @NonnullElements final Map<Predicate<EntityDescriptor>,Collection<String>> rules) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(rules, "Rules map cannot be null");
         
         applyMap = ArrayListMultimap.create(rules.size(), 1);
@@ -115,8 +113,7 @@ public class NameIDFormatFilter extends AbstractInitializableComponent implement
     @Override
     @Nullable public XMLObject filter(@Nullable final XMLObject metadata, @Nonnull final MetadataFilterContext context)
             throws FilterException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         if (metadata == null) {
             return null;
         }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
index 95dfd010a..a4e0ac3c9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
@@ -23,18 +23,17 @@ import java.util.List;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.Live;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-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 org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.metadata.resolver.filter.MetadataNodeProcessor;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.Live;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * An implementation of {@link MetadataFilter} which applies a {@link MetadataNodeProcessor} to each element node in the
  * metadata document tree. The node processors will be applied in the order of {@link List} provided by
@@ -65,8 +64,7 @@ public class NodeProcessingMetadataFilter extends AbstractInitializableComponent
      * @param newProcessors the new list of processors to set.
      */
     public void setNodeProcessors(@Nonnull @NonnullElements final List<MetadataNodeProcessor> newProcessors) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(newProcessors, "MetadataNodeProcessor list cannot be null");
 
         processors = new ArrayList<>(List.copyOf(newProcessors));
@@ -76,7 +74,7 @@ public class NodeProcessingMetadataFilter extends AbstractInitializableComponent
     @Override
     @Nullable public XMLObject filter(@Nullable final XMLObject metadata, @Nonnull final MetadataFilterContext context)
             throws FilterException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         if (metadata == null) {
             return null;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
index 97af7c223..7b43116d4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractBatchMetadataResolver.java
@@ -18,7 +18,6 @@
 package org.opensaml.saml.metadata.resolver.impl;
 
 import java.time.Instant;
-
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Optional;
@@ -46,7 +45,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
@@ -81,7 +79,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
     
     /** {@inheritDoc} */
     @Override public Iterator<EntityDescriptor> iterator() {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         return Collections.unmodifiableList(getBackingStore().getOrderedDescriptors()).iterator();
     }
 
@@ -100,8 +98,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
      * @param flag true if source should be cached, false otherwise
      */
     protected void setCacheSourceMetadata(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         cacheSourceMetadata = flag; 
     }
     
@@ -120,7 +117,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
      * @param newIndexes the new indexes to set
      */
     public void setIndexes(@Nullable final Set<MetadataIndex> newIndexes) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         if (newIndexes == null) {
             indexes = Collections.emptySet();
         } else {
@@ -145,7 +142,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
      * @param flag true if resolution may be attempted solely via predicates, false if not
      */
     public void setResolveViaPredicatesOnly(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         resolveViaPredicatesOnly = flag;
     }
 
@@ -169,7 +166,7 @@ public abstract class AbstractBatchMetadataResolver extends AbstractMetadataReso
 
     /** {@inheritDoc} */
     @Override @Nonnull public Iterable<EntityDescriptor> resolve(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         
         final EntityIdCriterion entityIdCriterion = criteria.get(EntityIdCriterion.class);
         if (entityIdCriterion != null) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
index 284e3216a..451f5caf9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicHTTPMetadataResolver.java
@@ -56,7 +56,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.LazySet;
 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.net.MediaTypeSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -169,9 +168,7 @@ public abstract class AbstractDynamicHTTPMetadataResolver extends AbstractDynami
      * @param params the security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         httpClientSecurityParameters = params;
     }
     
@@ -208,8 +205,7 @@ public abstract class AbstractDynamicHTTPMetadataResolver extends AbstractDynami
      * @param types the new supported content types to set
      */
     public void setSupportedContentTypes(@Nullable final List<String> types) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         if (types == null) {
             supportedContentTypes = Collections.emptyList();
         } else {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
index e5a18118b..07a290878 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractDynamicMetadataResolver.java
@@ -77,7 +77,6 @@ import net.shibboleth.utilities.java.support.codec.StringDigester;
 import net.shibboleth.utilities.java.support.codec.StringDigester.OutputFormat;
 import net.shibboleth.utilities.java.support.collection.Pair;
 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.primitive.TimerSupport;
@@ -245,8 +244,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param flag true if should init from the cache in the background, false otherwise
      */
     public void setInitializeFromPersistentCacheInBackground(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         initializeFromPersistentCacheInBackground = flag;
     }
 
@@ -273,8 +271,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @since 3.3.0
      */
     public void setBackgroundInitializationFromCacheDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         Constraint.isNotNull(delay, "Delay cannot be null");
         Constraint.isFalse(delay.isNegative(), "Delay cannot be negative");
@@ -298,8 +295,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param manager the cache manager, may be null
      */
     public void setPersistentCacheManager(@Nullable final XMLObjectLoadSaveManager<EntityDescriptor> manager) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         persistentCacheManager = manager;
     }
     
@@ -327,8 +323,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param generator the new generator to set, may be null
      */
     public void setPersistentCacheKeyGenerator(@Nullable final Function<EntityDescriptor, String> generator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         persistentCacheKeyGenerator = generator;
     }
 
@@ -349,8 +344,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param predicate the cache initialization predicate
      */
     public void setInitializationFromCachePredicate(@Nullable final Predicate<EntityDescriptor> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         initializationFromCachePredicate = predicate;
     }
 
@@ -373,8 +367,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param duration the minimum cache duration
      */
     public void setMinCacheDuration(@Nonnull final Duration duration) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(duration, "Duration cannot be null");
         Constraint.isFalse(duration.isNegative(), "Duration cannot be negative");
@@ -401,8 +394,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param duration the maximum cache duration
      */
     public void setMaxCacheDuration(@Nonnull final Duration duration) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(duration, "Duration cannot be null");
         Constraint.isFalse(duration.isNegative(), "Duration cannot be negative");
@@ -429,8 +421,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param duration the negative lookup cache duration
      */
     public void setNegativeLookupCacheDuration(@Nonnull final Duration duration) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(duration, "Duration cannot be null");
         Constraint.isFalse(duration.isNegative(), "Duration cannot be negative");
@@ -457,8 +448,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param factor delay factor used to compute the next refresh time
      */
     public void setRefreshDelayFactor(@Nonnull final Float factor) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         if (factor <= 0 || factor >= 1) {
             throw new IllegalArgumentException("Refresh delay factor must be a number between 0.0 and 1.0, exclusive");
@@ -482,8 +472,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param flag true if idle entity data should be removed, false otherwise
      */
     public void setRemoveIdleEntityData(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         removeIdleEntityData = flag;
     }
 
@@ -508,8 +497,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param max the maximum entity data idle time
      */
     public void setMaxIdleEntityData(@Nonnull final Duration max) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(max, "Max idle time cannot be null");
         Constraint.isFalse(max.isNegative(), "Max idle time cannot be negative");
@@ -532,8 +520,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param threshold the threshold for logging a warning if live metadata will soon expire
      */
     public void setExpirationWarningThreshold(@Nullable final Duration threshold) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         if (threshold == null) {
             expirationWarningThreshold = Duration.ZERO;
@@ -563,8 +550,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param interval the interval to set
      */
     public void setCleanupTaskInterval(@Nonnull final Duration interval) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         Constraint.isNotNull(interval, "Cleanup task interval may not be null");
         Constraint.isFalse(interval.isNegative() || interval.isZero(), "Cleanup task interval must be positive");
@@ -587,8 +573,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param baseName the Metrics base name
      */
     public void setMetricsBaseName(@Nullable final String baseName) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         metricsBaseName = StringSupport.trimOrNull(baseName);
     }
     
@@ -607,9 +592,8 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
      * @param newIndexes the new indexes to set
      */
     public void setIndexes(@Nullable final Set<MetadataIndex> newIndexes) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
+
         if (newIndexes == null) {
             indexes = Collections.emptySet();
         } else {
@@ -657,8 +641,7 @@ public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataRe
     /** {@inheritDoc} */
     @Override
     @Nonnull public Iterable<EntityDescriptor> resolve(@Nonnull final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         
         final Context contextResolve = MetricsSupport.startTimer(timerResolve);
         try {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
index d13596870..9a5649841 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
@@ -31,21 +31,6 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-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.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.CriterionPredicateRegistry;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import net.shibboleth.utilities.java.support.resolver.ResolverSupport;
-import net.shibboleth.utilities.java.support.xml.ParserPool;
-import net.shibboleth.utilities.java.support.xml.QNameSupport;
-
 import org.opensaml.core.criterion.SatisfyAnyCriterion;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -69,6 +54,20 @@ import org.w3c.dom.Document;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
+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.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.CriterionPredicateRegistry;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.utilities.java.support.resolver.ResolverSupport;
+import net.shibboleth.utilities.java.support.xml.ParserPool;
+import net.shibboleth.utilities.java.support.xml.QNameSupport;
+
 /** An abstract, base, implementation of a metadata provider. */
 public abstract class AbstractMetadataResolver extends AbstractIdentifiableInitializableComponent implements
         MetadataResolver {
@@ -126,8 +125,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
 
     /** {@inheritDoc} */
     @Override public void setRequireValidMetadata(final boolean require) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         requireValidMetadata = require;
     }
 
@@ -138,8 +136,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
 
     /** {@inheritDoc} */
     @Override public void setMetadataFilter(@Nullable final MetadataFilter newFilter) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         mdFilter = newFilter;
     }
 
@@ -160,8 +157,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
      * @param failFast whether problems during initialization should cause the provider to fail
      */
     public void setFailFastInitialization(final boolean failFast) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         failFastInitialization = failFast;
     }
 
@@ -180,8 +176,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
      * @param pool pool of parsers to use to parse XML
      */
     public void setParserPool(@Nonnull final ParserPool pool) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         parser = Constraint.isNotNull(pool, "ParserPool may not be null");
     }
 
@@ -206,8 +201,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
      * @param flag true if must satisfy all, false otherwise
      */
     public void setSatisfyAnyPredicates(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         satisfyAnyPredicates = flag;
     }
 
@@ -226,8 +220,7 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
      * @param registry the registry instance to use
      */
     public void setCriterionPredicateRegistry(@Nullable final CriterionPredicateRegistry<EntityDescriptor> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         criterionPredicateRegistry = registry;
     }
 
@@ -252,16 +245,13 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
      * @param flag true if should use default registry, false otherwise
      */
     public void setUseDefaultPredicateRegistry(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         useDefaultPredicateRegistry = flag;
     }
 
     /** {@inheritDoc} */
     @Override @Nullable public EntityDescriptor resolveSingle(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwComponentStateExceptions();
         final Iterable<EntityDescriptor> iterable = resolve(criteria);
         if (iterable != null) {
             final Iterator<EntityDescriptor> iterator = iterable.iterator();
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
index 113953862..5bb852a65 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
@@ -41,7 +41,6 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
 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.TimerSupport;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -144,8 +143,7 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
     /** {@inheritDoc} */
     @Override
     protected void setCacheSourceMetadata(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         if (!flag) {
             log.warn("{} Caching of source metadata may not be disabled for reloading metadata resolvers", 
@@ -214,9 +212,8 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
      * @param threshold the threshold for logging a warning if live metadata will soon expire
      */
     public void setExpirationWarningThreshold(@Nonnull final Duration threshold) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
+
         Constraint.isNotNull(threshold, "Expiration warning threshold cannot be null");
         Constraint.isFalse(threshold.isNegative(), "Expiration warning threshold cannot be negative");
         
@@ -238,9 +235,8 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
      * @param delay maximum amount of time between refresh intervals
      */
     public void setMaxRefreshDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
+
         Constraint.isNotNull(delay, "Maximum refresh delay cannot be null");
         Constraint.isFalse(delay.isNegative() || delay.isZero(), "Maximum refresh delay must be greater than 0");
 
@@ -262,8 +258,7 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
      * @param factor delay factor used to compute the next refresh time
      */
     public void setRefreshDelayFactor(final float factor) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         if (factor <= 0 || factor >= 1) {
             throw new IllegalArgumentException("Refresh delay factor must be a number between 0.0 and 1.0, exclusive");
@@ -287,8 +282,7 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
      * @param delay minimum amount of time between refreshes
      */
     public void setMinRefreshDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(delay, "Minimum refresh delay cannot be null");
         Constraint.isFalse(delay.isNegative() || delay.isZero(), "Minimum refresh delay must be greater than 0");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
index 8131da7ff..d23ff8500 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
@@ -25,15 +25,6 @@ import java.util.List;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
-import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
 import org.opensaml.saml.metadata.resolver.ClearableMetadataResolver;
 import org.opensaml.saml.metadata.resolver.MetadataResolver;
 import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
@@ -42,6 +33,14 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 
 /**
  * A {@link MetadataResolver} implementation that answers requests by composing the answers of child
@@ -79,8 +78,7 @@ public class CompositeMetadataResolver extends AbstractIdentifiedInitializableCo
      */
     public void setResolvers(@Nonnull @NonnullElements final List<MetadataResolver> newResolvers) 
             throws ResolverException {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         if (newResolvers == null || newResolvers.isEmpty()) {
             resolvers = Collections.emptyList();
@@ -113,13 +111,13 @@ public class CompositeMetadataResolver extends AbstractIdentifiedInitializableCo
 
     /** {@inheritDoc} */
     @Override public Iterable<EntityDescriptor> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         return new CompositeMetadataResolverIterable(resolvers, criteria);
     }
 
     /** {@inheritDoc} */
     @Override public EntityDescriptor resolveSingle(@Nullable final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         EntityDescriptor metadata = null;
         for (final MetadataResolver resolver : resolvers) {
             metadata = resolver.resolveSingle(criteria);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
index 6220f21a1..dfeb158e9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolver.java
@@ -28,11 +28,6 @@ import java.util.Timer;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-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.resolver.ResolverException;
-
 import org.apache.http.client.HttpClient;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
@@ -43,6 +38,10 @@ import org.w3c.dom.Document;
 
 import com.google.common.io.Files;
 
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 /**
  * An HTTP metadata provider that caches a copy of the retrieved metadata to disk so that, in the event that
  * the metadata may not be pulled from the URL, it may be pulled from disk using the most recently fetched data.
@@ -148,8 +147,7 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
      * @param flag true if should initialize from backup file, false otherwise
      */
     public void setInitializeFromBackupFile(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         initializeFromBackupFile = flag;
     }
@@ -173,8 +171,7 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
      * @param delay the next refresh delay
      */
     public void setBackupFileInitNextRefreshDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         Constraint.isNotNull(delay, "Backup file init next refresh delay cannot be null");
         Constraint.isFalse(delay.isNegative() || delay.isZero(),
@@ -222,8 +219,7 @@ public class FileBackedHTTPMetadataResolver extends HTTPMetadataResolver {
      * @throws ResolverException thrown if the backup file is not read/writable or creatable
      */
     protected void setBackupFile(final String backupFilePath) throws ResolverException {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         final File backingFile = new File(backupFilePath);
         metadataBackupFile = backingFile;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolver.java
index 1c6a26d55..382a0ac3e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolver.java
@@ -26,13 +26,12 @@ import java.util.Timer;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 /**
  * A metadata provider that pulls metadata from a file on the local filesystem.
  * 
@@ -90,8 +89,7 @@ public class FilesystemMetadataResolver extends AbstractReloadingMetadataResolve
      * @throws ResolverException this exception is no longer thrown
      */
     protected void setMetadataFile(@Nonnull final File file) throws ResolverException {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         metadataFile = Constraint.isNotNull(file, "Metadata file cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
index 9825ad93a..e6f423a70 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/FunctionDrivenDynamicHTTPMetadataResolver.java
@@ -27,7 +27,6 @@ import org.apache.http.client.HttpClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
@@ -90,8 +89,7 @@ public class FunctionDrivenDynamicHTTPMetadataResolver extends AbstractDynamicHT
      * @param builder the request URL builder function instance
      */
     public void setRequestURLBuilder(@Nonnull final Function<CriteriaSet, String> builder) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         requestURLBuilder = Constraint.isNotNull(builder, "Request URL builder function was null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
index 1618d9e07..a083f56d1 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolver.java
@@ -26,9 +26,6 @@ import java.util.Timer;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
 import org.apache.http.Header;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
@@ -43,6 +40,8 @@ import org.opensaml.security.httpclient.HttpClientSecuritySupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 /**
  * A metadata provider that pulls metadata using an HTTP GET. Metadata is cached until one of these criteria is met:
  * <ul>
@@ -169,8 +168,7 @@ public class HTTPMetadataResolver extends AbstractReloadingMetadataResolver {
      * @param params the security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         httpClientSecurityParameters = params;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
index b56c61678..93fcf801f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolver.java
@@ -48,7 +48,6 @@ import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.CriterionPredicateRegistry;
@@ -122,9 +121,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
     /** {@inheritDoc} */
     @Override
     public void setRequireValidMetadata(final boolean require) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-
+        throwSetterPreconditionExceptions();
         requireValidMetadata = require;
     }
     
@@ -149,8 +146,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
      * @param flag true if must satisfy all, false otherwise
      */
     public void setSatisfyAnyPredicates(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         satisfyAnyPredicates = flag;
     }
 
@@ -169,8 +165,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
      * @param registry the registry instance to use
      */
     public void setCriterionPredicateRegistry(@Nullable final CriterionPredicateRegistry<RoleDescriptor> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         criterionPredicateRegistry = registry;
     }
 
@@ -195,8 +190,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
      * @param flag true if should use default registry, false otherwise
      */
     public void setUseDefaultPredicateRegistry(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         useDefaultPredicateRegistry = flag;
     }
     
@@ -218,7 +212,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
      * @param flag true if resolution may be attempted solely via predicates, false if not
      */
     public void setResolveViaPredicatesOnly(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         resolveViaPredicatesOnly = flag;
     }
     
@@ -240,8 +234,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
     /** {@inheritDoc} */
     @Override
     @Nullable public RoleDescriptor resolveSingle(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
+        throwComponentStateExceptions();
         final Iterable<RoleDescriptor> iterable = resolve(criteria);
         if (iterable != null) {
             final Iterator<RoleDescriptor> iterator = iterable.iterator();
@@ -255,7 +248,7 @@ public class PredicateRoleDescriptorResolver extends AbstractIdentifiedInitializ
     /** {@inheritDoc} */
     @Override
     @Nonnull public Iterable<RoleDescriptor> resolve(final CriteriaSet criteria) throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         
         final Iterable<EntityDescriptor> entityDescriptorsSource = entityDescriptorResolver.resolve(criteria);
         if (!entityDescriptorsSource.iterator().hasNext()) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
index 23ba96990..763121abd 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -48,7 +48,6 @@ import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.EncodingException;
 import net.shibboleth.utilities.java.support.collection.Pair;
 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.net.URLBuilder;
 
@@ -92,8 +91,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * @param newArtifactMap the new artifactMap 
      */
     public void setArtifactMap(@Nonnull final SAMLArtifactMap newArtifactMap) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         artifactMap = Constraint.isNotNull(newArtifactMap, "SAMLArtifactMap cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
index 04ccdb715..35483542f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
@@ -37,7 +37,6 @@ import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.EncodingException;
 import net.shibboleth.utilities.java.support.codec.HTMLEncoder;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.net.HttpServletSupport;
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
@@ -84,8 +83,7 @@ public class HTTPPostEncoder extends BaseSAML1MessageEncoder {
      * @param newVelocityEngine the new VelocityEngine instane
      */
     public void setVelocityEngine(final VelocityEngine newVelocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         velocityEngine = newVelocityEngine;
     }
     
@@ -108,8 +106,7 @@ public class HTTPPostEncoder extends BaseSAML1MessageEncoder {
      * @param newVelocityTemplateId the new Velocity template id
      */
     public void setVelocityTemplateId(final String newVelocityTemplateId) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         velocityTemplateId = newVelocityTemplateId;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
index ba0cff9a8..c0596b12b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddDoNotCacheConditionToAssertions.java
@@ -23,16 +23,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml1.core.Assertion;
 import org.opensaml.saml.saml1.core.Conditions;
@@ -42,6 +39,8 @@ import org.opensaml.saml.saml1.profile.SAML1ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action to add a {@link DoNotCacheCondition} to every {@link Assertion} in a {@link Response} message.
  * If the containing {@link Conditions} is not present, it will be created.
@@ -71,8 +70,7 @@ public class AddDoNotCacheConditionToAssertions extends AbstractConditionalProfi
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext, Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
index 1a1e9bf87..0e549fdf9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjects.java
@@ -24,16 +24,9 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.context.ProfileRequestContext;
-
-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 org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLException;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.profile.logic.MetadataNameIdentifierFormatStrategy;
@@ -47,6 +40,11 @@ import org.opensaml.saml.saml1.profile.SAML1NameIdentifierGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+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.logic.Constraint;
+
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
  * in all the assertions found via a lookup strategy, by default from the outbound message context.
@@ -111,8 +109,7 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         overwriteExisting = flag;
     }
     
@@ -122,8 +119,7 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setAssertionsLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<Assertion>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         assertionsLookupStrategy = Constraint.isNotNull(strategy, "Assertions lookup strategy cannot be null");
     }
 
@@ -133,8 +129,7 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
      * @param strategy  format lookup strategy
      */
     public void setFormatLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         formatLookupStrategy = Constraint.isNotNull(strategy, "Format lookup strategy cannot be null");
     }
 
@@ -144,8 +139,7 @@ public class AddNameIdentifierToSubjects extends AbstractProfileAction {
      * @param theGenerator the generator to use
      */
     public void setNameIdentifierGenerator(@Nonnull final SAML1NameIdentifierGenerator theGenerator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         generator = Constraint.isNotNull(theGenerator, "SAML1NameIdentifierGenerator cannot be null");
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
index 36247712a..a8274a499 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
@@ -23,11 +23,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
-
 import org.opensaml.core.xml.XMLObjectBuilderFactory;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.MessageContext;
@@ -43,6 +38,10 @@ import org.opensaml.saml.saml1.core.StatusCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+
 /**
  * Action that creates an empty {@link Response}, and sets it as the
  * message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -82,8 +81,7 @@ public class AddResponseShell extends AbstractProfileAction {
      * @param flag flag to set
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         overwriteExisting = flag;
     }
     
@@ -94,8 +92,7 @@ public class AddResponseShell extends AbstractProfileAction {
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
index 91cfbe2cc..f5669584a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponse.java
@@ -29,6 +29,8 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
@@ -36,15 +38,6 @@ import org.opensaml.profile.context.EventContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.CurrentOrPreviousEventLookup;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-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.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Status;
@@ -55,6 +48,11 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Action that sets {@link Status} content in a {@link Response} obtained from
  * a lookup strategy, typically from the outbound message context.
@@ -110,8 +108,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param condition predicate for detailed errors condition
      */
     public void setDetailedErrorsCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         detailedErrorsCondition =
                 Constraint.isNotNull(condition, "Detailed errors condition cannot be null");
     }
@@ -122,8 +119,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to obtain status codes
      */
     public void setStatusCodesLookupStrategy(@Nullable final Function<ProfileRequestContext,List<QName>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         statusCodesLookupStrategy = strategy;
     }
     
@@ -133,8 +129,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to obtain a status message
      */
     public void setStatusMessageLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         statusMessageLookupStrategy = strategy;
     }
     
@@ -144,8 +139,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
@@ -156,8 +150,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param codes list of status code values to insert
      */
     public void setStatusCodes(@Nonnull @NonnullElements final List<QName> codes) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
     }
     
@@ -168,16 +161,14 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param message default status message
      */
     public void setStatusMessage(@Nullable final String message) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         statusMessage = StringSupport.trimOrNull(message);
     }
     
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-
+        throwComponentStateExceptions();
         response = responseLookupStrategy.apply(profileRequestContext);
         if (response == null) {
             log.debug("{} Response message was not returned by lookup strategy", getLogPrefix());
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
index 596287cc4..62de5ffca 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -26,19 +26,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-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 org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
@@ -52,6 +46,10 @@ import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that builds {@link SubjectConfirmation} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -116,8 +114,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         overwriteExisting = flag;
     }
     
@@ -127,8 +124,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
     
@@ -138,7 +134,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param methods   confirmation methods to use
      */
     public void setMethods(@Nonnull @NonnullElements final Collection<String> methods) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotEmpty(methods, "Confirmation method collection cannot be null or empty");
         
         confirmationMethods = List.copyOf(methods);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
index 552c4d7b6..f929df9bd 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequest.java
@@ -22,19 +22,15 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.SAMLSubjectNameIdentifierContext;
 import org.opensaml.saml.saml1.core.Assertion;
@@ -46,6 +42,8 @@ import org.opensaml.saml.saml1.core.SubjectStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that builds a {@link NameIdentifier} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -111,8 +109,7 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        
+        throwSetterPreconditionExceptions();
         overwriteExisting = flag;
     }
     
@@ -123,8 +120,7 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
      */
     public void setNameIdentifierContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         nameIdentifierContextLookupStrategy = Constraint.isNotNull(strategy,
                 "SAMLSubjectNameIdentifierContext lookup strategy cannot be null");
     }
@@ -135,8 +131,7 @@ public class CopyNameIdentifierFromRequest extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
+        throwSetterPreconditionExceptions();
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
index 1f2834a8f..2d3ca20e2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifacts.java
@@ -23,11 +23,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-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.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -46,6 +41,10 @@ import org.opensaml.saml.saml1.core.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that resolves SAML 1.x artifacts inside a {@link Request} located via a lookup strategy,
  * by default from the inbound message context, and maps them to the corresponding assertions.
@@ -104,7 +103,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
      */
     public synchronized void setRequestLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Request> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         requestLookupStrategy = Constraint.isNotNull(strategy, "Request lookup strategy cannot be null");
     }
@@ -116,7 +115,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
      */
     public synchronized void setResponseLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
@@ -128,7 +127,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
      */
     public synchronized void setIssuerLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
     
         issuerLookupStrategy = Constraint.isNotNull(strategy, "Issuer lookup strategy cannot be null");
     }
@@ -140,7 +139,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
      */
     public synchronized void setRequesterLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         requesterLookupStrategy = Constraint.isNotNull(strategy, "Requester lookup strategy cannot be null");
     }
@@ -151,7 +150,7 @@ public class ResolveArtifacts extends AbstractProfileAction {
      * @param map   artifact map
      */
     public synchronized void setArtifactMap(@Nonnull final SAMLArtifactMap map) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         artifactMap = Constraint.isNotNull(map, "SAMLArtifactMap cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
index 6a7403f98..ba8968304 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -69,7 +69,6 @@ import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.DecodingException;
 import net.shibboleth.utilities.java.support.codec.EncodingException;
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.Resolver;
@@ -180,8 +179,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param strategy the identifier generation strategy
      */
     public void setIdentifierGenerationStrategy(@Nullable final IdentifierGenerationStrategy strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         idStrategy = strategy;
     }
     
@@ -200,8 +198,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param resolver the resolver instance
      */
     public void setSelfEntityIDResolver(@Nonnull final Resolver<String, CriteriaSet> resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         selfEntityIDResolver = resolver;
     }
 
@@ -220,8 +217,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param role  the peer entity role
      */
     public void setPeerEntityRole(@Nonnull final QName role) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         peerEntityRole = role;
     }
 
@@ -240,8 +236,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param resolver the new resolver
      */
     public void setArtifactEndpointResolver(@Nullable final EndpointResolver<ArtifactResolutionService> resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         artifactEndpointResolver = resolver;
     }
 
@@ -268,8 +263,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param resolver the role descriptor resolver
      */
     public void setRoleDescriptorResolver(@Nullable final RoleDescriptorResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         roleDescriptorResolver = resolver;
     }
 
@@ -288,8 +282,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param factory the artifact builder factory
      */
     public void setArtifactBuilderFactory(@Nullable final SAML2ArtifactBuilderFactory factory) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         artifactBuilderFactory = factory;
     }
 
@@ -308,8 +301,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param client the SOAP client
      */
     public void setSOAPClient(@Nonnull final SOAPClient client) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         soapClient = client;
     }
     
@@ -330,8 +322,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param name the pipeline name, or null
      */
     public void setSOAPPipelineName(@Nullable final String name) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         soapPipelineName = StringSupport.trimOrNull(name);
     }
     
@@ -373,8 +364,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * @param descriptor a binding descriptor
      */
     public void setBindingDescriptor(@Nullable final BindingDescriptor descriptor) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         bindingDescriptor = descriptor;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
index 0d82a4012..6b64aee7e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -51,7 +51,6 @@ import net.shibboleth.utilities.java.support.codec.EncodingException;
 import net.shibboleth.utilities.java.support.codec.HTMLEncoder;
 import net.shibboleth.utilities.java.support.collection.Pair;
 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.net.URLBuilder;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -109,8 +108,8 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param post true if POST encoding will be used, false if GET encoding will be used
      */
     public void setPostEncoding(final boolean post) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
+
         postEncoding = post;
     }
     
@@ -129,9 +128,8 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param newVelocityEngine the new VelocityEngine instane
      */
     public void setVelocityEngine(@Nullable final VelocityEngine newVelocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
+
         velocityEngine = newVelocityEngine;
     }
     
@@ -154,9 +152,8 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param newVelocityTemplateId the new Velocity template id
      */
     public void setVelocityTemplateId(@Nonnull @NotEmpty final String newVelocityTemplateId) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-        
+        throwSetterPreconditionExceptions();
+
         velocityTemplateId = Constraint.isNotNull(StringSupport.trimOrNull(newVelocityTemplateId),
                 "Velocity template ID cannot be null or empty");
     }
@@ -176,8 +173,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param newArtifactMap the new artifactMap 
      */
     public void setArtifactMap(@Nonnull final SAMLArtifactMap newArtifactMap) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         artifactMap = Constraint.isNotNull(newArtifactMap, "SAMLArtifactMap cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
index d757205df..e47e07098 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
@@ -39,7 +39,6 @@ import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.EncodingException;
 import net.shibboleth.utilities.java.support.codec.HTMLEncoder;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.net.HttpServletSupport;
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
@@ -85,8 +84,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
      * @param newVelocityEngine the new VelocityEngine instane
      */
     public void setVelocityEngine(final VelocityEngine newVelocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         velocityEngine = newVelocityEngine;
     }
     
@@ -109,8 +107,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
      * @param newVelocityTemplateId the new Velocity template id
      */
     public void setVelocityTemplateId(final String newVelocityTemplateId) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         velocityTemplateId = newVelocityTemplateId;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
index 30ae40bc6..8b830b059 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandler.java
@@ -23,8 +23,6 @@ import java.util.List;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
@@ -64,7 +62,7 @@ public class ExtractChannelBindingsHeadersHandler extends AbstractMessageHandler
      * @param flag flag to set
      */
     public void setFinalDestination(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         finalDestination = flag;
     }
@@ -75,7 +73,7 @@ public class ExtractChannelBindingsHeadersHandler extends AbstractMessageHandler
      * @param flag flag to set
      */
     public void setNextDestination(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         nextDestination = flag;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
index 13f7477d1..23503fcb8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandler.java
@@ -48,7 +48,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 import net.shibboleth.utilities.java.support.codec.Base64Support;
 import net.shibboleth.utilities.java.support.codec.DecodingException;
 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.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -84,7 +83,7 @@ public class SAML2HTTPPostSimpleSignSecurityHandler extends BaseSAMLSimpleSignat
      * @param newParserPool The parser to set.
      */
     public void setParser(@Nonnull final ParserPool newParserPool) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         parserPool = Constraint.isNotNull(newParserPool, "ParserPool cannot be null");
     }
 
@@ -103,7 +102,7 @@ public class SAML2HTTPPostSimpleSignSecurityHandler extends BaseSAMLSimpleSignat
      * @param newKeyInfoResolver The keyInfoResolver to set.
      */
     public void setKeyInfoResolver(@Nonnull final KeyInfoCredentialResolver newKeyInfoResolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         keyInfoResolver = Constraint.isNotNull(newKeyInfoResolver, "KeyInfoCredentialResolver cannot be null");
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
index 3f8e4f89e..12dc1cfb8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractDecryptAction.java
@@ -23,10 +23,6 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
@@ -44,6 +40,9 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 
+import net.shibboleth.utilities.java.support.collection.Pair;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Abstract base class for actions that perform SAML decryption.
  * 
@@ -103,7 +102,7 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
      * @param flag  true iff decryption failure should be fatal
      */
     public void setErrorFatal(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         errorFatal = flag;
     }
@@ -117,7 +116,7 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
      */
     public void setSecurityParametersContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         securityParamsLookupStrategy =
                 Constraint.isNotNull(strategy, "SecurityParametersContext lookup strategy cannot be null");
@@ -129,7 +128,7 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
      * @param strategy strategy used to locate the {@link SAMLObject} to operate on
      */
     public void setMessageLookupStrategy(@Nonnull final Function<ProfileRequestContext,Object> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         messageLookupStrategy = Constraint.isNotNull(strategy, "Message lookup strategy cannot be null");
     }
@@ -150,7 +149,7 @@ public abstract class AbstractDecryptAction extends AbstractProfileAction {
      */
     public void setDecryptionPredicate(
             @Nonnull final Predicate<Pair<ProfileRequestContext,EncryptedElementType>> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         decryptionPredicate = Constraint.isNotNull(predicate, "Decryption predicate cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
index 69dc6ab8b..d95b0a09b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractEncryptAction.java
@@ -25,11 +25,6 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -47,6 +42,10 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 
+import net.shibboleth.utilities.java.support.collection.Pair;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.logic.FunctionSupport;
+
 /**
  * Abstract base class for actions that perform simple unicast SAML encryption to a single
  * decrypting party.
@@ -100,7 +99,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
      */
     public void setEncryptionContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,EncryptionContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         encryptionCtxLookupStrategy =
                 Constraint.isNotNull(strategy, "EncryptionContext lookup strategy cannot be null");
@@ -112,7 +111,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
      * @param strategy lookup strategy
      */
     public void setRecipientLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         recipientLookupStrategy = Constraint.isNotNull(strategy, "Recipient lookup strategy cannot be null");
     }
@@ -123,7 +122,7 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
      * @param strategy  lookup strategy
      */
     public void setKeyPlacementLookupStrategy(@Nonnull final Function<ProfileRequestContext,KeyPlacement> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keyPlacementLookupStrategy = Constraint.isNotNull(strategy, "Key placement lookup strategy cannot be null");
     }
@@ -134,7 +133,8 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
      * @param predicate the encrypt-to-self predicate
      */
     public void setEncryptToSelf(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
+
         encryptToSelf = Constraint.isNotNull(predicate, "Encrypt-to-self predicate cannot be null");
     }
     
@@ -146,7 +146,8 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
     public void setEncryptToSelfParametersStrategy(
             @Nullable final Function<Pair<ProfileRequestContext, EncryptionParameters>, 
             List<EncryptionParameters>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
+
         encryptToSelfParametersStrategy = strategy;
     }
     
@@ -156,7 +157,8 @@ public abstract class AbstractEncryptAction extends AbstractConditionalProfileAc
      * @param strategy lookup strategy
      */
     public void setSelfRecipientLookupStrategy(@Nullable final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
+
         selfRecipientLookupStrategy = strategy;
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
index 2f5455ce4..49f8b0499 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
@@ -24,11 +24,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
-
 import org.opensaml.core.xml.XMLObjectBuilderFactory;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.MessageContext;
@@ -45,6 +40,10 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+
 /**
  * Abstract action that creates an empty object derived from {@link StatusResponseType},
  * and sets it as the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -94,7 +93,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
      * @param flag flag to set
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         overwriteExisting = flag;
     }
@@ -106,7 +105,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
@@ -118,7 +117,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         issuerLookupStrategy = strategy;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
index b440b76f5..9549e04c6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddChannelBindingsToAssertions.java
@@ -22,9 +22,7 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
@@ -32,7 +30,6 @@ import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.ChannelBindingsContext;
 import org.opensaml.saml.ext.saml2cb.ChannelBindings;
@@ -43,6 +40,8 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action to add {@link ChannelBindings} extension(s) to every {@link Assertion} in a {@link Response} message.
  * 
@@ -86,7 +85,7 @@ public class AddChannelBindingsToAssertions extends AbstractConditionalProfileAc
      */
     public void setChannelBindingsContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,ChannelBindingsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         channelBindingsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "ChannelBindingsContext lookup strategy cannot be null");
@@ -98,7 +97,7 @@ public class AddChannelBindingsToAssertions extends AbstractConditionalProfileAc
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
index c4a3a2d96..707e6fda2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddGeneratedKeyToAssertions.java
@@ -22,11 +22,7 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.codec.Base64Support;
-import net.shibboleth.utilities.java.support.codec.EncodingException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
@@ -34,7 +30,6 @@ import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.ECPContext;
 import org.opensaml.saml.ext.samlec.GeneratedKey;
@@ -45,6 +40,10 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.codec.Base64Support;
+import net.shibboleth.utilities.java.support.codec.EncodingException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action to add a {@link GeneratedKey} extension to every {@link Assertion} in a {@link Response} message.
  * 
@@ -89,7 +88,7 @@ public class AddGeneratedKeyToAssertions extends AbstractConditionalProfileActio
      */
     public void setECPContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,ECPContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         ecpContextLookupStrategy = Constraint.isNotNull(strategy, "ECPContext lookup strategy cannot be null");
     }
@@ -100,7 +99,7 @@ public class AddGeneratedKeyToAssertions extends AbstractConditionalProfileActio
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
index 34a45a66d..8cd332bfc 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddNameIDToSubjects.java
@@ -25,22 +25,13 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
-
-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.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
-
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLException;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
@@ -62,6 +53,13 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Strings;
 
+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.logic.Constraint;
+import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+
 /**
  * Action that builds a {@link NameID} and adds it to the {@link Subject} of all the assertions
  * found in a {@link Response}. The message to update is returned by a lookup strategy, by default
@@ -179,7 +177,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         overwriteExisting = flag;
     }
@@ -190,7 +188,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param strategy strategy used to locate the {@link AuthnRequest}
      */
     public void setRequestLookupStrategy(@Nonnull final Function<ProfileRequestContext,AuthnRequest> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         requestLookupStrategy = Constraint.isNotNull(strategy, "AuthnRequest lookup strategy cannot be null");
     }
@@ -201,7 +199,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setAssertionsLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<Assertion>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         assertionsLookupStrategy = Constraint.isNotNull(strategy, "Assertions lookup strategy cannot be null");
     }
@@ -213,7 +211,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
@@ -225,7 +223,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         issuerLookupStrategy = strategy;
     }
@@ -236,7 +234,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param predicate predicate used to evaluate the {@link NameIDPolicy}
      */
     public void setNameIDPolicyPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         nameIDPolicyPredicate = Constraint.isNotNull(predicate, "NameIDPolicy predicate cannot be null");
     }
@@ -247,7 +245,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param strategy  format lookup strategy
      */
     public void setFormatLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         formatLookupStrategy = Constraint.isNotNull(strategy, "Format lookup strategy cannot be null");
     }
@@ -258,7 +256,7 @@ public class AddNameIDToSubjects extends AbstractProfileAction {
      * @param theGenerator the generator to use
      */
     public void setNameIDGenerator(@Nullable final SAML2NameIDGenerator theGenerator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         generator = Constraint.isNotNull(theGenerator, "SAML2NameIDGenerator cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
index bf6c827e7..4e4f39163 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddOneTimeUseConditionToAssertions.java
@@ -22,16 +22,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.Conditions;
@@ -41,6 +38,8 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action to add a {@link OneTimeUse} condition to every {@link Assertion} in a {@link Response} message.
  * If the containing {@link Conditions} is not present, it will be created.
@@ -70,7 +69,7 @@ public class AddOneTimeUseConditionToAssertions extends AbstractConditionalProfi
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
index 1889f2d00..4f0ab0af2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddProxyRestrictionToAssertions.java
@@ -23,19 +23,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.collection.Pair;
-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.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.Assertion;
 import org.opensaml.saml.saml2.core.Audience;
@@ -46,6 +40,10 @@ import org.opensaml.saml.saml2.profile.SAML2ActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.collection.Pair;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action adds an {@link ProxyRestriction} to every {@link Assertion} contained in a SAML 2
  * response, with the audiences and count obtained from a lookup function. If the containing
@@ -85,7 +83,7 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
@@ -97,7 +95,7 @@ public class AddProxyRestrictionToAssertions extends AbstractConditionalProfileA
      */
     public void setProxyRestrictionLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Pair<Integer,Set<String>>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         proxyRestrictionLookupStrategy =
                 Constraint.isNotNull(strategy, "Proxy restriction lookup strategy cannot be null");
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
index 5599f786f..1398c3528 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShell.java
@@ -24,13 +24,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
-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.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
-
 import org.opensaml.core.xml.XMLObjectBuilderFactory;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.messaging.context.MessageContext;
@@ -48,6 +41,12 @@ import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+
 /**
  * Action that creates an empty object derived from {@link StatusResponseType},
  * and sets it as the message returned by {@link ProfileRequestContext#getOutboundMessageContext()}.
@@ -106,7 +105,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
      * @param flag flag to set
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         overwriteExisting = flag;
     }
@@ -118,7 +117,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
@@ -130,7 +129,7 @@ public class AddStatusResponseShell extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         issuerLookupStrategy = strategy;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
index 23a13c007..34cc93e5c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponse.java
@@ -28,6 +28,8 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
@@ -35,15 +37,6 @@ import org.opensaml.profile.context.EventContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.CurrentOrPreviousEventLookup;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-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.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.Status;
 import org.opensaml.saml.saml2.core.StatusCode;
@@ -54,6 +47,11 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Action that sets {@link Status} content in a {@link StatusResponseType} obtained from
  * a lookup strategy, typically from the outbound message context.
@@ -110,7 +108,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to locate the {@link StatusResponseType} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,StatusResponseType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
@@ -122,7 +120,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param condition predicate for detailed errors condition
      */
     public void setDetailedErrorsCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         detailedErrorsCondition =
                 Constraint.isNotNull(condition, "Detailed errors condition cannot be null");
@@ -134,7 +132,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to obtain status codes
      */
     public void setStatusCodesLookupStrategy(@Nullable final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         statusCodesLookupStrategy = strategy;
     }
@@ -145,7 +143,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param strategy strategy used to obtain a status message
      */
     public void setStatusMessageLookupStrategy(@Nullable final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         statusMessageLookupStrategy = strategy;
     }
@@ -157,7 +155,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param codes list of status code values to insert
      */
     public void setStatusCodes(@Nonnull @NonnullElements final List<String> codes) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         defaultStatusCodes = List.copyOf(Constraint.isNotNull(codes, "Status code list cannot be null"));
     }
@@ -169,7 +167,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
      * @param message default status message
      */
     public void setStatusMessage(@Nullable final String message) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         statusMessage = StringSupport.trimOrNull(message);
     }
@@ -177,7 +175,7 @@ public class AddStatusToResponse extends AbstractProfileAction {
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
 
         response = responseLookupStrategy.apply(profileRequestContext);
         if (response == null) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
index 82581fb82..e621e234a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjects.java
@@ -24,22 +24,13 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-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.net.HttpServletSupport;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.binding.BindingException;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -51,6 +42,13 @@ import org.opensaml.saml.saml2.core.SubjectConfirmationData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+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.net.HttpServletSupport;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 /**
  * Action that builds {@link SubjectConfirmation} and adds it to the {@link Subject} of all the assertions
  * found in a {@link Response}. The message to update is returned by a lookup strategy, by default the message
@@ -166,7 +164,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         overwriteExisting = flag;
     }
@@ -178,7 +176,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      */
     public void setResponseLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
@@ -189,7 +187,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setAddressLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         addressLookupStrategy = strategy;
     }
@@ -200,7 +198,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setInResponseToLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         inResponseToLookupStrategy = strategy;
     }
@@ -211,7 +209,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setRecipientLookupStrategy(@Nullable final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         recipientLookupStrategy = strategy;
     }
@@ -222,7 +220,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setLifetimeLookupStrategy(@Nullable final Function<ProfileRequestContext,Long> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         lifetimeLookupStrategy = strategy;
     }
@@ -233,7 +231,7 @@ public class AddSubjectConfirmationToSubjects extends AbstractProfileAction {
      * @param method   confirmation method to use
      */
     public void setMethod(@Nonnull @NotEmpty final String method) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         confirmationMethod = Constraint.isNotNull(StringSupport.trimOrNull(method),
                 "Confirmation method cannot be null or empty"); 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
index 8e5cb0e0b..bd1d6937c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequest.java
@@ -22,19 +22,15 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
-
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.SAMLSubjectNameIdentifierContext;
 import org.opensaml.saml.saml2.core.Assertion;
@@ -44,6 +40,8 @@ import org.opensaml.saml.saml2.core.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that builds a {@link NameID} and adds it to the {@link Subject} of all the statements
  * in all the assertions found in a {@link Response}. The message to update is returned by a lookup
@@ -109,7 +107,7 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
      * @param flag  true iff the action should overwrite any existing objects
      */
     public void setOverwriteExisting(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         overwriteExisting = flag;
     }
@@ -121,7 +119,7 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
      */
     public void setNameIDContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SAMLSubjectNameIdentifierContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         nameIdentifierContextLookupStrategy = Constraint.isNotNull(strategy,
                 "SAMLSubjectNameIdentifierContext lookup strategy cannot be null");
@@ -133,7 +131,7 @@ public class CopyNameIDFromRequest extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,Response> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
index 3a9396587..a7da7d155 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertions.java
@@ -24,10 +24,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.xml.SerializeSupport;
-
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -47,6 +43,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+
 /**
  * Action that encrypts all assertions in a {@link Response} message obtained from a lookup
  * strategy, by default the outbound message context.
@@ -84,7 +83,7 @@ public class EncryptAssertions extends AbstractEncryptAction {
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,StatusResponseType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
index d866d7efe..23dbbbe8a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributes.java
@@ -24,10 +24,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.xml.SerializeSupport;
-
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -49,6 +45,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+
 /**
  * Action that encrypts all attributes in a {@link Response} message obtained from a lookup strategy,
  * by default the outbound message context.
@@ -84,7 +83,7 @@ public class EncryptAttributes extends AbstractEncryptAction {
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,StatusResponseType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
index 64b2eda5f..84e9451b3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDs.java
@@ -25,12 +25,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-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.xml.SerializeSupport;
-
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.navigate.MessageLookup;
@@ -63,6 +57,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+
 /**
  * Action that encrypts all {@link NameID}s in a message obtained from a lookup strategy,
  * by default the outbound message context.
@@ -101,7 +100,7 @@ public class EncryptNameIDs extends AbstractEncryptAction {
      * @param strategy strategy used to locate the {@link Response} to operate on
      */
     public void setMessageLookupStrategy(@Nonnull final Function<ProfileRequestContext,SAMLObject> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         messageLookupStrategy = Constraint.isNotNull(strategy, "Message lookup strategy cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
index 0556f3920..e31b8793f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContext.java
@@ -24,9 +24,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.AbstractConditionalProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -39,6 +36,8 @@ import org.opensaml.saml.saml2.profile.context.EncryptionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action to create and populate an {@link ECPContext} based on the request and, when encryption is in use,
  * generating a session key.
@@ -91,7 +90,7 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
      */
     public void setECPContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,ECPContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         ecpContextCreationStrategy = Constraint.isNotNull(strategy, "ECPContext creation strategy cannot be null");
     }
@@ -103,7 +102,7 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
      */
     public void setEncryptionContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,EncryptionContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         encryptionContextLookupStrategy = Constraint.isNotNull(strategy,
                 "EncryptionContext lookup strategy cannot be null");
@@ -115,7 +114,7 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
      * @param generator random number generator
      */
     public void setRandomGenerator(@Nullable final SecureRandom generator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         randomGenerator = generator;
     }
@@ -126,7 +125,7 @@ public class PopulateECPContext extends AbstractConditionalProfileAction {
      * @param flag  flag to set
      */
     public void setRequireEncryption(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         requireEncryption = flag;
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
index a2681fcdd..1e7d9045a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifact.java
@@ -23,11 +23,6 @@ import java.util.function.Function;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-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.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.action.AbstractProfileAction;
 import org.opensaml.profile.action.ActionSupport;
@@ -44,6 +39,10 @@ import org.opensaml.saml.saml2.core.ArtifactResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 /**
  * Action that resolves a SAML 2.0 artifact inside an {@link ArtifactResolve} request located
  * via a lookup strategy, by default from the inbound message context, and maps it to the
@@ -103,7 +102,7 @@ public class ResolveArtifact extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setRequestLookupStrategy(@Nonnull final Function<ProfileRequestContext,ArtifactResolve> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         requestLookupStrategy = Constraint.isNotNull(strategy, "Request lookup strategy cannot be null");
     }
@@ -114,7 +113,7 @@ public class ResolveArtifact extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setResponseLookupStrategy(@Nonnull final Function<ProfileRequestContext,ArtifactResponse> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         responseLookupStrategy = Constraint.isNotNull(strategy, "Response lookup strategy cannot be null");
     }
@@ -125,7 +124,7 @@ public class ResolveArtifact extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
     
         issuerLookupStrategy = Constraint.isNotNull(strategy, "Issuer lookup strategy cannot be null");
     }
@@ -136,7 +135,7 @@ public class ResolveArtifact extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setRequesterLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         requesterLookupStrategy = Constraint.isNotNull(strategy, "Requester lookup strategy cannot be null");
     }
@@ -147,7 +146,7 @@ public class ResolveArtifact extends AbstractProfileAction {
      * @param map   artifact map
      */
     public void setArtifactMap(@Nonnull final SAMLArtifactMap map) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         artifactMap = Constraint.isNotNull(map, "SAMLArtifactMap cannot be null");
     }
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
index 932ab5765..9e2663b82 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/ValidateAssertions.java
@@ -43,7 +43,6 @@ import jakarta.servlet.http.HttpServletRequest;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -107,8 +106,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      * @param function the new assertion resolver function
      */
     public void setAssertionResolver(@Nonnull final Function<ProfileRequestContext, List<Assertion>> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         assertionResolver = function;
     }
 
@@ -139,8 +137,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      */
     public void setValidationContextBuilder(
             @Nonnull final Function<AssertionValidationInput, ValidationContext> builder) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         validationContextBuilder = builder;
     }
 
@@ -159,8 +156,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      * @param request The HTTP servlet request
      */
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         httpServletRequest = request;
     }
     
@@ -187,8 +183,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      * @param flag The invalidFatal to set.
      */
     public void setInvalidFatal(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         invalidFatal = flag;
     }
     
@@ -207,8 +202,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      * @param validator the local Assertion validator, may be null
      */
     public void setAssertionValidator(@Nullable final SAML20AssertionValidator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         assertionValidator = validator;
     }
     
@@ -229,8 +223,7 @@ public class ValidateAssertions extends AbstractProfileAction {
      */
     public void setAssertionValidatorLookup(
             @Nullable final Function<Pair<ProfileRequestContext, Assertion>, SAML20AssertionValidator> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         assertionValidatorLookup = function;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
index bbbbe093f..9b4d9bf34 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
@@ -52,7 +52,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.collection.LazyList;
 import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
@@ -115,8 +114,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
      */
     public void setValidationContextBuilder(
             @Nonnull final Function<SAML20AssertionTokenValidationInput, ValidationContext> builder) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         validationContextBuilder = Constraint.isNotNull(builder, "Validation context builder may not be null");
     }
 
@@ -135,8 +133,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
      * @param request The HTTP servlet request
      */
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         httpServletRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
     }
     
@@ -163,8 +160,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
      * @param flag The invalidFatal to set.
      */
     public void setInvalidFatal(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         invalidFatal = flag;
     }
     
@@ -183,8 +179,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
      * @param validator the local Assertion validator, may be null
      */
     public void setAssertionValidator(@Nullable final SAML20AssertionValidator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         assertionValidator = validator;
     }
     
@@ -204,8 +199,7 @@ public class WSSecuritySAML20AssertionTokenSecurityHandler extends AbstractMessa
      */
     public void setAssertionValidatorLookup(
             @Nullable final Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         assertionValidatorLookup = function;
     }
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
index bf5b246e6..069b20081 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/impl/MetadataCredentialResolver.java
@@ -27,16 +27,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.collection.LockableClassToInstanceMultiMap;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.component.InitializableComponent;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.saml.criterion.EntityRoleCriterion;
 import org.opensaml.saml.criterion.ProtocolCriterion;
@@ -55,6 +45,17 @@ import org.opensaml.xmlsec.keyinfo.KeyInfoCriterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.collection.LockableClassToInstanceMultiMap;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.InitializableComponent;
+import net.shibboleth.utilities.java.support.component.UninitializedComponentException;
+import net.shibboleth.utilities.java.support.component.UnmodifiableComponentException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
+
 /**
  * A credential resolver capable of resolving credentials from SAML 2 metadata.
  * 
@@ -117,6 +118,26 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
     public boolean isInitialized() {
         return isInitialized;
     }
+    
+    /**
+     * Checks if a component has not been initialized and, if so, throws a {@link UninitializedComponentException}.
+     */
+    protected void ifNotInitializedThrowUninitializedComponentException() {
+        if (!isInitialized()) {
+            throw new UninitializedComponentException(
+                    "Unidentified Component has not yet been initialized and cannot be used.");
+        }
+    }
+
+    /**
+     * Checks if a component has been initialized and, if so, throws a {@link UnmodifiableComponentException}.
+     */
+    protected void ifInitializedThrowUnmodifiabledComponentException() {
+        if (isInitialized()) {
+            throw new UnmodifiableComponentException(
+                    "Unidentified Component has already been initialized and can no longer be modified");
+        }
+    }
 
     /** {@inheritDoc} */
     @Override
@@ -129,7 +150,7 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
             log.info("RoleDescriptorResolver was not supplied, " 
                     + "credentials may only be resolved via RoleDescriptorCriterion");
         }
-        
+
         isInitialized = true;
     }
     
@@ -158,7 +179,7 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
      * @param resolver the new RoleDescriptorResolver to use
      */
     public void setRoleDescriptorResolver(@Nullable final RoleDescriptorResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         roleDescriptorResolver = resolver;
     }
@@ -178,7 +199,7 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
      * @param resolver the new KeyInfoCredentialResolver to use
      */
     public void setKeyInfoCredentialResolver(@Nonnull final KeyInfoCredentialResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         keyInfoCredentialResolver = Constraint.isNotNull(resolver, "KeyInfoCredentialResolver may not be null");
     }
@@ -188,7 +209,7 @@ public class MetadataCredentialResolver extends AbstractCriteriaFilteringCredent
     @Nonnull protected Iterable<Credential> resolveFromSource(@Nonnull final CriteriaSet criteriaSet) 
             throws ResolverException {
         
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
         Constraint.isNotNull(criteriaSet, "CriteriaSet was null");
 
         final UsageType usage = getEffectiveUsageInput(criteriaSet);

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


More information about the commits mailing list