Class AbstractMetadataResolver
- java.lang.Object
-
- net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
-
- org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
-
- All Implemented Interfaces:
Component
,DestructableComponent
,IdentifiableComponent
,IdentifiedComponent
,InitializableComponent
,Resolver<EntityDescriptor,CriteriaSet>
,MetadataResolver
- Direct Known Subclasses:
AbstractBatchMetadataResolver
,AbstractDynamicMetadataResolver
public abstract class AbstractMetadataResolver extends AbstractIdentifiableInitializableComponent implements MetadataResolver
An abstract, base, implementation of a metadata provider.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
AbstractMetadataResolver.EntityBackingStore
The collection of data which provides the backing store for the processed metadata.
-
Field Summary
Fields Modifier and Type Field Description private CriterionPredicateRegistry<EntityDescriptor>
criterionPredicateRegistry
Registry used in resolving predicates from criteria.private AbstractMetadataResolver.EntityBackingStore
entityBackingStore
Backing store for runtime EntityDescriptor data.private boolean
failFastInitialization
Whether problems during initialization should cause the provider to fail or go on without metadata.private org.slf4j.Logger
log
Class logger.private String
logPrefix
Logging prefix.private MetadataFilter
mdFilter
Filter applied to all metadata.private ParserPool
parser
Pool of parsers used to process XML.private boolean
requireValidMetadata
Whether metadata is required to be valid.private boolean
satisfyAnyPredicates
Flag which determines whether predicates used in filtering are connected by a logical 'OR' (true) or by logical 'AND' (false).private UnmarshallerFactory
unmarshallerFactory
Unmarshaller factory used to get an unmarshaller for the metadata DOM.private boolean
useDefaultPredicateRegistry
Flag which determines whether the default predicate registry will be used if one is not supplied explicitly.
-
Constructor Summary
Constructors Constructor Description AbstractMetadataResolver()
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected AbstractMetadataResolver.EntityBackingStore
createNewBackingStore()
Create a new backing store instance for EntityDescriptor data.protected void
doDestroy()
protected void
doInitialize()
protected XMLObject
filterMetadata(XMLObject metadata)
Filters the given metadata.protected AbstractMetadataResolver.EntityBackingStore
getBackingStore()
Get the EntityDescriptor backing store currently in use by the metadata resolver.CriterionPredicateRegistry<EntityDescriptor>
getCriterionPredicateRegistry()
Get the registry used in resolving predicates from criteria.protected String
getLogPrefix()
Return a prefix for logging messages for this component.MetadataFilter
getMetadataFilter()
ParserPool
getParserPool()
Gets the pool of parsers to use to parse XML.protected UnmarshallerFactory
getUnmarshallerFactory()
Get the XMLObject unmarshaller factory to use.protected void
indexEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)
Index the specified entity descriptor, updating the specified entity backing store instance as necessary.protected void
initMetadataResolver()
Subclasses should override this method to perform any initialization logic necessary.boolean
isFailFastInitialization()
Gets whether problems during initialization should cause the provider to fail or go on without metadata.boolean
isRequireValidMetadata()
boolean
isSatisfyAnyPredicates()
Get the flag indicating whether resolved credentials may satisfy any predicates (i.e.boolean
isUseDefaultPredicateRegistry()
Get the flag which determines whether the default predicate registry will be used if one is not supplied explicitly.protected boolean
isValid(XMLObject descriptor)
Returns whether the given descriptor is valid.protected List<EntityDescriptor>
lookupEntityID(String entityID)
Get list of descriptors matching an entityID.protected List<EntityDescriptor>
lookupIndexedEntityID(String entityID)
Lookup the specified entityID from the index.protected MetadataFilterContext
newFilterContext()
Get a new instance ofMetadataFilterContext
to be used when filtering metadata.protected Iterable<EntityDescriptor>
predicateFilterCandidates(Iterable<EntityDescriptor> candidates, CriteriaSet criteria, boolean onEmptyPredicatesReturnEmpty)
Filter the supplied candidates by resolving predicates from the supplied criteria and applying the predicates to return a filteredIterable
.protected void
preProcessEntitiesDescriptor(EntitiesDescriptor entitiesDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)
Pre-process the specified entities descriptor, updating the specified entity backing store instance as necessary.protected void
preProcessEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)
Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.protected void
releaseMetadataDOM(XMLObject metadata)
Releases the DOM representation from the metadata object.protected void
removeByEntityID(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore)
Remove from the backing store all metadata for the entity with the given entity ID.EntityDescriptor
resolveSingle(CriteriaSet criteria)
protected void
setBackingStore(AbstractMetadataResolver.EntityBackingStore newBackingStore)
Set the EntityDescriptor backing store currently in use by the metadata resolver.void
setCriterionPredicateRegistry(CriterionPredicateRegistry<EntityDescriptor> registry)
Set the registry used in resolving predicates from criteria.void
setFailFastInitialization(boolean failFast)
Sets whether problems during initialization should cause the provider to fail or go on without metadata.void
setMetadataFilter(MetadataFilter newFilter)
void
setParserPool(ParserPool pool)
Sets the pool of parsers to use to parse XML.void
setRequireValidMetadata(boolean require)
void
setSatisfyAnyPredicates(boolean flag)
Set the flag indicating whether resolved credentials may satisfy any predicates (i.e.void
setUseDefaultPredicateRegistry(boolean flag)
Set the flag which determines whether the default predicate registry will be used if one is not supplied explicitly.protected XMLObject
unmarshallMetadata(InputStream metadataInput)
Unmarshalls the metadata from the given stream.-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
setId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
getId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, initialize, isDestroyed, isInitialized
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.shibboleth.utilities.java.support.component.IdentifiedComponent
getId
-
-
-
-
Field Detail
-
log
private final org.slf4j.Logger log
Class logger.
-
unmarshallerFactory
private UnmarshallerFactory unmarshallerFactory
Unmarshaller factory used to get an unmarshaller for the metadata DOM.
-
requireValidMetadata
private boolean requireValidMetadata
Whether metadata is required to be valid.
-
mdFilter
private MetadataFilter mdFilter
Filter applied to all metadata.
-
logPrefix
private String logPrefix
Logging prefix.
-
failFastInitialization
private boolean failFastInitialization
Whether problems during initialization should cause the provider to fail or go on without metadata. The assumption being that in most cases a provider will recover at some point in the future. Default: true.
-
entityBackingStore
private AbstractMetadataResolver.EntityBackingStore entityBackingStore
Backing store for runtime EntityDescriptor data.
-
parser
private ParserPool parser
Pool of parsers used to process XML.
-
satisfyAnyPredicates
private boolean satisfyAnyPredicates
Flag which determines whether predicates used in filtering are connected by a logical 'OR' (true) or by logical 'AND' (false). Defaults to false.
-
criterionPredicateRegistry
private CriterionPredicateRegistry<EntityDescriptor> criterionPredicateRegistry
Registry used in resolving predicates from criteria.
-
useDefaultPredicateRegistry
private boolean useDefaultPredicateRegistry
Flag which determines whether the default predicate registry will be used if one is not supplied explicitly. Defaults to true.
-
-
Method Detail
-
isRequireValidMetadata
public boolean isRequireValidMetadata()
- Specified by:
isRequireValidMetadata
in interfaceMetadataResolver
-
setRequireValidMetadata
public void setRequireValidMetadata(boolean require)
- Specified by:
setRequireValidMetadata
in interfaceMetadataResolver
-
getMetadataFilter
@Nullable public MetadataFilter getMetadataFilter()
- Specified by:
getMetadataFilter
in interfaceMetadataResolver
-
setMetadataFilter
public void setMetadataFilter(@Nullable MetadataFilter newFilter)
- Specified by:
setMetadataFilter
in interfaceMetadataResolver
-
isFailFastInitialization
public boolean isFailFastInitialization()
Gets whether problems during initialization should cause the provider to fail or go on without metadata. The assumption being that in most cases a provider will recover at some point in the future.- Returns:
- whether problems during initialization should cause the provider to fail
-
setFailFastInitialization
public void setFailFastInitialization(boolean failFast)
Sets whether problems during initialization should cause the provider to fail or go on without metadata. The assumption being that in most cases a provider will recover at some point in the future.- Parameters:
failFast
- whether problems during initialization should cause the provider to fail
-
getParserPool
@Nonnull public ParserPool getParserPool()
Gets the pool of parsers to use to parse XML.- Returns:
- pool of parsers to use to parse XML
-
setParserPool
public void setParserPool(@Nonnull ParserPool pool)
Sets the pool of parsers to use to parse XML.- Parameters:
pool
- pool of parsers to use to parse XML
-
isSatisfyAnyPredicates
public boolean isSatisfyAnyPredicates()
Get the flag indicating whether resolved credentials may satisfy any predicates (i.e. connected by logical 'OR') or all predicates (connected by logical 'AND').Defaults to false.
- Returns:
- true if must satisfy all, false otherwise
-
setSatisfyAnyPredicates
public void setSatisfyAnyPredicates(boolean flag)
Set the flag indicating whether resolved credentials may satisfy any predicates (i.e. connected by logical 'OR') or all predicates (connected by logical 'AND').Defaults to false.
- Parameters:
flag
- true if must satisfy all, false otherwise
-
getCriterionPredicateRegistry
@NonnullAfterInit public CriterionPredicateRegistry<EntityDescriptor> getCriterionPredicateRegistry()
Get the registry used in resolving predicates from criteria.- Returns:
- the effective registry instance used
-
setCriterionPredicateRegistry
public void setCriterionPredicateRegistry(@Nullable CriterionPredicateRegistry<EntityDescriptor> registry)
Set the registry used in resolving predicates from criteria.- Parameters:
registry
- the registry instance to use
-
isUseDefaultPredicateRegistry
public boolean isUseDefaultPredicateRegistry()
Get the flag which determines whether the default predicate registry will be used if one is not supplied explicitly.Defaults to true.
- Returns:
- true if should use default registry, false otherwise
-
setUseDefaultPredicateRegistry
public void setUseDefaultPredicateRegistry(boolean flag)
Set the flag which determines whether the default predicate registry will be used if one is not supplied explicitly.Defaults to true.
- Parameters:
flag
- true if should use default registry, false otherwise
-
resolveSingle
@Nullable public EntityDescriptor resolveSingle(CriteriaSet criteria) throws ResolverException
- Specified by:
resolveSingle
in interfaceResolver<EntityDescriptor,CriteriaSet>
- Throws:
ResolverException
-
getUnmarshallerFactory
protected UnmarshallerFactory getUnmarshallerFactory()
Get the XMLObject unmarshaller factory to use.- Returns:
- the unmarshaller factory instance to use
-
doInitialize
protected final void doInitialize() throws ComponentInitializationException
- Overrides:
doInitialize
in classAbstractIdentifiedInitializableComponent
- Throws:
ComponentInitializationException
-
doDestroy
protected void doDestroy()
- Overrides:
doDestroy
in classAbstractInitializableComponent
-
initMetadataResolver
protected void initMetadataResolver() throws ComponentInitializationException
Subclasses should override this method to perform any initialization logic necessary. Default implementation is a no-op.- Throws:
ComponentInitializationException
- thrown if there is a problem initializing the provider
-
unmarshallMetadata
@Nonnull protected XMLObject unmarshallMetadata(@Nonnull InputStream metadataInput) throws UnmarshallingException
Unmarshalls the metadata from the given stream. The stream is closed by this method and the returned metadata released its DOM representation.- Parameters:
metadataInput
- the input reader to the metadata.- Returns:
- the unmarshalled metadata
- Throws:
UnmarshallingException
- thrown if the metadata can no be unmarshalled
-
filterMetadata
@Nullable protected XMLObject filterMetadata(@Nullable XMLObject metadata) throws FilterException
Filters the given metadata.- Parameters:
metadata
- the metadata to be filtered- Returns:
- the filtered metadata
- Throws:
FilterException
- thrown if there is an error filtering the metadata
-
newFilterContext
@Nonnull protected MetadataFilterContext newFilterContext()
Get a new instance ofMetadataFilterContext
to be used when filtering metadata.This default implementation will just return an empty context. Subclasses would override to add contextual info specific to the implementation.
- Returns:
- the new filter context instance
-
releaseMetadataDOM
protected void releaseMetadataDOM(@Nullable XMLObject metadata)
Releases the DOM representation from the metadata object.- Parameters:
metadata
- the metadata object
-
isValid
protected boolean isValid(@Nullable XMLObject descriptor)
Returns whether the given descriptor is valid. If valid metadata is not required this method always returns true.- Parameters:
descriptor
- the descriptor to check- Returns:
- true if valid metadata is not required or the given descriptor is valid, false otherwise
-
lookupEntityID
@Nonnull @NonnullElements protected List<EntityDescriptor> lookupEntityID(@Nonnull @NotEmpty String entityID) throws ResolverException
Get list of descriptors matching an entityID.- Parameters:
entityID
- entityID to lookup- Returns:
- a list of descriptors
- Throws:
ResolverException
- if an error occurs
-
lookupIndexedEntityID
@Nonnull @NonnullElements protected List<EntityDescriptor> lookupIndexedEntityID(@Nonnull @NotEmpty String entityID)
Lookup the specified entityID from the index. The returned list will be a copy of what is stored in the backing index, and is safe to be manipulated by callers.- Parameters:
entityID
- the entityID to lookup- Returns:
- list copy of indexed entityID's, may be empty, will never be null
-
createNewBackingStore
@Nonnull protected AbstractMetadataResolver.EntityBackingStore createNewBackingStore()
Create a new backing store instance for EntityDescriptor data. Subclasses may override to return a more specialized subclass type. Note this method does not make the returned backing store the effective one in use. The caller is responsible for callingsetBackingStore(EntityBackingStore)
to make it the effective instance in use.- Returns:
- the new backing store instance
-
getBackingStore
@Nonnull protected AbstractMetadataResolver.EntityBackingStore getBackingStore()
Get the EntityDescriptor backing store currently in use by the metadata resolver.- Returns:
- the current effective entity backing store
-
setBackingStore
protected void setBackingStore(@Nonnull AbstractMetadataResolver.EntityBackingStore newBackingStore)
Set the EntityDescriptor backing store currently in use by the metadata resolver.- Parameters:
newBackingStore
- the new entity backing store
-
preProcessEntityDescriptor
protected void preProcessEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore)
Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.- Parameters:
entityDescriptor
- the target entity descriptor to processbackingStore
- the backing store instance to update
-
removeByEntityID
protected void removeByEntityID(@Nonnull String entityID, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore)
Remove from the backing store all metadata for the entity with the given entity ID.- Parameters:
entityID
- the entity ID of the metadata to removebackingStore
- the backing store instance to update
-
indexEntityDescriptor
protected void indexEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore)
Index the specified entity descriptor, updating the specified entity backing store instance as necessary.- Parameters:
entityDescriptor
- the target entity descriptor to processbackingStore
- the backing store instance to update
-
preProcessEntitiesDescriptor
protected void preProcessEntitiesDescriptor(@Nonnull EntitiesDescriptor entitiesDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)
Pre-process the specified entities descriptor, updating the specified entity backing store instance as necessary.- Parameters:
entitiesDescriptor
- the target entities descriptor to processbackingStore
- the backing store instance to update
-
predicateFilterCandidates
protected Iterable<EntityDescriptor> predicateFilterCandidates(@Nonnull Iterable<EntityDescriptor> candidates, @Nonnull CriteriaSet criteria, boolean onEmptyPredicatesReturnEmpty) throws ResolverException
Filter the supplied candidates by resolving predicates from the supplied criteria and applying the predicates to return a filteredIterable
.- Parameters:
candidates
- the candidates to evaluatecriteria
- the criteria set to evaluateonEmptyPredicatesReturnEmpty
- if true and no predicates are supplied, then return an empty iterable; otherwise return the original input candidates- Returns:
- an iterable of the candidates filtered by the resolved predicates
- Throws:
ResolverException
- if there is a fatal error during resolution
-
-