org.apache.xerces.impl
Class XMLEntityManager

java.lang.Object
  extended by org.apache.xerces.impl.XMLEntityManager
All Implemented Interfaces:
XMLComponent, XMLEntityResolver

public class XMLEntityManager
extends java.lang.Object
implements XMLComponent, XMLEntityResolver

The entity manager handles the registration of general and parameter entities; resolves entities; and starts entities. The entity manager is a central component in a standard parser configuration and this class works directly with the entity scanner to manage the underlying xni.

This component requires the following features and properties from the component manager that uses it:

Version:
$Id: XMLEntityManager.java 572040 2007-09-02 17:24:29Z mrglavas $
Author:
Andy Clark, IBM, Arnaud Le Hors, IBM

Nested Class Summary
static class XMLEntityManager.Entity
          Entity information.
 class XMLEntityManager.ScannedEntity
          Entity state.
 
Field Summary
static int DEFAULT_BUFFER_SIZE
          Default buffer size (2048).
static int DEFAULT_INTERNAL_BUFFER_SIZE
          Default internal entity buffer size (512).
static int DEFAULT_XMLDECL_BUFFER_SIZE
          Default buffer size before we've finished with the XMLDecl:
 
Constructor Summary
XMLEntityManager()
          Default constructor.
XMLEntityManager(XMLEntityManager entityManager)
          Constructs an entity manager that shares the specified entity declarations during each parse.
 
Method Summary
static void absolutizeAgainstUserDir(URI uri)
          Absolutizes a URI using the current value of the "user.dir" property as the base URI.
 void addExternalEntity(java.lang.String name, java.lang.String publicId, java.lang.String literalSystemId, java.lang.String baseSystemId)
          Adds an external entity declaration.
 void addInternalEntity(java.lang.String name, java.lang.String text)
          Adds an internal entity declaration.
 void addUnparsedEntity(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String baseSystemId, java.lang.String notation)
          Adds an unparsed entity declaration.
 void closeReaders()
          Close all opened InputStreams and Readers opened by this parser.
static java.io.OutputStream createOutputStream(java.lang.String uri)
           
 void endExternalSubset()
           
static java.lang.String expandSystemId(java.lang.String systemId, java.lang.String baseSystemId, boolean strict)
          Expands a system id and returns the system id as a URI, if it can be expanded.
 XMLEntityManager.ScannedEntity getCurrentEntity()
           
 XMLResourceIdentifier getCurrentResourceIdentifier()
           
 XMLEntityScanner getEntityScanner()
          Returns the entity scanner.
 java.lang.Boolean getFeatureDefault(java.lang.String featureId)
          Returns the default state for a feature, or null if this component does not want to report a default value for this feature.
 java.lang.Object getPropertyDefault(java.lang.String propertyId)
          Returns the default state for a property, or null if this component does not want to report a default value for this property.
 java.lang.String[] getRecognizedFeatures()
          Returns a list of feature identifiers that are recognized by this component.
 java.lang.String[] getRecognizedProperties()
          Returns a list of property identifiers that are recognized by this component.
 boolean isDeclaredEntity(java.lang.String entityName)
          Checks whether an entity given by name is declared.
 boolean isEntityDeclInExternalSubset(java.lang.String entityName)
          Checks whether the declaration of an entity given by name is // in the external subset.
 boolean isExternalEntity(java.lang.String entityName)
          Checks whether an entity given by name is external.
 boolean isStandalone()
          Returns true if the document entity is standalone.
 boolean isUnparsedEntity(java.lang.String entityName)
          Checks whether an entity given by name is unparsed.
 void reset()
           
 void reset(XMLComponentManager componentManager)
          Resets the component.
 XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier)
          Resolves the specified public and system identifiers.
 void setEntityHandler(XMLEntityHandler entityHandler)
          Sets the entity handler.
 void setFeature(java.lang.String featureId, boolean state)
          Sets the state of a feature.
