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

Rod Widdowson rdw at steadingsoftware.com
Wed Jul 13 08:51:23 UTC 2022


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

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

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

commit 1df57c2240e22eaf4452f578cc5ee58c5da85cae
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Jun 12 14:30:37 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.
---
 .../httpclient/FileCachingHttpClientBuilder.java   | 48 +++++++++------
 .../utilities/java/support/net/CookieManager.java  | 31 +++-------
 .../java/support/scripting/EvaluableScript.java    | 11 ++--
 .../java/support/scripting/ScriptedRunnable.java   |  7 +--
 .../java/support/security/DataSealer.java          | 35 ++++++-----
 .../security/impl/BasicAccessControlService.java   |  6 +-
 .../security/impl/BasicKeystoreKeyStrategy.java    | 21 +++----
 .../impl/DelegatingAccessControlService.java       |  3 +-
 .../security/impl/IPRangeAccessControl.java        | 16 +++--
 .../support/security/impl/ScriptedKeyStrategy.java | 26 +++-----
 .../support/service/AbstractReloadableService.java | 13 ++--
 .../support/service/ReloadableServiceGaugeSet.java | 17 +++---
 .../java/support/xml/BasicParserPool.java          | 71 +++++++++-------------
 13 files changed, 139 insertions(+), 166 deletions(-)

diff --git a/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java b/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java
index a75fe1f..819e033 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java
@@ -25,15 +25,6 @@ import java.util.TimerTask;
 
 import javax.annotation.Nonnull;
 
-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.component.DestructableComponent;
-import net.shibboleth.utilities.java.support.component.InitializableComponent;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.primitive.TimerSupport;
-
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
 import org.apache.http.client.ClientProtocolException;
@@ -48,6 +39,17 @@ import org.apache.http.protocol.HttpContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+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.DestroyedComponentException;
+import net.shibboleth.utilities.java.support.component.DestructableComponent;
+import net.shibboleth.utilities.java.support.component.InitializableComponent;
+import net.shibboleth.utilities.java.support.component.UninitializedComponentException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.utilities.java.support.primitive.TimerSupport;
+
 /**
  * An {@link org.apache.http.client.HttpClient} builder that supports RFC 2616 caching.
  * <p>
@@ -301,12 +303,27 @@ public class FileCachingHttpClientBuilder extends HttpClientBuilder {
            maintenanceTaskInterval = taskInterval;
         }
 
+        /**
+         * Common code (exbedded from {@link AbstractInitializableComponent} to check
+         * component state.
+         */
+        protected final void throwComponentStateExceptions() {
+            if (!isInitialized()) {
+                throw new UninitializedComponentException(
+                        "StorageManagingHttpClient has not yet been initialized and cannot be used.");
+            }
+            if (isDestroyed()) {
+                throw new DestroyedComponentException(
+                        "StorageManagingHttpClient has already been destroyed and can no longer be used.");
+            }
+        }
+
+
         /** {@inheritDoc} */
         protected CloseableHttpResponse doExecute(final HttpHost target, final HttpRequest request,
                 final HttpContext context)
                 throws IOException, ClientProtocolException {
-            ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-            ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+            throwComponentStateExceptions();
             return httpClient.execute(target, request, context);
         }
 
