/[classpath]/classpath/java/net/URLClassLoader.java
ViewVC logotype

Diff of /classpath/java/net/URLClassLoader.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.27 by mark, Tue Feb 15 15:36:04 2005 UTC revision 1.28 by mark, Tue Feb 15 19:55:56 2005 UTC
# Line 55  import java.security.SecureClassLoader; Line 55  import java.security.SecureClassLoader;
55  import java.security.cert.Certificate;  import java.security.cert.Certificate;
56  import java.util.Enumeration;  import java.util.Enumeration;
57  import java.util.HashMap;  import java.util.HashMap;
58    import java.util.Iterator;
59    import java.util.StringTokenizer;
60  import java.util.Vector;  import java.util.Vector;
61  import java.util.jar.Attributes;  import java.util.jar.Attributes;
62  import java.util.jar.JarEntry;  import java.util.jar.JarEntry;
63  import java.util.jar.JarFile;  import java.util.jar.JarFile;
64  import java.util.jar.Manifest;  import java.util.jar.Manifest;
65    
66    
67  /**  /**
68   * A secure class loader that can load classes and resources from   * A secure class loader that can load classes and resources from
69   * multiple locations.  Given an array of <code>URL</code>s this class   * multiple locations.  Given an array of <code>URL</code>s this class
# Line 143  public class URLClassLoader extends Secu Line 146  public class URLClassLoader extends Secu
146    private final Vector urls = new Vector();    private final Vector urls = new Vector();
147    
148    /**    /**
149     * Store pre-parsed information for each url into this vector     * Store pre-parsed information for each url into this vector: each
150     * each element is a URL loader, corresponding to the URL of     * element is a URL loader.  A jar file has its own class-path
151     * the same index in "urls"     * attribute which adds to the URLs that will be searched, but this
152       * does not add to the list of urls.
153     */     */
154    private final Vector urlinfos = new Vector();    private final Vector urlinfos = new Vector();
155    
# Line 214  public class URLClassLoader extends Secu Line 218  public class URLClassLoader extends Secu
218      {      {
219        return null;        return null;
220      }      }
221    
222        Vector getClassPath()
223        {
224          return null;
225        }
226    }    }
227    
228    /**    /**
# Line 283  public class URLClassLoader extends Secu Line 292  public class URLClassLoader extends Secu
292      final JarFile jarfile; // The jar file for this url      final JarFile jarfile; // The jar file for this url
293      final URL baseJarURL; // Base jar: url for all resources loaded from jar      final URL baseJarURL; // Base jar: url for all resources loaded from jar
294    
295        Vector classPath;   // The "Class-Path" attribute of this Jar's manifest
296    
297      public JarURLLoader(URLClassLoader classloader, URL baseURL)      public JarURLLoader(URLClassLoader classloader, URL baseURL)
298      {      {
299        super(classloader, baseURL);        super(classloader, baseURL);
# Line 295  public class URLClassLoader extends Secu Line 306  public class URLClassLoader extends Secu
306        sb.append("!/");        sb.append("!/");
307        String jarURL = sb.toString();        String jarURL = sb.toString();
308    
309          this.classPath = null;
310        URL baseJarURL = null;        URL baseJarURL = null;
311        JarFile jarfile = null;        JarFile jarfile = null;
312        try        try
313          {          {
314            baseJarURL =            baseJarURL =
315              new URL(null, jarURL, classloader.getURLStreamHandler("jar"));              new URL(null, jarURL, classloader.getURLStreamHandler("jar"));
316              
317            jarfile =            jarfile =
318              ((JarURLConnection) baseJarURL.openConnection()).getJarFile();              ((JarURLConnection) baseJarURL.openConnection()).getJarFile();
319          }            
320              Manifest manifest;
321              Attributes attributes;
322              String classPathString;
323    
324              if ((manifest = jarfile.getManifest()) != null
325                  && (attributes = manifest.getMainAttributes()) != null
326                  && ((classPathString
327                       = attributes.getValue(Attributes.Name.CLASS_PATH))
328                      != null))
329                {
330                  this.classPath = new Vector();
331                  
332                  StringTokenizer st = new StringTokenizer(classPathString, " ");
333                  while (st.hasMoreElements ())
334                    {  
335                      String e = st.nextToken ();
336                      try
337                        {
338                          URL url = new URL(baseURL, e);
339                          this.classPath.add(url);
340                        }
341                      catch (java.net.MalformedURLException xx)
342                        {
343                          // Give up
344                        }
345                    }
346                }
347            }
348        catch (IOException ioe)        catch (IOException ioe)
349          {          {
350            /* ignored */            /* ignored */
351          }          }
352    
353        this.baseJarURL = baseJarURL;        this.baseJarURL = baseJarURL;
# Line 341  public class URLClassLoader extends Secu Line 381  public class URLClassLoader extends Secu
381            return null;            return null;
382          }          }
383      }      }
384    
385        Vector getClassPath()
386        {
387          return classPath;
388        }
389    }    }
390    
391    static final class JarURLResource extends Resource    static final class JarURLResource extends Resource
# Line 650  public class URLClassLoader extends Secu Line 695  public class URLClassLoader extends Secu
695     */     */
696    protected void addURL(URL newUrl)    protected void addURL(URL newUrl)
697    {    {
698        urls.add(newUrl);
699      addURLImpl(newUrl);      addURLImpl(newUrl);
700    }    }
701    
# Line 680  public class URLClassLoader extends Secu Line 726  public class URLClassLoader extends Secu
726              urlloaders.put(newUrl, loader);              urlloaders.put(newUrl, loader);
727            }            }
728    
729          urls.add(newUrl);          urlinfos.add(loader);
730          urlinfos.add(loader);  
731            Vector extraUrls = loader.getClassPath();
732            if (extraUrls != null)
733              {
734                Iterator it = extraUrls.iterator();
735                while (it.hasNext())
736                  {
737                    URL url = (URL)it.next();
738                    URLLoader extraLoader = (URLLoader) urlloaders.get(url);
739                    if (! urlinfos.contains (extraLoader))
740                      addURLImpl(url);
741                  }
742              }
743    
744        }        }
745    }    }
746    
# Line 692  public class URLClassLoader extends Secu Line 751  public class URLClassLoader extends Secu
751    private void addURLs(URL[] newUrls)    private void addURLs(URL[] newUrls)
752    {    {
753      for (int i = 0; i < newUrls.length; i++)      for (int i = 0; i < newUrls.length; i++)
754        addURLImpl(newUrls[i]);        addURL(newUrls[i]);
755    }    }
756    
757    /**    /**
# Line 890  public class URLClassLoader extends Secu Line 949  public class URLClassLoader extends Secu
949     */     */
950    private Resource findURLResource(String resourceName)    private Resource findURLResource(String resourceName)
951    {    {
952      int max = urls.size();      int max = urlinfos.size();
953      for (int i = 0; i < max; i++)      for (int i = 0; i < max; i++)
954        {        {
955          URLLoader loader = (URLLoader) urlinfos.elementAt(i);          URLLoader loader = (URLLoader) urlinfos.elementAt(i);
# Line 961  public class URLClassLoader extends Secu Line 1020  public class URLClassLoader extends Secu
1020      throws IOException      throws IOException
1021    {    {
1022      Vector resources = new Vector();      Vector resources = new Vector();
1023      int max = urls.size();      int max = urlinfos.size();
1024      for (int i = 0; i < max; i++)      for (int i = 0; i < max; i++)
1025        {        {
1026          URLLoader loader = (URLLoader) urlinfos.elementAt(i);          URLLoader loader = (URLLoader) urlinfos.elementAt(i);

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.28

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26