static void setInstanceFollowRedirects(java.net.HttpURLConnection urlCon, boolean followRedirects)
          Attempt to set whether redirects will be followed for an HttpURLConnection.
 void setProperty(java.lang.String propertyId, java.lang.Object value)
          Sets the value of a property.
 void setScannerVersion(short version)
           
 void setStandalone(boolean standalone)
          Sets whether the document entity is standalone.
 java.lang.String setupCurrentEntity(java.lang.String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
          This method uses the passed-in XMLInputSource to make fCurrentEntity usable for reading.
 void startDocumentEntity(XMLInputSource xmlInputSource)
          Starts the document entity.
 void startDTDEntity(XMLInputSource xmlInputSource)
          Starts the DTD entity.
 void startEntity(java.lang.String entityName, boolean literal)
          Starts a named entity.
 void startEntity(java.lang.String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
          Starts an entity.
 void startExternalSubset()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_BUFFER_SIZE

public static final int DEFAULT_BUFFER_SIZE
Default buffer size (2048).

See Also:
Constant Field Values

DEFAULT_XMLDECL_BUFFER_SIZE

public static final int DEFAULT_XMLDECL_BUFFER_SIZE
Default buffer size before we've finished with the XMLDecl:

See Also:
Constant Field Values

DEFAULT_INTERNAL_BUFFER_SIZE

public static final int DEFAULT_INTERNAL_BUFFER_SIZE
Default internal entity buffer size (512).

See Also:
Constant Field Values
Constructor Detail

XMLEntityManager

public XMLEntityManager()
Default constructor.


XMLEntityManager

public XMLEntityManager(XMLEntityManager entityManager)
Constructs an entity manager that shares the specified entity declarations during each parse.

REVISIT: We might want to think about the "right" way to expose the list of declared entities. For now, the knowledge how to access the entity declarations is implicit.

Method Detail

setStandalone

public void setStandalone(boolean standalone)
Sets whether the document entity is standalone.

Parameters:
standalone - True if document entity is standalone.

isStandalone

public boolean isStandalone()
Returns true if the document entity is standalone.


setEntityHandler

public void setEntityHandler(XMLEntityHandler entityHandler)
Sets the entity handler. When an entity starts and ends, the entity handler is notified of the change.

Parameters:
entityHandler - The new entity handler.

getCurrentResourceIdentifier

public XMLResourceIdentifier getCurrentResourceIdentifier()

getCurrentEntity

public XMLEntityManager.ScannedEntity getCurrentEntity()

addInternalEntity

public void addInternalEntity(java.lang.String name,
                              java.lang.String text)
Adds an internal entity declaration.

Note: This method ignores subsequent entity declarations.

Note: The name should be a unique symbol. The SymbolTable can be used for this purpose.

Parameters:
name - The name of the entity.
text - The text of the entity.
See Also:
SymbolTable

addExternalEntity

public void addExternalEntity(java.lang.String name,
                              java.lang.String publicId,
                              java.lang.String literalSystemId,
                              java.lang.String baseSystemId)
                       throws java.io.IOException
Adds an external entity declaration.

Note: This method ignores subsequent entity declarations.

Note: The name should be a unique symbol. The SymbolTable can be used for this purpose.

Parameters:
name - The name of the entity.
publicId - The public identifier of the entity.
literalSystemId - The system identifier of the entity.
baseSystemId - The base system identifier of the entity. This is the system identifier of the entity where the entity being added and is used to expand the system identifier when the system identifier is a relative URI. When null the system identifier of the first external entity on the stack is used instead.
Throws:
java.io.IOException
See Also:
SymbolTable

isExternalEntity

public boolean isExternalEntity(java.lang.String entityName)
Checks whether an entity given by name is external.

Parameters:
entityName - The name of the entity to check.
Returns:
True if the entity is external, false otherwise (including when the entity is not declared).

isEntityDeclInExternalSubset

public boolean isEntityDeclInExternalSubset(java.lang.String entityName)
Checks whether the declaration of an entity given by name is // in the external subset.

Parameters:
entityName - The name of the entity to check.
Returns:
True if the entity was declared in the external subset, false otherwise (including when the entity is not declared).

addUnparsedEntity

public void addUnparsedEntity(java.lang.String name,
                              java.lang.String publicId,
                              java.lang.String systemId,
                              java.lang.String baseSystemId,
                              java.lang.String notation)
Adds an unparsed entity declaration.

Note: This method ignores subsequent entity declarations.

Note: The name should be a unique symbol. The SymbolTable can be used for this purpose.

Parameters:
name - The name of the entity.
publicId - The public identifier of the entity.
systemId - The system identifier of the entity.
notation - The name of the notation.
See Also:
SymbolTable

isUnparsedEntity

public boolean isUnparsedEntity(java.lang.String entityName)
Checks whether an entity given by name is unparsed.

Parameters:
entityName - The name of the entity to check.
Returns:
True if the entity is unparsed, false otherwise (including when the entity is not declared).

isDeclaredEntity

public boolean isDeclaredEntity(java.lang.String entityName)
Checks whether an entity given by name is declared.

Parameters:
entityName - The name of the entity to check.
Returns:
True if the entity is declared, false otherwise.

resolveEntity

public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier)
                             throws java.io.IOException,
                                    XNIException
Resolves the specified public and system identifiers. This method first attempts to resolve the entity based on the EntityResolver registered by the application. If no entity resolver is registered or if the registered entity handler is unable to resolve the entity, then default entity resolution will occur.

Specified by:
resolveEntity in interface XMLEntityResolver
Parameters:
resourceIdentifier - The XMLResourceIdentifier for the resource to resolve.
Returns:
Returns an input source that wraps the resolved entity. This method will never return null.
Throws:
java.io.IOException - Thrown on i/o error.
XNIException - Thrown by entity resolver to signal an error.
See Also:
XMLResourceIdentifier

startEntity

public void startEntity(java.lang.String entityName,
                        boolean literal)
                 throws java.io.IOException,
                        XNIException
Starts a named entity.

Parameters:
entityName - The name of the entity to start.
literal - True if this entity is started within a literal value.
Throws:
java.io.IOException - Thrown on i/o error.
XNIException - Thrown by entity handler to signal an error.

startDocumentEntity

public void startDocumentEntity(XMLInputSource xmlInputSource)
                         throws java.io.IOException,
                                XNIException
Starts the document entity. The document entity has the "[xml]" pseudo-name.

Parameters:
xmlInputSource - The input source of the document entity.
Throws:
java.io.IOException - Thrown on i/o error.
XNIException - Thrown by entity handler to signal an error.

startDTDEntity

public void startDTDEntity(XMLInputSource xmlInputSource)
                    throws java.io.IOException,
                           XNIException
Starts the DTD entity. The DTD entity has the "[dtd]" pseudo-name.

Parameters:
xmlInputSource - The input source of the DTD entity.
Throws:
java.io.IOException - Thrown on i/o error.
XNIException - Thrown by entity handler to signal an error.

startExternalSubset

public void startExternalSubset()

endExternalSubset

public void endExternalSubset()

startEntity

public void startEntity(java.lang.String name,
                        XMLInputSource xmlInputSource,
                        boolean literal,
                        boolean isExternal)
                 throws java.io.IOException,
                        XNIException
Starts an entity.

This method can be used to insert an application defined XML entity stream into the parsing stream.

Parameters:
name - The name of the entity.
xmlInputSource - The input source of the entity.
literal - True if this entity is started within a literal value.
isExternal - whether this entity should be treated as an internal or external entity.
Throws:
java.io.IOException - Thrown on i/o error.
XNIException - Thrown by entity handler to signal an error.

setupCurrentEntity

public java.lang.String setupCurrentEntity(java.lang.String name,
                                           XMLInputSource xmlInputSource,
                                           boolean literal,
                                           boolean isExternal)
                                    throws java.io.IOException,
                                           XNIException
This method uses the passed-in XMLInputSource to make fCurrentEntity usable for reading.

Parameters:
name - name of the entity (XML is it's the document entity)
xmlInputSource - the input source, with sufficient information to begin scanning characters.
literal - True if this entity is started within a literal value.
isExternal - whether this entity should be treated as an internal or external entity.
Returns:
the encoding of the new entity or null if a character stream was employed
Throws:
java.io.IOException - if anything can't be read XNIException If any parser-specific goes wrong.
XNIException

setScannerVersion

public void setScannerVersion(short version)

getEntityScanner

public XMLEntityScanner getEntityScanner()
Returns the entity scanner.


closeReaders

public void closeReaders()
Close all opened InputStreams and Readers opened by this parser.


reset

public void reset(XMLComponentManager componentManager)
           throws XMLConfigurationException
Resets the component. The component can query the component manager about any features and properties that affect the operation of the component.

Specified by:
reset in interface XMLComponent
Parameters:
componentManager - The component manager.
Throws:
SAXException - Thrown by component on initialization error. For example, if a feature or property is required for the operation of the component, the component manager may throw a SAXNotRecognizedException or a SAXNotSupportedException.
XMLConfigurationException

reset

public void reset()

getRecognizedFeatures

public java.lang.String[] getRecognizedFeatures()
Returns a list of feature identifiers that are recognized by this component. This method may return null if no features are recognized by this component.

Specified by:
getRecognizedFeatures in interface XMLComponent

setFeature

public void setFeature(java.lang.String featureId,
                       boolean state)
                throws XMLConfigurationException
Sets the state of a feature. This method is called by the component manager any time after reset when a feature changes state.

Note: Components should silently ignore features that do not affect the operation of the component.

Specified by:
setFeature in interface XMLComponent
Parameters:
featureId - The feature identifier.
state - The state of the feature.
Throws:
SAXNotRecognizedException - The component should not throw this exception.
SAXNotSupportedException - The component should not throw this exception.
XMLConfigurationException - Thrown for configuration error. In general, components should only throw this exception if it is really a critical error.

getRecognizedProperties

public java.lang.String[] getRecognizedProperties()
Returns a list of property identifiers that are recognized by this component. This method may return null if no properties are recognized by this component.

Specified by:
getRecognizedProperties in interface XMLComponent

setProperty

public void setProperty(java.lang.String propertyId,
                        java.lang.Object value)
                 throws XMLConfigurationException
Sets the value of a property. This method is called by the component manager any time after reset when a property changes value.

Note: Components should silently ignore properties that do not affect the operation of the component.

Specified by:
setProperty in interface XMLComponent
Parameters:
propertyId - The property identifier.
value - The value of the property.
Throws:
SAXNotRecognizedException - The component should not throw this exception.
SAXNotSupportedException - The component should not throw this exception.
XMLConfigurationException - Thrown for configuration error. In general, components should only throw this exception if it is really a critical error.

getFeatureDefault

public java.lang.Boolean getFeatureDefault(java.lang.String featureId)
Returns the default state for a feature, or null if this component does not want to report a default value for this feature.

Specified by:
getFeatureDefault in interface XMLComponent
Parameters:
featureId - The feature identifier.
Since:
Xerces 2.2.0

getPropertyDefault

public java.lang.Object getPropertyDefault(java.lang.String propertyId)
Returns the default state for a property, or null if this component does not want to report a default value for this property.

Specified by:
getPropertyDefault in interface XMLComponent
Parameters:
propertyId - The property identifier.
Since:
Xerces 2.2.0

absolutizeAgainstUserDir

public static void absolutizeAgainstUserDir(URI uri)
                                     throws URI.MalformedURIException
Absolutizes a URI using the current value of the "user.dir" property as the base URI. If the URI is already absolute, this is a no-op.

Parameters:
uri - the URI to absolutize
Throws:
URI.MalformedURIException

expandSystemId

public static java.lang.String expandSystemId(java.lang.String systemId,
                                              java.lang.String baseSystemId,
                                              boolean strict)
                                       throws URI.MalformedURIException
Expands a system id and returns the system id as a URI, if it can be expanded. A return value of null means that the identifier is already expanded. An exception thrown indicates a failure to expand the id.

Parameters:
systemId - The systemId to be expanded.
Returns:
Returns the URI string representing the expanded system identifier. A null value indicates that the given system identifier is already expanded.
Throws:
URI.MalformedURIException

setInstanceFollowRedirects

public static void setInstanceFollowRedirects(java.net.HttpURLConnection urlCon,
                                              boolean followRedirects)
Attempt to set whether redirects will be followed for an HttpURLConnection. This may fail on earlier JDKs which do not support setting this preference.


createOutputStream

public static java.io.OutputStream createOutputStream(java.lang.String uri)
                                               throws java.io.IOException
Throws:
java.io.IOException