@@ -314,8 +331,7 @@ public class FileCachingHttpClientBuilder extends HttpClientBuilder {
         @Override
         @Deprecated
         public org.apache.http.params.HttpParams getParams() {
-            ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-            ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+            throwComponentStateExceptions();
             return httpClient.getParams();
         }
         
@@ -323,16 +339,14 @@ public class FileCachingHttpClientBuilder extends HttpClientBuilder {
         @Override
         @Deprecated
         public org.apache.http.conn.ClientConnectionManager getConnectionManager() {
-            ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-            ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+            throwComponentStateExceptions();
             return httpClient.getConnectionManager();
         }
 
         /** {@inheritDoc} */
         @Override
         public void close() throws IOException {
-            ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-            ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+            throwComponentStateExceptions();
             httpClient.close();
         }
 
diff --git a/src/main/java/net/shibboleth/utilities/java/support/net/CookieManager.java b/src/main/java/net/shibboleth/utilities/java/support/net/CookieManager.java
index f9fa9a7..058fc45 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/net/CookieManager.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/net/CookieManager.java
@@ -27,7 +27,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 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.StringSupport;
 
@@ -76,8 +75,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param path cookie path to use, or null for the default
      */
     public void setCookiePath(@Nullable final String path) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         cookiePath = StringSupport.trimOrNull(path);
     }
@@ -88,8 +86,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param domain the cookie domain to use, or null for the default
      */
     public void setCookieDomain(@Nullable final String domain) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         cookieDomain = StringSupport.trimOrNull(domain);
     }
@@ -100,8 +97,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param request servlet request
      */
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         httpRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
     }
@@ -112,8 +108,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param response servlet response
      */
     public void setHttpServletResponse(@Nonnull final HttpServletResponse response) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         httpResponse = Constraint.isNotNull(response, "HttpServletResponse cannot be null");
     }
@@ -124,8 +119,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param flag flag to set
      */
     public void setSecure(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         secure = flag;
     }
@@ -137,8 +131,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param flag flag to set
      */
     public void setHttpOnly(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         httpOnly = flag;
     }
@@ -149,8 +142,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param age max age to set
      */
     public void setMaxAge(final int age) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         maxAge = age;
     }
@@ -171,8 +163,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param value value of cookie
      */
     public void addCookie(@Nonnull @NotEmpty final String name, @Nonnull @NotEmpty final String value) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         
         final Cookie cookie = new Cookie(name, value);
         cookie.setPath(cookiePath != null ? cookiePath : contextPathToCookiePath());
@@ -192,8 +183,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @param name  name of cookie
      */
     public void unsetCookie(@Nonnull @NotEmpty final String name) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         
         final Cookie cookie = new Cookie(name, null);
         cookie.setPath(cookiePath != null ? cookiePath : contextPathToCookiePath());
