SchemaResolverpublic class SchemaResolver extends Object implements EntityResolverThis 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. |
Fields Summary |
---|
protected com.sun.org.apache.commons.digester.Digester | digesterThe disgester instance for which this class is the entity resolver. | protected HashMap | entityValidatorThe URLs of dtds and schemas that have been registered, keyed by the
public identifier that corresponds. | protected String | publicIdThe public identifier of the DTD we are currently parsing under
(if any). | protected String | schemaExtensionExtension to make the difference between DTD and Schema. | private static boolean | forceLocalSchemaAttribute value used to turn on/off network access of dtd/schema |
Constructors Summary |
---|
public SchemaResolver(com.sun.org.apache.commons.digester.Digester digester)Create a new EntityResolver that will redirect
all remote dtds and schema to a locat destination.
// END PWC 6457880
this.digester = digester;
|
Methods Summary |
---|
public void | register(java.lang.String publicId, java.lang.String 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.
String key = publicId;
if (publicId.indexOf(schemaExtension) != -1)
key = publicId.substring(publicId.lastIndexOf('/")+1);
entityValidator.put(key, entityURL);
| public org.xml.sax.InputSource | resolveEntity(java.lang.String publicId, java.lang.String systemId)Resolve the requested external entity.
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);
}
/* PWC 6457880
if (entityURL == null) {
return (null);
}
*/
// START PWC 6457880
if (entityURL == null) {
if (forceLocalSchema) {
URI u;
try {
u = new URI(systemId);
} catch (URISyntaxException e) {
throw new SAXException(e);
}
String scheme = u.getScheme();
// if the scheme is local, let the digester look it up
// otherwise, throw an exception
if (scheme != null && (scheme.equals("file") ||
scheme.equals("jar"))) {
return (null);
}
else {
throw new SAXException("Unable to find local schema for "+key);
}
}
else {
return (null);
}
}
// END PWC 6457880
try {
return (new InputSource(entityURL));
} catch (Exception e) {
throw new SAXException(e);
}
| public static void | setForceLocalSchema(boolean flag)
forceLocalSchema = flag;
|
|