Methods Summary |
---|
private void | attachReaderToCatalog(org.apache.xml.resolver.Catalog catalog)Attaches the reader to the catalog.
SAXParserFactory spf = new SAXParserFactoryImpl();
spf.setNamespaceAware(true);
spf.setValidating(false);
SAXCatalogReader saxReader = new SAXCatalogReader(spf);
saxReader.setCatalogParser(OASISXMLCatalogReader.namespaceName, "catalog",
"org.apache.xml.resolver.readers.OASISXMLCatalogReader");
catalog.addReader("application/xml", saxReader);
|
public final synchronized void | clear()Forces the cache of catalog mappings to be cleared.
fCatalog = null;
|
public final synchronized java.lang.String[] | getCatalogList()Returns the initial list of catalog entry files.
return (fCatalogsList != null)
? (String[]) fCatalogsList.clone() : null;
|
public 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. This method always returns null . It
should be overrided if other behaviour is required.
return null;
|
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 .
return fPreferPublic;
|
public 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 .
return fUseLiteralSystemId;
|
private void | init(java.lang.String[] catalogs, boolean preferPublic)Initialization. Create a CatalogManager and set all
the properties upfront. This prevents JVM wide system properties
or a property file somewhere in the environment from affecting
the behaviour of this catalog resolver.
fCatalogsList = (catalogs != null) ? (String[]) catalogs.clone() : null;
fPreferPublic = preferPublic;
fResolverCatalogManager = new CatalogManager();
fResolverCatalogManager.setAllowOasisXMLCatalogPI(false);
fResolverCatalogManager.setCatalogClassName("org.apache.xml.resolver.Catalog");
fResolverCatalogManager.setCatalogFiles("");
fResolverCatalogManager.setIgnoreMissingProperties(true);
fResolverCatalogManager.setPreferPublic(fPreferPublic);
fResolverCatalogManager.setRelativeCatalogs(false);
fResolverCatalogManager.setUseStaticCatalog(false);
fResolverCatalogManager.setVerbosity(0);
|
private void | parseCatalogs()Instruct the Catalog to parse each of the
catalogs in the list. Only the first catalog will actually be
parsed immediately. The others will be queued and read if
they are needed later.
if (fCatalogsList != null) {
fCatalog = new Catalog(fResolverCatalogManager);
attachReaderToCatalog(fCatalog);
for (int i = 0; i < fCatalogsList.length; ++i) {
String catalog = fCatalogsList[i];
if (catalog != null && catalog.length() > 0) {
fCatalog.parseCatalog(catalog);
}
}
}
else {
fCatalog = null;
}
|
public org.xml.sax.InputSource | resolveEntity(java.lang.String publicId, java.lang.String systemId)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.
String resolvedId = null;
if (publicId != null && systemId != null) {
resolvedId = resolvePublic(publicId, systemId);
}
else if (systemId != null) {
resolvedId = resolveSystem(systemId);
}
if (resolvedId != null) {
InputSource source = new InputSource(resolvedId);
source.setPublicId(publicId);
return source;
}
return null;
|
public 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. 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.
String resolvedId = null;
if (!getUseLiteralSystemId() && baseURI != null) {
// Attempt to resolve the system identifier against the base URI.
try {
URI uri = new URI(new URI(baseURI), systemId);
systemId = uri.toString();
}
// Ignore the exception. Fallback to the literal system identifier.
catch (URI.MalformedURIException ex) {}
}
if (publicId != null && systemId != null) {
resolvedId = resolvePublic(publicId, systemId);
}
else if (systemId != null) {
resolvedId = resolveSystem(systemId);
}
if (resolvedId != null) {
InputSource source = new InputSource(resolvedId);
source.setPublicId(publicId);
return source;
}
return null;
|
public org.apache.xerces.xni.parser.XMLInputSource | resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)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.
String resolvedId = resolveIdentifier(resourceIdentifier);
if (resolvedId != null) {
return new XMLInputSource(resourceIdentifier.getPublicId(),
resolvedId,
resourceIdentifier.getBaseSystemId());
}
return null;
|
public java.lang.String | resolveIdentifier(org.apache.xerces.xni.XMLResourceIdentifier resourceIdentifier)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.
String resolvedId = null;
// The namespace is useful for resolving namespace aware
// grammars such as XML schema. Let it take precedence over
// the external identifier if one exists.
String namespace = resourceIdentifier.getNamespace();
if (namespace != null) {
resolvedId = resolveURI(namespace);
}
// Resolve against an external identifier if one exists. This
// is useful for resolving DTD external subsets and other
// external entities. For XML schemas if there was no namespace
// mapping we might be able to resolve a system identifier
// specified as a location hint.
if (resolvedId == null) {
String publicId = resourceIdentifier.getPublicId();
String systemId = getUseLiteralSystemId()
? resourceIdentifier.getLiteralSystemId()
: resourceIdentifier.getExpandedSystemId();
if (publicId != null && systemId != null) {
resolvedId = resolvePublic(publicId, systemId);
}
else if (systemId != null) {
resolvedId = resolveSystem(systemId);
}
}
return resolvedId;
|
public final synchronized 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. Public identifiers are normalized before
comparison.
if (fCatalogsChanged) {
parseCatalogs();
fCatalogsChanged = false;
}
return (fCatalog != null)
? fCatalog.resolvePublic(publicId, systemId) : null;
|
public 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.
String resolvedId = null;
try {
// The namespace is useful for resolving namespace aware
// grammars such as XML schema. Let it take precedence over
// the external identifier if one exists.
if (namespaceURI != null) {
resolvedId = resolveURI(namespaceURI);
}
if (!getUseLiteralSystemId() && baseURI != null) {
// Attempt to resolve the system identifier against the base URI.
try {
URI uri = new URI(new URI(baseURI), systemId);
systemId = uri.toString();
}
// Ignore the exception. Fallback to the literal system identifier.
catch (URI.MalformedURIException ex) {}
}
// Resolve against an external identifier if one exists. This
// is useful for resolving DTD external subsets and other
// external entities. For XML schemas if there was no namespace
// mapping we might be able to resolve a system identifier
// specified as a location hint.
if (resolvedId == null) {
if (publicId != null && systemId != null) {
resolvedId = resolvePublic(publicId, systemId);
}
else if (systemId != null) {
resolvedId = resolveSystem(systemId);
}
}
}
// Ignore IOException. It cannot be thrown from this method.
catch (IOException ex) {}
if (resolvedId != null) {
return new DOMInputImpl(publicId, resolvedId, baseURI);
}
return null;
|
public final synchronized 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. 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.
if (fCatalogsChanged) {
parseCatalogs();
fCatalogsChanged = false;
}
return (fCatalog != null)
? fCatalog.resolveSystem(systemId) : null;
|
public final synchronized 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.
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.
if (fCatalogsChanged) {
parseCatalogs();
fCatalogsChanged = false;
}
return (fCatalog != null)
? fCatalog.resolveURI(uri) : null;
|
public final synchronized 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.
fCatalogsChanged = true;
fCatalogsList = (catalogs != null)
? (String[]) catalogs.clone() : null;
|
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.
fPreferPublic = preferPublic;
fResolverCatalogManager.setPreferPublic(preferPublic);
|
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.
fUseLiteralSystemId = useLiteralSystemId;
|