FileDocCategorySizeDatePackage
SchemaResolver.javaAPI DocApache Tomcat 6.0.144317Fri Jul 20 04:20:32 BST 2007org.apache.catalina.util

SchemaResolver

public class SchemaResolver extends Object implements 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

Fields Summary
protected org.apache.tomcat.util.digester.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.
Constructors Summary
public SchemaResolver(org.apache.tomcat.util.digester.Digester digester)
Create a new EntityResolver that will redirect all remote dtds and schema to a locat destination.

param
digester The digester instance.



                              
       
        this.digester = digester;
    
Methods Summary
public voidregister(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.

param
publicId Public identifier of the DTD to be resolved
param
entityURL The URL to use for reading this DTD

         String key = publicId;
         if (publicId.indexOf(schemaExtension) != -1)
             key = publicId.substring(publicId.lastIndexOf('/")+1);
         entityValidator.put(key, entityURL);
     
public org.xml.sax.InputSourceresolveEntity(java.lang.String publicId, java.lang.String systemId)
Resolve the requested external entity.

param
publicId The public identifier of the entity being referenced
param
systemId The system identifier of the entity being referenced
exception
SAXException if a parsing exception occurs


        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);
        }