mirror of https://github.com/apache/openjpa.git
Change Services.getImplementorClasses(Class) and Services.getImplementorClasses(Class,ClassLoader) to filter out implementations that are not assignable to the Class argument. This allows the Services call to be more fault-tolerant in environments with odd classloader configurations.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@603666 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
45eb530812
commit
485372b3f6
|
@ -25,7 +25,9 @@ import java.io.InputStreamReader;
|
|||
import java.net.URL;
|
||||
import java.security.AccessController;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
|
@ -145,7 +147,21 @@ public class Services {
|
|||
|
||||
public static Class[] getImplementorClasses(Class serviceClass,
|
||||
ClassLoader loader) {
|
||||
return getImplementorClasses(serviceClass.getName(), loader);
|
||||
Set invalid = new HashSet();
|
||||
Class[] classes = getImplementorClasses(serviceClass.getName(), loader);
|
||||
|
||||
// filter out any classes that have any classloader issues wrt.
|
||||
// the specified service class.
|
||||
for (int i = 0; i < classes.length; i++)
|
||||
if (!serviceClass.isAssignableFrom(classes[i]))
|
||||
invalid.add(classes[i]);
|
||||
if (invalid.size() != 0) {
|
||||
List list = new ArrayList(Arrays.asList(classes));
|
||||
list.removeAll(invalid);
|
||||
return (Class[]) list.toArray(new Class[list.size()]);
|
||||
} else {
|
||||
return classes;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue