morrijr     01/10/31 08:16:28

  Modified:    src/org/apache/cocoon/servlet CocoonServlet.java
  Log:
  Changing getRealPath->getResource breaks under Catalina.  See thread 'classDirURL = 
jndi protocol'
  
  Revision  Changes    Path
  1.51      +54 -25    xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
  
  Index: CocoonServlet.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- CocoonServlet.java        2001/10/30 13:20:28     1.50
  +++ CocoonServlet.java        2001/10/31 16:16:28     1.51
  @@ -39,6 +39,7 @@
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import java.io.File;
  +import java.io.FileInputStream;
   import java.io.InputStream;
   import java.io.IOException;
   import java.io.OutputStream;
  @@ -58,7 +59,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Leo Sutic</a>
  - * @version CVS $Revision: 1.50 $ $Date: 2001/10/30 13:20:28 $
  + * @version CVS $Revision: 1.51 $ $Date: 2001/10/31 16:16:28 $
    */
   
   public class CocoonServlet extends HttpServlet {
  @@ -285,7 +286,7 @@
       /**
        * This builds the important ClassPath used by this Servlet.  It
        * does so in a Servlet Engine neutral way.  It uses the
  -     * <code>ServletContext</code>'s <code>getResource</code> method
  +     * <code>ServletContext</code>'s <code>getRealPath</code> method
        * to get the Servlet 2.2 identified classes and lib directories.
        * It iterates in alphabetical order through every file in the
        * lib directory and adds it to the classpath.
  @@ -294,6 +295,8 @@
        * In order to protect ourselves from skitzofrantic classloaders,
        * we need to work with a known one.
        *
  +     * We need to get this to work properly when Cocoon is in a war.
  +     *
        * @param context  The ServletContext to perform the lookup.
        *
        * @throws ServletException
  @@ -302,32 +305,58 @@
        throws ServletException {
           StringBuffer buildClassPath = new StringBuffer();
   
  -        URL classDirURL = null;
  -        URL libDirURL = null;
  -        try {
  -            classDirURL = this.servletContext.getResource("/WEB-INF/classes");
  -        } catch (java.net.MalformedURLException me) {
  -            this.log.warn("Unable to add WEB-INF/classes to the classpath", me);
  -        }
  -        try {
  -            libDirURL = this.servletContext.getResource("/WEB-INF/lib");
  -        } catch (java.net.MalformedURLException me) {
  -            this.log.warn("Unable to add WEB-INF/lib to the classpath", me);
  -        }
  -
           File root = null;
  -        if (libDirURL != null && libDirURL.toExternalForm().startsWith("file:")) {
  -            root = new File(libDirURL.toExternalForm().substring(5));
  -        }
  +
  +        if(servletContextPath != null) {
  +            // Old method.  There *MUST* be a better method than this...
  +
  +            String classDir = this.servletContext.getRealPath("/WEB-INF/classes");
  +            String libDir = this.servletContext.getRealPath("/WEB-INF/lib");
  +
  +            if(libDir != null)
  +                root = new File(libDir);
  +
  +            if(classDir != null) {
  +                buildClassPath.append(classDir);
  +
  +                if (this.addClassDirs) {
  +                    try {
  +                        classLoader.addDirectory(new File(classDir));
  +                    } catch (Exception e) {
  +                        log.debug("Could not add directory" + classDir, e);
  +                    }
  +                }
  +            }
  +        } else {
  +            // New(ish) method for war'd deployments
  +            URL classDirURL = null;
  +            URL libDirURL = null;
  +
  +            try {
  +                classDirURL = this.servletContext.getResource("/WEB-INF/classes");
  +            } catch (java.net.MalformedURLException me) {
  +                this.log.warn("Unable to add WEB-INF/classes to the classpath", me);
  +            }
  +
  +            try {
  +                libDirURL = this.servletContext.getResource("/WEB-INF/lib");
  +            } catch (java.net.MalformedURLException me) {
  +                this.log.warn("Unable to add WEB-INF/lib to the classpath", me);
  +            }
  +
  +            if (libDirURL != null && 
libDirURL.toExternalForm().startsWith("file:")) {
  +                root = new File(libDirURL.toExternalForm().substring(5));
  +            }
   
  -        if(classDirURL != null) {
  -            buildClassPath.append(classDirURL.toExternalForm());
  +            if(classDirURL != null) {
  +                buildClassPath.append(classDirURL.toExternalForm());
   
  -            if (this.addClassDirs) {
  -                try {
  -                    classLoader.addURL(classDirURL);
  -                } catch (Exception e) {
  -                    log.debug("Could not add directory " + classDirURL, e);
  +                if (this.addClassDirs) {
  +                    try {
  +                        classLoader.addURL(classDirURL);
  +                    } catch (Exception e) {
  +                        log.debug("Could not add directory " + classDirURL, e);
  +                    }
                   }
               }
           }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to