Class BasicParserPool
java.lang.Object
net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
net.shibboleth.utilities.java.support.xml.BasicParserPool
- All Implemented Interfaces:
Component
,DestructableComponent
,InitializableComponent
,ParserPool
@ThreadSafe
public class BasicParserPool
extends AbstractInitializableComponent
implements ParserPool
A pool of JAXP 1.3
DocumentBuilder
s.
This is a pool implementation of the caching factory variety, and as such imposes no upper bound on the number of
DocumentBuilders allowed to be concurrently checked out and in use. It does however impose a limit on the size of the
internal cache of idle builder instances via the value configured via setMaxPoolSize(int)
.
Builders retrieved from this pool may (but are not required to) be returned to the pool with the method
returnBuilder(DocumentBuilder)
.
References to builders are kept by way of SoftReference
so that the garbage collector may reap the builders
if the system is running out of memory.
This implementation of ParserPool
does not allow its properties to be modified once it has been initialized.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
A proxy that prevents the manages document builders retrieved from the parser pool. -
Field Summary
FieldsModifier and TypeFieldDescriptionBuilder attributes.private DocumentBuilderFactory
Factory used to create new builders.Builder features.private final Stack<SoftReference<DocumentBuilder>>
Cache of document builders.private boolean
Whether the builders are coalescing.private boolean
Whether the builder should validate.private EntityResolver
Entity resolver used by builders.private ErrorHandler
Error handler used by builders.private boolean
Whether the builders expand entity references.private boolean
Whether the builders ignore comments.private boolean
Whether the builders ignore element content whitespace.private final org.slf4j.Logger
Class logger.private int
Max number of builders allowed in the pool.private boolean
Whether the builders are namespace aware.private Schema
Schema used to validate parsed content.private String
Name of security manager attribute, if any.private boolean
Whether the builders are XInclude aware. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionBuild the default set of parser features to use.private void
Helper method to test class state.private void
Helper method to test class state.protected DocumentBuilder
Creates a new document builder.protected void
Performs component specific destruction logic.protected void
Initialize the pool.Gets a builder from the pool.Gets the builder attributes used when creating builders.Gets the builders' features.Gets theEntityResolver
.Gets theErrorHandler
.int
Gets the max number of builders the pool will hold.protected int
Gets the size of the current pool storage.Gets the schema used to validate the XML document during the parsing process.boolean
Gets whether the builders are coalescing.boolean
Gets whether the builders are validating.boolean
Gets whether builders expand entity references.boolean
Gets whether the builders ignore comments.boolean
Get whether the builders ignore element content whitespace.boolean
Gets whether the builders are namespace aware.boolean
Gets whether the builders are XInclude aware.Convenience method for creating a new document with a pooled builder.parse
(InputStream input) Convenience method for parsing an XML file using a pooled builder.Convenience method for parsing an XML file using a pooled builder.private void
prepareBuilder
(DocumentBuilder builder) Prepare a document builder instance for use, before returning it from a checkout call.void
returnBuilder
(DocumentBuilder builder) Returns a builder to the pool.void
setBuilderAttributes
(Map<String, Object> newAttributes) Sets the builder attributes used when creating builders.void
setBuilderFeatures
(Map<String, Boolean> newFeatures) Sets the the builders' features.void
setCoalescing
(boolean isCoalescing) Sets whether the builders are coalescing.void
setDTDValidating
(boolean isValidating) Sets whether the builders are validating.void
setEntityResolver
(EntityResolver resolver) Sets theEntityResolver
.void
setErrorHandler
(ErrorHandler handler) Sets theErrorHandler
.void
setExpandEntityReferences
(boolean expand) Sets whether builders expand entity references.void
setIgnoreComments
(boolean ignore) Sets whether the builders ignore comments.void
setIgnoreElementContentWhitespace
(boolean ignore) Sets whether the builders ignore element content whitespace.void
setMaxPoolSize
(int newSize) Sets the max number of builders the pool will hold.void
setNamespaceAware
(boolean isNamespaceAware) Sets whether the builders are namespace aware.void
Sets the schema used to validate the XML document during the parsing process.void
Set the name of the builder attribute that controls the use of an XMLSecurityManager.void
setXincludeAware
(boolean isXIncludeAware) Sets whether the builders are XInclude aware.Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, initialize, isDestroyed, isInitialized
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
securityManagerAttributeName
Name of security manager attribute, if any. -
builderFactory
Factory used to create new builders. -
builderPool
Cache of document builders. -
maxPoolSize
private int maxPoolSizeMax number of builders allowed in the pool. Default value: 5 -
builderAttributes
Builder attributes. -
coalescing
private boolean coalescingWhether the builders are coalescing. Default value: true -
expandEntityReferences
private boolean expandEntityReferencesWhether the builders expand entity references. Default value: false -
builderFeatures
Builder features. -
ignoreComments
private boolean ignoreCommentsWhether the builders ignore comments. Default value: true -
ignoreElementContentWhitespace
private boolean ignoreElementContentWhitespaceWhether the builders ignore element content whitespace. Default value: true -
namespaceAware
private boolean namespaceAwareWhether the builders are namespace aware. Default value: true -
schema
Schema used to validate parsed content. -
dtdValidating
private boolean dtdValidatingWhether the builder should validate. Default value: false -
xincludeAware
private boolean xincludeAwareWhether the builders are XInclude aware. Default value: false -
entityResolver
Entity resolver used by builders. -
errorHandler
Error handler used by builders.
-
-
Constructor Details
-
BasicParserPool
public BasicParserPool()Constructor.
-
-
Method Details
-
getBuilder
Gets a builder from the pool.- Specified by:
getBuilder
in interfaceParserPool
- Returns:
- a builder from the pool
- Throws:
XMLParserException
- thrown if the document builder factory is misconfigured
-
returnBuilder
Returns a builder to the pool.- Specified by:
returnBuilder
in interfaceParserPool
- Parameters:
builder
- the builder to return
-
newDocument
Convenience method for creating a new document with a pooled builder.- Specified by:
newDocument
in interfaceParserPool
- Returns:
- created document
- Throws:
XMLParserException
- thrown if there is a problem retrieving a builder
-
parse
Convenience method for parsing an XML file using a pooled builder.- Specified by:
parse
in interfaceParserPool
- Parameters:
input
- XML to parse- Returns:
- parsed document
- Throws:
XMLParserException
- thrown if there is a problem retrieving a builder, the input stream can not be read, or the XML was invalid
-
parse
Convenience method for parsing an XML file using a pooled builder.- Specified by:
parse
in interfaceParserPool
- Parameters:
input
- XML to parse- Returns:
- parsed document
- Throws:
XMLParserException
- thrown if there is a problem retrieving a builder, the input stream can not be read, or the XML was invalid
-
setSecurityManagerAttributeName
Set the name of the builder attribute that controls the use of an XMLSecurityManager.If set, this allows the pool to interrogate the factory to determine whether a security manager is installed and log its class.
- Parameters:
name
- name of attribute
-
getMaxPoolSize
public int getMaxPoolSize()Gets the max number of builders the pool will hold.- Returns:
- max number of builders the pool will hold
-
setMaxPoolSize
public void setMaxPoolSize(int newSize) Sets the max number of builders the pool will hold.- Parameters:
newSize
- max number of builders the pool will hold
-
getBuilderAttributes
Gets the builder attributes used when creating builders. This collection is unmodifiable.- Returns:
- builder attributes used when creating builders
-
setBuilderAttributes
Sets the builder attributes used when creating builders.- Parameters:
newAttributes
- builder attributes used when creating builders
-
isCoalescing
public boolean isCoalescing()Gets whether the builders are coalescing.- Returns:
- whether the builders are coalescing
-
setCoalescing
public void setCoalescing(boolean isCoalescing) Sets whether the builders are coalescing.- Parameters:
isCoalescing
- whether the builders are coalescing
-
isExpandEntityReferences
public boolean isExpandEntityReferences()Gets whether builders expand entity references.- Returns:
- whether builders expand entity references
-
setExpandEntityReferences
public void setExpandEntityReferences(boolean expand) Sets whether builders expand entity references.- Parameters:
expand
- whether builders expand entity references
-
getBuilderFeatures
Gets the builders' features. This collection is unmodifiable.- Returns:
- the builders' features
-
setBuilderFeatures
Sets the the builders' features.- Parameters:
newFeatures
- the builders' features
-
isIgnoreComments
public boolean isIgnoreComments()Gets whether the builders ignore comments.- Returns:
- whether the builders ignore comments
-
setIgnoreComments
public void setIgnoreComments(boolean ignore) Sets whether the builders ignore comments.- Parameters:
ignore
- The ignoreComments to set.
-
isIgnoreElementContentWhitespace
public boolean isIgnoreElementContentWhitespace()Get whether the builders ignore element content whitespace.- Returns:
- whether the builders ignore element content whitespace
-
setIgnoreElementContentWhitespace
public void setIgnoreElementContentWhitespace(boolean ignore) Sets whether the builders ignore element content whitespace.- Parameters:
ignore
- whether the builders ignore element content whitespace
-
isNamespaceAware
public boolean isNamespaceAware()Gets whether the builders are namespace aware.- Returns:
- whether the builders are namespace aware
-
setNamespaceAware
public void setNamespaceAware(boolean isNamespaceAware) Sets whether the builders are namespace aware.- Parameters:
isNamespaceAware
- whether the builders are namespace aware
-
getSchema
Gets the schema used to validate the XML document during the parsing process.- Returns:
- schema used to validate the XML document during the parsing process
-
setSchema
Sets the schema used to validate the XML document during the parsing process.- Parameters:
newSchema
- schema used to validate the XML document during the parsing process
-
getEntityResolver
Gets theEntityResolver
.- Returns:
- the configured entity resolver, may be null
-
setEntityResolver
Sets theEntityResolver
.- Parameters:
resolver
- the new entity resolver, may be null
-
getErrorHandler
Gets theErrorHandler
.- Returns:
- the configured error handler
-
setErrorHandler
Sets theErrorHandler
.- Parameters:
handler
- the new error handler
-
isDTDValidating
public boolean isDTDValidating()Gets whether the builders are validating.- Returns:
- whether the builders are validating
-
setDTDValidating
public void setDTDValidating(boolean isValidating) Sets whether the builders are validating.- Parameters:
isValidating
- whether the builders are validating
-
isXincludeAware
public boolean isXincludeAware()Gets whether the builders are XInclude aware.- Returns:
- whether the builders are XInclude aware
-
setXincludeAware
public void setXincludeAware(boolean isXIncludeAware) Sets whether the builders are XInclude aware.- Parameters:
isXIncludeAware
- whether the builders are XInclude aware
-
getPoolSize
protected int getPoolSize()Gets the size of the current pool storage.- Returns:
- current pool storage size
-
createBuilder
Creates a new document builder.- Returns:
- newly created document builder
- Throws:
XMLParserException
- thrown if their is a configuration error with the builder factory
-
prepareBuilder
Prepare a document builder instance for use, before returning it from a checkout call.- Parameters:
builder
- the document builder to prepare
-
doInitialize
Initialize the pool.- Overrides:
doInitialize
in classAbstractInitializableComponent
- Throws:
ComponentInitializationException
- thrown if pool can not be initialized, or if it is already initialized thrown if there is a problem initializing the component
-
doDestroy
protected void doDestroy()Performs component specific destruction logic. This method is executed within the lock on the object being destroyed. The default implementation of this method is a no-op.- Overrides:
doDestroy
in classAbstractInitializableComponent
-
checkInitializedNotDestroyed
private void checkInitializedNotDestroyed()Helper method to test class state. -
checkNotInitializedNotDestroyed
private void checkNotInitializedNotDestroyed()Helper method to test class state. -
buildDefaultFeatures
Build the default set of parser features to use.These will be overriden by a call to
setBuilderFeatures(Map)
.The default features set are:
XMLConstants.FEATURE_SECURE_PROCESSING
= true- http://apache.org/xml/features/disallow-doctype-decl = true
- Returns:
- the default features map
-