org.apache.catalina.util
public class: SchemaResolver [javadoc |
source]
java.lang.Object
org.apache.catalina.util.SchemaResolver
All Implemented Interfaces:
EntityResolver
This class implements a local SAX's
EntityResolver. All
DTDs and schemas used to validate the web.xml file will re-directed
to a local file stored in the servlet-api.jar and jsp-api.jar.
- author:
Jean-Francois - Arcand
| Field Summary |
|---|
| protected Digester | digester | The disgester instance for which this class is the entity resolver. |
| protected HashMap | entityValidator | The URLs of dtds and schemas that have been registered, keyed by the
public identifier that corresponds. |
| protected String | publicId | The public identifier of the DTD we are currently parsing under
(if any). |
| protected String | schemaExtension | Extension to make the difference between DTD and Schema. |
| Constructor: |
public SchemaResolver(Digester digester) {
this.digester = digester;
}
Create a new EntityResolver that will redirect
all remote dtds and schema to a locat destination. Parameters:
digester - The digester instance.
|
| Method from org.apache.catalina.util.SchemaResolver Detail: |
public void register(String publicId,
String entityURL) {
String key = publicId;
if (publicId.indexOf(schemaExtension) != -1)
key = publicId.substring(publicId.lastIndexOf('/")+1);
entityValidator.put(key, entityURL);
}
Register the specified DTD/Schema URL for the specified public
identifier. This must be called before the first call to
parse().
When adding a schema file (*.xsd), only the name of the file
will get added. If two schemas with the same name are added,
only the last one will be stored. |
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException {
if (publicId != null) {
this.publicId = publicId;
digester.setPublicId(publicId);
}
// Has this system identifier been registered?
String entityURL = null;
if (publicId != null) {
entityURL = (String) entityValidator.get(publicId);
}
// Redirect the schema location to a local destination
String key = null;
if (entityURL == null && systemId != null) {
key = systemId.substring(systemId.lastIndexOf('/")+1);
entityURL = (String)entityValidator.get(key);
}
if (entityURL == null) {
return (null);
}
try {
return (new InputSource(entityURL));
} catch (Exception e) {
throw new SAXException(e);
}
}
Resolve the requested external entity. |