org.apache.xerces.impl

Class XMLEntityManager

public class XMLEntityManager extends 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:

INTERNAL:

Usage of this class is not supported. It may be altered or removed at any time.

Version: $Id: XMLEntityManager.java,v 1.94 2005/04/19 03:18:18 mrglavas Exp $

Author: Andy Clark, IBM Arnaud Le Hors, IBM

Nested Class Summary
abstract static classXMLEntityManager.Entity
Entity information.
protected static classXMLEntityManager.ExternalEntity
External entity.
protected static classXMLEntityManager.InternalEntity
Internal entity.
protected classXMLEntityManager.RewindableInputStream
This class wraps the byte inputstreams we're presented with.
classXMLEntityManager.ScannedEntity
Entity state.
Field Summary
protected static StringALLOW_JAVA_ENCODINGS
Feature identifier: allow Java encodings.
protected static StringBUFFER_SIZE
property identifier: buffer size.
static intDEFAULT_BUFFER_SIZE
Default buffer size (2048).
static intDEFAULT_INTERNAL_BUFFER_SIZE
Default internal entity buffer size (512).
static intDEFAULT_XMLDECL_BUFFER_SIZE
Default buffer size before we've finished with the XMLDecl:
protected static StringENTITY_RESOLVER
Property identifier: entity resolver.
protected static StringERROR_REPORTER
Property identifier: error reporter.
protected static StringEXTERNAL_GENERAL_ENTITIES
Feature identifier: external general entities.
protected static StringEXTERNAL_PARAMETER_ENTITIES
Feature identifier: external parameter entities.
protected booleanfAllowJavaEncodings
Allow Java encoding names.
protected intfBufferSize
Buffer size.
protected XMLEntityManager.ScannedEntityfCurrentEntity
Current entity.
protected HashtablefDeclaredEntities
Shared declared entities.
protected HashtablefEntities
Entities.
protected intfEntityExpansionCount
protected intfEntityExpansionLimit
protected XMLEntityHandlerfEntityHandler
Entity handler.
protected XMLEntityResolverfEntityResolver
Entity resolver.
protected XMLEntityScannerfEntityScanner
Current entity scanner.
protected StackfEntityStack
Entity stack.
protected XMLErrorReporterfErrorReporter
Error reporter.
protected booleanfExternalGeneralEntities
External general entities.
protected booleanfExternalParameterEntities
External parameter entities.
protected booleanfInExternalSubset
protected StackfReaderStack
protected SecurityManagerfSecurityManager
protected booleanfStandalone
True if the document entity is standalone.
protected booleanfStrictURI
standard uri conformant (strict uri). http://apache.org/xml/features/standard-uri-conformant
protected SymbolTablefSymbolTable
Symbol table.
protected booleanfValidation
Validation.
protected ValidationManagerfValidationManager
Validation manager.
protected booleanfWarnDuplicateEntityDef
warn on duplicate Entity declaration. http://apache.org/xml/features/warn-on-duplicate-entitydef
protected XMLEntityScannerfXML10EntityScanner
XML 1.0 entity scanner.
protected XMLEntityScannerfXML11EntityScanner
XML 1.1 entity scanner.
protected static StringPARSER_SETTINGS
protected static StringSECURITY_MANAGER
property identifier: security manager.
protected static StringSTANDARD_URI_CONFORMANT
Feature identifier: standard uri conformant
protected static StringSYMBOL_TABLE
Property identifier: symbol table.
protected static StringVALIDATION
Feature identifier: validation.
protected static StringVALIDATION_MANAGER
protected static StringWARN_ON_DUPLICATE_ENTITYDEF
Feature identifier: warn on duplicate EntityDef
Constructor Summary
XMLEntityManager()
Default constructor.
XMLEntityManager(XMLEntityManager entityManager)
Constructs an entity manager that shares the specified entity declarations during each parse.
Method Summary
static voidabsolutizeAgainstUserDir(URI uri)
Absolutizes a URI using the current value of the "user.dir" property as the base URI.
voidaddExternalEntity(String name, String publicId, String literalSystemId, String baseSystemId)
Adds an external entity declaration.
voidaddInternalEntity(String name, String text)
Adds an internal entity declaration.
voidaddUnparsedEntity(String name, String publicId, String systemId, String baseSystemId, String notation)
Adds an unparsed entity declaration.
voidcloseReaders()
Close all opened InputStreams and Readers opened by this parser.
protected ReadercreateReader(InputStream inputStream, String encoding, Boolean isBigEndian)
Creates a reader capable of reading the given input stream in the specified encoding.
voidendExternalSubset()
static StringexpandSystemId(String systemId, String baseSystemId, boolean strict)
Expands a system id and returns the system id as a URI, if it can be expanded.
protected static StringfixURI(String str)
Fixes a platform dependent filename to standard URI form.
XMLEntityManager.ScannedEntitygetCurrentEntity()
XMLResourceIdentifiergetCurrentResourceIdentifier()
protected Object[]getEncodingName(byte[] b4, int count)
Returns the IANA encoding name that is auto-detected from the bytes specified, with the endian-ness of that encoding where appropriate.
XMLEntityScannergetEntityScanner()
Returns the entity scanner.
BooleangetFeatureDefault(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.
ObjectgetPropertyDefault(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.
String[]getRecognizedFeatures()
Returns a list of feature identifiers that are recognized by this component.
String[]getRecognizedProperties()
Returns a list of property identifiers that are recognized by this component.
booleanisDeclaredEntity(String entityName)
Checks whether an entity given by name is declared.
booleanisEntityDeclInExternalSubset(String entityName)
Checks whether the declaration of an entity given by name is // in the external subset.
booleanisExternalEntity(String entityName)
Checks whether an entity given by name is external.
booleanisStandalone()
Returns true if the document entity is standalone.
booleanisUnparsedEntity(String entityName)
Checks whether an entity given by name is unparsed.
voidreset(XMLComponentManager componentManager)
Resets the component.
voidreset()
XMLInputSourceresolveEntity(XMLResourceIdentifier resourceIdentifier)
Resolves the specified public and system identifiers.
voidsetEntityHandler(XMLEntityHandler entityHandler)
Sets the entity handler.
voidsetFeature(String featureId, boolean state)
Sets the state of a feature.
static voidsetInstanceFollowRedirects(HttpURLConnection urlCon, boolean followRedirects)
Attempt to set whether redirects will be followed for an HttpURLConnection.
voidsetProperty(String propertyId, Object value)
Sets the value of a property.
voidsetScannerVersion(short version)
voidsetStandalone(boolean standalone)
Sets whether the document entity is standalone.
StringsetupCurrentEntity(String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
This method uses the passed-in XMLInputSource to make fCurrentEntity usable for reading.
voidstartDocumentEntity(XMLInputSource xmlInputSource)
Starts the document entity.
voidstartDTDEntity(XMLInputSource xmlInputSource)
Starts the DTD entity.
voidstartEntity(String entityName, boolean literal)
Starts a named entity.
voidstartEntity(String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
Starts an entity.
voidstartExternalSubset()

Field Detail

ALLOW_JAVA_ENCODINGS

protected static final String ALLOW_JAVA_ENCODINGS
Feature identifier: allow Java encodings.

BUFFER_SIZE

protected static final String BUFFER_SIZE
property identifier: buffer size.

DEFAULT_BUFFER_SIZE

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

DEFAULT_INTERNAL_BUFFER_SIZE

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

DEFAULT_XMLDECL_BUFFER_SIZE

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

ENTITY_RESOLVER

protected static final String ENTITY_RESOLVER
Property identifier: entity resolver.

ERROR_REPORTER

protected static final String ERROR_REPORTER
Property identifier: error reporter.

EXTERNAL_GENERAL_ENTITIES

protected static final String EXTERNAL_GENERAL_ENTITIES
Feature identifier: external general entities.

EXTERNAL_PARAMETER_ENTITIES

protected static final String EXTERNAL_PARAMETER_ENTITIES
Feature identifier: external parameter entities.

fAllowJavaEncodings

protected boolean fAllowJavaEncodings
Allow Java encoding names. This feature identifier is: http://apache.org/xml/features/allow-java-encodings

fBufferSize

protected int fBufferSize
Buffer size. We get this value from a property. The default size is used if the input buffer size property is not specified. REVISIT: do we need a property for internal entity buffer size?

fCurrentEntity

protected XMLEntityManager.ScannedEntity fCurrentEntity
Current entity.

fDeclaredEntities

protected Hashtable fDeclaredEntities
Shared declared entities.

fEntities

protected Hashtable fEntities
Entities.

fEntityExpansionCount

protected int fEntityExpansionCount

fEntityExpansionLimit

protected int fEntityExpansionLimit

fEntityHandler

protected XMLEntityHandler fEntityHandler
Entity handler.

fEntityResolver

protected XMLEntityResolver fEntityResolver
Entity resolver. This property identifier is: http://apache.org/xml/properties/internal/entity-resolver

fEntityScanner

protected XMLEntityScanner fEntityScanner
Current entity scanner.

fEntityStack

protected Stack fEntityStack
Entity stack.

fErrorReporter

protected XMLErrorReporter fErrorReporter
Error reporter. This property identifier is: http://apache.org/xml/properties/internal/error-reporter

fExternalGeneralEntities

protected boolean fExternalGeneralEntities
External general entities. This feature identifier is: http://xml.org/sax/features/external-general-entities

fExternalParameterEntities

protected boolean fExternalParameterEntities
External parameter entities. This feature identifier is: http://xml.org/sax/features/external-parameter-entities

fInExternalSubset

protected boolean fInExternalSubset

fReaderStack

protected Stack fReaderStack

fSecurityManager

protected SecurityManager fSecurityManager

fStandalone

protected boolean fStandalone
True if the document entity is standalone. This should really only be set by the document source (e.g. XMLDocumentScanner).

fStrictURI

protected boolean fStrictURI
standard uri conformant (strict uri). http://apache.org/xml/features/standard-uri-conformant

fSymbolTable

protected SymbolTable fSymbolTable
Symbol table. This property identifier is: http://apache.org/xml/properties/internal/symbol-table

fValidation

protected boolean fValidation
Validation. This feature identifier is: http://xml.org/sax/features/validation

fValidationManager

protected ValidationManager fValidationManager
Validation manager. This property identifier is: http://apache.org/xml/properties/internal/validation-manager

fWarnDuplicateEntityDef

protected boolean fWarnDuplicateEntityDef
warn on duplicate Entity declaration. http://apache.org/xml/features/warn-on-duplicate-entitydef

fXML10EntityScanner

protected XMLEntityScanner fXML10EntityScanner
XML 1.0 entity scanner.

fXML11EntityScanner

protected XMLEntityScanner fXML11EntityScanner
XML 1.1 entity scanner.

PARSER_SETTINGS

protected static final String PARSER_SETTINGS

SECURITY_MANAGER

protected static final String SECURITY_MANAGER
property identifier: security manager.

STANDARD_URI_CONFORMANT

protected static final String STANDARD_URI_CONFORMANT
Feature identifier: standard uri conformant

SYMBOL_TABLE

protected static final String SYMBOL_TABLE
Property identifier: symbol table.

VALIDATION

protected static final String VALIDATION
Feature identifier: validation.

VALIDATION_MANAGER

protected static final String VALIDATION_MANAGER

WARN_ON_DUPLICATE_ENTITYDEF

protected static final String WARN_ON_DUPLICATE_ENTITYDEF
Feature identifier: warn on duplicate EntityDef

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

absolutizeAgainstUserDir

public static void absolutizeAgainstUserDir(URI uri)
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

addExternalEntity

public void addExternalEntity(String name, String publicId, String literalSystemId, String baseSystemId)
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.

See Also: SymbolTable

addInternalEntity

public void addInternalEntity(String name, 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

addUnparsedEntity

public void addUnparsedEntity(String name, String publicId, String systemId, String baseSystemId, 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

closeReaders

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

createReader

protected Reader createReader(InputStream inputStream, String encoding, Boolean isBigEndian)
Creates a reader capable of reading the given input stream in the specified encoding.

Parameters: inputStream The input stream. encoding The encoding name that the input stream is encoded using. If the user has specified that Java encoding names are allowed, then the encoding name may be a Java encoding name; otherwise, it is an ianaEncoding name. isBigEndian For encodings (like uCS-4), whose names cannot specify a byte order, this tells whether the order is bigEndian. null menas unknown or not relevant.

Returns: Returns a reader.

endExternalSubset

public void endExternalSubset()

expandSystemId

public static String expandSystemId(String systemId, String baseSystemId, boolean strict)
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.

fixURI

protected static String fixURI(String str)
Fixes a platform dependent filename to standard URI form.

Parameters: str The string to fix.

Returns: Returns the fixed URI string.

getCurrentEntity

public XMLEntityManager.ScannedEntity getCurrentEntity()

getCurrentResourceIdentifier

public XMLResourceIdentifier getCurrentResourceIdentifier()

getEncodingName

protected Object[] getEncodingName(byte[] b4, int count)
Returns the IANA encoding name that is auto-detected from the bytes specified, with the endian-ness of that encoding where appropriate.

Parameters: b4 The first four bytes of the input. count The number of bytes actually read.

Returns: a 2-element array: the first element, an IANA-encoding string, the second element a Boolean which is true iff the document is big endian, false if it's little-endian, and null if the distinction isn't relevant.

getEntityScanner

public XMLEntityScanner getEntityScanner()
Returns the entity scanner.

getFeatureDefault

public Boolean getFeatureDefault(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.

Parameters: featureId The feature identifier.

Since: Xerces 2.2.0

getPropertyDefault

public Object getPropertyDefault(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.

Parameters: propertyId The property identifier.

Since: Xerces 2.2.0

getRecognizedFeatures

public 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.

getRecognizedProperties

public 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.

isDeclaredEntity

public boolean isDeclaredEntity(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.

isEntityDeclInExternalSubset

public boolean isEntityDeclInExternalSubset(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).

isExternalEntity

public boolean isExternalEntity(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).

isStandalone

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

isUnparsedEntity

public boolean isUnparsedEntity(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).

reset

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

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.

reset

public void reset()

resolveEntity

public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier)
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.

Parameters: publicId The public identifier of the entity. systemId The system identifier of the entity. baseSystemId The base system identifier of the entity. This is the system identifier of the current entity and is used to expand the system identifier when the system identifier is a relative URI.

Returns: Returns an input source that wraps the resolved entity. This method will never return null.

Throws: IOException Thrown on i/o error. XNIException Thrown by entity resolver to signal an error.

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.

setFeature

public void setFeature(String featureId, boolean state)
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.

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.

setInstanceFollowRedirects

public static void setInstanceFollowRedirects(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.

setProperty

public void setProperty(String propertyId, Object value)
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.

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.

setScannerVersion

public void setScannerVersion(short version)

setStandalone

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

Parameters: standalone True if document entity is standalone.

setupCurrentEntity

public String setupCurrentEntity(String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
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: IOException if anything can't be read XNIException If any parser-specific goes wrong.

startDocumentEntity

public void startDocumentEntity(XMLInputSource xmlInputSource)
Starts the document entity. The document entity has the "[xml]" pseudo-name.

Parameters: xmlInputSource The input source of the document entity.

Throws: IOException Thrown on i/o error. XNIException Thrown by entity handler to signal an error.

startDTDEntity

public void startDTDEntity(XMLInputSource xmlInputSource)
Starts the DTD entity. The DTD entity has the "[dtd]" pseudo-name.

Parameters: xmlInputSource The input source of the DTD entity.

Throws: IOException Thrown on i/o error. XNIException Thrown by entity handler to signal an error.

startEntity

public void startEntity(String entityName, boolean literal)
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: IOException Thrown on i/o error. XNIException Thrown by entity handler to signal an error.

startEntity

public void startEntity(String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
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: IOException Thrown on i/o error. XNIException Thrown by entity handler to signal an error.

startExternalSubset

public void startExternalSubset()
Copyright B) 1999-2005 Apache XML Project. All Rights Reserved.