[java-opensaml] branch main updated: IDP-2116 - Add metrics for MetadataResolvers

Scott Cantor cantor.2 at osu.edu
Tue May 23 15:43:20 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=a21b5b91894831f1c51e0c2b0f7ab3f959ace50e

The following commit(s) were added to refs/heads/main by this push:
     new a21b5b918 IDP-2116 - Add metrics for MetadataResolvers
a21b5b918 is described below

commit a21b5b91894831f1c51e0c2b0f7ab3f959ace50e
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue May 23 11:43:16 2023 -0400

    IDP-2116 - Add metrics for MetadataResolvers
    
    https://shibboleth.atlassian.net/browse/IDP-2116
    
    Add getType method to resolver and filter interfaces.
    Add abstract base for filters.
---
 .../resolver/ChainingMetadataResolver.java         | 21 +++++++++++++
 .../saml/metadata/resolver/MetadataResolver.java   | 10 +++++++
 .../resolver/filter/AbstractMetadataFilter.java    | 35 ++++++++++++++--------
 .../metadata/resolver/filter/MetadataFilter.java   | 11 +++++++
 .../resolver/filter/MetadataFilterChain.java       |  8 ++---
 .../resolver/filter/impl/AlgorithmFilter.java      |  5 ++--
 .../filter/impl/ByReferenceMetadataFilter.java     |  3 +-
 .../filter/impl/EntityAttributesFilter.java        |  5 ++--
 .../resolver/filter/impl/EntityRoleFilter.java     |  4 +--
 .../resolver/filter/impl/NameIDFormatFilter.java   |  5 ++--
 .../filter/impl/NodeProcessingMetadataFilter.java  |  4 +--
 .../resolver/filter/impl/PredicateFilter.java      |  4 +--
 .../filter/impl/RequiredValidUntilFilter.java      |  4 +--
 .../filter/impl/SchemaValidationFilter.java        |  4 +--
 .../filter/impl/SignatureValidationFilter.java     |  4 +--
 .../resolver/impl/AbstractMetadataResolver.java    | 19 ++++++++++++
 .../resolver/impl/CompositeMetadataResolver.java   | 20 +++++++++++++
 .../impl/FileBackedHTTPMetadataResolverTest.java   |  4 +--
 .../metadata/resolver/impl/MockFailureFilter.java  |  4 +--
 .../impl/PredicateRoleDescriptorResolverTest.java  |  4 +++
 20 files changed, 136 insertions(+), 42 deletions(-)

diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
index 57a9f7846..48bc80341 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
@@ -37,11 +37,13 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
 
@@ -57,6 +59,9 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(ChainingMetadataResolver.class);
 
+    /** Resolver type. */
+    @Nullable @NotEmpty private String resolverType;
+    
     /** Registered resolvers. */
     @Nonnull @NonnullElements private List<MetadataResolver> resolvers;
     
@@ -70,6 +75,22 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
     public ChainingMetadataResolver() {
         resolvers = CollectionSupport.emptyList();
         detectDuplicateEntityIDs = DetectDuplicateEntityIDs.Off;
+    }    
+
+    /** {@inheritDoc} */
+    @Nullable @NotEmpty public String getType() {
+        return resolverType;
+    }
+    
+    /**
+     * Sets the type of this resolver for reporting/logging.
+     * 
+     * @param type type to set
+     * 
+     * @since 5.0.0
+     */
+    public void setType(@Nullable @NotEmpty final String type) {
+        resolverType = StringSupport.trimOrNull(type);
     }
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/MetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/MetadataResolver.java
index 5a02eaf69..18277919e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/MetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/MetadataResolver.java
@@ -19,6 +19,7 @@ package org.opensaml.saml.metadata.resolver;
 
 import javax.annotation.Nullable;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.IdentifiedComponent;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.Resolver;