@@ -234,8 +224,7 @@ public final class CookieManager extends AbstractInitializableComponent {
      * @return cookie value
      */
     @Nullable public String getCookieValue(@Nonnull @NotEmpty final String name, @Nullable final String defValue) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwComponentStateExceptions();
         
         final Cookie[] cookies = httpRequest.getCookies();
         if (cookies != null) {
diff --git a/src/main/java/net/shibboleth/utilities/java/support/scripting/EvaluableScript.java b/src/main/java/net/shibboleth/utilities/java/support/scripting/EvaluableScript.java
index 5fa4546..269a454 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/scripting/EvaluableScript.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/scripting/EvaluableScript.java
@@ -35,21 +35,20 @@ import javax.script.ScriptException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.io.Files;
+
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 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.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resource.Resource;
 
-import com.google.common.io.Files;
-
 /** This is a helper class that takes care of reading in, optionally compiling, and evaluating a script. */
 public final class EvaluableScript extends AbstractInitializableComponent {
 
@@ -358,7 +357,7 @@ public final class EvaluableScript extends AbstractInitializableComponent {
      * @throws ScriptException thrown if there was a problem evaluating the script
      */
     @Nullable public Object eval(@Nonnull final Bindings scriptBindings) throws ScriptException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         if (compiledScript != null) {
             return compiledScript.eval(scriptBindings);
         }
@@ -375,7 +374,7 @@ public final class EvaluableScript extends AbstractInitializableComponent {
      * @throws ScriptException thrown if there was a problem evaluating the script
      */
     @Nullable public Object eval(@Nonnull final ScriptContext scriptContext) throws ScriptException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         if (compiledScript != null) {
             return compiledScript.eval(scriptContext);
         }
diff --git a/src/main/java/net/shibboleth/utilities/java/support/scripting/ScriptedRunnable.java b/src/main/java/net/shibboleth/utilities/java/support/scripting/ScriptedRunnable.java
index e3b91b2..420c9aa 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/scripting/ScriptedRunnable.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/scripting/ScriptedRunnable.java
@@ -27,7 +27,6 @@ import org.slf4j.LoggerFactory;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 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.component.UnmodifiableComponent;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
@@ -79,8 +78,7 @@ public class ScriptedRunnable extends AbstractIdentifiableInitializableComponent
      * @param object the custom object
      */
     public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         customObject = object;
     }
@@ -100,8 +98,7 @@ public class ScriptedRunnable extends AbstractIdentifiableInitializableComponent
      * @param matcherScript the script to be evaluated
      */
     public void setScript(@Nonnull final EvaluableScript matcherScript) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         script = Constraint.isNotNull(matcherScript, "Attribute value matching script cannot be null");
     }
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java b/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
index ca63b5f..e875a1a 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
@@ -37,23 +37,22 @@ import javax.crypto.Cipher;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.GCMParameterSpec;
 
+import org.apache.commons.codec.BinaryDecoder;
+import org.apache.commons.codec.BinaryEncoder;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Base64;
+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.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
-import org.apache.commons.codec.BinaryDecoder;
-import org.apache.commons.codec.BinaryEncoder;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 
 /**
  * Applies a MAC to time-limited information and encrypts with a symmetric key.
@@ -109,7 +108,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @since 7.4.0
      */
     public void setLockedAtStartup(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         lockedAtStartup = flag;
     }
@@ -120,7 +119,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @param strategy key strategy
      */
     public void setKeyStrategy(@Nonnull final DataSealerKeyStrategy strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keyStrategy = Constraint.isNotNull(strategy, "DataSealerKeyStrategy cannot be null");
     }
@@ -131,7 +130,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @param r the pseudorandom generator to set
      */
     public void setRandom(@Nonnull final SecureRandom r) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         random = Constraint.isNotNull(r, "SecureRandom cannot be null");
     }
@@ -143,7 +142,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @param e Byte-to-string encoder.
      */
     public void setEncoder(@Nonnull final BinaryEncoder e) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         encoder = Constraint.isNotNull(e, "Encoder cannot be null");
     }
@@ -154,7 +153,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @param d String-to-byte decoder.
      */
     public void setDecoder(@Nonnull final BinaryDecoder d) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         decoder = Constraint.isNotNull(d, "Decoder cannot be null");
     }
