You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2004/01/19 11:09:27 UTC

cvs commit: cocoon-2.1/src/blocks/paranoid/java/org/apache/cocoon/servlet ParanoidCocoonServlet.java

reinhard    2004/01/19 02:09:27

  Modified:    src/blocks/paranoid/java/org/apache/cocoon/servlet
                        ParanoidCocoonServlet.java
  Log:
  - add support for "context:/" pseudo-protocol
  - consider lines starting with "#" as comments
  - improve documentation
  
  Revision  Changes    Path
  1.2       +36 -8     cocoon-2.1/src/blocks/paranoid/java/org/apache/cocoon/servlet/ParanoidCocoonServlet.java
  
  Index: ParanoidCocoonServlet.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/paranoid/java/org/apache/cocoon/servlet/ParanoidCocoonServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParanoidCocoonServlet.java	11 Dec 2003 18:22:14 -0000	1.1
  +++ ParanoidCocoonServlet.java	19 Jan 2004 10:09:27 -0000	1.2
  @@ -74,8 +74,19 @@
    * such as Xerces and Xalan versions included in JDK 1.4.
    * <p>
    * This servlet propagates all initialisation parameters to the sandboxed servlet, and
  - * accept only one additional parameter, <code>servlet-class</code>, which defined the
  - * sandboxed servlet class. The default is {@link CocoonServlet}.
  + * accepts the parameters <code>servlet-class</code> and <code>paranoid-classpath</code>.
  + * <ul>
  + *  <li><code>servlet-class</code> defines the sandboxed servlet class, the default is 
  + *      {@link CocoonServlet}
  + *  <li><code>paranoid-classpath</code> expects the name of a text file that can contain 
  + *      lines begining with <code>class-dir:<code> (directory containing classes),
  + *      <code>lib-dir:<code> (directory containing JAR or ZIP libraries) and <code>#</code>
  + *      (for comments). <br/>
  + *      All other lines are considered as URLs.
  + *      <br/>
  + *      It is also possible to use a the pseudo protocol prefix<code>context:/<code> which 
  + *      is resolved to the basedir of the servlet context.
  + * </ul>
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
    * @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
  @@ -89,6 +100,10 @@
   	 */
   	public static final String DEFAULT_SERVLET_CLASS = "org.apache.cocoon.servlet.CocoonServlet";
       
  +    protected static final String CONTEXT_PREFIX = "context:";
  +    
  +    protected static final String FILE_PREFIX = "file:";
  +    
   	protected Servlet servlet;
       
       protected ClassLoader classloader;
  @@ -105,7 +120,7 @@
           if ( externalClasspath == null ) {
               this.classloader = this.getClassLoader(this.getContextDir());
           } else {
  -            this.classloader = this.getClassLoader(externalClasspath);
  +            this.classloader = this.getClassLoader(externalClasspath, this.getContextDir());
           }
           
           String servletName = config.getInitParameter("servlet-class");
  @@ -203,7 +218,7 @@
        * Get the classloader that will be used to create the actual servlet. Its classpath is defined
        * by an external file.
        */
  -    protected ClassLoader getClassLoader(String externalClasspath) 
  +    protected ClassLoader getClassLoader(String externalClasspath, File contextDir) 
       throws ServletException {
           final List urlList = new ArrayList();
   
  @@ -214,16 +229,22 @@
           
               String line;
               do {
  -                line = lineReader.readLine();
  +                line = lineReader.readLine();                
                   if ( line != null ) {
                       if (line.startsWith("class-dir:")) {
                           line = line.substring("class-dir:".length()).trim();
  +                        if( line.startsWith(CONTEXT_PREFIX)) {
  +                            line = contextDir + line.substring(CONTEXT_PREFIX.length());
  +                        }
                           URL url = new File(line).toURL();
                           log("Adding class directory " + url);
                           urlList.add(url);
                           
                       } else if (line.startsWith("lib-dir:")) {
                           line = line.substring("lib-dir:".length()).trim();
  +                        if( line.startsWith(CONTEXT_PREFIX)) {
  +                            line = contextDir + line.substring(CONTEXT_PREFIX.length());                            
  +                        }                        
                           File dir = new File(line);
                           File[] libraries = dir.listFiles(new JarFileFilter());
                           log("Adding " + libraries.length + " libraries from " + dir.toURL());
  @@ -231,15 +252,21 @@
                               URL url = libraries[i].toURL();
                               urlList.add(url);
                           }
  +                    } else if(line.startsWith("#")) {
  +                        // skip it (consider it as comment)
                       } else {
                           // Consider it as a URL
                           final URL lib;
  +                        if( line.startsWith(CONTEXT_PREFIX)) {
  +                            line = FILE_PREFIX + "/" + contextDir + 
  +                                line.substring(CONTEXT_PREFIX.length()).trim();
  +                        }                        
                           if ( line.indexOf(':') == -1) {
                               File entry = new File(line);        
  -                            lib = entry.toURL();
  +                            lib = entry.toURL();                          
                           } else {
                               lib = new URL(line);
  -                        }
  +                        }                        
                           log("Adding class URL " + lib);
                           urlList.add(lib);
                       }
  @@ -293,5 +320,6 @@
               return name.endsWith(".zip") || name.endsWith(".jar");
           }
       }
  +   
   }