Class BasicParserPool

  • All Implemented Interfaces:
    Component, DestructableComponent, InitializableComponent, ParserPool

    @ThreadSafe
    public class BasicParserPool
    extends AbstractInitializableComponent
    implements ParserPool
    A pool of JAXP 1.3 DocumentBuilders. 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.
    • Field Detail

      • log

        @Nonnull
        private final org.slf4j.Logger log
        Class logger.
      • securityManagerAttributeName

        @Nullable
        private String securityManagerAttributeName
        Name of security manager attribute, if any.
      • maxPoolSize

        private int maxPoolSize
        Max number of builders allowed in the pool. Default value: 5
      • builderAttributes

        @Nonnull
        private Map<String,​Object> builderAttributes
        Builder attributes.
      • coalescing

        private boolean coalescing
        Whether the builders are coalescing. Default value: true
      • expandEntityReferences

        private boolean expandEntityReferences
        Whether the builders expand entity references. Default value: false
      • builderFeatures

        @Nonnull
        private Map<String,​Boolean> builderFeatures
        Builder features.
      • ignoreComments

        private boolean ignoreComments
        Whether the builders ignore comments. Default value: true
      • ignoreElementContentWhitespace

        private boolean ignoreElementContentWhitespace
        Whether the builders ignore element content whitespace. Default value: true
      • namespaceAware

        private boolean namespaceAware
        Whether the builders are namespace aware. Default value: true
      • schema

        private Schema schema
        Schema used to validate parsed content.
      • dtdValidating

        private boolean dtdValidating
        Whether the builder should validate. Default value: false
      • xincludeAware

        private boolean xincludeAware
        Whether the builders are XInclude aware. Default value: false
      • entityResolver

        private EntityResolver entityResolver
        Entity resolver used by builders.
      • errorHandler

        private ErrorHandler errorHandler
        Error handler used by builders.
    • Constructor Detail

      • BasicParserPool

        public BasicParserPool()
        Constructor.
    • Method Detail

      • returnBuilder

        public void returnBuilder​(@Nullable
                                  DocumentBuilder builder)
        Returns a builder to the pool.
        Specified by:
        returnBuilder in interface ParserPool
        Parameters:
        builder - the builder to return
      • parse

        @Nonnull
        public Document parse​(@Nonnull
                              InputStream input)
                       throws XMLParserException
        Convenience method for parsing an XML file using a pooled builder.
        Specified by:
        parse in interface ParserPool
        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

        @Nonnull
        public Document parse​(@Nonnull
                              Reader input)
                       throws XMLParserException
        Convenience method for parsing an XML file using a pooled builder.
        Specified by:
        parse in interface ParserPool
        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

        public void setSecurityManagerAttributeName​(@Nullable
                                                    String name)
        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

        @Nonnull
        @NonnullElements
        public Map<String,​Object> getBuilderAttributes()
        Gets the builder attributes used when creating builders. This collection is unmodifiable.
        Returns:
        builder attributes used when creating builders
      • setBuilderAttributes

        public void setBuilderAttributes​(@Nullable @NullableElements
                                         Map<String,​Object> newAttributes)
        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
      • setBuilderFeatures

        public void setBuilderFeatures​(@Nullable @NullableElements
                                       Map<String,​Boolean> newFeatures)
        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

        @Nullable
        public Schema 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

        public void setSchema​(@Nullable
                              Schema newSchema)
        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

        @Nullable
        public EntityResolver getEntityResolver()
        Gets the EntityResolver.
        Returns:
        the configured entity resolver, may be null
      • setEntityResolver

        public void setEntityResolver​(@Nullable
                                      EntityResolver resolver)
        Sets the EntityResolver.
        Parameters:
        resolver - the new entity resolver, may be null
      • getErrorHandler

        @Nonnull
        public ErrorHandler getErrorHandler()
        Gets the ErrorHandler.
        Returns:
        the configured error handler
      • setErrorHandler

        public void setErrorHandler​(@Nonnull
                                    ErrorHandler handler)
        Sets the ErrorHandler.
        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

        @Nonnull
        protected DocumentBuilder createBuilder()
                                         throws XMLParserException
        Creates a new document builder.
        Returns:
        newly created document builder
        Throws:
        XMLParserException - thrown if their is a configuration error with the builder factory
      • prepareBuilder

        private void prepareBuilder​(@Nonnull
                                    DocumentBuilder builder)
        Prepare a document builder instance for use, before returning it from a checkout call.
        Parameters:
        builder - the document builder to prepare
      • 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 class AbstractInitializableComponent
      • checkInitializedNotDestroyed

        private void checkInitializedNotDestroyed()
        Helper method to test class state.
      • checkNotInitializedNotDestroyed

        private void checkNotInitializedNotDestroyed()
        Helper method to test class state.