public class XMLCatalogResolver
extends java.lang.Object
implements org.apache.xerces.xni.parser.XMLEntityResolver, org.xml.sax.ext.EntityResolver2, org.w3c.dom.ls.LSResourceResolver
The catalog resolver handles the resolution of external identifiers and URI references through XML catalogs. This component supports XML catalogs defined by the OASIS XML Catalogs Specification. It encapsulates the XML Commons resolver. An instance of this class may be registered on the parser as a SAX entity resolver, as a DOM LSResourceResolver or as an XNI entity resolver by setting the property (http://apache.org/xml/properties/internal/entity-resolver).
It is intended that this class may be used standalone to perform catalog resolution outside of a parsing context. It may be shared between several parsers and the application.
Constructor and Description |
---|
XMLCatalogResolver()
Constructs a catalog resolver with a default configuration.
|
XMLCatalogResolver(java.lang.String[] catalogs)
Constructs a catalog resolver with the given
list of entry files.
|
XMLCatalogResolver(java.lang.String[] catalogs,
boolean preferPublic)
Constructs a catalog resolver with the given
list of entry files and the preference for whether
system or public matches are preferred.
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
Forces the cache of catalog mappings to be cleared.
|
java.lang.String[] |
getCatalogList()
Returns the initial list of catalog entry files.
|
org.xml.sax.InputSource |
getExternalSubset(java.lang.String name,
java.lang.String baseURI)
Locates an external subset for documents which do not explicitly
provide one.
|
boolean |
getPreferPublic()
Returns the preference for whether system or public
matches are preferred.
|
boolean |
getUseLiteralSystemId()
Returns the preference for whether the literal system
identifier should be used when resolving system
identifiers when both it and the expanded system
identifier are available.
|
org.xml.sax.InputSource |
resolveEntity(java.lang.String publicId,
java.lang.String systemId)
Resolves an external entity.
|
org.xml.sax.InputSource |
resolveEntity(java.lang.String name,
java.lang.String publicId,
java.lang.String baseURI,
java.lang.String systemId)
Resolves an external entity.
|
org.apache.xerces.xni.parser.XMLInputSource |
resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)
Resolves an external entity.
|
java.lang.String |
resolveIdentifier(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)
Resolves an identifier using the catalog.
|
java.lang.String |
resolvePublic(java.lang.String publicId,
java.lang.String systemId)
Returns the URI mapping in the catalog for the given
external identifier or
null if no mapping
exists. |
org.w3c.dom.ls.LSInput |
resolveResource(java.lang.String type,
java.lang.String namespaceURI,
java.lang.String publicId,
java.lang.String systemId,
java.lang.String baseURI)
Resolves a resource using the catalog.
|
java.lang.String |
resolveSystem(java.lang.String systemId)
Returns the URI mapping in the catalog for the given
external identifier or
null if no mapping
exists. |
java.lang.String |
resolveURI(java.lang.String uri)
Returns the URI mapping in the catalog for the given URI
reference or
null if no mapping exists. |
void |
setCatalogList(java.lang.String[] catalogs)
Sets the initial list of catalog entry files.
|
void |
setPreferPublic(boolean preferPublic)
Sets the preference for whether system or public
matches are preferred.
|
void |
setUseLiteralSystemId(boolean useLiteralSystemId)
Sets the preference for whether the literal system
identifier should be used when resolving system
identifiers when both it and the expanded system
identifier are available.
|
public XMLCatalogResolver()
Constructs a catalog resolver with a default configuration.
public XMLCatalogResolver(java.lang.String[] catalogs)
Constructs a catalog resolver with the given list of entry files.
catalogs
- an ordered array list of absolute URIspublic XMLCatalogResolver(java.lang.String[] catalogs, boolean preferPublic)
Constructs a catalog resolver with the given list of entry files and the preference for whether system or public matches are preferred.
catalogs
- an ordered array list of absolute URIspreferPublic
- the prefer public settingpublic final java.lang.String[] getCatalogList()
Returns the initial list of catalog entry files.
public final void setCatalogList(java.lang.String[] catalogs)
Sets the initial list of catalog entry files. If there were any catalog mappings cached from the previous list they will be replaced by catalog mappings from the new list the next time the catalog is queried.
catalogs
- an ordered array list of absolute URIspublic final void clear()
Forces the cache of catalog mappings to be cleared.
public final boolean getPreferPublic()
Returns the preference for whether system or public
matches are preferred. This is used in the absence
of any occurrence of the prefer
attribute
on the catalog
entry of a catalog. If this
property has not yet been explicitly set its value is
true
.
public final void setPreferPublic(boolean preferPublic)
Sets the preference for whether system or public
matches are preferred. This is used in the absence
of any occurrence of the prefer
attribute
on the catalog
entry of a catalog.
preferPublic
- the prefer public settingpublic final boolean getUseLiteralSystemId()
Returns the preference for whether the literal system
identifier should be used when resolving system
identifiers when both it and the expanded system
identifier are available. If this property has not yet
been explicitly set its value is true
.
setUseLiteralSystemId(boolean)
public final void setUseLiteralSystemId(boolean useLiteralSystemId)
Sets the preference for whether the literal system identifier should be used when resolving system identifiers when both it and the expanded system identifier are available.
The literal system identifier is the URI as it was provided before absolutization. It may be embedded within an entity. It may be provided externally or it may be the result of redirection. For example, redirection may have come from the protocol level through HTTP or from an application's entity resolver.
The expanded system identifier is an absolute URI which is the result of resolving the literal system identifier against a base URI.
useLiteralSystemId
- the preference for using
literal system identifiers for catalog resolutionpublic org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws org.xml.sax.SAXException, java.io.IOException
Resolves an external entity. If the entity cannot be
resolved, this method should return null
. This
method returns an input source if an entry was found in the
catalog for the given external identifier. It should be
overridden if other behaviour is required.
resolveEntity
in interface org.xml.sax.EntityResolver
publicId
- the public identifier, or null
if none was suppliedsystemId
- the system identifierorg.xml.sax.SAXException
- any SAX exception, possibly wrapping another exceptionjava.io.IOException
- thrown if some i/o error occursInputSource
public org.xml.sax.InputSource resolveEntity(java.lang.String name, java.lang.String publicId, java.lang.String baseURI, java.lang.String systemId) throws org.xml.sax.SAXException, java.io.IOException
Resolves an external entity. If the entity cannot be
resolved, this method should return null
. This
method returns an input source if an entry was found in the
catalog for the given external identifier. It should be
overridden if other behaviour is required.
resolveEntity
in interface org.xml.sax.ext.EntityResolver2
name
- the identifier of the external entitypublicId
- the public identifier, or null
if none was suppliedbaseURI
- the URI with respect to which relative systemIDs are interpreted.systemId
- the system identifierorg.xml.sax.SAXException
- any SAX exception, possibly wrapping another exceptionjava.io.IOException
- thrown if some i/o error occurspublic org.xml.sax.InputSource getExternalSubset(java.lang.String name, java.lang.String baseURI) throws org.xml.sax.SAXException, java.io.IOException
Locates an external subset for documents which do not explicitly
provide one. This method always returns null
. It
should be overrided if other behaviour is required.
getExternalSubset
in interface org.xml.sax.ext.EntityResolver2
name
- the identifier of the document root elementbaseURI
- the document's base URIorg.xml.sax.SAXException
- any SAX exception, possibly wrapping another exceptionjava.io.IOException
- thrown if some i/o error occurspublic org.w3c.dom.ls.LSInput resolveResource(java.lang.String type, java.lang.String namespaceURI, java.lang.String publicId, java.lang.String systemId, java.lang.String baseURI)
Resolves a resource using the catalog. This method interprets that the namespace URI corresponds to uri entries in the catalog. Where both a namespace and an external identifier exist, the namespace takes precedence.
resolveResource
in interface org.w3c.dom.ls.LSResourceResolver
type
- the type of the resource being resolvednamespaceURI
- the namespace of the resource being resolved,
or null
if none was suppliedpublicId
- the public identifier of the resource being resolved,
or null
if none was suppliedsystemId
- the system identifier of the resource being resolved,
or null
if none was suppliedbaseURI
- the absolute base URI of the resource being parsed,
or null
if there is no base URILSInput
object describing the new input
source, or null
to request that the parser open a
regular URI connection to the resource.public org.apache.xerces.xni.parser.XMLInputSource resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier) throws org.apache.xerces.xni.XNIException, java.io.IOException
Resolves an external entity. If the entity cannot be
resolved, this method should return null
. This
method only calls resolveIdentifier
and returns
an input source if an entry was found in the catalog. It
should be overridden if other behaviour is required.
resolveEntity
in interface org.apache.xerces.xni.parser.XMLEntityResolver
resourceIdentifier
- location of the XML resource to resolveorg.apache.xerces.xni.XNIException
- thrown on general errorjava.io.IOException
- thrown if some i/o error occursXMLResourceIdentifier
public java.lang.String resolveIdentifier(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier) throws java.io.IOException, org.apache.xerces.xni.XNIException
Resolves an identifier using the catalog. This method interprets that the namespace of the identifier corresponds to uri entries in the catalog. Where both a namespace and an external identifier exist, the namespace takes precedence.
resourceIdentifier
- the identifier to resolveorg.apache.xerces.xni.XNIException
- thrown on general errorjava.io.IOException
- thrown if some i/o error occurspublic final java.lang.String resolveSystem(java.lang.String systemId) throws java.io.IOException
Returns the URI mapping in the catalog for the given
external identifier or null
if no mapping
exists. If the system identifier is an URN in the
publicid
namespace it is converted into
a public identifier by URN "unwrapping" as specified
in the XML Catalogs specification.
systemId
- the system identifier to locate in the catalognull
if no mapping
was found in the catalogjava.io.IOException
- if an i/o error occurred while reading
the catalogpublic final java.lang.String resolvePublic(java.lang.String publicId, java.lang.String systemId) throws java.io.IOException
Returns the URI mapping in the catalog for the given
external identifier or null
if no mapping
exists. Public identifiers are normalized before
comparison.
publicId
- the public identifier to locate in the catalogsystemId
- the system identifier to locate in the catalognull
if no mapping
was found in the catalogjava.io.IOException
- if an i/o error occurred while reading
the catalogpublic final java.lang.String resolveURI(java.lang.String uri) throws java.io.IOException
Returns the URI mapping in the catalog for the given URI
reference or null
if no mapping exists.
URI comparison is case sensitive. If the URI reference
is an URN in the publicid
namespace
it is converted into a public identifier by URN "unwrapping"
as specified in the XML Catalogs specification and then
resolution is performed following the semantics of
external identifier resolution.
uri
- the URI to locate in the catalognull
if no mapping
was found in the catalogjava.io.IOException
- if an i/o error occurred while reading
the catalogCopyright © 1999-2022 The Apache Software Foundation. All Rights Reserved.