@@ -44,6 +45,15 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
  */
 public interface MetadataResolver extends Resolver<EntityDescriptor, CriteriaSet>, IdentifiedComponent {
     
+    /**
+     * Gets the type of resolver for reporting or logging purposes.
+     * 
+     * @return resolver type
+     * 
+     * @since 5.0.0
+     */
+    @Nullable @NotEmpty String getType();
+    
     /**
      * Gets whether the metadata returned by queries must be valid. 
      * 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/AbstractMetadataFilter.java
similarity index 52%
copy from opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java
copy to opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/AbstractMetadataFilter.java
index 08e0e53b6..055e4852e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/AbstractMetadataFilter.java
@@ -15,25 +15,36 @@
  * limitations under the License.
  */
 
-package org.opensaml.saml.metadata.resolver.impl;
+package org.opensaml.saml.metadata.resolver.filter;
 
-import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.AbstractInitializableComponent;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
- * Mock filter to test init failures.
+ * Abstract base class for {@link MetadataFilter}.
+ * 
+ * @since 5.0.0
  */
-public class MockFailureFilter implements MetadataFilter {
+public abstract class AbstractMetadataFilter extends AbstractInitializableComponent implements MetadataFilter {
 
+    /** Filter type for logging/reporting. */
+    @Nullable @NotEmpty private String filterType;
+    
     /** {@inheritDoc} */
-    @Nullable public XMLObject filter(@Nullable XMLObject metadata, @Nonnull final MetadataFilterContext context)
-            throws FilterException {
-        throw new FilterException("Something really terrible happened");
+    @Nullable @NotEmpty public String getType() {
+        return filterType;
+    }
+    
+    /**
+     * Set filter type for reporting/logging.
+     * 
+     * @param type filter type
+     */
+    public void setType(@Nullable @NotEmpty final String type) {
+        filterType = StringSupport.trimOrNull(type);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilter.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilter.java
index 43dcc0d88..e470727d8 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilter.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilter.java
@@ -22,6 +22,8 @@ import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * A metadata filter is used to process a metadata document after it has been unmarshalled into an 
  * instance of {@link XMLObject}, either an {@link org.opensaml.saml.saml2.metadata.EntityDescriptor}
@@ -41,6 +43,15 @@ import org.opensaml.core.xml.XMLObject;
  */
 public interface MetadataFilter {
 
+    /**
+     * Gets the type of filter for reporting or logging purposes.
+     * 
+     * @return filter type
+     * 
+     * @since 5.0.0
+     */
+    @Nullable @NotEmpty String getType();
+
     /**
      * Filters the given metadata, perhaps to remove elements that are not wanted.
      * 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
index f67099b90..3a3c46b31 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/filter/MetadataFilterChain.java
@@ -35,11 +35,11 @@ import org.slf4j.Logger;
  * A filter that allows the composition of {@link MetadataFilter}s. Filters will be executed on the given metadata
  * document in the order they were added to the chain.
  */
-public class MetadataFilterChain implements MetadataFilter {
+public class MetadataFilterChain extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(MetadataFilterChain.class);
-
+    
     /** Registered filters. */
     @Nonnull @NonnullElements private List<MetadataFilter> filters;
 
@@ -49,7 +49,7 @@ public class MetadataFilterChain implements MetadataFilter {
     public MetadataFilterChain() {
         filters = new ArrayList<>();
     }
-
+    
     /** {@inheritDoc} */
     @Override
     @Nullable public final XMLObject filter(@Nullable final XMLObject xmlObject,
@@ -96,5 +96,5 @@ public class MetadataFilterChain implements MetadataFilter {
         
         filters = new ArrayList<>(List.copyOf(newFilters));
     }
-    
+
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
index 875dc3698..c75988da6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/AlgorithmFilter.java
@@ -36,8 +36,8 @@ import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.ext.saml2alg.DigestMethod;
 import org.opensaml.saml.ext.saml2alg.SigningMethod;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.metadata.EncryptionMethod;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
@@ -56,7 +56,6 @@ import com.google.common.collect.Multimap;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.CollectionSupport;
-import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
@@ -67,7 +66,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
  * <p>The entities to annotate are identified with a {@link Predicate}, and multiple algorithms can be
  * associated with each.</p>
  */
-public class AlgorithmFilter extends AbstractInitializableComponent implements MetadataFilter {
+public class AlgorithmFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(AlgorithmFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ByReferenceMetadataFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ByReferenceMetadataFilter.java
index 85addf720..72fcfe25c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ByReferenceMetadataFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/ByReferenceMetadataFilter.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
@@ -46,7 +47,7 @@ import net.shibboleth.shared.primitive.StringSupport;
  * 
  * @since 4.0.0
  */
-public class ByReferenceMetadataFilter implements MetadataFilter {
+public class ByReferenceMetadataFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(ByReferenceMetadataFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
index 810b5acd6..40c268ebb 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityAttributesFilter.java
@@ -36,8 +36,8 @@ import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.ext.saml2mdattr.EntityAttributes;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.core.Attribute;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
@@ -49,7 +49,6 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
@@ -63,7 +62,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
  * <p>As of 3.4.0, another predicate can be set to validate pre-existing extension content to better
  * protect use cases of this component.</p>
  */
-public class EntityAttributesFilter extends AbstractInitializableComponent implements MetadataFilter {
+public class EntityAttributesFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(EntityAttributesFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityRoleFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityRoleFilter.java
index 853dbecfb..7bad3c25e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityRoleFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/EntityRoleFilter.java
@@ -27,8 +27,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -55,7 +55,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
  * well. If the root element of the metadata document is an entities descriptor it will never be removed, regardless of
  * of whether it still contains entity descriptors.
  */
-public class EntityRoleFilter implements MetadataFilter {
+public class EntityRoleFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(EntityRoleFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
index 7d18e48c0..c0635429b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
@@ -30,8 +30,8 @@ import javax.annotation.Nullable;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.saml.common.SAMLObjectBuilder;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.metadata.AttributeAuthorityDescriptor;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
@@ -46,7 +46,6 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
@@ -58,7 +57,7 @@ import net.shibboleth.shared.primitive.StringSupport;
  * The entities to annotate are identified with a {@link Predicate}, and multiple formats can be
  * associated with each.
  */
-public class NameIDFormatFilter extends AbstractInitializableComponent implements MetadataFilter {
+public class NameIDFormatFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(NameIDFormatFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
index 52d9afa0c..8b48d4b20 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NodeProcessingMetadataFilter.java
@@ -24,6 +24,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
@@ -31,7 +32,6 @@ import org.opensaml.saml.metadata.resolver.filter.MetadataNodeProcessor;
 
 import net.shibboleth.shared.annotation.constraint.Live;
 import net.shibboleth.shared.collection.CollectionSupport;
-import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
@@ -39,7 +39,7 @@ import net.shibboleth.shared.logic.Constraint;
  * metadata document tree. The node processors will be applied in the order of {@link List} provided by
  * {@link #setNodeProcessors(List)}. The metadata document tree is traversed depth-first.
  */
-public class NodeProcessingMetadataFilter extends AbstractInitializableComponent implements MetadataFilter {
+public class NodeProcessingMetadataFilter extends AbstractMetadataFilter {
 
     /** The ordered list of metadata node processors. */
     @Nonnull private List<MetadataNodeProcessor> processors;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
index 8c0f6efa0..659c924d7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/PredicateFilter.java
@@ -26,8 +26,8 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -44,7 +44,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
  * well. If the root element of the metadata document is an @link EntitiesDescriptor}, it will never be removed,
  * regardless of of whether it still has children.</p>
  */
-public class PredicateFilter implements MetadataFilter {
+public class PredicateFilter extends AbstractMetadataFilter {
 
     /** Whether matching means to include or exclude an entity. */
     public enum Direction {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilFilter.java
index 3ecb1aada..4e5428795 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/RequiredValidUntilFilter.java
@@ -24,8 +24,8 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -41,7 +41,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
  * A maximum validity interval of less than 1 means that no restriction is placed on the metadata's
  * <code>validUntil</code> attribute.
  */
-public class RequiredValidUntilFilter implements MetadataFilter {
+public class RequiredValidUntilFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(RequiredValidUntilFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SchemaValidationFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SchemaValidationFilter.java
index 82fb6ee84..f0647e031 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SchemaValidationFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SchemaValidationFilter.java
@@ -24,8 +24,8 @@ import javax.xml.validation.Validator;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.xml.SAMLSchemaBuilder;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.slf4j.Logger;
 import org.xml.sax.SAXException;
@@ -37,7 +37,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
 /**
  * A metadata filter that schema validates an incoming metadata file.
  */
-public class SchemaValidationFilter implements MetadataFilter {
+public class SchemaValidationFilter extends AbstractMetadataFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(SchemaValidationFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
index 608190fd2..1f8b0795f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/SignatureValidationFilter.java
@@ -26,8 +26,8 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.metadata.resolver.filter.data.impl.MetadataSource;
 import org.opensaml.saml.saml2.metadata.AffiliationDescriptor;
@@ -55,7 +55,7 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 /**
  * A metadata filter that validates XML signatures.
  */
-public class SignatureValidationFilter implements MetadataFilter {
+public class SignatureValidationFilter extends AbstractMetadataFilter {
     
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(SignatureValidationFilter.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
index 41a52a8bc..bf66ca4f8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractMetadataResolver.java
@@ -78,6 +78,9 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractMetadataResolver.class);
 
+    /** Resolver type. */
+    @Nullable @NotEmpty private String resolverType;
+    
     /** Unmarshaller factory used to get an unmarshaller for the metadata DOM. */
     @NonnullAfterInit private UnmarshallerFactory unmarshallerFactory;
 
@@ -124,6 +127,22 @@ public abstract class AbstractMetadataResolver extends AbstractIdentifiableIniti
         useDefaultPredicateRegistry = true;
     }
 
+    /** {@inheritDoc} */
+    @Nullable @NotEmpty public String getType() {
+        return resolverType;
+    }
+    
+    /**
+     * Sets the type of this resolver for reporting/logging.
+     * 
+     * @param type type to set
+     * 
+     * @since 5.0.0
+     */
+    public void setType(@Nullable @NotEmpty final String type) {
+        resolverType = StringSupport.trimOrNull(type);
+    }
+    
     /** {@inheritDoc} */
     @Override public boolean isRequireValidMetadata() {
         return requireValidMetadata;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
index d4f0ebd2f..5fb6e1492 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
@@ -33,11 +33,13 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.slf4j.Logger;
 
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.NotLive;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent;
 import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.resolver.CriteriaSet;
 import net.shibboleth.shared.resolver.ResolverException;
 
@@ -55,6 +57,9 @@ public class CompositeMetadataResolver extends AbstractIdentifiedInitializableCo
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(CompositeMetadataResolver.class);
 
+    /** Resolver type. */
+    @Nullable @NotEmpty private String resolverType;
+
     /** Resolvers composed by this resolver. */
     @Nonnull @NonnullElements private List<MetadataResolver> resolvers;
 
@@ -90,6 +95,21 @@ public class CompositeMetadataResolver extends AbstractIdentifiedInitializableCo
         }
     }
 
+    /** {@inheritDoc} */
+    @Nullable @NotEmpty public String getType() {
+        return resolverType;
+    }
+    
+    /**
+     * Sets the type of this resolver for reporting/logging.
+     * 
+     * @param type type to set
+     * 
+     * @since 5.0.0
+     */
+    public void setType(@Nullable @NotEmpty final String type) {
+        resolverType = StringSupport.trimOrNull(type);    }
+    
     /** {@inheritDoc} */
     public boolean isRequireValidMetadata() {
         log.warn("Attempt to access unsupported requireValidMetadata property on ChainingMetadataResolver");
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
index 36f6c82f7..4e53be104 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
@@ -31,8 +31,8 @@ import javax.annotation.Nullable;
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.core.testing.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 import org.opensaml.saml.metadata.resolver.filter.data.impl.MetadataSource;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
@@ -688,7 +688,7 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
     
     // Test helpers
 
-    public class MockContextTrackingFilter implements MetadataFilter {
+    public class MockContextTrackingFilter extends AbstractMetadataFilter {
 
         public MetadataFilterContext lastFilterContext;
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java
index 08e0e53b6..71b17f675 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/MockFailureFilter.java
@@ -21,14 +21,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.core.xml.XMLObject;
+import org.opensaml.saml.metadata.resolver.filter.AbstractMetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.FilterException;
-import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;
 
 /**
  * Mock filter to test init failures.
  */
-public class MockFailureFilter implements MetadataFilter {
+public class MockFailureFilter extends AbstractMetadataFilter {
 
     /** {@inheritDoc} */
     @Nullable public XMLObject filter(@Nullable XMLObject metadata, @Nonnull final MetadataFilterContext context)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
index 65e17cb38..e26b7127d 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/PredicateRoleDescriptorResolverTest.java
@@ -421,6 +421,10 @@ public class PredicateRoleDescriptorResolverTest extends XMLObjectBaseTestCase {
         }
 
         public void setMetadataFilter(@Nullable final MetadataFilter newFilter) { }
+
+        @Nonnull public String getType() {
+            return "Static";
+        }
     }
     
     public static class BooleanPredicateCriterion implements EvaluableRoleDescriptorCriterion {

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


More information about the commits mailing list