@@ -170,7 +169,7 @@ public class DataSealer extends AbstractInitializableComponent {
      * @since 8.3.0
      */
     public void setNodePrefix(@Nullable @NotEmpty final String prefix) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         nodePrefix = StringSupport.trimOrNull(prefix);
         if (nodePrefix != null) {
@@ -239,8 +238,8 @@ public class DataSealer extends AbstractInitializableComponent {
      */
     @Nonnull public String unwrap(@Nonnull @NotEmpty final String wrapped, @Nullable final StringBuffer keyUsed)
             throws DataSealerException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
+        throwComponentStateExceptions();
+
         final int magicLen = MAGIC_STRING.length();
         
         try {
@@ -379,8 +378,8 @@ public class DataSealer extends AbstractInitializableComponent {
      */
     @Nonnull public String wrap(@Nonnull @NotEmpty final String data, @Nullable final Instant exp)
             throws DataSealerException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
+        throwComponentStateExceptions();
+
         if (data == null || data.length() == 0) {
             throw new IllegalArgumentException("Data must be supplied for the wrapping operation");
         }
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicAccessControlService.java b/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicAccessControlService.java
index c9a5599..f64a5a9 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicAccessControlService.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicAccessControlService.java
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory;
 import jakarta.servlet.ServletRequest;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-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.security.AccessControl;
 import net.shibboleth.utilities.java.support.security.AccessControlService;
@@ -55,8 +55,8 @@ public class BasicAccessControlService extends AbstractIdentifiableInitializable
      * 
      * @param map map of named policies
      */
-    public void setPolicyMap(@Nullable @NonnullElements final Map<String,AccessControl> map) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+    public void setPolicyMap(@Nonnull @NonnullElements final Map<String,AccessControl> map) {
+        throwSetterPreconditionExceptions();
         
         if (map != null) {
             policyMap = new HashMap<>(map.size());
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicKeystoreKeyStrategy.java b/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicKeystoreKeyStrategy.java
index a868088..aeac40b 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicKeystoreKeyStrategy.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/impl/BasicKeystoreKeyStrategy.java
@@ -37,12 +37,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.crypto.SecretKey;
 
+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.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -51,9 +53,6 @@ import net.shibboleth.utilities.java.support.resource.Resource;
 import net.shibboleth.utilities.java.support.security.DataSealerKeyStrategy;
 import net.shibboleth.utilities.java.support.security.KeyNotFoundException;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 
 /**
  * Implements a strategy for access to versioned symmetric keys using a keystore, and a standalone file
@@ -119,7 +118,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param type the keystore type
      */
     public void setKeystoreType(@Nonnull @NotEmpty final String type) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keystoreType = Constraint.isNotNull(StringSupport.trimOrNull(type), "Keystore type cannot be null or empty");
     }
@@ -130,7 +129,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param resource the keystore resource
      */
     public void setKeystoreResource(@Nonnull @NotEmpty final Resource resource) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keystoreResource = Constraint.isNotNull(resource, "Keystore resource cannot be null");
     }
@@ -141,7 +140,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param resource the key version resource
      */
     public void setKeyVersionResource(@Nonnull @NotEmpty final Resource resource) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keyVersionResource = Constraint.isNotNull(resource, "Key version resource cannot be null");
     }
@@ -175,7 +174,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param alias the encryption key alias base
      */
     public void setKeyAlias(@Nonnull @NotEmpty final String alias) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keyAlias = Constraint.isNotNull(StringSupport.trimOrNull(alias),
                 "Key alias base cannot be null or empty");
@@ -213,7 +212,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param interval time between key update checks
      */
     public void setUpdateInterval(@Nonnull final Duration interval) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         Constraint.isNotNull(interval, "Interval cannot be null");
         Constraint.isFalse(interval.isNegative(), "Interval cannot be negative");
@@ -229,7 +228,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
      * @param timer timer used to schedule update tasks
      */
     public void setUpdateTaskTimer(@Nullable final Timer timer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         updateTaskTimer = timer;
     }
@@ -291,7 +290,7 @@ public class BasicKeystoreKeyStrategy extends AbstractInitializableComponent imp
     /** {@inheritDoc} */
     @Override
     @Nonnull public Pair<String,SecretKey> getDefaultKey() throws KeyException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         
         synchronized(this) {
             if (defaultKey != null) {
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/impl/DelegatingAccessControlService.java b/src/main/java/net/shibboleth/utilities/java/support/security/impl/DelegatingAccessControlService.java
index 6201144..058d113 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/impl/DelegatingAccessControlService.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/impl/DelegatingAccessControlService.java
@@ -26,7 +26,6 @@ import org.slf4j.LoggerFactory;
 import jakarta.servlet.ServletRequest;
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.security.AccessControl;
 import net.shibboleth.utilities.java.support.security.AccessControlService;
@@ -59,7 +58,7 @@ public class DelegatingAccessControlService extends AbstractIdentifiableInitiali
     /** {@inheritDoc} */
     @Override
     @Nonnull public AccessControl getInstance(@Nonnull final String name) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        throwComponentStateExceptions();
         ServiceableComponent<AccessControlService> component = null;
         try {
             component = service.getServiceableComponent();
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/impl/IPRangeAccessControl.java b/src/main/java/net/shibboleth/utilities/java/support/security/impl/IPRangeAccessControl.java
index 4f1be6c..7f09017 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/impl/IPRangeAccessControl.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/impl/IPRangeAccessControl.java
@@ -24,20 +24,18 @@ 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.component.AbstractIdentifiableInitializableComponent;
-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.net.IPRange;
-import net.shibboleth.utilities.java.support.security.AccessControl;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.net.InetAddresses;
 
 import jakarta.servlet.ServletRequest;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.net.HttpServletSupport;
+import net.shibboleth.utilities.java.support.net.IPRange;
+import net.shibboleth.utilities.java.support.security.AccessControl;
 
 /**
  * Simple access control implementation based on IP address checking.
@@ -64,7 +62,7 @@ public class IPRangeAccessControl extends AbstractIdentifiableInitializableCompo
      * @param ranges ranges to allow
      */
     public void setAllowedRanges(@Nonnull @NonnullElements final Collection<IPRange> ranges) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         Constraint.isNotNull(ranges, "IPRange collection cannot be null");
         
         allowedRanges = List.copyOf(ranges);
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/impl/ScriptedKeyStrategy.java b/src/main/java/net/shibboleth/utilities/java/support/security/impl/ScriptedKeyStrategy.java
index 219fc4c..e33c07e 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/impl/ScriptedKeyStrategy.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/impl/ScriptedKeyStrategy.java
@@ -31,21 +31,20 @@ import javax.script.ScriptContext;
 import javax.script.ScriptException;
 import javax.script.SimpleScriptContext;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.utilities.java.support.annotation.constraint.NonNegative;
 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.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.TimerSupport;
 import net.shibboleth.utilities.java.support.scripting.EvaluableScript;
 import net.shibboleth.utilities.java.support.security.DataSealerKeyStrategy;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 
 /**
  * Implements a strategy for access to versioned symmetric keys using scripts.
@@ -100,8 +99,7 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
      * @param script script to run
      */
     public void setKeyScript(@Nonnull final EvaluableScript script) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         keyScript = Constraint.isNotNull(script, "Script cannot be null");
     }
@@ -113,8 +111,7 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
      * @param object the custom object
      */
     public void setCustomObject(@Nullable final Object object) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         customObject = object;
     }
@@ -128,8 +125,7 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
      * @param interval time between key update checks
      */
     public void setUpdateInterval(@Nonnull final Duration interval) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
         
         Constraint.isNotNull(interval, "Interval cannot be null");
         Constraint.isFalse(interval.isNegative(), "Interval cannot be negative");
@@ -145,8 +141,7 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
      * @param timer timer used to schedule update tasks
      */
     public void setUpdateTaskTimer(@Nullable final Timer timer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         updateTaskTimer = timer;
     }
@@ -159,8 +154,7 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
      * @param size size of cache
      */
     public void setCacheSize(@NonNegative final long size) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        throwSetterPreconditionExceptions();
 
         cacheSize = Constraint.isGreaterThanOrEqual(0, size, "Key cache size cannot be negative");
     }
@@ -217,8 +211,8 @@ public class ScriptedKeyStrategy extends AbstractInitializableComponent implemen
 
     /** {@inheritDoc} */
     @Nonnull public Pair<String,SecretKey> getDefaultKey() throws KeyException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        
+        throwComponentStateExceptions();
+
         synchronized(this) {
             if (defaultKey != null) {
                 return new Pair<>(currentAlias, defaultKey);
diff --git a/src/main/java/net/shibboleth/utilities/java/support/service/AbstractReloadableService.java b/src/main/java/net/shibboleth/utilities/java/support/service/AbstractReloadableService.java
index 4bc4e3d..75b01e6 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/service/AbstractReloadableService.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/service/AbstractReloadableService.java
@@ -25,17 +25,16 @@ import java.util.TimerTask;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 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.component.UnmodifiableComponent;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.TimerSupport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * Base class for {@link ReloadableService}. This base class will use a background thread that will perform a periodic
  * check, via {@link #shouldReload()}, and, if required, invoke the service's {@link #reload()} method.
@@ -105,7 +104,7 @@ public abstract class AbstractReloadableService<T> extends AbstractIdentifiableI
      * @param delay between one reload check and another
      */
     public void setReloadCheckDelay(@Nonnull final Duration delay) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         reloadCheckDelay = Constraint.isNotNull(delay, "Delay cannot be null");
     }
@@ -127,7 +126,7 @@ public abstract class AbstractReloadableService<T> extends AbstractIdentifiableI
      * @param timer timer used to schedule configuration reload tasks
      */
     public void setReloadTaskTimer(@Nullable final Timer timer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
 
         reloadTaskTimer = timer;
     }
@@ -162,7 +161,7 @@ public abstract class AbstractReloadableService<T> extends AbstractIdentifiableI
      * @param value what to set.
      */
     public void setFailFast(final boolean value) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         failFast = value;
     }
 
diff --git a/src/main/java/net/shibboleth/utilities/java/support/service/ReloadableServiceGaugeSet.java b/src/main/java/net/shibboleth/utilities/java/support/service/ReloadableServiceGaugeSet.java
index 4ff941d..cbdf1a5 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/service/ReloadableServiceGaugeSet.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/service/ReloadableServiceGaugeSet.java
@@ -16,6 +16,13 @@
  */
 package net.shibboleth.utilities.java.support.service;
 
+import java.time.Instant;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
+
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricFilter;
@@ -29,16 +36,8 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
 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 java.time.Instant;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.annotation.Nonnull;
-
 /**
  * A set of gauges for a reloadable service.
  * @param <T> Type of service we are monitoring
@@ -106,7 +105,7 @@ public class ReloadableServiceGaugeSet<T> extends AbstractInitializableComponent
      * @param svc service instance
      */
     public void setService(@Nonnull final ReloadableService<T> svc) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        throwSetterPreconditionExceptions();
         
         service = Constraint.isNotNull(svc, "ReloadableService cannot be null");
     }
diff --git a/src/main/java/net/shibboleth/utilities/java/support/xml/BasicParserPool.java b/src/main/java/net/shibboleth/utilities/java/support/xml/BasicParserPool.java
index e224b33..c10c2a1 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/xml/BasicParserPool.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/xml/BasicParserPool.java
@@ -36,16 +36,6 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.validation.Schema;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.DOMImplementation;
@@ -59,6 +49,15 @@ import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.StringSupport;
+
 //TODO(lajoie) see if we can use either java.util.concurrent or Guava 
 // classes for the pool so we don't have to manage synchronicity
 
@@ -151,7 +150,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
     /** {@inheritDoc} */
     @Override
     @Nonnull public DocumentBuilder getBuilder() throws XMLParserException {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         DocumentBuilder builder = null;
 
@@ -178,7 +177,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
 //CheckStyle: ReturnCount OFF
     /** {@inheritDoc} */
     @Override public void returnBuilder(@Nullable final DocumentBuilder builder) {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         if (builder == null || !(builder instanceof DocumentBuilderProxy)) {
             return;
@@ -216,7 +215,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
     /** {@inheritDoc} */
     @Override
     @Nonnull public Document newDocument() throws XMLParserException {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         DocumentBuilder builder = null;
         final Document document;
@@ -238,7 +237,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
     /** {@inheritDoc} */
     @Override
     @Nonnull public Document parse(@Nonnull final InputStream input) throws XMLParserException {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         Constraint.isNotNull(input, "Input stream can not be null");
 
@@ -261,7 +260,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
     /** {@inheritDoc} */
     @Override
     @Nonnull public Document parse(@Nonnull final Reader input) throws XMLParserException {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         Constraint.isNotNull(input, "Input reader can not be null");
 
@@ -290,7 +289,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param name name of attribute
      */
     public void setSecurityManagerAttributeName(@Nullable final String name) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
         
         securityManagerAttributeName = StringSupport.trimOrNull(name);
     }
@@ -310,7 +309,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param newSize max number of builders the pool will hold
      */
     public void setMaxPoolSize(final int newSize) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         maxPoolSize = (int) Constraint.isGreaterThan(0, newSize, "New maximum pool size must be greater than 0");
     }
@@ -330,7 +329,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param newAttributes builder attributes used when creating builders
      */
     public void setBuilderAttributes(@Nullable @NullableElements final Map<String, Object> newAttributes) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         if (newAttributes == null) {
             builderAttributes = Collections.emptyMap();
@@ -354,7 +353,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param isCoalescing whether the builders are coalescing
      */
     public void setCoalescing(final boolean isCoalescing) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         coalescing = isCoalescing;
     }
@@ -374,7 +373,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param expand whether builders expand entity references
      */
     public void setExpandEntityReferences(final boolean expand) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         expandEntityReferences = expand;
     }
@@ -394,7 +393,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param newFeatures the builders' features
      */
     public void setBuilderFeatures(@Nullable @NullableElements final Map<String, Boolean> newFeatures) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         if (newFeatures == null) {
             builderFeatures = Collections.emptyMap();
@@ -418,7 +417,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param ignore The ignoreComments to set.
      */
     public void setIgnoreComments(final boolean ignore) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         ignoreComments = ignore;
     }
@@ -438,7 +437,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param ignore whether the builders ignore element content whitespace
      */
     public void setIgnoreElementContentWhitespace(final boolean ignore) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         ignoreElementContentWhitespace = ignore;
     }
@@ -458,7 +457,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param isNamespaceAware whether the builders are namespace aware
      */
     public void setNamespaceAware(final boolean isNamespaceAware) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         namespaceAware = isNamespaceAware;
     }
@@ -478,7 +477,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param newSchema schema used to validate the XML document during the parsing process
      */
     public void setSchema(@Nullable final Schema newSchema) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         schema = newSchema;
         if (schema != null) {
@@ -503,7 +502,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param resolver the new entity resolver, may be null
      */
     public void setEntityResolver(@Nullable final EntityResolver resolver) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
         entityResolver = resolver;
     }
 
@@ -522,7 +521,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param handler the new error handler
      */
     public void setErrorHandler(@Nonnull final ErrorHandler handler) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
         errorHandler = Constraint.isNotNull(handler, "ErrorHandler may not be null");
     }
 
@@ -541,7 +540,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param isValidating whether the builders are validating
      */
     public void setDTDValidating(final boolean isValidating) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         dtdValidating = isValidating;
     }
@@ -561,7 +560,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @param isXIncludeAware whether the builders are XInclude aware
      */
     public void setXincludeAware(final boolean isXIncludeAware) {
-        checkNotInitializedNotDestroyed();
+        throwSetterPreconditionExceptions();
 
         xincludeAware = isXIncludeAware;
     }
@@ -583,7 +582,7 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
      * @throws XMLParserException thrown if their is a configuration error with the builder factory
      */
     @Nonnull protected DocumentBuilder createBuilder() throws XMLParserException {
-        checkInitializedNotDestroyed();
+        throwComponentStateExceptions();
 
         try {
             final DocumentBuilder builder = builderFactory.newDocumentBuilder();
@@ -663,18 +662,6 @@ public class BasicParserPool extends AbstractInitializableComponent implements P
         builderPool.clear();
         super.doDestroy();
     }
-
-    /** Helper method to test class state. */
-    private void checkInitializedNotDestroyed() {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-    }
-
-    /** Helper method to test class state. */
-    private void checkNotInitializedNotDestroyed() {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
-    }
     
     /**
      * Build the default set of parser features to use.

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


More information about the commits mailing list