[java-identity-provider] branch master updated: IDP-1177 - Centralize deprecation warnings through dedicated function

Scott Cantor cantor.2 at osu.edu
Thu Jun 8 21:23:37 EDT 2017


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

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=34bd5abf4b40cf1537b78bc28f6343d08b2450f2

The following commit(s) were added to refs/heads/master by this push:
       new  34bd5ab   IDP-1177 - Centralize deprecation warnings through dedicated function
34bd5ab is described below

commit 34bd5abf4b40cf1537b78bc28f6343d08b2450f2
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Jun 8 21:23:35 2017 -0400

    IDP-1177 - Centralize deprecation warnings through dedicated function
    
    https://issues.shibboleth.net/jira/browse/IDP-1177
    
    Further sweep of IdP for existing deprecations.
---
 .../resolver/ad/impl/DelegatedWorkContext.java     | 30 ++++---
 .../spring/ResolverPluginDependencyParser.java     | 10 ++-
 .../resolver/spring/dc/impl/CacheConfigParser.java | 18 ++++-
 .../dc/impl/StoredIDDataConnectorParser.java       |  6 +-
 .../dc/ldap/impl/LDAPDataConnectorParser.java      |  8 +-
 .../dc/rdbms/impl/RDBMSDataConnectorParser.java    |  8 +-
 .../resolver/spring/dc/CacheConfigParserTest.java  | 10 +--
 .../relyingparty/impl/RelyingPartyGroupParser.java |  7 +-
 .../metadata/filter/impl/ChainingParser.java       | 10 ++-
 .../filter/impl/RequiredValidUntilFactoryBean.java | 13 +--
 .../filter/impl/SignatureValidationParser.java     |  9 ++-
 .../AbstractDynamicHTTPMetadataProviderParser.java | 21 ++---
 .../metadata/impl/HTTPMetadataProviderParser.java  | 43 +++++-----
 .../impl/HTTPMetadataProvidersParserSupport.java   | 94 +++++++++++++---------
 .../impl/InlineMetadataProviderParser.java         |  6 +-
 .../impl/ResourceBackedMetadataProviderParser.java | 51 ++++++------
 16 files changed, 213 insertions(+), 131 deletions(-)

diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DelegatedWorkContext.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DelegatedWorkContext.java
index 42ba92b..60e4a56 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DelegatedWorkContext.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/DelegatedWorkContext.java
@@ -31,26 +31,32 @@ import net.shibboleth.idp.attribute.resolver.ResolvedDataConnector;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 
 import org.opensaml.messaging.context.BaseContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/** A delegate for {@link AttributeResolverWorkContext}.
- * This is only here because in a moment of madness we pushed the work context into
+/**
+ * A delegate for {@link AttributeResolverWorkContext}.
+ * 
+ * <p>This is only here because in a moment of madness we pushed the work context into
  * the scripted definitions. This preserves the function while making it obvious that
- * we don't want people to use it.  
- * @deprecated(Deprecated function)*/
+ * we don't want people to use it.</p>
+ *   
+ * @deprecated
+ */
 @Deprecated public class DelegatedWorkContext extends BaseContext {
 
-    /** log. */
-    private final Logger log = LoggerFactory.getLogger(DelegatedWorkContext.class);
+    /** Class logger. */
+    @Nonnull private final Logger log = LoggerFactory.getLogger(DelegatedWorkContext.class);
 
     /** The delegate. */
-    private final AttributeResolverWorkContext delegate;
+    @Nonnull private final AttributeResolverWorkContext delegate;
 
     /** The log prefix. */
-    private final String logPrefix;
+    @Nullable private final String logPrefix;
 
     /**
      * Constructor.
@@ -58,7 +64,7 @@ import org.slf4j.LoggerFactory;
      * @param parent the value to be delegated.
      * @param prefix the log prefix of the calling scripted definition.
      */
-    public DelegatedWorkContext(final AttributeResolverWorkContext parent, final String prefix) {
+    public DelegatedWorkContext(@Nonnull final AttributeResolverWorkContext parent, @Nullable final String prefix) {
         delegate = parent;
         setParent(delegate.getParent());
         setAutoCreateSubcontexts(parent.isAutoCreateSubcontexts());
@@ -72,6 +78,7 @@ import org.slf4j.LoggerFactory;
      */
     @Nonnull @NonnullElements @Unmodifiable public Map<String, ResolvedAttributeDefinition>
             getResolvedIdPAttributeDefinitions() {
+        DeprecationSupport.warnOnce(ObjectType.CLASS, AttributeResolverWorkContext.class.getName(), null, null);
         log.error("'{}' Use of workContext.getResolvedIdPAttributeDefinitions()"
                 + " is deprecated and will cause instability", logPrefix);
         return delegate.getResolvedIdPAttributeDefinitions();
@@ -86,6 +93,7 @@ import org.slf4j.LoggerFactory;
      */
     public void recordAttributeDefinitionResolution(@Nonnull final AttributeDefinition definition,
             @Nullable final IdPAttribute attribute) throws ResolutionException {
+        DeprecationSupport.warnOnce(ObjectType.CLASS, AttributeResolverWorkContext.class.getName(), null, null);
         log.error("'{}' Use of workContext.getResolvedIdPAttributeDefinitions()"
                 + " is deprecated and will cause instability", logPrefix);
         delegate.recordAttributeDefinitionResolution(definition, attribute);
@@ -97,6 +105,7 @@ import org.slf4j.LoggerFactory;
      * @return what the delegate does.
      */
     @Nonnull @NonnullElements @Unmodifiable public Map<String, ResolvedDataConnector> getResolvedDataConnectors() {
+        DeprecationSupport.warnOnce(ObjectType.CLASS, AttributeResolverWorkContext.class.getName(), null, null);
         log.error("'{}' Use of workContext.getResolvedDataConnectors() is deprecated and will cause instability",
                 logPrefix);
         return delegate.getResolvedDataConnectors();
@@ -111,6 +120,7 @@ import org.slf4j.LoggerFactory;
      */
     public void recordDataConnectorResolution(@Nonnull final DataConnector connector,
             @Nullable final Map<String, IdPAttribute> attributes) throws ResolutionException {
+        DeprecationSupport.warnOnce(ObjectType.CLASS, AttributeResolverWorkContext.class.getName(), null, null);
         log.error(
                 "'{}' Use of workContext.recordDataConnectorResolution() is deprecated and will cause instability",
                 logPrefix);
@@ -126,9 +136,11 @@ import org.slf4j.LoggerFactory;
      */
     public void recordFailoverResolution(@Nonnull final DataConnector failedConnector,
             @Nonnull final DataConnector failoverConnector) throws ResolutionException {
+        DeprecationSupport.warnOnce(ObjectType.CLASS, AttributeResolverWorkContext.class.getName(), null, null);
         log.error("'{}' Use of workContext.recordFailoverResolution() is deprecated and will cause instability",
                 logPrefix);
         delegate.recordFailoverResolution(failedConnector, failoverConnector);
 
     }
+    
 }
\ No newline at end of file
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ResolverPluginDependencyParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ResolverPluginDependencyParser.java
index 633ea49..aae8cd5 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ResolverPluginDependencyParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ResolverPluginDependencyParser.java
@@ -25,7 +25,9 @@ import net.shibboleth.idp.attribute.resolver.ResolverPluginDependency;
 import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputDataConnectorParser;
+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 org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,14 +48,18 @@ public class ResolverPluginDependencyParser extends AbstractSingleBeanDefinition
 
     /** {@inheritDoc} */
     @Override protected Class<? extends ResolverPluginDependency> getBeanClass(@Nullable final Element element) {
-        log.warn("<Dependency> is deprecated, replace with " + InputDataConnectorParser.ELEMENT_NAME.getLocalPart() 
-                + " or " + InputAttributeDefinitionParser.ELEMENT_NAME.getLocalPart());
         return ResolverPluginDependency.class;
     }
 
     /** {@inheritDoc} */
     @Override protected void doParse(@Nonnull final Element config, @Nonnull final ParserContext parserContext,
             @Nonnull final BeanDefinitionBuilder builder) {
+
+        DeprecationSupport.warnOnce(ObjectType.ELEMENT, ELEMENT_NAME.toString(),
+                parserContext.getReaderContext().getResource().getDescription(),
+                InputDataConnectorParser.ELEMENT_NAME.toString()  + " or "
+                        + InputAttributeDefinitionParser.ELEMENT_NAME.toString());
+        
         final String pluginId = StringSupport.trimOrNull(config.getAttributeNS(null, "ref"));
         log.info("Parsing configuration for {} with pluginId: {}", config.getLocalName(), pluginId);
         builder.addConstructorArgValue(pluginId);
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParser.java
index ace0f69..4d6cbd9 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/CacheConfigParser.java
@@ -28,6 +28,8 @@ import javax.xml.namespace.QName;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.AttributeSupport;
 import net.shibboleth.utilities.java.support.xml.DOMTypeSupport;
@@ -37,6 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 import com.google.common.cache.Cache;
@@ -85,16 +88,21 @@ public class CacheConfigParser {
         configElement = config;
     }
 
+// Checkstyle: CyclomaticComplexity OFF
     /**
      * Creates a new cache bean definition from a v2 XML configuration.
      * 
+     * @param parserContext bean parser context
+     * 
      * @return cache bean definition
      */
-    @Nonnull public BeanDefinition createCache() {
+    @Nonnull public BeanDefinition createCache(@Nonnull final ParserContext parserContext) {
 
         final String defaultCache = AttributeSupport.getAttributeValue(configElement, new QName("cacheResults"));
         if (defaultCache != null) {
-            log.warn("The cacheResults attribute is no longer supported, please create a ResultCache element");
+            DeprecationSupport.warnOnce(ObjectType.ATTRIBUTE, "cacheResults",
+                    parserContext != null ? parserContext.getReaderContext().getResource().getDescription() : null,
+                            RESULT_CACHE_RESOLVER.toString());
             return null;
         }
         
@@ -112,7 +120,9 @@ public class CacheConfigParser {
         final String elementTimeToLive =
                 AttributeSupport.getAttributeValue(cacheElement, new QName("elementTimeToLive"));
         if (null != elementTimeToLive) {
-            log.warn("ResultCache: Attribute 'elementTimeToLive' is deprecated, consider using 'expireAfterAccess'");
+            DeprecationSupport.warnOnce(ObjectType.ATTRIBUTE, "elementTimeToLive",
+                    parserContext != null ? parserContext.getReaderContext().getResource().getDescription() : null,
+                            "expireAfterAccess");
         }
         final String expireAfterWrite =
                 AttributeSupport.getAttributeValue(cacheElement, new QName("expireAfterWrite"));
@@ -138,6 +148,7 @@ public class CacheConfigParser {
                 AttributeSupport.getAttributeValue(cacheElement, new QName("maximumCachedElements")));
         return cache.getBeanDefinition();
     }
+// Checkstyle: CyclomaticComplexity ON
     
     /** Helper function to return size provided with a suitable default.
      * 
@@ -235,5 +246,4 @@ public class CacheConfigParser {
         return StringSupport.trimOrNull(ElementSupport.getElementContentAsString(beanResultCache.get(0)));
     }
 
-    
 }
\ No newline at end of file
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIDDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIDDataConnectorParser.java
index 219b7ac..d1f0f9d 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIDDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/StoredIDDataConnectorParser.java
@@ -25,6 +25,8 @@ import net.shibboleth.ext.spring.context.FilesystemGenericApplicationContext;
 import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
 import net.shibboleth.idp.saml.attribute.resolver.impl.StoredIDDataConnector;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.AttributeSupport;
 
@@ -67,8 +69,8 @@ public class StoredIDDataConnectorParser extends BaseComputedIDDataConnectorPars
         final String springResources = AttributeSupport.getAttributeValue(config, new QName("springResources"));
         final String beanDataSource = ManagedConnectionParser.getBeanDataSourceID(config);
         if (springResources != null) {
-            log.warn("{} springResources is deprecated for the StoredIDDataConnector"
-                    + ", consider using BeanManagedConnection", getLogPrefix());
+            DeprecationSupport.warnOnce(ObjectType.ATTRIBUTE, "springResources in StoredIDDataConnector",
+                    parserContext.getReaderContext().getResource().getDescription(), "<BeanManagedConnection> element");
             builder.addPropertyValue("dataSource", getDataSource(springResources.split(";")));
         } else if (beanDataSource != null) {
             builder.addPropertyReference("dataSource", beanDataSource);
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
index 6bccdf9..e7ed570 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
@@ -215,7 +215,7 @@ public class LDAPDataConnectorParser extends AbstractWarningDataConnectorParser
         if (null != resultCacheBeanID) {
             builder.addPropertyReference("resultsCache", resultCacheBeanID);
         } else {
-            builder.addPropertyValue("resultsCache", v2Parser.createCache());
+            builder.addPropertyValue("resultsCache", v2Parser.createCache(parserContext));
         }
 
         builder.setInitMethodName("initialize");
@@ -705,11 +705,13 @@ public class LDAPDataConnectorParser extends AbstractWarningDataConnectorParser
         /**
          * Create a results cache bean definition. See {@link CacheConfigParser}.
          * 
+         * @param parserContext bean parser context
+         * 
          * @return results cache bean definition
          */
-        @Nullable public BeanDefinition createCache() {
+        @Nullable public BeanDefinition createCache(@Nonnull final ParserContext parserContext) {
             final CacheConfigParser parser = new CacheConfigParser(configElement);
-            return parser.createCache();
+            return parser.createCache(parserContext);
         }
         
         /** The parent's log prefix.
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
index 8387222..3417cad 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
@@ -131,7 +131,7 @@ public class RDBMSDataConnectorParser extends AbstractWarningDataConnectorParser
         if (null != resultCacheBeanID) {
            builder.addPropertyReference("resultsCache", resultCacheBeanID);
         } else {
-            builder.addPropertyValue("resultsCache", v2Parser.createCache());
+            builder.addPropertyValue("resultsCache", v2Parser.createCache(parserContext));
         }
 
         builder.setInitMethodName("initialize");
@@ -341,11 +341,13 @@ public class RDBMSDataConnectorParser extends AbstractWarningDataConnectorParser
         /**
          * Create the results cache. See {@link CacheConfigParser}.
          * 
+         * @param parserContext bean parser context
+         * 
          * @return results cache
          */
-        @Nullable public BeanDefinition createCache() {
+        @Nullable public BeanDefinition createCache(@Nonnull final ParserContext parserContext) {
             final CacheConfigParser parser = new CacheConfigParser(configElement);
-            return parser.createCache();
+            return parser.createCache(parserContext);
         }
         
         /** The parent parser's log prefix.
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java
index b72e422..e1dfa48 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/CacheConfigParserTest.java
@@ -48,7 +48,7 @@ public class CacheConfigParserTest extends OpenSAMLInitBaseTestCase {
         
         final GenericApplicationContext context = new GenericApplicationContext();
         
-        context.registerBeanDefinition("ElementTTL", ccp.createCache());
+        context.registerBeanDefinition("ElementTTL", ccp.createCache(null));
         context.refresh();
         context.getBean("ElementTTL", Cache.class);
         
@@ -63,7 +63,7 @@ public class CacheConfigParserTest extends OpenSAMLInitBaseTestCase {
         
         final GenericApplicationContext context = new GenericApplicationContext();
         
-        context.registerBeanDefinition("Access", ccp.createCache());
+        context.registerBeanDefinition("Access", ccp.createCache(null));
         context.refresh();
         context.getBean("Access", Cache.class);
         
@@ -78,7 +78,7 @@ public class CacheConfigParserTest extends OpenSAMLInitBaseTestCase {
         
         final GenericApplicationContext context = new GenericApplicationContext();
         
-        context.registerBeanDefinition("Write", ccp.createCache());
+        context.registerBeanDefinition("Write", ccp.createCache(null));
         context.refresh();
         context.getBean("Write", Cache.class);
         
@@ -93,11 +93,11 @@ public class CacheConfigParserTest extends OpenSAMLInitBaseTestCase {
         
         final GenericApplicationContext context = new GenericApplicationContext();
         
-        context.registerBeanDefinition("Write", ccp.createCache());
+        context.registerBeanDefinition("Write", ccp.createCache(null));
         context.refresh();
         context.getBean("Write", Cache.class);
         
         context.close();
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/impl/RelyingPartyGroupParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/impl/RelyingPartyGroupParser.java
index ea8be4c..dcc164d 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/impl/RelyingPartyGroupParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/impl/RelyingPartyGroupParser.java
@@ -28,6 +28,8 @@ import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataP
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.impl.MetadataNamespaceHandler;
 import net.shibboleth.idp.profile.spring.relyingparty.security.impl.SecurityNamespaceHandler;
 import net.shibboleth.idp.relyingparty.impl.DefaultRelyingPartyConfigurationResolver;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.security.x509.tls.impl.BasicClientTLSValidationConfiguration;
@@ -68,7 +70,10 @@ public class RelyingPartyGroupParser extends AbstractSingleBeanDefinitionParser
         builder.setInitMethodName("initialize");
         builder.setDestroyMethodName("destroy");
         
-        log.warn("<{}> is deprecated and will be removed in a future version.", AbstractMetadataProviderParser.RELYING_PARTY_GROUP_ELEMENT_NAME.getLocalPart());
+        DeprecationSupport.warn(ObjectType.ELEMENT,
+                AbstractMetadataProviderParser.RELYING_PARTY_GROUP_ELEMENT_NAME.toString(),
+                parserContext.getReaderContext().getResource().getDescription(),
+                "via updated RelyingParty configuration");
 
         builder.addPropertyValue("id", "RelyingPartyGroup["
                 + parserContext.getReaderContext().getResource().getFilename() + "]");
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/ChainingParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/ChainingParser.java
index bdc1b28..16580dc 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/ChainingParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/ChainingParser.java
@@ -24,6 +24,8 @@ import javax.xml.namespace.QName;
 
 import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataProviderParser;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain;
@@ -36,8 +38,9 @@ import org.w3c.dom.Element;
 
 /**
  * Parser for a <ChainingFilter> filter.
+ * 
+ * @deprecated
  */
- at Deprecated
 public class ChainingParser extends AbstractSingleBeanDefinitionParser {
 
     /** Element name. */
@@ -55,8 +58,9 @@ public class ChainingParser extends AbstractSingleBeanDefinitionParser {
     /** {@inheritDoc} */
     @Override protected void doParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
-        
-        log.warn("Chaining MetadataFilter type is DEPRECATED and will be removed in the next major version");
+     
+        DeprecationSupport.warn(ObjectType.XSITYPE, TYPE_NAME.toString(),
+                parserContext.getReaderContext().getResource().getDescription(), null);
         
         final List<Element> children =
                 ElementSupport.getChildElements(element, AbstractMetadataProviderParser.METADATA_FILTER_ELEMENT_NAME);
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/RequiredValidUntilFactoryBean.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/RequiredValidUntilFactoryBean.java
index da830f6..fb0e9a7 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/RequiredValidUntilFactoryBean.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/RequiredValidUntilFactoryBean.java
@@ -20,6 +20,8 @@ package net.shibboleth.idp.profile.spring.relyingparty.metadata.filter.impl;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.xml.DOMTypeSupport;
 
 import org.opensaml.saml.metadata.resolver.filter.impl.RequiredValidUntilFilter;
@@ -66,13 +68,12 @@ public class RequiredValidUntilFactoryBean extends AbstractFactoryBean<RequiredV
                 throw new IllegalArgumentException("Negative durations are not supported");
             } else {
                 // Treat as a Long and seconds.
-                final long durationInMs = 1000 * Long.valueOf(maxValidityIntervalDuration);
-                log.warn("Numerical duration form is deprecated. The property 'maxValidityInterval'"
-                        + " on RequiredValidUntil metadata filter should use the duration notation: {}",
-                        DOMTypeSupport.longToDuration(durationInMs));
-                value.setMaxValidityInterval(durationInMs);
+                value.setMaxValidityInterval(1000 * Long.valueOf(maxValidityIntervalDuration));
+                DeprecationSupport.warn(ObjectType.ATTRIBUTE, "maxValidityIntervalDuration (when numeric)",
+                        "RequiredValidUntil MetadataFilter", "duration notation");
             }
         }
         return value;
     }
-}
+    
+}
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/SignatureValidationParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/SignatureValidationParser.java
index e233c61..fdc657c 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/SignatureValidationParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/SignatureValidationParser.java
@@ -27,6 +27,8 @@ import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.profile.spring.factory.BasicInlineCredentialFactoryBean;
 import net.shibboleth.idp.profile.spring.factory.BasicX509CredentialFactoryBean;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataProviderParser;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
@@ -115,7 +117,7 @@ public class SignatureValidationParser extends AbstractSingleBeanDefinitionParse
             if (trustEngines.size() > 1) {
                 log.error("{}: Too many <TrustEngine>s", parserContext.getReaderContext().getResource()
                         .getDescription());
-                throw new BeanCreationException("{}: Too many <TrustEngine>s");
+                throw new BeanCreationException("Too many <TrustEngine>s");
             }
             final ManagedList<BeanDefinition> engines = SpringSupport.parseCustomElements(trustEngines, parserContext);
 
@@ -127,9 +129,8 @@ public class SignatureValidationParser extends AbstractSingleBeanDefinitionParse
         if (element.hasAttributeNS(null, "requireSignedRoot")) {
             builder.addPropertyValue("requireSignedRoot", element.getAttributeNS(null, "requireSignedRoot"));
         } else if (element.hasAttributeNS(null, "requireSignedMetadata")) {
-            log.warn("{} The 'requireSignedMetadata' attribute is DEPRECATED "
-                    + "and will be removed from the next major version, use 'requireSignedRoot' instead",
-                    parserContext.getReaderContext().getResource().getDescription());
+            DeprecationSupport.warn(ObjectType.ATTRIBUTE, "requireSignedMetadata",
+                    parserContext.getReaderContext().getResource().getDescription(), "requireSignedRoot");
             builder.addPropertyValue("requireSignedRoot", element.getAttributeNS(null, "requireSignedMetadata"));
         }
 
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/AbstractDynamicHTTPMetadataProviderParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/AbstractDynamicHTTPMetadataProviderParser.java
index 9cc33de..c6854b5 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/AbstractDynamicHTTPMetadataProviderParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/AbstractDynamicHTTPMetadataProviderParser.java
@@ -58,24 +58,27 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
     /** Logger. */
     private final Logger log = LoggerFactory.getLogger(AbstractDynamicHTTPMetadataProviderParser.class);
 
+// Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
-    // Checkstyle: CyclomaticComplexity OFF -- more readable not split up
     @Override protected void doNativeParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
         super.doNativeParse(element, parserContext, builder);
 
         final String tlsTrustEngineRef = StringSupport.trimOrNull(element.getAttributeNS(null, "tlsTrustEngineRef"));
-        final Element tlsTrustEngine = ElementSupport.getFirstChildElement(element, HTTPMetadataProvidersParserSupport.TLS_TRUST_ENGINE_ELEMENT_NAME);
-        final String httpClientSecurityParametersRef = StringSupport.trimOrNull(element.getAttributeNS(null, "httpClientSecurityParametersRef"));
+        final Element tlsTrustEngine = ElementSupport.getFirstChildElement(element,
+                HTTPMetadataProvidersParserSupport.TLS_TRUST_ENGINE_ELEMENT_NAME);
+        final String httpClientSecurityParametersRef =
+                StringSupport.trimOrNull(element.getAttributeNS(null, "httpClientSecurityParametersRef"));
         BeanDefinition httpClientSecurityParameters = null;
 
         if (httpClientSecurityParametersRef != null) {
             if (tlsTrustEngine != null || tlsTrustEngineRef != null) {
-                log.warn("httpClientSecurityParametersRef overrides setting of tlsTrustEngineRef or of <TrustEngine> subelement");
+                log.warn("httpClientSecurityParametersRef overrides tlsTrustEngineRef or <TrustEngine> subelement");
             }
             builder.addPropertyReference("httpClientSecurityParameters", httpClientSecurityParametersRef);
         } else if (tlsTrustEngine != null || tlsTrustEngineRef != null) {
-            httpClientSecurityParameters = HTTPMetadataProvidersParserSupport.parseTLSTrustEngine(tlsTrustEngineRef, tlsTrustEngine, parserContext);
+            httpClientSecurityParameters = HTTPMetadataProvidersParserSupport.parseTLSTrustEngine(
+                    tlsTrustEngineRef, tlsTrustEngine, parserContext);
             builder.addPropertyValue("httpClientSecurityParameters", httpClientSecurityParameters);
         }
 
@@ -103,7 +106,8 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
 
         if (element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_USER) ||
            element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_PASSWORD)) {
-            builder.addPropertyValue("basicCredentials", HTTPMetadataProvidersParserSupport.buildBasicCredentials(element));
+            builder.addPropertyValue("basicCredentials",
+                    HTTPMetadataProvidersParserSupport.buildBasicCredentials(element, parserContext));
         }
 
         if (element.hasAttributeNS(null, "supportedContentTypes")) {
@@ -115,8 +119,7 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
         }
 
     }
-
-    // Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity ON
 
     /**
      * Build the definition of the HTTPClientBuilder which contains all our configuration.
@@ -168,4 +171,4 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
         return clientBuilder.getBeanDefinition();
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProviderParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProviderParser.java
index 3df7ddb..798a3c2 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProviderParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProviderParser.java
@@ -17,10 +17,12 @@
 
 package net.shibboleth.idp.profile.spring.relyingparty.metadata.impl;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataProviderParser;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
@@ -36,34 +38,34 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Parser for a <FilesystemMetadataProvider>.
+ * Parser for a FilesystemMetadataProvider.
  */
 public class HTTPMetadataProviderParser extends AbstractReloadingMetadataProviderParser {
 
     /** Element name. */
-    public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
+    @Nonnull public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
             "HTTPMetadataProvider");
 
     /** Default caching type. */
-    private static final String DEFAULT_CACHING = "none";
+    @Nonnull @NotEmpty private static final String DEFAULT_CACHING = "none";
 
     /** Logger. */
-    private final Logger log = LoggerFactory.getLogger(HTTPMetadataProviderParser.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPMetadataProviderParser.class);
 
     /** {@inheritDoc} */
     @Override protected Class<? extends HTTPMetadataResolver> getNativeBeanClass(final Element element) {
         return HTTPMetadataResolver.class;
     }
 
+// Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
-    // Checkstyle: CyclomaticComplexity OFF
     @Override protected void doNativeParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
         super.doNativeParse(element, parserContext, builder);
 
         if (element.hasAttributeNS(null, "cacheDuration")) {
-            log.error("{}: cacheDuration is not supported", parserContext.getReaderContext().getResource()
-                    .getDescription());
+            log.error("{}: cacheDuration is not supported",
+                    parserContext.getReaderContext().getResource().getDescription());
             throw new BeanDefinitionParsingException(new Problem("cacheDuration is not supported", new Location(
                     parserContext.getReaderContext().getResource())));
         }
@@ -76,17 +78,20 @@ public class HTTPMetadataProviderParser extends AbstractReloadingMetadataProvide
         }
 
         final String tlsTrustEngineRef = StringSupport.trimOrNull(element.getAttributeNS(null, "tlsTrustEngineRef"));
-        final Element tlsTrustEngine = ElementSupport.getFirstChildElement(element, HTTPMetadataProvidersParserSupport.TLS_TRUST_ENGINE_ELEMENT_NAME);
-        final String httpClientSecurityParametersRef = StringSupport.trimOrNull(element.getAttributeNS(null, "httpClientSecurityParametersRef"));
+        final Element tlsTrustEngine = ElementSupport.getFirstChildElement(element,
+                HTTPMetadataProvidersParserSupport.TLS_TRUST_ENGINE_ELEMENT_NAME);
+        final String httpClientSecurityParametersRef =
+                StringSupport.trimOrNull(element.getAttributeNS(null, "httpClientSecurityParametersRef"));
         BeanDefinition httpClientSecurityParameters = null;
 
         if (httpClientSecurityParametersRef != null) {
             if (tlsTrustEngine != null || tlsTrustEngineRef != null) {
-                log.warn("httpClientSecurityParametersRef overrides setting of tlsTrustEngineRef or of <TrustEngine> subelement");
+                log.warn("httpClientSecurityParametersRef overrides tlsTrustEngineRef or <TrustEngine> subelement");
             }
             builder.addPropertyReference("httpClientSecurityParameters", httpClientSecurityParametersRef);
         } else if (tlsTrustEngine != null || tlsTrustEngineRef != null)  {
-            httpClientSecurityParameters =  HTTPMetadataProvidersParserSupport.parseTLSTrustEngine(tlsTrustEngineRef, tlsTrustEngine,                             parserContext);
+            httpClientSecurityParameters = HTTPMetadataProvidersParserSupport.parseTLSTrustEngine(tlsTrustEngineRef,
+                    tlsTrustEngine, parserContext);
             builder.addPropertyValue("httpClientSecurityParameters", httpClientSecurityParameters);
         }
 
@@ -106,18 +111,19 @@ public class HTTPMetadataProviderParser extends AbstractReloadingMetadataProvide
             }
         } else {
             builder.addConstructorArgValue(buildHttpClient(element, parserContext,
-            	    httpClientSecurityParametersRef, httpClientSecurityParameters));
+                    httpClientSecurityParametersRef, httpClientSecurityParameters));
         }
