@ThreadSafe public class BasicParserPool extends AbstractInitializableComponent implements ParserPool
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.Modifier and Type | Class and Description |
---|---|
protected class |
BasicParserPool.DocumentBuilderProxy
A proxy that prevents the manages document builders retrieved from the parser pool.
|
Modifier and Type | Field and Description |
---|---|
private Map<String,Object> |
builderAttributes
Builder attributes.
|
private DocumentBuilderFactory |
builderFactory
Factory used to create new builders.
|
private Map<String,Boolean> |
builderFeatures
Builder features.
|
private Stack<SoftReference<DocumentBuilder>> |
builderPool
Cache of document builders.
|
private boolean |
coalescing
Whether the builders are coalescing.
|
private boolean |
dtdValidating
Whether the builder should validate.
|
private EntityResolver |
entityResolver
Entity resolver used by builders.
|
private ErrorHandler |
errorHandler
Error handler used by builders.
|
private boolean |
expandEntityReferences
Whether the builders expand entity references.
|
private boolean |
ignoreComments
Whether the builders ignore comments.
|
private boolean |
ignoreElementContentWhitespace
Whether the builders ignore element content whitespace.
|
private org.slf4j.Logger |
log
Class logger.
|
private int |
maxPoolSize
Max number of builders allowed in the pool.
|
private boolean |
namespaceAware
Whether the builders are namespace aware.
|
private Schema |
schema
Schema used to validate parsed content.
|
private boolean |
xincludeAware
Whether the builders are XInclude aware.
|
Constructor and Description |
---|
BasicParserPool()
Constructor.
|
Modifier and Type | Method and Description |
---|---|
protected Map<String,Boolean> |
buildDefaultFeatures()
Build the default set of parser features to use.
|
private void |
checkInitializedNotDestroyed()
Helper method to test class state.
|
private void |
checkNotInitializedNotDestroyed()
Helper method to test class state.
|
protected DocumentBuilder |
createBuilder()
Creates a new document builder.
|
protected void |
doDestroy()
Performs component specific destruction logic.
|
protected void |
doInitialize()
Initialize the pool.
|
DocumentBuilder |
getBuilder()
Gets a builder from the pool.
|
Map<String,Object> |
getBuilderAttributes()
Gets the builder attributes used when creating builders.
|
Map<String,Boolean> |
getBuilderFeatures()
Gets the builders' features.
|
int |
getMaxPoolSize()
Gets the max number of builders the pool will hold.
|
protected int |
getPoolSize()
Gets the size of the current pool storage.
|
Schema |
getSchema()
Gets the schema used to validate the XML document during the parsing process.
|
boolean |
isCoalescing()
Gets whether the builders are coalescing.
|
boolean |
isDTDValidating()
Gets whether the builders are validating.
|
boolean |
isExpandEntityReferences()
Gets whether builders expand entity references.
|
boolean |
isIgnoreComments()
Gets whether the builders ignore comments.
|
boolean |
isIgnoreElementContentWhitespace()
Get whether the builders ignore element content whitespace.
|
boolean |
isNamespaceAware()
Gets whether the builders are namespace aware.
|
boolean |
isXincludeAware()
Gets whether the builders are XInclude aware.
|
Document |
newDocument()
Convenience method for creating a new document with a pooled builder.
|
Document |
parse(InputStream input)
Convenience method for parsing an XML file using a pooled builder.
|
Document |
parse(Reader input)
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 |
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 |
setSchema(Schema newSchema)
Sets the schema used to validate the XML document during the parsing process.
|
void |
setXincludeAware(boolean isXIncludeAware)
Sets whether the builders are XInclude aware.
|
destroy, initialize, isDestroyed, isInitialized
private final org.slf4j.Logger log
private DocumentBuilderFactory builderFactory
private final Stack<SoftReference<DocumentBuilder>> builderPool
private int maxPoolSize
private boolean coalescing
private boolean expandEntityReferences
private boolean ignoreComments
private boolean ignoreElementContentWhitespace
private boolean namespaceAware
private Schema schema
private boolean dtdValidating
private boolean xincludeAware
private EntityResolver entityResolver
private final ErrorHandler errorHandler
@Nonnull public DocumentBuilder getBuilder() throws XMLParserException
getBuilder
in interface ParserPool
XMLParserException
- thrown if the document builder factory is misconfiguredpublic void returnBuilder(@Nullable DocumentBuilder builder)
returnBuilder
in interface ParserPool
builder
- the builder to return@Nonnull public Document newDocument() throws XMLParserException
newDocument
in interface ParserPool
XMLParserException
- thrown if there is a problem retrieving a builder@Nonnull public Document parse(@Nonnull InputStream input) throws XMLParserException
parse
in interface ParserPool
input
- XML to parseXMLParserException
- thrown if there is a problem retrieving a builder, the input stream can not be read,
or the XML was invalid@Nonnull public Document parse(@Nonnull Reader input) throws XMLParserException
parse
in interface ParserPool
input
- XML to parseXMLParserException
- thrown if there is a problem retrieving a builder, the input stream can not be read,
or the XML was invalidpublic int getMaxPoolSize()
public void setMaxPoolSize(int newSize)
newSize
- max number of builders the pool will hold@Nonnull @NonnullElements public Map<String,Object> getBuilderAttributes()
public void setBuilderAttributes(@Nullable @NullableElements Map<String,Object> newAttributes)
newAttributes
- builder attributes used when creating builderspublic boolean isCoalescing()
public void setCoalescing(boolean isCoalescing)
isCoalescing
- whether the builders are coalescingpublic boolean isExpandEntityReferences()
public void setExpandEntityReferences(boolean expand)
expand
- whether builders expand entity references@Nonnull @NonnullElements @Unmodifiable public Map<String,Boolean> getBuilderFeatures()
public void setBuilderFeatures(@Nullable @NullableElements Map<String,Boolean> newFeatures)
newFeatures
- the builders' featurespublic boolean isIgnoreComments()
public void setIgnoreComments(boolean ignore)
ignore
- The ignoreComments to set.public boolean isIgnoreElementContentWhitespace()
public void setIgnoreElementContentWhitespace(boolean ignore)
ignore
- whether the builders ignore element content whitespacepublic boolean isNamespaceAware()
public void setNamespaceAware(boolean isNamespaceAware)
isNamespaceAware
- whether the builders are namespace aware@Nullable public Schema getSchema()
public void setSchema(@Nullable Schema newSchema)
newSchema
- schema used to validate the XML document during the parsing processpublic boolean isDTDValidating()
public void setDTDValidating(boolean isValidating)
isValidating
- whether the builders are validatingpublic boolean isXincludeAware()
public void setXincludeAware(boolean isXIncludeAware)
isXIncludeAware
- whether the builders are XInclude awareprotected int getPoolSize()
@Nonnull protected DocumentBuilder createBuilder() throws XMLParserException
XMLParserException
- thrown if their is a configuration error with the builder factoryprivate void prepareBuilder(@Nonnull DocumentBuilder builder)
builder
- the document builder to prepareprotected void doInitialize() throws ComponentInitializationException
doInitialize
in class AbstractInitializableComponent
ComponentInitializationException
- thrown if pool can not be initialized, or if it is already initialized
thrown if there is a problem initializing the componentprotected void doDestroy()
doDestroy
in class AbstractInitializableComponent
private void checkInitializedNotDestroyed()
private void checkNotInitializedNotDestroyed()
protected Map<String,Boolean> buildDefaultFeatures()
These will be overriden by a call to setBuilderFeatures(Map)
.
The default features set are:
XMLConstants.FEATURE_SECURE_PROCESSING
= trueCopyright © 1999–2019. All rights reserved.