remm        2005/03/16 03:37:44

  Modified:    catalina/src/share/org/apache/catalina/startup
                        ContextConfig.java
  Log:
  - Harmonize processing of the context.xml defaults with the way web.xml is 
processed.
  
  Revision  Changes    Path
  1.64      +65 -23    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextConfig.java
  
  Index: ContextConfig.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextConfig.java,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- ContextConfig.java        15 Mar 2005 13:06:30 -0000      1.63
  +++ ContextConfig.java        16 Mar 2005 11:37:43 -0000      1.64
  @@ -618,19 +618,29 @@
           stream = null;
           source = null;
   
  -        file = new File(getConfigBase(), Constants.HostWebXml);
  +        String resourceName = getHostConfigPath(Constants.HostWebXml);
  +        file = new File(getConfigBase(), resourceName);
           
           try {
  -           if (file.exists()) {
  +            if ( ! file.exists() ) {
  +                // Use getResource and getResourceAsStream
  +                stream = getClass().getClassLoader()
  +                    .getResourceAsStream(resourceName);
  +                if( stream != null ) {
  +                    source = new InputSource
  +                            (getClass().getClassLoader()
  +                            .getResource(resourceName).toString());
  +                }
  +            } else {
                   source =
                       new InputSource("file://" + file.getAbsolutePath());
                   stream = new FileInputStream(file);
               }
           } catch (Exception e) {
               log.error(sm.getString("contextConfig.defaultMissing") 
  -                      + " " + file , e);
  +                      + " " + resourceName + " " + file , e);
           }
  -        
  +
           if (stream != null) {
               processDefaultWebConfig(webDigester, stream, source);
               webRuleSet.recycle();
  @@ -644,6 +654,11 @@
        */
       protected void processDefaultWebConfig(Digester digester, InputStream 
stream, 
               InputSource source) {
  +
  +        if (log.isDebugEnabled())
  +            log.debug("Processing context [" + context.getName() 
  +                    + "] web configuration resource " + 
source.getSystemId());
  +
           // Process the default web.xml file
           synchronized (digester) {
               try {
  @@ -696,11 +711,11 @@
           if( defaultContextXml==null ) getDefaultContextXml();
   
           if (!context.getOverride()) {
  -            processContextConfig(new File(getBaseDir(), defaultContextXml));
  -            processContextConfig(new File(getConfigBase(), 
Constants.HostContextXml));
  +            processContextConfig(new File(getBaseDir()), defaultContextXml);
  +            processContextConfig(getConfigBase(), 
getHostConfigPath(Constants.HostContextXml));
           }
           if (context.getConfigFile() != null)
  -            processContextConfig(new File(context.getConfigFile()));
  +            processContextConfig(new File(context.getConfigFile()), null);
           
       }
   
  @@ -708,28 +723,45 @@
       /**
        * Process a context.xml.
        */
  -    protected void processContextConfig(File file) {
  +    protected void processContextConfig(File baseDir, String resourceName) {
           
           if (log.isDebugEnabled())
  -            log.debug("Processing context [" + context.getName() + "] 
configuration file " + file);
  -        
  -        // Add as watched resource so that cascade reload occurs if a default
  -        // config file is modified/added/removed
  -        context.addWatchedResource(file.getAbsolutePath());
  +            log.debug("Processing context [" + context.getName() 
  +                    + "] configuration file " + baseDir + " " + 
resourceName);
   
           InputSource source = null;
           InputStream stream = null;
  +
  +        File file = baseDir;
  +        if (resourceName != null) {
  +            file = new File(baseDir, resourceName);
  +        }
  +        
           try {
  -            if (file.exists()) {
  -                stream = new FileInputStream(file);
  +            if ( !file.exists() ) {
  +                if (resourceName != null) {
  +                    // Use getResource and getResourceAsStream
  +                    stream = getClass().getClassLoader()
  +                        .getResourceAsStream(resourceName);
  +                    if( stream != null ) {
  +                        source = new InputSource
  +                            (getClass().getClassLoader()
  +                            .getResource(resourceName).toString());
  +                    }
  +                }
  +            } else {
                   source =
                       new InputSource("file://" + file.getAbsolutePath());
  -            } else if (log.isDebugEnabled()) {
  -                log.debug("Context [" + context.getName() + "] configuration 
file " + file + " not found");
  +                stream = new FileInputStream(file);
  +                // Add as watched resource so that cascade reload occurs if 
a default
  +                // config file is modified/added/removed
  +                context.addWatchedResource(file.getAbsolutePath());
               }
           } catch (Exception e) {
  -            log.error(sm.getString("contextConfig.defaultMissing") + file);
  +            log.error(sm.getString("contextConfig.defaultMissing") 
  +                      + " " + resourceName + " " + file , e);
           }
  +        
           if (source == null)
               return;
           if (contextDigester == null){
  @@ -747,6 +779,9 @@
                   if (parseException != null) {
                       ok = false;
                   }
  +                if (log.isDebugEnabled())
  +                    log.debug("Successfully processed context [" + 
context.getName() 
  +                            + "] configuration file " + baseDir + " " + 
resourceName);
               } catch (SAXParseException e) {
                   log.error(sm.getString("contextConfig.defaultParse"), e);
                   log.error(sm.getString("contextConfig.defaultPosition",
  @@ -1263,7 +1298,14 @@
               new File(System.getProperty("catalina.base"), "conf");
           if (!configBase.exists()) {
               return null;
  +        } else {
  +            return configBase;
           }
  +    }  
  +
  +    
  +    protected String getHostConfigPath(String resourceName) {
  +        StringBuffer result = new StringBuffer();
           Container container = context;
           Container host = null;
           Container engine = null;
  @@ -1275,13 +1317,13 @@
               container = container.getParent();
           }
           if (engine != null) {
  -            configBase = new File(configBase, engine.getName());
  +            result.append(engine.getName()).append('/');
           }
           if (host != null) {
  -            configBase = new File(configBase, host.getName());
  +            result.append(host.getName()).append('/');
           }
  -        configBase.mkdirs();
  -        return configBase;
  +        result.append(resourceName);
  +        return result.toString();
       }
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to