-        builder.addConstructorArgValue(StringSupport.trimOrNull(element.getAttributeNS(null, HTTPMetadataProvidersParserSupport.METADATA_URL)));
+        builder.addConstructorArgValue(StringSupport.trimOrNull(element.getAttributeNS(null,
+                HTTPMetadataProvidersParserSupport.METADATA_URL)));
 
-        if (element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_USER) || element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_PASSWORD)) {
+        if (element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_USER)
+                || element.hasAttributeNS(null, HTTPMetadataProvidersParserSupport.BASIC_AUTH_PASSWORD)) {
             builder.addPropertyValue("basicCredentials",
-                    HTTPMetadataProvidersParserSupport.buildBasicCredentials(element));
+                    HTTPMetadataProvidersParserSupport.buildBasicCredentials(element, parserContext));
         }
 
     }
-
-    // Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity ON
 
     /**
      * Build the definition of the HTTPClientBuilder which contains all our configuration.
@@ -138,4 +144,5 @@ public class HTTPMetadataProviderParser extends AbstractReloadingMetadataProvide
                 HTTPMetadataProviderParser.DEFAULT_CACHING, httpClientSecurityParametersRef,
                 httpClientSecurityParameters).getBeanDefinition();
     }
-}
+    
+}
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProvidersParserSupport.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProvidersParserSupport.java
index 93549dc..b3dca7b 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProvidersParserSupport.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/HTTPMetadataProvidersParserSupport.java
@@ -27,7 +27,10 @@ import net.shibboleth.idp.profile.spring.relyingparty.metadata.FileCachingHttpCl
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.HttpClientFactoryBean;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.InMemoryCachingHttpClientFactoryBean;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.TLSSocketFactoryFactoryBean;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
@@ -44,30 +47,30 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
+ * Helper class for Spring configuration of HTTP metadata providers.
  */
