[java-oidc-common] 04/05: Improve Javadoc

Phil Smart philip.smart at jisc.ac.uk
Thu Oct 14 16:48:23 UTC 2021


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

philsmart pushed a commit to branch main
in repository java-oidc-common.

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

commit e4847872b0a6fc9a52738559a9f52d3d102d43c5
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Thu Oct 7 13:37:22 2021 +0100

    Improve Javadoc
---
 .../oidc/metadata/cache/MetadataCache.java         |  4 +-
 .../oidc/metadata/filter/MetadataFilter.java       |  2 -
 .../metadata/cache/impl/DefaultMetadataCache.java  | 11 +++-
 .../metadata/cache/impl/MetadataCacheBuilder.java  | 69 ++++++++++++++++------
 .../impl/OIDCProviderMetadataCacheFactoryBean.java |  1 -
 .../impl/AbstractDynamicHTTPFetchingStrategy.java  | 32 ++++++++++
 .../impl/AbstractDynamicOIDCMetadataResolver.java  |  8 ++-
 .../impl/AbstractOIDCMetadataResolver.java         |  9 ++-
 .../impl/DynamicOIDCProviderMetadataResolver.java  |  6 ++
 .../HTTPProviderConfigurationFetchingStrategy.java | 35 ++++++++++-
 .../DynamicOIDCProviderMetadataResolverTest.java   |  4 --
 11 files changed, 148 insertions(+), 33 deletions(-)

diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/cache/MetadataCache.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/cache/MetadataCache.java
index 3918eb0..92b3e90 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/cache/MetadataCache.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/cache/MetadataCache.java
@@ -10,9 +10,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
 /**
- * A metadata cache. 
- * 
- * TODO: finish
+ * A cache for metadata. 
  *
  * @param <T> The metadata identifier type.
  * @param <U> The metadata type.
diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/filter/MetadataFilter.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/filter/MetadataFilter.java
index accb3dc..ba51212 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/filter/MetadataFilter.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/filter/MetadataFilter.java
@@ -3,8 +3,6 @@ package net.shibboleth.oidc.metadata.filter;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.core.xml.XMLObject;
-
 
 /**
  * A metadata filter is used to process a metadata document after it has been acquired from a metadata source.
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultMetadataCache.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultMetadataCache.java
index 37e3d22..4bc59a9 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultMetadataCache.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultMetadataCache.java
@@ -62,8 +62,15 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
 
 /**
- * 
- * The executor service is shutdown when the {@link #doDestroy()} method is called.
+ * A default {@link MetadataCache} implementation. Supports the following:
+ * <ul>
+ * <li>A configurable backing store to store metadata.</li>
+ * <li>Read-write locking on individual metadata entries. Including optimistic reads.</li>
+ * <li>Synchronous metadata fetching for new metadata.</li>
+ * <li>Synchronous metadata fetching for stale (past refresh point) metadata.</li>
+ * <li>A background task to remove expired and idle metadata.</li>
+ * <li>Configuration of type specific functions via strategies.</li>
+ * </ul>
  *
  * @param <IdentifierType> the metadata identifier type
  * @param <MetadataType> the metadata type
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/MetadataCacheBuilder.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/MetadataCacheBuilder.java
index 4536833..d8da9a0 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/MetadataCacheBuilder.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/MetadataCacheBuilder.java
@@ -35,7 +35,7 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 
 /** 
- * Base metadata cache builder instance.
+ * Base metadata cache builder instance. Holds values common to all metadata cache implementations.
  * 
  * @param <T> the metadata identifier/key
  * @param <U> the metadata type. 
@@ -62,28 +62,28 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
     @Nonnull private Duration initialCleanupTaskDelay;
     
     /** Strategy used to extract an identifier from the given metadata.*/
-    @Nullable private Function<U, T> identifierExtractionStrategy;
+    @Nullable private Function<@Nonnull U, @Nonnull T> identifierExtractionStrategy;
     
     /** Strategy used to compute an expiration time. */
-    @Nullable private BiFunction<U, Instant, Instant> metadataExpirationTimeStrategy;
+    @Nullable private BiFunction<@Nonnull U, @Nonnull Instant, @Nonnull Instant> metadataExpirationTimeStrategy;
     
     /** Map criteria to identifiers to use as keys to the backing store.*/
-    @Nullable private Function<CriteriaSet, T> criteriaToIdentifierStrategy;
+    @Nullable private Function<@Nonnull CriteriaSet, @Nonnull T> criteriaToIdentifierStrategy;
     
     /** A strategy to filter metadata. */
