[java-opensaml] branch main updated: IDP-2069 - Null Handling Task

Scott Cantor cantor.2 at osu.edu
Tue Mar 14 21:28:24 UTC 2023


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

scantor pushed a commit to branch main
in repository java-opensaml.

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

The following commit(s) were added to refs/heads/main by this push:
     new 4cd93fe71 IDP-2069 - Null Handling Task
4cd93fe71 is described below

commit 4cd93fe71b823c75c184353da340efb691f904c1
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Mar 14 17:28:21 2023 -0400

    IDP-2069 - Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Add more annotations to undocumented interfaces.
    Add an ensure getter method to ConfigurationService.
---
 .../org/opensaml/core/config/Configuration.java    |  6 ++--
 .../core/config/ConfigurationPropertiesSource.java |  6 ++--
 .../opensaml/core/config/ConfigurationService.java | 34 +++++++++++++++++-----
 .../core/config/InitializationService.java         |  5 ++--
 ...actFilesystemConfigurationPropertiesSource.java | 11 ++++---
 .../ClasspathConfigurationPropertiesSource.java    | 13 +++++----
 .../config/provider/MapBasedConfiguration.java     | 11 ++++---
 ...ystemPropertyConfigurationPropertiesSource.java |  4 ++-
 ...rtyFilesystemConfigurationPropertiesSource.java |  3 +-
 .../ThreadLocalConfigurationPropertiesHolder.java  |  5 ++--
 .../ThreadLocalConfigurationPropertiesSource.java  |  4 ++-
 .../core/metrics/LoggerDrivenMetricFilter.java     |  6 ++--
 .../AbstractXMLObjectProviderInitializer.java      |  9 ++++--
 .../xml/config/GlobalParserPoolInitializer.java    |  6 ++--
 .../opensaml/core/xml/config/XMLConfigurator.java  | 25 ++++++++++------
 .../xml/config/XMLObjectProviderInitializer.java   |  8 +++--
 .../core/xml/config/XMLObjectProviderRegistry.java | 31 ++++++++++----------
 .../config/XMLObjectProviderRegistrySupport.java   | 28 +++++++++---------
 .../core/config/ConfigurationServiceTest.java      |  4 +--
 ...ClasspathConfigurationPropertiesSourceTest.java |  4 +--
 ...ilesystemConfigurationPropertiesSourceTest.java |  4 +--
 ...readLocalConfigurationPropertiesSourceTest.java |  6 ++--
 22 files changed, 145 insertions(+), 88 deletions(-)

diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/Configuration.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/Configuration.java
index 2c1823716..162c47651 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/Configuration.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/Configuration.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.core.config;
 
+import javax.annotation.Nullable;
+
 /**
  * A component which provides for the registration, retrieval and deregistration of objects
  * related to library module configuration.
@@ -38,7 +40,7 @@ public interface Configuration {
      * 
      * @return the instance of the registered configuration interface, or null
      */
-    public <T extends Object> T get(Class<T> configClass, String partitionName);
+    @Nullable public <T extends Object> T get(Class<T> configClass, String partitionName);
     
     /**
      * Register a configuration instance.
@@ -62,6 +64,6 @@ public interface Configuration {
      * 
      * @return the configuration implementation instance which was deregistered, or null
      */
-    public <T extends Object> T deregister(Class<T> configClass, String partitionName);
+    @Nullable public <T extends Object> T deregister(Class<T> configClass, String partitionName);
 
 }
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationPropertiesSource.java
index eb04c9446..ced1c02f2 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationPropertiesSource.java
@@ -19,6 +19,8 @@ package org.opensaml.core.config;
 
 import java.util.Properties;
 
+import javax.annotation.Nullable;
+
 /**
  * An interface for a component which exposes a property set from a source.
  */
@@ -27,8 +29,8 @@ public interface ConfigurationPropertiesSource {
     /**
      * Get the property set exposed by the source.
      * 
-     * @return the properties set
+     * @return the properties set or null
      */
-    public Properties getProperties();
+    @Nullable Properties getProperties();
     
 }
\ No newline at end of file
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationService.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationService.java
index 331fb69c8..037c2e624 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationService.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/ConfigurationService.java
@@ -26,11 +26,11 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 import org.opensaml.core.config.provider.MapBasedConfiguration;
 import org.opensaml.core.config.provider.SystemPropertyConfigurationPropertiesSource;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A service which provides for the registration, retrieval and deregistration of objects
