You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by bl...@locus.apache.org on 2000/12/13 15:44:17 UTC

cvs commit: xml-cocoon/src/org/apache/cocoon/components/classloader RepositoryClassLoader.java

bloritsch    00/12/13 06:44:17

  Modified:    src/org/apache/cocoon/components/classloader Tag:
                        xml-cocoon2 RepositoryClassLoader.java
  Log:
  Change the logging on RepositoryClassLoader to be more accurate about
  what is going on.  Also, made the File take advantage of the url base.
  
  I can't help but think extending or wrapping URLClassLoader would be easier!
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.11  +57 -48    xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java
  
  Index: RepositoryClassLoader.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java,v
  retrieving revision 1.1.2.10
  retrieving revision 1.1.2.11
  diff -u -r1.1.2.10 -r1.1.2.11
  --- RepositoryClassLoader.java	2000/12/11 17:09:37	1.1.2.10
  +++ RepositoryClassLoader.java	2000/12/13 14:44:16	1.1.2.11
  @@ -24,7 +24,7 @@
    * A class loader with a growable list of path search directories
    *
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.10 $ $Date: 2000/12/11 17:09:37 $
  + * @version CVS $Revision: 1.1.2.11 $ $Date: 2000/12/13 14:44:16 $
    */
   class RepositoryClassLoader extends ClassLoader {
     /**
  @@ -118,7 +118,7 @@
         try {
           c = findSystemClass(name);
         } catch (ClassNotFoundException e) {
  -        log.warn("Could not load class", e);
  +        log.debug("Could not load class " + name + "trying to load from the repository");
           byte[] bits = this.loadClassData (name);
   
           if (bits == null) {
  @@ -144,51 +144,62 @@
       return c;
     }
   
  -  /**
  -   * Load class from a file contained in a repository.
  -   *
  -   * @param className The class name
  -   * @return An array of byes containing the class data or <code>null</code> if
  -   * not founfd
  -   */
  -  protected byte[] loadClassData (String className) {
  -    int count = this.repositories.size();
  -    for (int i = 0; i < count; i++) {
  -      File repository = (File) this.repositories.elementAt(i);
  -      File file = new File(this.getClassFilename(className, repository));
  -
  -      if (file.exists() && file.isFile() && file.canRead()) {
  -        byte[] buffer = null;
  -        FileInputStream in = null;
  -
  -        int n = 0;
  -        int pos = 0;
  -        buffer = new byte [(int) file.length ()];
  -
  -        try {
  -          in = new FileInputStream(file);
  -
  -          while (
  -            pos < buffer.length &&
  -            (n = in.read (buffer, pos, buffer.length - pos)) != -1
  -          ) {
  -            pos += n;
  -          }
  +    /**
  +    * Load class from a file contained in a repository.
  +    *
  +    * @param className The class name
  +    * @return An array of byes containing the class data or <code>null</code> if
  +    * not founfd
  +    */
  +    protected byte[] loadClassData (String className) {
  +        int count = this.repositories.size();
  +        for (int i = 0; i < count; i++) {
  +            File repository = (File) this.repositories.elementAt(i);
  +            File file = new File(repository, this.getClassFilename(className));
   
  -      return buffer;
  -    } catch (IOException e) {
  -      log.warn("RepositoryClassLoader.IOException", e);
  -        } finally {
  -          if (in != null) {
  -            try { in.close(); }
  -            catch (IOException e) { log.warn("Could not close stream", e); }
  -          }
  +            if (file.exists() && file.isFile() && file.canRead()) {
  +                byte[] buffer = null;
  +                FileInputStream in = null;
  +
  +                int n = 0;
  +                int pos = 0;
  +                buffer = new byte [(int) file.length ()];
  +
  +                try {
  +                    boolean process = true;
  +                    log.debug("Loading file: " + file.getCanonicalPath());
  +
  +                    in = new FileInputStream(file);
  +
  +                    while (process) {
  +                        if (pos < buffer.length) {
  +                            n = in.read (buffer, pos, buffer.length - pos));
  +                            if (n != -1) {
  +                                pos += n;
  +                            } else {
  +                                process = false;
  +                            }
  +                        } else {
  +                            process = false;
  +                        }
  +                    }
  +
  +                    log.debug(n + " Bytes read.");
  +
  +                    return buffer;
  +                } catch (IOException e) {
  +                    log.warn("RepositoryClassLoader.IOException", e);
  +                } finally {
  +                    if (in != null) {
  +                        try { in.close(); }
  +                        catch (IOException e) { log.warn("Could not close stream", e); }
  +                    }
  +                }
  +            }
           }
  -      }
  -    }
   
  -    return null;
  -  }
  +        return null;
  +    }
   
     /**
      * Return the filename associated with a given class name in a given
  @@ -199,9 +210,7 @@
      * @return The filename associated with a given class name in a given
      * directory
      */
  -  protected String getClassFilename(String className, File repository) {
  -    return
  -      repository.getAbsolutePath() + File.separator +
  -      className.replace('.', File.separatorChar) + ".class";
  +  protected String getClassFilename(String className) {
  +    return className.replace('.', File.separatorChar) + ".class";
     }
   }