0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 package org.apache.spark.util;
0019
0020 import java.io.IOException;
0021 import java.net.URL;
0022 import java.util.ArrayList;
0023 import java.util.Collections;
0024 import java.util.Enumeration;
0025
0026
0027
0028
0029
0030 public class ChildFirstURLClassLoader extends MutableURLClassLoader {
0031
0032 static {
0033 ClassLoader.registerAsParallelCapable();
0034 }
0035
0036 private ParentClassLoader parent;
0037
0038 public ChildFirstURLClassLoader(URL[] urls, ClassLoader parent) {
0039 super(urls, null);
0040 this.parent = new ParentClassLoader(parent);
0041 }
0042
0043 @Override
0044 public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
0045 try {
0046 return super.loadClass(name, resolve);
0047 } catch (ClassNotFoundException cnf) {
0048 return parent.loadClass(name, resolve);
0049 }
0050 }
0051
0052 @Override
0053 public Enumeration<URL> getResources(String name) throws IOException {
0054 ArrayList<URL> urls = Collections.list(super.getResources(name));
0055 urls.addAll(Collections.list(parent.getResources(name)));
0056 return Collections.enumeration(urls);
0057 }
0058
0059 @Override
0060 public URL getResource(String name) {
0061 URL url = super.getResource(name);
0062 if (url != null) {
0063 return url;
0064 } else {
0065 return parent.getResource(name);
0066 }
0067 }
0068 }