-public class HTTPMetadataProvidersParserSupport {
-    /** Logger. */
-    private static final Logger log = LoggerFactory.getLogger(HTTPMetadataProvidersParserSupport.class);
-
+public final class HTTPMetadataProvidersParserSupport {
+    
     /** BASIC auth username. */
-    public static final String BASIC_AUTH_USER = "basicAuthUser";
+    @Nonnull @NotEmpty public static final String BASIC_AUTH_USER = "basicAuthUser";
 
     /** BASIC auth password. */
-    public static final String BASIC_AUTH_PASSWORD = "basicAuthPassword";
+    @Nonnull @NotEmpty public static final String BASIC_AUTH_PASSWORD = "basicAuthPassword";
 
     /** The URL for the metadata. */
-    public static final String METADATA_URL = "metadataURL";
+    @Nonnull @NotEmpty public static final String METADATA_URL = "metadataURL";
 
     /** TLSTrustEngine element name. */
-    public static final QName TLS_TRUST_ENGINE_ELEMENT_NAME = new QName(
-            AbstractMetadataProviderParser.METADATA_NAMESPACE, "TLSTrustEngine");
+    @Nonnull public static final QName TLS_TRUST_ENGINE_ELEMENT_NAME =
+            new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE, "TLSTrustEngine");
+
+    /** Class logger. */
+    @Nonnull private static final Logger LOG = LoggerFactory.getLogger(HTTPMetadataProvidersParserSupport.class);
 
+    /** Constructor. */
     private HTTPMetadataProvidersParserSupport() {
     }
-
-    // Checkstyle: CyclomaticComplexity ON
-    // Checkstyle: MethodLength OFF
-
+    
     /**
      * Build the definition of the HTTPClientBuilder which contains all our configuration.
      * 
@@ -80,12 +83,11 @@ public class HTTPMetadataProvidersParserSupport {
      * Either httpClientSecurityParametersRef or httpClientSecurityParameters can be present, not both.
      */
     protected static BeanDefinition buildTLSSocketFactory(
-            final Element element,
-            final ParserContext parserContext,
-            final String httpClientSecurityParametersRef,
-            final BeanDefinition httpClientSecurityParameters) {
+            @Nonnull final Element element, @Nonnull final ParserContext parserContext,
+            @Nullable final String httpClientSecurityParametersRef,
+            @Nullable final BeanDefinition httpClientSecurityParameters) {
 
-        Constraint.isNotNull(log, "log must be present");
+        Constraint.isNotNull(LOG, "LOG must be present");
         final BeanDefinitionBuilder tlsSocketFactoryBuilder = 
                 BeanDefinitionBuilder.genericBeanDefinition(TLSSocketFactoryFactoryBean.class);
 
@@ -93,8 +95,8 @@ public class HTTPMetadataProvidersParserSupport {
             tlsSocketFactoryBuilder.addPropertyValue("connectionDisregardTLSCertificate",
                     StringSupport.trimOrNull(element.getAttributeNS(null, "disregardTLSCertificate")));
         } else if (element.hasAttributeNS(null, "disregardSslCertificate")) {
-            log.warn("{}: disregardSslCertificate is deprecated, please switch to disregardTLSCertificate", 
-                    parserContext.getReaderContext().getResource().getDescription());
+            DeprecationSupport.warn(ObjectType.ATTRIBUTE, "disregardSslCertificate",
+                    parserContext.getReaderContext().getResource().getDescription(), "disregardTLSCertificate");
             tlsSocketFactoryBuilder.addPropertyValue("connectionDisregardTLSCertificate",
                     StringSupport.trimOrNull(element.getAttributeNS(null, "disregardSslCertificate")));
         }
@@ -114,14 +116,20 @@ public class HTTPMetadataProvidersParserSupport {
     /**
      * Build the BeanDefinition for the POJO with the username and password.
      * 
-     * @param element the HTTPMetadataProvider parser.
+     * @param element the HTTPMetadataProvider element
+     * @param parserContext parser context
+     * 
      * @return the bean definition with the username and password.
      */
-    @Nonnull protected static BeanDefinition buildBasicCredentials(final Element element) {
+    @Nonnull protected static BeanDefinition buildBasicCredentials(final Element element,
+            @Nonnull final ParserContext parserContext) {
         final BeanDefinitionBuilder builder =
                 BeanDefinitionBuilder.genericBeanDefinition(UsernamePasswordCredentials.class);
 
-        log.warn(BASIC_AUTH_USER + " is deprecated, replace with use of httpClientSecurityParametersRef");
+        DeprecationSupport.warn(ObjectType.ATTRIBUTE, BASIC_AUTH_USER,
+                parserContext.getReaderContext().getResource().getDescription(), "httpClientSecurityParametersRef");
+        DeprecationSupport.warn(ObjectType.ATTRIBUTE, BASIC_AUTH_PASSWORD,
+                parserContext.getReaderContext().getResource().getDescription(), "httpClientSecurityParametersRef");
 
         builder.setLazyInit(true);
 
@@ -133,26 +141,31 @@ public class HTTPMetadataProvidersParserSupport {
 
     /**
      * Build the BeanDefinition of the {@link HttpClientSecurityParameters} which contains the TLS trust engine
-     * provided
+     * provided.
+     * 
+     * <p>One of the first two parameters must be non-null.</p>
      * 
      * @param tlsTrustEngineRef if present, the reference 
-     * @param element if present, the TLSTrustEngine element.  Note : either tlsTrustEngineRef should be non null.
+     * @param tlsTrustEngine if present, the TLSTrustEngine element
      * @param parserContext context
+     * 
      * @return the bean definition
      */
-    @Nullable protected static BeanDefinition parseTLSTrustEngine(@Nullable final String tlsTrustEngineRef, @Nullable final Element tlsTrustEngine, final ParserContext parserContext) {
+    @Nullable protected static BeanDefinition parseTLSTrustEngine(@Nullable final String tlsTrustEngineRef,
+            @Nullable final Element tlsTrustEngine, @Nonnull final ParserContext parserContext) {
 
-        final BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(HttpClientSecurityParameters.class);
+        final BeanDefinitionBuilder builder =
+                BeanDefinitionBuilder.genericBeanDefinition(HttpClientSecurityParameters.class);
         if (tlsTrustEngine != null) {
             if (tlsTrustEngineRef != null) {
-                log.warn("<TlsTrustEngine> subelement overrides setting of tlsTrustEngineRef ");
+                LOG.warn("<TLSTrustEngine> subelement overrides setting of tlsTrustEngineRef ");
             }
             final Element trustEngine = ElementSupport.getFirstChildElement(tlsTrustEngine,
                             AbstractMetadataProviderParser.TRUST_ENGINE_ELEMENT_NAME);
 
             if (trustEngine == null) {
-                // This should be schema-invalid, but log a warning just in case.
-                log.warn("{}:, Element {} did not contain a {} child element", 
+                // This should be schema-invalid, but LOG a warning just in case.
+                LOG.warn("{}:, Element {} did not contain a {} child element", 
                         parserContext.getReaderContext().getResource().getDescription(), 
                         TLS_TRUST_ENGINE_ELEMENT_NAME,
                         AbstractMetadataProviderParser.TRUST_ENGINE_ELEMENT_NAME);
@@ -160,16 +173,19 @@ public class HTTPMetadataProvidersParserSupport {
             }
             builder.addPropertyValue("tLSTrustEngine", SpringSupport.parseCustomElement(trustEngine, parserContext));
         } else if (tlsTrustEngineRef == null) {
-            log.error("Internal error: tlsTrustEngineRef or TlsTrustEngine required");
+            LOG.error("Internal error: tlsTrustEngineRef or TlsTrustEngine required");
             return null;
         } else {
-            log.warn("tlsTrustEngineRef is deprecated");
+            DeprecationSupport.warn(ObjectType.ATTRIBUTE, "tlsTrustEngineRef",
+                    parserContext.getReaderContext().getResource().getDescription(),
+                    "inline <TrustEngine> element or httpClientSecurityParametersRef attribute");
             builder.addPropertyReference("tLSTrustEngine", tlsTrustEngineRef); 
         }
 
         return builder.getBeanDefinition();
     }
 
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
     /**
      * Build a {@link BeanDefinitionBuilder} for a {@link HttpClientFactoryBean} and populate it from the "standard"
      * attributes which are shared between the Dynamic and Static providers. non standard defaults are applied by the
@@ -180,11 +196,11 @@ public class HTTPMetadataProvidersParserSupport {
      * @param defaultCaching what to use if caching not supplied.
      * @param httpClientSecurityParametersRef the client security parameters ref to be used
      * @param httpClientSecurityParameters the client security parameters to be used
+     * 
      * @return an appropriate builder
      */
     @Nonnull protected static BeanDefinitionBuilder buildCommonClientBuilder(@Nonnull final Element element,
-            final ParserContext parserContext,
-            @Nonnull final String defaultCaching,
+            @Nonnull final ParserContext parserContext, @Nonnull final String defaultCaching,
             @Nullable final String httpClientSecurityParametersRef,
             @Nullable final BeanDefinition httpClientSecurityParameters) {
         final String caching;
@@ -234,7 +250,8 @@ public class HTTPMetadataProvidersParserSupport {
 
         //Note: 'requestTimeout' is deprecated in favor of 'connectionTimeout'.
         if (element.hasAttributeNS(null, "requestTimeout")) {
-            log.warn("requestTimeout is deprecated, use connectionTimeout");
+            DeprecationSupport.warn(ObjectType.ATTRIBUTE, "requestTimeout",
+                    parserContext.getReaderContext().getResource().getDescription(), "connectionTimeout");
             clientBuilder.addPropertyValue("connectionTimeout",
                     StringSupport.trimOrNull(element.getAttributeNS(null, "requestTimeout")));
         }
@@ -251,8 +268,9 @@ public class HTTPMetadataProvidersParserSupport {
                     StringSupport.trimOrNull(element.getAttributeNS(null, "socketTimeout")));
         }
 
-        clientBuilder.addPropertyValue("tLSSocketFactory", HTTPMetadataProvidersParserSupport.buildTLSSocketFactory(element, parserContext, 
-                httpClientSecurityParametersRef, httpClientSecurityParameters));
+        clientBuilder.addPropertyValue("tLSSocketFactory",
+                HTTPMetadataProvidersParserSupport.buildTLSSocketFactory(
+                        element, parserContext, httpClientSecurityParametersRef, httpClientSecurityParameters));
 
         if (element.hasAttributeNS(null, "proxyHost")) {
             clientBuilder.addPropertyValue("connectionProxyHost",
@@ -275,4 +293,6 @@ public class HTTPMetadataProvidersParserSupport {
 
         return clientBuilder;
     }
+// Checkstyle: CyclomaticComplexity|MethodLength ON
+    
 }
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/InlineMetadataProviderParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/InlineMetadataProviderParser.java
index f10945e..0f8aeb3 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/InlineMetadataProviderParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/InlineMetadataProviderParser.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.profile.spring.relyingparty.metadata.impl;
 
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.xml.namespace.QName;
 
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataProviderParser;
@@ -34,7 +35,7 @@ import org.w3c.dom.Element;
 public class InlineMetadataProviderParser extends AbstractMetadataProviderParser {
 
     /** Element name. */
-    public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
+    @Nonnull public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
             "InlineMetadataProvider");
 
     /** {@inheritDoc} */
@@ -55,4 +56,5 @@ public class InlineMetadataProviderParser extends AbstractMetadataProviderParser
         }
         builder.addConstructorArgValue(metadataContent.get(0));
     }
-}
+    
+}
\ No newline at end of file
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/ResourceBackedMetadataProviderParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/ResourceBackedMetadataProviderParser.java
index 924e7b1..4e1b52c 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/ResourceBackedMetadataProviderParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/impl/ResourceBackedMetadataProviderParser.java
@@ -29,6 +29,8 @@ import net.shibboleth.idp.profile.spring.relyingparty.metadata.HttpClientFactory
 import net.shibboleth.idp.profile.spring.resource.impl.ClasspathResourceParser;
 import net.shibboleth.idp.profile.spring.resource.impl.ResourceNamespaceHandler;
 import net.shibboleth.idp.profile.spring.resource.impl.SVNResourceParser;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.AttributeSupport;
 import net.shibboleth.utilities.java.support.xml.DOMTypeSupport;
@@ -50,26 +52,27 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Parser for a <ResourceBackedMetadataProvider;gt;. <br/>
- * This is the most complicated of the parsers. We reach into the resource and find out what sort it is and them summon
- * up an appropriate provider.
+ * Parser for a ResourceBackedMetadataProvider.
+ * 
+ * <p>This is the most complicated of the parsers. We reach into the resource and find out what sort it is
+ * and them summon up an appropriate provider.</p>
  */
 public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetadataProviderParser {
 
     /** Element name. */
-    public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
+    @Nonnull public static final QName ELEMENT_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
             "ResourceBackedMetadataProvider");
 
     /** Element name for the resource elements. */
-    public static final QName RESOURCES_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
+    @Nonnull public static final QName RESOURCES_NAME = new QName(AbstractMetadataProviderParser.METADATA_NAMESPACE,
             "MetadataResource");
     
-    /** For direct injection of a Spring bean **/
-    public static final QName RESOURCE_REF = new QName("resourceRef");
+    /** For direct injection of a Spring bean. **/
+    @Nonnull public static final QName RESOURCE_REF = new QName("resourceRef");
 
 
     /** Log. */
-    private final Logger log = LoggerFactory.getLogger(ResourceBackedMetadataProviderParser.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(ResourceBackedMetadataProviderParser.class);
 
     /** {@inheritDoc} */
     @Override protected Class<? extends AbstractBatchMetadataResolver> getNativeBeanClass(final Element element) {
@@ -88,7 +91,7 @@ public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetad
             throw new BeanCreationException(
                     "No type specified for a <Resource> within a ResourceBackedMetadataProvider");
         }
-        log.debug("comparing type '{}' against known Resources", qName.getLocalPart());
+        log.debug("Comparing type '{}' against known Resources", qName.getLocalPart());
 
         if (ClasspathResourceParser.ELEMENT_NAME.equals(qName)) {
             return ResourceBackedMetadataResolver.class;
@@ -113,15 +116,16 @@ public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetad
         super.doNativeParse(element, parserContext, builder);
 
         if (element.hasAttributeNS(null, "maxCacheDuration")) {
-            log.error("{}: maxCacheDuration is not supported", parserContext.getReaderContext().getResource()
-                    .getDescription());
+            log.error("{}: maxCacheDuration is not supported",
+                    parserContext.getReaderContext().getResource().getDescription());
             throw new BeanDefinitionParsingException(new Problem("maxCacheDuration is not supported", new Location(
                     parserContext.getReaderContext().getResource())));
         }
 
         final List<Element> resources = ElementSupport.getChildElements(element, RESOURCES_NAME);
         if (resources.isEmpty()) {
-            parseResource(StringSupport.trimOrNull(AttributeSupport.getAttributeValue(element, RESOURCE_REF)), parserContext, builder);
+            parseResource(StringSupport.trimOrNull(AttributeSupport.getAttributeValue(element, RESOURCE_REF)),
+                    parserContext, builder);
             return;
         }
         
@@ -148,23 +152,23 @@ public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetad
 
         } else if (ResourceNamespaceHandler.HTTP_ELEMENT_NAME.equals(qName)) {
 
-            log.warn("{}: {} is deprecated. consider using {}", parserContext.getReaderContext().getResource()
-                    .getDescription(), ResourceNamespaceHandler.HTTP_ELEMENT_NAME.getLocalPart(),
-                    HTTPMetadataProviderParser.ELEMENT_NAME.getLocalPart());
+            DeprecationSupport.warn(ObjectType.ELEMENT, ResourceNamespaceHandler.HTTP_ELEMENT_NAME.toString(),
+                    parserContext.getReaderContext().getResource().getDescription(),
+                    HTTPMetadataProviderParser.ELEMENT_NAME.toString());
             parseHTTPResource(resources.get(0), parserContext, builder);
 
         } else if (ResourceNamespaceHandler.FILE_HTTP_ELEMENT_NAME.equals(qName)) {
 
-            log.warn("{}: {} is deprecated. consider using {}", parserContext.getReaderContext().getResource()
-                    .getDescription(), ResourceNamespaceHandler.FILE_HTTP_ELEMENT_NAME.getLocalPart(),
-                    FileBackedHTTPMetadataProviderParser.ELEMENT_NAME.getLocalPart());
+            DeprecationSupport.warn(ObjectType.ELEMENT, ResourceNamespaceHandler.FILE_HTTP_ELEMENT_NAME.toString(),
+                    parserContext.getReaderContext().getResource().getDescription(),
+                    FileBackedHTTPMetadataProviderParser.ELEMENT_NAME.toString());
             parseFileBackedHTTPResource(resources.get(0), parserContext, builder);
 
         } else if (ResourceNamespaceHandler.FILESYSTEM_ELEMENT_NAME.equals(qName)) {
 
-            log.warn("{}: {} is deprecated. consider using {}", parserContext.getReaderContext().getResource()
-                    .getDescription(), ResourceNamespaceHandler.FILESYSTEM_ELEMENT_NAME.getLocalPart(),
-                    FilesystemMetadataProviderParser.ELEMENT_NAME.getLocalPart());
+            DeprecationSupport.warn(ObjectType.ELEMENT, ResourceNamespaceHandler.FILESYSTEM_ELEMENT_NAME.toString(),
+                    parserContext.getReaderContext().getResource().getDescription(),
+                    FilesystemMetadataProviderParser.ELEMENT_NAME.toString());
             parseFilesystemResource(resources.get(0), parserContext, builder);
         }
     }
@@ -176,7 +180,8 @@ public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetad
      * @param parserContext the parser context
      * @param builder the builder for the {@link ResourceBackedMetadataResolver}.
      */
-    private void parseResource(@Nullable final String beanReference, final ParserContext parserContext, @Nonnull final BeanDefinitionBuilder builder) {
+    private void parseResource(@Nullable final String beanReference, final ParserContext parserContext,
+            @Nonnull final BeanDefinitionBuilder builder) {
 
         if (null == beanReference) {
             log.error("{} must not be empty", RESOURCE_REF.getLocalPart());
@@ -266,4 +271,4 @@ public class ResourceBackedMetadataProviderParser extends AbstractReloadingMetad
         builder.addConstructorArgValue(StringSupport.trimOrNull(element.getAttributeNS(null, "file")));
     }
 
-}
+}
\ No newline at end of file

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


More information about the commits mailing list