-    @Nonnull private BiFunction<U, MetadataFilterContext , U> metadataFilterStrategy;
+    @Nonnull private BiFunction<@Nonnull U, @Nonnull MetadataFilterContext , @Nonnull U> metadataFilterStrategy;
     
     /** 
      * A hook that is executed just before a cache entry will been removed/invalidated/evicted.
-     * The metadata list could be null, the identifier is never null.
+     * The metadata list could be {@literal null}, the identifier is never {@literal null}.
      */
-    @Nullable private BiConsumer<List<U>, T> metadataBeforeRemovalHook;
+    @Nullable private BiConsumer<@Nullable List<U>, @Nonnull T> metadataBeforeRemovalHook;
     
     /** Flag indicating whether idle entity data should be removed. */
     private boolean removeIdleEntityData;
     
     
-    protected MetadataCacheBuilder(){
+    protected MetadataCacheBuilder() {
         //defaults
         maxCacheDuration = Duration.ofHours(8);
         minCacheDuration = Duration.ofMinutes(10);
@@ -114,8 +114,7 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
      * 
      * @param hook the hook to run.
      */
-    public void setMetadataBeforeRemovalHook(
-            @Nullable final BiConsumer<List<U>, T> hook) {        
+    public void setMetadataBeforeRemovalHook(@Nullable final BiConsumer<List<U>, T> hook) {        
         metadataBeforeRemovalHook = hook;
     }
     
@@ -131,10 +130,12 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
     /**
      * Set the metadata filtering strategy.
      * 
+     * <p>Defaults to a no-op strategy.</p>
+     * 
      * @param strategy the metadata filtering strategy.
      */
-    public void setMetadataFilterStrategy(@Nonnull final BiFunction<U, MetadataFilterContext, U> strategy) {        
-        this.metadataFilterStrategy = Constraint.isNotNull(strategy, "Metadata filter strategy can not be null");;
+    public void setMetadataFilterStrategy(@Nonnull final BiFunction<U, MetadataFilterContext, U> strategy) {  
+        metadataFilterStrategy = Constraint.isNotNull(strategy,"Metadata filtering strategy can not be null");
     }
     
     /**
@@ -142,7 +143,7 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
      * 
      * @return the metadata filtering strategy
      */
-    public BiFunction<U, MetadataFilterContext, U> getMetadataFilterStrategy() {
+    @Nonnull public BiFunction<U, MetadataFilterContext, U> getMetadataFilterStrategy() {
         return metadataFilterStrategy;
     }
     
@@ -151,7 +152,7 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
      * 
      * @return Returns the initialCleanupTaskDelay.
      */
-    protected Duration getInitialCleanupTaskDelay() {
+    @Nonnull protected Duration getInitialCleanupTaskDelay() {
         return initialCleanupTaskDelay;
     }
 
@@ -176,31 +177,67 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
         removeIdleEntityData = flag;
     }
     
+    /**
+     * Should idle metadata be removed?
+     * 
+     * @return if idle metadata should be resolved.
+     */
     protected boolean isRemoveIdleEntityData() {
         return removeIdleEntityData;
     }
     
+    /**
+     * Set the identifier extraction strategy.
+     * 
+     * @param strategy the strategy to set.
+     */
     public void setIdentifierExtractionStrategy(@Nonnull final Function<U, T> strategy) {        
         identifierExtractionStrategy = Constraint.isNotNull(strategy, "Strategy can not be null");
     }
     
+
+    /** 
+     * Get the identifier extraction strategy.
+     * 
+     * @return strategy the strategy.
+     */
     @Nullable protected Function<U, T> getIdentifierExtractionStrategy() {
         return identifierExtractionStrategy;
     }
     
+    /**
+     * Set the metadata expiration time strategy.
+     * 
+     * @param strategy the strategy.
+     */
     public void setMetadataExpirationTimeStrategy(
             @Nonnull final BiFunction<U, Instant, Instant> strategy) {        
         metadataExpirationTimeStrategy = Constraint.isNotNull(strategy, "Strategy can not be null");
     }
     
+    /**
+     * Get the metadata expiration time strategy.
+     * 
+     * @return the strategy.
+     */
     @Nullable protected BiFunction<U, Instant, Instant> getMetadataExpirationTimeStrategy() {
         return metadataExpirationTimeStrategy;
     }
     
+    /**
+     * Set the criteria set to identifier lookup strategy.
+     * 
+     * @param strategy the strategy to set.
+     */
     public void setCriteriaToIdentifierStrategy(@Nonnull final Function<CriteriaSet, T> strategy) {
         criteriaToIdentifierStrategy =  Constraint.isNotNull(strategy,"Criteria to identifier strategy can not be null");
     }
     
+    /**
+     * Get the criteria set to identifier lookup strategy.
+     * 
+     * @param strategy the strategy.
+     */
     @Nullable protected Function<CriteriaSet, T> getCriteriaToIdentifierStrategy() {
         return criteriaToIdentifierStrategy;
     }
@@ -251,7 +288,6 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
      * @param max the maximum entity data idle time
      */
     public void setMaxIdleEntityData(@Nonnull final Duration max) {
-
         Constraint.isNotNull(max, "Max idle time cannot be null");
         Constraint.isFalse(max.isNegative(), "Max idle time cannot be negative");
 
@@ -276,8 +312,7 @@ public abstract class MetadataCacheBuilder<T,U> extends AbstractFactoryBean<Defa
      *  
      * @param duration the maximum cache duration
      */
-    public void setMaxCacheDuration(@Nonnull final Duration duration) {
-        
+    public void setMaxCacheDuration(@Nonnull final Duration duration) {        
         Constraint.isNotNull(duration, "Duration cannot be null");
         Constraint.isFalse(duration.isNegative(), "Duration cannot be negative");
         
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/OIDCProviderMetadataCacheFactoryBean.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/OIDCProviderMetadataCacheFactoryBean.java
index 8d14d94..51ca0ab 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/OIDCProviderMetadataCacheFactoryBean.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/OIDCProviderMetadataCacheFactoryBean.java
@@ -10,7 +10,6 @@ import net.shibboleth.oidc.metadata.impl.DefaultBackingStore;
  */
 public class OIDCProviderMetadataCacheFactoryBean extends MetadataCacheBuilder<Issuer, OIDCProviderMetadata> {
 
-    //TODO raw type?
     @SuppressWarnings("rawtypes")
     @Override
     public Class<DefaultMetadataCache> getObjectType() {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicHTTPFetchingStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicHTTPFetchingStrategy.java
index 405b968..2803734 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicHTTPFetchingStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicHTTPFetchingStrategy.java
@@ -1,6 +1,7 @@
 package net.shibboleth.oidc.metadata.impl;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -27,12 +28,20 @@ import com.google.common.net.MediaType;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.LazySet;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
+/**
+ * Abstract strategy for fetching metadata dynamically over HTTP.
+ *
+ * @param <CriteriaType> the type of criteria used to build the request.
+ * @param <MetadataType> the metadata type.
+ */
 public abstract class AbstractDynamicHTTPFetchingStrategy<CriteriaType, MetadataType> 
     extends AbstractIdentifiableInitializableComponent implements Function<CriteriaType, MetadataType> {
     
@@ -72,6 +81,7 @@ public abstract class AbstractDynamicHTTPFetchingStrategy<CriteriaType, Metadata
      * Constructor.
      *
      * @param client the instance of {@link HttpClient} used to fetch remote OIDC metadata
+     * @param handler the response handler used to convert the HTTP response to the metadata type.
      */
     protected AbstractDynamicHTTPFetchingStrategy(@Nonnull final HttpClient client, 
             @Nonnull final ResponseHandler<MetadataType> handler) {
@@ -79,6 +89,28 @@ public abstract class AbstractDynamicHTTPFetchingStrategy<CriteriaType, Metadata
         httpClient = Constraint.isNotNull(client, "HTTP Client can not be null");
     }
     
+    /** {@inheritDoc} */
+    @Override
+    protected void doInitialize() throws ComponentInitializationException {
+        super.doInitialize();
+
+        if (getSupportedContentTypes() == null) {
+            setSupportedContentTypes(Arrays.asList(DEFAULT_CONTENT_TYPES));
+        }
+        
+        if (! getSupportedContentTypes().isEmpty()) {
+            supportedContentTypesValue = StringSupport.listToStringValue(getSupportedContentTypes(), ", ");
+            supportedMediaTypes = new LazySet<>();
+            for (final String contentType : getSupportedContentTypes()) {
+                supportedMediaTypes.add(MediaType.parse(contentType));
+            }
+        } else {
+            supportedMediaTypes = Collections.emptySet();
+        }
+        
+        log.debug("{} Supported content types are: {}", getId(), getSupportedContentTypes());
+    }
+    
     /**
      * Set an instance of {@link HttpClientSecurityParameters} which provides various parameters to influence
      * the security behavior of the HttpClient instance.
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicOIDCMetadataResolver.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicOIDCMetadataResolver.java
index 291595b..643949c 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicOIDCMetadataResolver.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractDynamicOIDCMetadataResolver.java
@@ -56,7 +56,13 @@ public abstract class AbstractDynamicOIDCMetadataResolver<IdentifierType, Metada
     @NonnullAfterInit private final Function<CriteriaSet, MetadataType> metadataFetchingStrategy;
    
     
-    /** Constructor.*/
+    /**
+     * 
+     * Constructor.
+     *
+     * @param metadataCache the cache to hold metadata.
+     * @param fetchingStrategy the strategy used to fetch metadata.
+     */
     protected AbstractDynamicOIDCMetadataResolver(
             @Nonnull final MetadataCache<MetadataType> metadataCache,
             @Nonnull final Function<CriteriaSet, MetadataType> fetchingStrategy) {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractOIDCMetadataResolver.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractOIDCMetadataResolver.java
index dfe1689..e98e6ef 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractOIDCMetadataResolver.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/AbstractOIDCMetadataResolver.java
@@ -45,8 +45,13 @@ import net.shibboleth.utilities.java.support.resolver.CriterionPredicateRegistry
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 import net.shibboleth.utilities.java.support.resolver.ResolverSupport;
 
-
-// TODO would also need to implement a generic metadata resolver interface.
+/**
+ * An abstract metadata resolver which supports any type of metadata. 
+ *
+ * @param <MetadataIdentifier> the type used to identify the metadata
+ * @param <MetadataType> the metadata type
+ */
+// TODO Would need to remove OIDC from the name as is generic - but confusing clash with opensaml.
 public abstract class AbstractOIDCMetadataResolver<MetadataIdentifier, MetadataType> 
         extends AbstractIdentifiableInitializableComponent implements OIDCMetadataResolver<MetadataType> {
     
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolver.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolver.java
index 05be062..7c7a32f 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolver.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolver.java
@@ -33,6 +33,12 @@ public class DynamicOIDCProviderMetadataResolver
         extends AbstractDynamicOIDCMetadataResolver<Issuer, OIDCProviderMetadata> 
         implements ProviderMetadataResolver {
 
+    /**
+     * Constructor.
+     *
+     * @param metadataCache the cache to hold metadata.
+     * @param fetchingStrategy the strategy used to fetch metadata.
+     */
     protected DynamicOIDCProviderMetadataResolver(
             @Nonnull final MetadataCache<OIDCProviderMetadata> metadataCache,
             @Nonnull final Function<CriteriaSet, OIDCProviderMetadata> fetchingStrategy) {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/HTTPProviderConfigurationFetchingStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/HTTPProviderConfigurationFetchingStrategy.java
index 4e37204..d9a3eeb 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/HTTPProviderConfigurationFetchingStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/impl/HTTPProviderConfigurationFetchingStrategy.java
@@ -26,12 +26,17 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
 import net.shibboleth.oidc.metadata.criterion.IssuerIDCriterion;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.net.MediaTypeSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
-
+/**
+ * A dynamic strategy for fetching OpenID Connect Provider Configuration Metadata from its well-known location
+ * (OpenID Connect Discovery 1.0, section 4). 
+ */
 @ThreadSafe //? is a singleton?
 public class HTTPProviderConfigurationFetchingStrategy 
                             extends AbstractDynamicHTTPFetchingStrategy<CriteriaSet, OIDCProviderMetadata> {
@@ -58,6 +63,34 @@ public class HTTPProviderConfigurationFetchingStrategy
         wellKnownPath = DEFAULT_OPENID_PROVIDER_WELL_KNOWN_PATH;
         wellKnownLocationCompositionStrategy = new DefaultWellKnownPathCompositionStrategy();
     }
+    
+    /**
+     * Set the well-known URL path component.
+     * 
+     * <p>Defaults to {@value DEFAULT_OPENID_PROVIDER_WELL_KNOWN_PATH}.</p>
+     * 
+     * @param path the path.
+     */
+    public void setWellKnownPath(@Nonnull @NotEmpty final String path) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        
+        wellKnownPath = Constraint.isNotEmpty(path, "Well-know path can not be null");
+    }
+    
+    /**
+     * Set the well-known location composition strategy.
+     * 
+     * @param strategy the strategy to set.
+     */
+    public void setWellKnownLocationCompositionStrategy(@Nonnull final
+            BiFunction<Issuer, String, String> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        
+        wellKnownLocationCompositionStrategy = 
+                Constraint.isNotNull(strategy, "Well known location composition strategy can not be null");
+    }
 
     @Override
     protected String buildRequestURL(@Nonnull final CriteriaSet criteria) {
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolverTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolverTest.java
index 92fcc3f..a43ce2a 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolverTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DynamicOIDCProviderMetadataResolverTest.java
@@ -9,8 +9,6 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.List;
@@ -32,11 +30,9 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.oauth2.sdk.ParseException;
 import com.nimbusds.oauth2.sdk.id.Issuer;
-import com.nimbusds.openid.connect.sdk.SubjectType;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
 import net.shibboleth.oidc.metadata.AbstractEvaluableMetadataCriterion;
-import net.shibboleth.oidc.metadata.EvaluableMetadataCriterion;
 import net.shibboleth.oidc.metadata.MetadataManagementData;
 import net.shibboleth.oidc.metadata.cache.impl.DefaultMetadataCache;
 import net.shibboleth.oidc.metadata.cache.impl.MetadataCacheBuilder;

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


More information about the commits mailing list