Mercurial Hosting > luan
comparison src/org/eclipse/jetty/util/Loader.java @ 802:3428c60d7cfc
replace jetty jars with source
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Wed, 07 Sep 2016 21:15:48 -0600 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 801:6a21393191c1 | 802:3428c60d7cfc |
|---|---|
| 1 // | |
| 2 // ======================================================================== | |
| 3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. | |
| 4 // ------------------------------------------------------------------------ | |
| 5 // All rights reserved. This program and the accompanying materials | |
| 6 // are made available under the terms of the Eclipse Public License v1.0 | |
| 7 // and Apache License v2.0 which accompanies this distribution. | |
| 8 // | |
| 9 // The Eclipse Public License is available at | |
| 10 // http://www.eclipse.org/legal/epl-v10.html | |
| 11 // | |
| 12 // The Apache License v2.0 is available at | |
| 13 // http://www.opensource.org/licenses/apache2.0.php | |
| 14 // | |
| 15 // You may elect to redistribute this code under either of these licenses. | |
| 16 // ======================================================================== | |
| 17 // | |
| 18 | |
| 19 package org.eclipse.jetty.util; | |
| 20 | |
| 21 import java.io.File; | |
| 22 import java.net.URL; | |
| 23 import java.net.URLClassLoader; | |
| 24 import java.util.Locale; | |
| 25 import java.util.MissingResourceException; | |
| 26 import java.util.ResourceBundle; | |
| 27 | |
| 28 import org.eclipse.jetty.util.resource.Resource; | |
| 29 | |
| 30 /* ------------------------------------------------------------ */ | |
| 31 /** ClassLoader Helper. | |
| 32 * This helper class allows classes to be loaded either from the | |
| 33 * Thread's ContextClassLoader, the classloader of the derived class | |
| 34 * or the system ClassLoader. | |
| 35 * | |
| 36 * <B>Usage:</B><PRE> | |
| 37 * public class MyClass { | |
| 38 * void myMethod() { | |
| 39 * ... | |
| 40 * Class c=Loader.loadClass(this.getClass(),classname); | |
| 41 * ... | |
| 42 * } | |
| 43 * </PRE> | |
| 44 * | |
| 45 */ | |
| 46 public class Loader | |
| 47 { | |
| 48 /* ------------------------------------------------------------ */ | |
| 49 public static URL getResource(Class<?> loadClass,String name, boolean checkParents) | |
| 50 { | |
| 51 URL url =null; | |
| 52 ClassLoader loader=Thread.currentThread().getContextClassLoader(); | |
| 53 while (url==null && loader!=null ) | |
| 54 { | |
| 55 url=loader.getResource(name); | |
| 56 loader=(url==null&&checkParents)?loader.getParent():null; | |
| 57 } | |
| 58 | |
| 59 loader=loadClass==null?null:loadClass.getClassLoader(); | |
| 60 while (url==null && loader!=null ) | |
| 61 { | |
| 62 url=loader.getResource(name); | |
| 63 loader=(url==null&&checkParents)?loader.getParent():null; | |
| 64 } | |
| 65 | |
| 66 if (url==null) | |
| 67 { | |
| 68 url=ClassLoader.getSystemResource(name); | |
| 69 } | |
| 70 | |
| 71 return url; | |
| 72 } | |
| 73 | |
| 74 /* ------------------------------------------------------------ */ | |
| 75 @SuppressWarnings("rawtypes") | |
| 76 public static Class loadClass(Class loadClass,String name) | |
| 77 throws ClassNotFoundException | |
| 78 { | |
| 79 return loadClass(loadClass,name,false); | |
| 80 } | |
| 81 | |
| 82 /* ------------------------------------------------------------ */ | |
| 83 /** Load a class. | |
| 84 * | |
| 85 * @param loadClass | |
| 86 * @param name | |
| 87 * @param checkParents If true, try loading directly from parent classloaders. | |
| 88 * @return Class | |
| 89 * @throws ClassNotFoundException | |
| 90 */ | |
| 91 @SuppressWarnings("rawtypes") | |
| 92 public static Class loadClass(Class loadClass,String name,boolean checkParents) | |
| 93 throws ClassNotFoundException | |
| 94 { | |
| 95 ClassNotFoundException ex=null; | |
| 96 Class<?> c =null; | |
| 97 ClassLoader loader=Thread.currentThread().getContextClassLoader(); | |
| 98 while (c==null && loader!=null ) | |
| 99 { | |
| 100 try { c=loader.loadClass(name); } | |
| 101 catch (ClassNotFoundException e) {if(ex==null)ex=e;} | |
| 102 loader=(c==null&&checkParents)?loader.getParent():null; | |
| 103 } | |
| 104 | |
| 105 loader=loadClass==null?null:loadClass.getClassLoader(); | |
| 106 while (c==null && loader!=null ) | |
| 107 { | |
| 108 try { c=loader.loadClass(name); } | |
| 109 catch (ClassNotFoundException e) {if(ex==null)ex=e;} | |
| 110 loader=(c==null&&checkParents)?loader.getParent():null; | |
| 111 } | |
| 112 | |
| 113 if (c==null) | |
| 114 { | |
| 115 try { c=Class.forName(name); } | |
| 116 catch (ClassNotFoundException e) {if(ex==null)ex=e;} | |
| 117 } | |
| 118 | |
| 119 if (c!=null) | |
| 120 return c; | |
| 121 throw ex; | |
| 122 } | |
| 123 | |
| 124 | |
| 125 | |
| 126 /* ------------------------------------------------------------ */ | |
| 127 public static ResourceBundle getResourceBundle(Class<?> loadClass,String name,boolean checkParents, Locale locale) | |
| 128 throws MissingResourceException | |
| 129 { | |
| 130 MissingResourceException ex=null; | |
| 131 ResourceBundle bundle =null; | |
| 132 ClassLoader loader=Thread.currentThread().getContextClassLoader(); | |
| 133 while (bundle==null && loader!=null ) | |
| 134 { | |
| 135 try { bundle=ResourceBundle.getBundle(name, locale, loader); } | |
| 136 catch (MissingResourceException e) {if(ex==null)ex=e;} | |
| 137 loader=(bundle==null&&checkParents)?loader.getParent():null; | |
| 138 } | |
| 139 | |
| 140 loader=loadClass==null?null:loadClass.getClassLoader(); | |
| 141 while (bundle==null && loader!=null ) | |
| 142 { | |
| 143 try { bundle=ResourceBundle.getBundle(name, locale, loader); } | |
| 144 catch (MissingResourceException e) {if(ex==null)ex=e;} | |
| 145 loader=(bundle==null&&checkParents)?loader.getParent():null; | |
| 146 } | |
| 147 | |
| 148 if (bundle==null) | |
| 149 { | |
| 150 try { bundle=ResourceBundle.getBundle(name, locale); } | |
| 151 catch (MissingResourceException e) {if(ex==null)ex=e;} | |
| 152 } | |
| 153 | |
| 154 if (bundle!=null) | |
| 155 return bundle; | |
| 156 throw ex; | |
| 157 } | |
| 158 | |
| 159 | |
| 160 /* ------------------------------------------------------------ */ | |
| 161 /** | |
| 162 * Generate the classpath (as a string) of all classloaders | |
| 163 * above the given classloader. | |
| 164 * | |
| 165 * This is primarily used for jasper. | |
| 166 * @return the system class path | |
| 167 */ | |
| 168 public static String getClassPath(ClassLoader loader) throws Exception | |
| 169 { | |
| 170 StringBuilder classpath=new StringBuilder(); | |
| 171 while (loader != null && (loader instanceof URLClassLoader)) | |
| 172 { | |
| 173 URL[] urls = ((URLClassLoader)loader).getURLs(); | |
| 174 if (urls != null) | |
| 175 { | |
| 176 for (int i=0;i<urls.length;i++) | |
| 177 { | |
| 178 Resource resource = Resource.newResource(urls[i]); | |
| 179 File file=resource.getFile(); | |
| 180 if (file!=null && file.exists()) | |
| 181 { | |
| 182 if (classpath.length()>0) | |
| 183 classpath.append(File.pathSeparatorChar); | |
| 184 classpath.append(file.getAbsolutePath()); | |
| 185 } | |
| 186 } | |
| 187 } | |
| 188 loader = loader.getParent(); | |
| 189 } | |
| 190 return classpath.toString(); | |
| 191 } | |
| 192 } | |
| 193 |
