1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.osgi.context.internal.classloader;
18
19 import java.net.URL;
20
21 import org.springframework.util.Assert;
22
23 /**
24 * Chaining class loader implementation that delegates the resource and class
25 * loading to a number of class loaders passed in.
26 *
27 * @author Costin Leau
28 */
29 public class ChainedClassLoader extends ClassLoader {
30
31 private final ClassLoader[] loaders;
32
33
34 public ChainedClassLoader(ClassLoader[] loaders) {
35 Assert.notEmpty(loaders);
36 for (int i = 0; i < loaders.length; i++) {
37 ClassLoader classLoader = loaders[i];
38 Assert.notNull(classLoader, "null classloaders not allowed");
39 }
40 this.loaders = (ClassLoader[]) loaders.clone();
41 }
42
43 public URL getResource(String name) {
44 URL url = null;
45 for (int i = 0; i < loaders.length; i++) {
46 ClassLoader loader = loaders[i];
47 url = loader.getResource(name);
48 if (url != null)
49 return url;
50 }
51 return url;
52 }
53
54 public Class loadClass(String name) throws ClassNotFoundException {
55 Class clazz = null;
56 for (int i = 0; i < loaders.length; i++) {
57 ClassLoader loader = loaders[i];
58 try {
59 clazz = loader.loadClass(name);
60 return clazz;
61 }
62 catch (ClassNotFoundException e) {
63
64 }
65 }
66 throw new ClassNotFoundException(name);
67 }
68 }