@@ -59,10 +59,10 @@ import org.slf4j.LoggerFactory;
 public class ConfigurationService {
     
     /** The default storage partition name, if none is specified using configuration properties. */
-    @Nonnull public static final String DEFAULT_PARTITION_NAME = "default";
+    @Nonnull @NotEmpty public static final String DEFAULT_PARTITION_NAME = "default";
     
     /** The configuration property name for the storage partition name to use. */
-    @Nonnull public static final String PROPERTY_PARTITION_NAME = "opensaml.config.partitionName";
+    @Nonnull @NotEmpty public static final String PROPERTY_PARTITION_NAME = "opensaml.config.partitionName";
     
     /** Logger. */
     @Nonnull private static final Logger LOG = LoggerFactory.getLogger(ConfigurationService.class);
@@ -72,7 +72,7 @@ public class ConfigurationService {
         ServiceLoader.load(ConfigurationPropertiesSource.class) ;
     
     /** The configuration instance to use. */
-    private static Configuration configuration;
+    @Nullable private static Configuration configuration;
     
     /** Constructor. */
     protected ConfigurationService() { }
@@ -86,11 +86,28 @@ public class ConfigurationService {
      * 
      * @return the instance of the registered configuration object, or null
      */
-    public static <T extends Object> T get(@Nonnull final Class<T> configClass) {
+    @Nullable public static <T extends Object> T get(@Nonnull final Class<T> configClass) {
         final String partitionName = getPartitionName();
         return getConfiguration().get(configClass, partitionName);
     }
-    
+
+    /**
+     * Obtain the registered configuration instance, raising an exception if absent.
+     * 
+     * @param <T> the type of configuration being retrieved
+     * 
+     * @param configClass the configuration class identifier
+     * 
+     * @return the instance of the registered configuration object
+     * 
+     * @since 5.0.0
+     */
+    @Nonnull public static <T extends Object> T ensure(@Nonnull final Class<T> configClass) {
+        final String partitionName = getPartitionName();
+        return Constraint.isNotNull(getConfiguration().get(configClass, partitionName),
+                "Configuration instance of type " + configClass.getName() + " was unavailable");
+    }
+
     /**
      * Register a configuration instance.
      * 
@@ -115,7 +132,7 @@ public class ConfigurationService {
      * 
      * @return the configuration object instance which was deregistered, or null
      */
-    public static <T extends Object> T deregister(@Nonnull final Class<T> configClass) {
+    @Nullable public static <T extends Object> T deregister(@Nonnull final Class<T> configClass) {
         final String partitionName = getPartitionName();
         return getConfiguration().deregister(configClass, partitionName);
     }
@@ -197,6 +214,7 @@ public class ConfigurationService {
             partitionName = DEFAULT_PARTITION_NAME;
         }
         LOG.trace("Resolved effective configuration partition name '{}'", partitionName);
+        assert partitionName != null;
         return partitionName;
     }
 
@@ -224,6 +242,8 @@ public class ConfigurationService {
                 }
             }
         }
+        
+        assert configuration != null;
         return configuration;
     }
     
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/InitializationService.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/InitializationService.java
index f623774fe..5f254896b 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/InitializationService.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/InitializationService.java
@@ -23,7 +23,8 @@ import java.util.ServiceLoader;
 import javax.annotation.Nonnull;
 
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Service which initializes OpenSAML library modules using the Java Services API.
@@ -67,7 +68,7 @@ public class InitializationService {
      * 
      * @return the service loader instance to use
      */
-    private static ServiceLoader<Initializer> getServiceLoader() {
+    @Nonnull private static ServiceLoader<Initializer> getServiceLoader() {
         // TODO ideally would store off loader and reuse on subsequent calls,
         // so inited state in providers would be persisted across calls,
         // avoiding re-initing problems
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/AbstractFilesystemConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/AbstractFilesystemConfigurationPropertiesSource.java
index 853e56378..7196ab8f8 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/AbstractFilesystemConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/AbstractFilesystemConfigurationPropertiesSource.java
@@ -24,10 +24,13 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.core.config.ConfigurationPropertiesSource;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
 
 /**
@@ -44,10 +47,10 @@ public abstract class AbstractFilesystemConfigurationPropertiesSource implements
     private Properties cachedProperties;
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(AbstractFilesystemConfigurationPropertiesSource.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(AbstractFilesystemConfigurationPropertiesSource.class);
     
     /** {@inheritDoc} */
-    public Properties getProperties() {
+    @Nullable public Properties getProperties() {
         final String fileName = StringSupport.trimOrNull(getFilename());
         if (fileName == null) {
             log.warn("No filename was supplied, unable to load properties");
@@ -82,5 +85,5 @@ public abstract class AbstractFilesystemConfigurationPropertiesSource implements
      * 
      * @return the absolute filename
      */
-    protected abstract String getFilename();
+    @Nullable protected abstract String getFilename();
 }
\ No newline at end of file
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSource.java
index 71732fd37..36598148e 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSource.java
@@ -22,10 +22,13 @@ import java.io.InputStream;
 import java.util.Properties;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import org.opensaml.core.config.ConfigurationPropertiesSource;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * A configuration properties source implementation which obtains the properties set
@@ -34,19 +37,19 @@ import org.slf4j.LoggerFactory;
 public class ClasspathConfigurationPropertiesSource implements ConfigurationPropertiesSource {
     
     /** Configuration properties resource name. */
-    @Nonnull private static final String RESOURCE_NAME = "opensaml-config.properties";
+    @Nonnull @NotEmpty private static final String RESOURCE_NAME = "opensaml-config.properties";
     
     /** Logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(ClasspathConfigurationPropertiesSource.class);
 
     /** Cache of properties. */
-    private Properties cachedProperties;
+    @Nullable private Properties cachedProperties;
     
     /** {@inheritDoc} */
-    public Properties getProperties() {
+    @Nullable public Properties getProperties() {
         synchronized (this) {
             if (cachedProperties == null) {
-                try (InputStream is =
+                try (final InputStream is =
                         Thread.currentThread().getContextClassLoader().getResourceAsStream(RESOURCE_NAME)) {
                     // NOTE: in this invocation style via class loader, resource should NOT have a leading slash
                     // because all names are absolute. This is unlike Class.getResourceAsStream 
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/MapBasedConfiguration.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/MapBasedConfiguration.java
index d5dc36916..6c26847f8 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/MapBasedConfiguration.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/MapBasedConfiguration.java
@@ -20,6 +20,9 @@ package org.opensaml.core.config.provider;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.core.config.Configuration;
 
 /**
@@ -29,7 +32,7 @@ import org.opensaml.core.config.Configuration;
 public class MapBasedConfiguration implements Configuration {
     
     /** Storage for registered configuration objects. */
-    private Map<String, Map<String, Object>> storage;
+    @Nonnull private final Map<String, Map<String, Object>> storage;
     
     /** Constructor. */
     public MapBasedConfiguration() {
@@ -46,7 +49,7 @@ public class MapBasedConfiguration implements Configuration {
      * 
      * @return the instance of the registered configuration interface, or null
      */
-    public <T extends Object> T get(final Class<T> configClass, final String partitionName) {
+    @Nullable public <T extends Object> T get(final Class<T> configClass, final String partitionName) {
         final Map<String, Object> partition = getPartition(partitionName);
         return configClass.cast(partition.get(configClass.getName()));
     }
@@ -77,7 +80,7 @@ public class MapBasedConfiguration implements Configuration {
      * 
      * @return the configuration implementation instance which was deregistered, or null
      */
-    public <T extends Object> T deregister(final Class<T> configClass, final String partitionName) {
+    @Nullable public <T extends Object> T deregister(final Class<T> configClass, final String partitionName) {
         final Map<String, Object> partition = getPartition(partitionName);
         synchronized (partition) {
             final T old = configClass.cast(partition.get(configClass.getName()));
@@ -93,7 +96,7 @@ public class MapBasedConfiguration implements Configuration {
      * 
      * @return the Map corresponding to the partition name.  A new empty Map will be created if necessary
      */
-    private synchronized Map<String, Object> getPartition(final String partitionName) {
+    @Nonnull private synchronized Map<String, Object> getPartition(final String partitionName) {
         Map<String, Object> partition = storage.get(partitionName);
         if (partition == null) {
             partition = new ConcurrentHashMap<>();
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyConfigurationPropertiesSource.java
index c6afd9e1c..be4afbcc7 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyConfigurationPropertiesSource.java
@@ -19,6 +19,8 @@ package org.opensaml.core.config.provider;
 
 import java.util.Properties;
 
+import javax.annotation.Nullable;
+
 import org.opensaml.core.config.ConfigurationPropertiesSource;
 
 /**
@@ -27,7 +29,7 @@ import org.opensaml.core.config.ConfigurationPropertiesSource;
 public class SystemPropertyConfigurationPropertiesSource implements ConfigurationPropertiesSource {
 
     /** {@inheritDoc} */
-    public Properties getProperties() {
+    @Nullable public Properties getProperties() {
         return System.getProperties();
     }
 
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyFilesystemConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyFilesystemConfigurationPropertiesSource.java
index 9d0ac9c64..34eb24d30 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyFilesystemConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/SystemPropertyFilesystemConfigurationPropertiesSource.java
@@ -18,6 +18,7 @@
 package org.opensaml.core.config.provider;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
@@ -33,7 +34,7 @@ public class SystemPropertyFilesystemConfigurationPropertiesSource extends
 
     /** {@inheritDoc} */
     @Override
-    protected String getFilename() {
+    @Nullable protected String getFilename() {
         return System.getProperty(PROPERTY_FILE_NAME);
     }
     
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesHolder.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesHolder.java
index cff77eb02..147a2c63a 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesHolder.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesHolder.java
@@ -20,6 +20,7 @@ package org.opensaml.core.config.provider;
 import java.util.Properties;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 /**
  * A container class for holding a {link {@link ThreadLocal} copy of a {@link Properties} instance.
@@ -37,7 +38,7 @@ public final class ThreadLocalConfigurationPropertiesHolder {
      * 
      * @return the thread-local Properties
      */
-    public static Properties getProperties() {
+    @Nullable public static Properties getProperties() {
         return properties.get();
     }
     
@@ -46,7 +47,7 @@ public final class ThreadLocalConfigurationPropertiesHolder {
      * 
      * @param newProperties the new thread-local Properties instance
      */
-    public static void setProperties(final Properties newProperties) {
+    public static void setProperties(@Nullable final Properties newProperties) {
         properties.set(newProperties);
     }
     
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSource.java b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSource.java
index e0521a240..5955c6a9f 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSource.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSource.java
@@ -19,6 +19,8 @@ package org.opensaml.core.config.provider;
 
 import java.util.Properties;
 
+import javax.annotation.Nullable;
+
 import org.opensaml.core.config.ConfigurationPropertiesSource;
 
 /**
@@ -48,7 +50,7 @@ import org.opensaml.core.config.ConfigurationPropertiesSource;
 public class ThreadLocalConfigurationPropertiesSource implements ConfigurationPropertiesSource {
 
     /** {@inheritDoc} */
-    public Properties getProperties() {
+    @Nullable public Properties getProperties() {
         return ThreadLocalConfigurationPropertiesHolder.getProperties();
     }
 
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/metrics/LoggerDrivenMetricFilter.java b/opensaml-core-api/src/main/java/org/opensaml/core/metrics/LoggerDrivenMetricFilter.java
index 871bc117e..906c3ae64 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/metrics/LoggerDrivenMetricFilter.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/metrics/LoggerDrivenMetricFilter.java
@@ -17,7 +17,6 @@
 
 package org.opensaml.core.metrics;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,6 +26,7 @@ import javax.annotation.Nullable;
 import net.shibboleth.shared.annotation.ParameterName;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.StringSupport;
 
@@ -75,7 +75,7 @@ public class LoggerDrivenMetricFilter implements MetricFilter {
      * @param prefix prefix to attach to metric name before evaluating
      */
     public LoggerDrivenMetricFilter(@Nonnull @NotEmpty @ParameterName(name="prefix") final String prefix) {
-        this(prefix, Collections.<String,Level>emptyMap());
+        this(prefix, CollectionSupport.emptyMap());
     }
     
     /**
@@ -89,7 +89,7 @@ public class LoggerDrivenMetricFilter implements MetricFilter {
         loggerPrefix = Constraint.isNotNull(StringSupport.trimOrNull(prefix), "Prefix cannot be null or empty.");
         
         if (map == null || map.isEmpty()) {
-            levelMap = Collections.emptyMap();
+            levelMap = CollectionSupport.emptyMap();
         } else {
             levelMap = new HashMap<>(map.size());
             for (final Map.Entry<String,Level> entry : map.entrySet()) {
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/AbstractXMLObjectProviderInitializer.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/AbstractXMLObjectProviderInitializer.java
index 6321cc64a..28a0538cc 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/AbstractXMLObjectProviderInitializer.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/AbstractXMLObjectProviderInitializer.java
@@ -20,10 +20,13 @@ package org.opensaml.core.xml.config;
 import java.io.IOException;
 import java.io.InputStream;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.config.InitializationException;
 import org.opensaml.core.config.Initializer;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /**
  * Reads in an XML configuration and configures the XMLTooling library accordingly.
@@ -31,7 +34,7 @@ import org.slf4j.LoggerFactory;
 public abstract class AbstractXMLObjectProviderInitializer implements Initializer {
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(AbstractXMLObjectProviderInitializer.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractXMLObjectProviderInitializer.class);
     
     /** {@inheritDoc} */
     public void init() throws InitializationException {
@@ -72,6 +75,6 @@ public abstract class AbstractXMLObjectProviderInitializer implements Initialize
      * 
      * @return the list of configuration file resources
      */
-    protected abstract String[] getConfigResources();
+    @Nonnull protected abstract String[] getConfigResources();
 
 }
\ No newline at end of file
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/GlobalParserPoolInitializer.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/GlobalParserPoolInitializer.java
index 3fd5d4754..e4cf26d2a 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/GlobalParserPoolInitializer.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/GlobalParserPoolInitializer.java
@@ -18,13 +18,15 @@
 package org.opensaml.core.xml.config;
 
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.xml.impl.BasicParserPool;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.config.ConfigurationService;
 import org.opensaml.core.config.InitializationException;
 import org.opensaml.core.config.Initializer;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * An initializer for the global parser pool held by the {@link XMLObjectProviderRegistry}.
@@ -47,7 +49,7 @@ import org.slf4j.LoggerFactory;
 public class GlobalParserPoolInitializer implements Initializer {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(GlobalParserPoolInitializer.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(GlobalParserPoolInitializer.class);
 
     /** {@inheritDoc} */
     public void init() throws InitializationException {
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLConfigurator.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLConfigurator.java
index 50cb8a32f..43b268708 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLConfigurator.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLConfigurator.java
@@ -35,6 +35,7 @@ import javax.xml.validation.SchemaFactory;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.xml.AttributeSupport;
 import net.shibboleth.shared.xml.ElementSupport;
@@ -47,7 +48,7 @@ import org.opensaml.core.xml.XMLObjectBuilder;
 import org.opensaml.core.xml.io.Marshaller;
 import org.opensaml.core.xml.io.Unmarshaller;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -75,10 +76,10 @@ public class XMLConfigurator {
     @Nonnull private final Logger log = LoggerFactory.getLogger(XMLConfigurator.class);
 
     /** Pool of parsers used to read and validate configurations. */
-    private BasicParserPool parserPool;
+    @Nonnull private BasicParserPool parserPool;
 
     /** Schema used to validate configuration files. */
-    private Schema configurationSchema;
+    @Nonnull private Schema configurationSchema;
 
     /** The provider registry instance to use. */
     @Nonnull private final XMLObjectProviderRegistry registry;
@@ -225,7 +226,7 @@ public class XMLConfigurator {
      * 
      * @throws XMLConfigurationException thrown if the configuration elements are invalid
      */
-    protected void initializeObjectProviders(final Element objectProviders) throws XMLConfigurationException {
+    protected void initializeObjectProviders(@Nonnull final Element objectProviders) throws XMLConfigurationException {
 
         final NodeList providerList = objectProviders.getElementsByTagNameNS(XMLTOOLING_CONFIG_NS, "ObjectProvider");
         for (int i = 0; i < providerList.getLength(); i++) {
@@ -245,14 +246,17 @@ public class XMLConfigurator {
                 
                 Element configuration =
                         (Element) objectProvider.getElementsByTagNameNS(XMLTOOLING_CONFIG_NS, "BuilderClass").item(0);
+                assert configuration != null;
                 final XMLObjectBuilder<?> builder = (XMLObjectBuilder<?>) createClassInstance(configuration);
 
                 configuration = (Element) objectProvider
                         .getElementsByTagNameNS(XMLTOOLING_CONFIG_NS, "MarshallingClass").item(0);
+                assert configuration != null;
                 final Marshaller marshaller = (Marshaller) createClassInstance(configuration);
 
                 configuration = (Element) objectProvider
                         .getElementsByTagNameNS(XMLTOOLING_CONFIG_NS, "UnmarshallingClass").item(0);
+                assert configuration != null;
                 final Unmarshaller unmarshaller = (Unmarshaller) createClassInstance(configuration);
 
                 getRegistry().registerObjectProvider(objectProviderName, builder, marshaller, unmarshaller);
@@ -276,7 +280,7 @@ public class XMLConfigurator {
      * 
      * @throws XMLConfigurationException thrown if there is a problem with a parsing or registering the ID attribute
      */
-    protected void initializeIDAttributes(final Element idAttributesElement) throws XMLConfigurationException {
+    protected void initializeIDAttributes(@Nonnull final Element idAttributesElement) throws XMLConfigurationException {
         Element idAttributeElement;
         QName attributeQName;
 
@@ -285,6 +289,7 @@ public class XMLConfigurator {
 
         for (int i = 0; i < idAttributeList.getLength(); i++) {
             idAttributeElement = (Element) idAttributeList.item(i);
+            assert idAttributeElement != null;
             attributeQName = ElementSupport.getElementContentAsQName(idAttributeElement);
             if (attributeQName == null) {
                 log.debug("IDAttribute element was empty, no registration performed");
@@ -304,11 +309,12 @@ public class XMLConfigurator {
      * 
      * @throws XMLConfigurationException thrown if the class can not be instantiated
      */
-    protected Object createClassInstance(final Element configuration) throws XMLConfigurationException {
+    @Nonnull protected Object createClassInstance(@Nonnull final Element configuration)
+            throws XMLConfigurationException {
         final String className = StringSupport.trimOrNull(configuration.getAttributeNS(null, "className"));
 
         if (className == null) {
-            return null;
+            throw new XMLConfigurationException("No className attribute in configuration element");
         }
 
         try {
@@ -336,7 +342,7 @@ public class XMLConfigurator {
      * 
      * @throws XMLConfigurationException thrown if the configuration is not schema-valid
      */
-    protected void validateConfiguration(final Document configuration) throws XMLConfigurationException {
+    protected void validateConfiguration(@Nonnull final Document configuration) throws XMLConfigurationException {
         try {
             final javax.xml.validation.Validator schemaValidator = configurationSchema.newValidator();
             schemaValidator.validate(new DOMSource(configuration));
@@ -357,7 +363,8 @@ public class XMLConfigurator {
      * 
      * @return the registry instance
      */
-    protected XMLObjectProviderRegistry getRegistry() {
+    @Nonnull protected XMLObjectProviderRegistry getRegistry() {
         return registry;
     }
+    
 }
\ No newline at end of file
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderInitializer.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderInitializer.java
index fd8d6eb23..992885e88 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderInitializer.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderInitializer.java
@@ -17,6 +17,7 @@
 
 package org.opensaml.core.xml.config;
 
+import javax.annotation.Nonnull;
 import javax.xml.namespace.QName;
 
 import org.opensaml.core.config.ConfigurationService;
@@ -28,14 +29,14 @@ import org.opensaml.core.config.InitializationException;
 public class XMLObjectProviderInitializer extends AbstractXMLObjectProviderInitializer {
     
     /** Config resources. */
-    private static String[] configs = {
+    @Nonnull private static String[] configs = {
         "/default-config.xml",
         "/schema-config.xml",
         };
 
     /** {@inheritDoc} */
     @Override
-    protected String[] getConfigResources() {
+    @Nonnull protected String[] getConfigResources() {
         return configs;
     }
 
@@ -45,6 +46,9 @@ public class XMLObjectProviderInitializer extends AbstractXMLObjectProviderIniti
         super.init();
         
         final XMLObjectProviderRegistry registry = ConfigurationService.get(XMLObjectProviderRegistry.class);
+        if (registry == null) {
+            throw new InitializationException("XMLObjectProviderRegistry was not available");
+        }
         
         registry.registerIDAttribute(new QName(javax.xml.XMLConstants.XML_NS_URI, "id"));
     }
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistry.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistry.java
index d531fbe05..d1977f0ec 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistry.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistry.java
@@ -33,9 +33,10 @@ import org.opensaml.core.xml.io.MarshallerFactory;
 import org.opensaml.core.xml.io.Unmarshaller;
 import org.opensaml.core.xml.io.UnmarshallerFactory;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 import org.w3c.dom.Element;
 
+import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.xml.ParserPool;
 
 /** Configuration registry component for registering and retrieving implementation instances 
@@ -51,29 +52,29 @@ import net.shibboleth.shared.xml.ParserPool;
 public class XMLObjectProviderRegistry {
     
     /** Default object provider. */
-    private static QName defaultProvider = new QName(XMLConfigurator.XMLTOOLING_CONFIG_NS,
+    @Nonnull private static QName defaultProvider = new QName(XMLConfigurator.XMLTOOLING_CONFIG_NS,
             XMLConfigurator.XMLTOOLING_DEFAULT_OBJECT_PROVIDER);
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(XMLObjectProviderRegistry.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(XMLObjectProviderRegistry.class);
 
     /** Object provider configuration elements indexed by QName. */
     @Nonnull private final Map<QName, Element> configuredObjectProviders;
 
     /** Configured XMLObject builder factory. */
-    private XMLObjectBuilderFactory builderFactory;
+    @Nonnull private XMLObjectBuilderFactory builderFactory;
 
     /** Configured XMLObject marshaller factory. */
-    private MarshallerFactory marshallerFactory;
+    @Nonnull private MarshallerFactory marshallerFactory;
 
     /** Configured XMLObject unmarshaller factory. */
-    private UnmarshallerFactory unmarshallerFactory;
+    @Nonnull private UnmarshallerFactory unmarshallerFactory;
 
     /** Configured set of attribute QNames which have been globally registered as having an ID type. */
     @Nonnull private final Set<QName> idAttributeNames;
 
     /** Configured parser pool. */
-    private ParserPool parserPool;
+    @Nullable private ParserPool parserPool;
 
     /** Constructor. */
     public XMLObjectProviderRegistry() {
@@ -91,7 +92,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @return the currently ParserPool
      */
-    public ParserPool getParserPool() {
+    @Nullable public ParserPool getParserPool() {
         return parserPool;
     }
 
@@ -110,7 +111,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @return the QName for the default object provider
      */
-    public QName getDefaultProviderQName() {
+    @Nonnull public QName getDefaultProviderQName() {
         return defaultProvider;
     }
 
@@ -149,7 +150,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @return the XMLObject builder factory
      */
-    public XMLObjectBuilderFactory getBuilderFactory() {
+    @Nonnull public XMLObjectBuilderFactory getBuilderFactory() {
         return builderFactory;
     }
 
@@ -158,7 +159,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @return the XMLObject marshaller factory
      */
-    public MarshallerFactory getMarshallerFactory() {
+    @Nonnull public MarshallerFactory getMarshallerFactory() {
         return marshallerFactory;
     }
 
@@ -168,7 +169,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @return the XMLObject unmarshaller factory
      */
-    public UnmarshallerFactory getUnmarshallerFactory() {
+    @Nonnull public UnmarshallerFactory getUnmarshallerFactory() {
         return unmarshallerFactory;
     }
 
@@ -177,7 +178,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @param attributeName the QName of the ID attribute to be registered
      */
-    public void registerIDAttribute(final QName attributeName) {
+    public void registerIDAttribute(@Nonnull final QName attributeName) {
         if (!idAttributeNames.contains(attributeName)) {
             idAttributeNames.add(attributeName);
         }
@@ -188,7 +189,7 @@ public class XMLObjectProviderRegistry {
      * 
      * @param attributeName the QName of the ID attribute to be de-registered
      */
-    public void deregisterIDAttribute(final QName attributeName) {
+    public void deregisterIDAttribute(@Nonnull final QName attributeName) {
         if (idAttributeNames.contains(attributeName)) {
             idAttributeNames.remove(attributeName);
         }
@@ -200,7 +201,7 @@ public class XMLObjectProviderRegistry {
      * @param attributeName the QName of the attribute to be checked for ID type.
      * @return true if attribute is registered as having an ID type.
      */
-    public boolean isIDAttribute(final QName attributeName) {
+    public boolean isIDAttribute(@Nonnull final QName attributeName) {
         return idAttributeNames.contains(attributeName);
     }
     
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistrySupport.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistrySupport.java
index 66962947d..7dd55b4f0 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistrySupport.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/config/XMLObjectProviderRegistrySupport.java
@@ -45,7 +45,7 @@ public class XMLObjectProviderRegistrySupport {
      * @return the currently ParserPool
      */
     @Nullable public static ParserPool getParserPool() {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).getParserPool();
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).getParserPool();
     }
 
     /**
@@ -54,7 +54,7 @@ public class XMLObjectProviderRegistrySupport {
      * @param newParserPool the new ParserPool instance to configure
      */
     public static void setParserPool(@Nullable final ParserPool newParserPool) {
-        ConfigurationService.get(XMLObjectProviderRegistry.class).setParserPool(newParserPool);
+        ConfigurationService.ensure(XMLObjectProviderRegistry.class).setParserPool(newParserPool);
     }
     
     /**
@@ -64,7 +64,7 @@ public class XMLObjectProviderRegistrySupport {
      * @return the QName for the default object provider
      */
     public static QName getDefaultProviderQName() {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).getDefaultProviderQName();
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).getDefaultProviderQName();
     }
 
     /**
@@ -79,7 +79,7 @@ public class XMLObjectProviderRegistrySupport {
     public static void registerObjectProvider(@Nonnull final QName providerName,
             @Nonnull final XMLObjectBuilder<?> builder, @Nonnull final Marshaller marshaller,
             @Nonnull final Unmarshaller unmarshaller) {
-        final XMLObjectProviderRegistry registry = ConfigurationService.get(XMLObjectProviderRegistry.class);
+        final XMLObjectProviderRegistry registry = ConfigurationService.ensure(XMLObjectProviderRegistry.class);
         
         registry.getBuilderFactory().registerBuilder(providerName, builder);
         registry.getMarshallerFactory().registerMarshaller(providerName, marshaller);
@@ -92,7 +92,7 @@ public class XMLObjectProviderRegistrySupport {
      * @param key the key of the builder, marshaller, and unmarshaller to be removed
      */
     public static void deregisterObjectProvider(@Nonnull final QName key) {
-        final XMLObjectProviderRegistry registry = ConfigurationService.get(XMLObjectProviderRegistry.class);
+        final XMLObjectProviderRegistry registry = ConfigurationService.ensure(XMLObjectProviderRegistry.class);
         registry.getBuilderFactory().deregisterBuilder(key);
         registry.getMarshallerFactory().deregisterMarshaller(key);
         registry.getUnmarshallerFactory().deregisterUnmarshaller(key);
@@ -104,7 +104,7 @@ public class XMLObjectProviderRegistrySupport {
      * @return the XMLObject builder factory
      */
     public static XMLObjectBuilderFactory getBuilderFactory() {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).getBuilderFactory();
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).getBuilderFactory();
     }
 
     /**
@@ -113,7 +113,7 @@ public class XMLObjectProviderRegistrySupport {
      * @return the XMLObject marshaller factory
      */
     public static MarshallerFactory getMarshallerFactory() {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).getMarshallerFactory();
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).getMarshallerFactory();
     }
 
     /**
@@ -123,7 +123,7 @@ public class XMLObjectProviderRegistrySupport {
      * @return the XMLObject unmarshaller factory
      */
     public static UnmarshallerFactory getUnmarshallerFactory() {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).getUnmarshallerFactory();
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).getUnmarshallerFactory();
     }
 
     /**
@@ -131,8 +131,8 @@ public class XMLObjectProviderRegistrySupport {
      * 
      * @param attributeName the QName of the ID attribute to be registered
      */
-    public static void registerIDAttribute(final QName attributeName) {
-        ConfigurationService.get(XMLObjectProviderRegistry.class).registerIDAttribute(attributeName);
+    public static void registerIDAttribute(@Nonnull final QName attributeName) {
+        ConfigurationService.ensure(XMLObjectProviderRegistry.class).registerIDAttribute(attributeName);
     }
 
     /**
@@ -140,8 +140,8 @@ public class XMLObjectProviderRegistrySupport {
      * 
      * @param attributeName the QName of the ID attribute to be de-registered
      */
-    public static void deregisterIDAttribute(final QName attributeName) {
-        ConfigurationService.get(XMLObjectProviderRegistry.class).deregisterIDAttribute(attributeName);
+    public static void deregisterIDAttribute(@Nonnull final QName attributeName) {
+        ConfigurationService.ensure(XMLObjectProviderRegistry.class).deregisterIDAttribute(attributeName);
     }
 
     /**
@@ -150,8 +150,8 @@ public class XMLObjectProviderRegistrySupport {
      * @param attributeName the QName of the attribute to be checked for ID type.
      * @return true if attribute is registered as having an ID type.
      */
-    public static boolean isIDAttribute(final QName attributeName) {
-        return ConfigurationService.get(XMLObjectProviderRegistry.class).isIDAttribute(attributeName);
+    public static boolean isIDAttribute(@Nonnull final QName attributeName) {
+        return ConfigurationService.ensure(XMLObjectProviderRegistry.class).isIDAttribute(attributeName);
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-core-api/src/test/java/org/opensaml/core/config/ConfigurationServiceTest.java b/opensaml-core-api/src/test/java/org/opensaml/core/config/ConfigurationServiceTest.java
index 48d843f69..4727ab700 100644
--- a/opensaml-core-api/src/test/java/org/opensaml/core/config/ConfigurationServiceTest.java
+++ b/opensaml-core-api/src/test/java/org/opensaml/core/config/ConfigurationServiceTest.java
@@ -38,7 +38,7 @@ public class ConfigurationServiceTest {
         ConfigurationService.register(BasicTestConfig.class, config);
         
         Assert.assertNotNull(ConfigurationService.get(BasicTestConfig.class));
-        BasicTestConfig retrievedConfig = ConfigurationService.get(BasicTestConfig.class);
+        BasicTestConfig retrievedConfig = ConfigurationService.ensure(BasicTestConfig.class);
         Assert.assertEquals(retrievedConfig.getValue(), "test-value");
         
         ConfigurationService.deregister(BasicTestConfig.class);
@@ -58,7 +58,7 @@ public class ConfigurationServiceTest {
         ConfigurationService.register(TestConfig.class, config);
         
         Assert.assertNotNull(ConfigurationService.get(TestConfig.class));
-        TestConfig retrievedConfig = ConfigurationService.get(TestConfig.class);
+        TestConfig retrievedConfig = ConfigurationService.ensure(TestConfig.class);
         Assert.assertEquals(retrievedConfig.getValue(), "test-value");
         
         ConfigurationService.deregister(TestConfig.class);
diff --git a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSourceTest.java b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSourceTest.java
index a44307539..a95185e35 100644
--- a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSourceTest.java
+++ b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ClasspathConfigurationPropertiesSourceTest.java
@@ -51,8 +51,8 @@ public class ClasspathConfigurationPropertiesSourceTest {
     @Test
     public void testSource() {
         source = new ClasspathConfigurationPropertiesSource();
-        Properties props = source.getProperties();
-        Assert.assertNotNull(props, "Properties was null");
+        final Properties props = source.getProperties();
+        assert props != null;
         
         Assert.assertEquals(props.getProperty("opensaml.config.partitionName"), "myapp", "Incorrect property value");
         Assert.assertEquals(props.getProperty("opensaml.initializer.foo.flag"), "true", "Incorrect property value");
diff --git a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/FilesystemConfigurationPropertiesSourceTest.java b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/FilesystemConfigurationPropertiesSourceTest.java
index d961ca2bc..8afbe206d 100644
--- a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/FilesystemConfigurationPropertiesSourceTest.java
+++ b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/FilesystemConfigurationPropertiesSourceTest.java
@@ -73,8 +73,8 @@ public class FilesystemConfigurationPropertiesSourceTest {
     @Test
     public void testSource() {
         source = new TestFilesystemConfigurationPropertiesSource();
-        Properties props = source.getProperties();
-        Assert.assertNotNull(props, "Properties was null");
+        final Properties props = source.getProperties();
+        assert props != null;
         
         Assert.assertEquals(props.getProperty("opensaml.config.partitionName"), "myapp", "Incorrect property value");
         Assert.assertEquals(props.getProperty("opensaml.initializer.foo.flag"), "true", "Incorrect property value");
diff --git a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSourceTest.java b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSourceTest.java
index af893b90d..7027817a9 100644
--- a/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSourceTest.java
+++ b/opensaml-core-api/src/test/java/org/opensaml/core/config/provider/ThreadLocalConfigurationPropertiesSourceTest.java
@@ -35,7 +35,7 @@ public class ThreadLocalConfigurationPropertiesSourceTest {
     
     @BeforeMethod
     protected void setUp() throws Exception {
-        Properties props = new Properties();
+        final Properties props = new Properties();
         
         props.setProperty("opensaml.config.partitionName", "myapp-threadlocal");
         props.setProperty("opensaml.initializer.foo.flag", "false");
@@ -54,8 +54,8 @@ public class ThreadLocalConfigurationPropertiesSourceTest {
     @Test
     public void testSource() {
         source = new ThreadLocalConfigurationPropertiesSource();
-        Properties props = source.getProperties();
-        Assert.assertNotNull(props, "Properties was null");
+        final Properties props = source.getProperties();
+        assert props != null;
         
         Assert.assertEquals(props.getProperty("opensaml.config.partitionName"), "myapp-threadlocal", "Incorrect property value");
         Assert.assertEquals(props.getProperty("opensaml.initializer.foo.flag"), "false", "Incorrect property value");

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


More information about the commits mailing list