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