|
|
dc52fd |
Index: xbean-reflect/src/main/java/org/apache/xbean/recipe/ReflectionUtil.java
|
|
|
dc52fd |
===================================================================
|
|
|
dc52fd |
--- xbean-reflect/src/main/java/org/apache/xbean/recipe/ReflectionUtil.java (revision 1538849)
|
|
|
dc52fd |
+++ xbean-reflect/src/main/java/org/apache/xbean/recipe/ReflectionUtil.java (revision 1538850)
|
|
|
dc52fd |
@@ -25,8 +25,6 @@
|
|
|
dc52fd |
import java.lang.reflect.Method;
|
|
|
dc52fd |
import java.lang.reflect.Modifier;
|
|
|
dc52fd |
import java.lang.reflect.Type;
|
|
|
dc52fd |
-import java.security.AccessController;
|
|
|
dc52fd |
-import java.security.PrivilegedAction;
|
|
|
dc52fd |
import java.util.ArrayList;
|
|
|
dc52fd |
import java.util.Arrays;
|
|
|
dc52fd |
import java.util.Collections;
|
|
|
dc52fd |
@@ -1011,12 +1009,7 @@
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
private static void setAccessible(final AccessibleObject accessibleObject) {
|
|
|
dc52fd |
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- accessibleObject.setAccessible(true);
|
|
|
dc52fd |
- return null;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- });
|
|
|
dc52fd |
+ accessibleObject.setAccessible(true);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
private static String toParameterList(Class[] parameterTypes) {
|
|
|
dc52fd |
Index: xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java
|
|
|
dc52fd |
===================================================================
|
|
|
dc52fd |
--- xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java (revision 1538849)
|
|
|
dc52fd |
+++ xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java (revision 1538850)
|
|
|
dc52fd |
@@ -24,11 +24,7 @@
|
|
|
dc52fd |
|
|
|
dc52fd |
public abstract class SunURLClassPath implements ClassPath {
|
|
|
dc52fd |
public static ClassLoader getContextClassLoader() {
|
|
|
dc52fd |
- return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- return Thread.currentThread().getContextClassLoader();
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- });
|
|
|
dc52fd |
+ return Thread.currentThread().getContextClassLoader();
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
private java.lang.reflect.Field ucpField;
|
|
|
dc52fd |
Index: xbean-classloader/src/main/java/org/apache/xbean/classloader/JarFileClassLoader.java
|
|
|
dc52fd |
===================================================================
|
|
|
dc52fd |
--- xbean-classloader/src/main/java/org/apache/xbean/classloader/JarFileClassLoader.java (revision 1539052)
|
|
|
dc52fd |
+++ xbean-classloader/src/main/java/org/apache/xbean/classloader/JarFileClassLoader.java (revision 1539053)
|
|
|
dc52fd |
@@ -20,12 +20,7 @@
|
|
|
dc52fd |
import java.io.File;
|
|
|
dc52fd |
import java.net.URL;
|
|
|
dc52fd |
import java.net.URI;
|
|
|
dc52fd |
-import java.security.AccessControlContext;
|
|
|
dc52fd |
-import java.security.AccessController;
|
|
|
dc52fd |
import java.security.CodeSource;
|
|
|
dc52fd |
-import java.security.PrivilegedAction;
|
|
|
dc52fd |
-import java.security.PrivilegedExceptionAction;
|
|
|
dc52fd |
-import java.security.PrivilegedActionException;
|
|
|
dc52fd |
import java.security.cert.Certificate;
|
|
|
dc52fd |
import java.util.Collection;
|
|
|
dc52fd |
import java.util.Enumeration;
|
|
|
dc52fd |
@@ -49,7 +44,6 @@
|
|
|
dc52fd |
private static final URL[] EMPTY_URLS = new URL[0];
|
|
|
dc52fd |
|
|
|
dc52fd |
private final UrlResourceFinder resourceFinder = new UrlResourceFinder();
|
|
|
dc52fd |
- private final AccessControlContext acc;
|
|
|
dc52fd |
|
|
|
dc52fd |
/**
|
|
|
dc52fd |
* Creates a JarFileClassLoader that is a child of the system class loader.
|
|
|
dc52fd |
@@ -58,7 +52,6 @@
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls) {
|
|
|
dc52fd |
super(name, EMPTY_URLS);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
@@ -70,13 +63,11 @@
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls, ClassLoader parent) {
|
|
|
dc52fd |
super(name, EMPTY_URLS, parent);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls, ClassLoader parent, boolean inverseClassLoading, String[] hiddenClasses, String[] nonOverridableClasses) {
|
|
|
dc52fd |
super(name, EMPTY_URLS, parent, inverseClassLoading, hiddenClasses, nonOverridableClasses);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
@@ -88,19 +79,16 @@
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls, ClassLoader[] parents) {
|
|
|
dc52fd |
super(name, EMPTY_URLS, parents);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls, ClassLoader[] parents, boolean inverseClassLoading, Collection hiddenClasses, Collection nonOverridableClasses) {
|
|
|
dc52fd |
super(name, EMPTY_URLS, parents, inverseClassLoading, hiddenClasses, nonOverridableClasses);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
public JarFileClassLoader(String name, URL[] urls, ClassLoader[] parents, boolean inverseClassLoading, String[] hiddenClasses, String[] nonOverridableClasses) {
|
|
|
dc52fd |
super(name, EMPTY_URLS, parents, inverseClassLoading, hiddenClasses, nonOverridableClasses);
|
|
|
dc52fd |
- this.acc = AccessController.getContext();
|
|
|
dc52fd |
addURLs(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
@@ -115,12 +103,7 @@
|
|
|
dc52fd |
* {@inheritDoc}
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
public void addURL(final URL url) {
|
|
|
dc52fd |
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- resourceFinder.addUrl(url);
|
|
|
dc52fd |
- return null;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
+ resourceFinder.addUrl(url);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
/**
|
|
|
dc52fd |
@@ -128,12 +111,7 @@
|
|
|
dc52fd |
* @param urls the URLs to add
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
protected void addURLs(final URL[] urls) {
|
|
|
dc52fd |
- AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- resourceFinder.addUrls(urls);
|
|
|
dc52fd |
- return null;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
+ resourceFinder.addUrls(urls);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
/**
|
|
|
dc52fd |
@@ -148,11 +126,7 @@
|
|
|
dc52fd |
* {@inheritDoc}
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
public URL findResource(final String resourceName) {
|
|
|
dc52fd |
- return (URL) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- return resourceFinder.findResource(resourceName);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
+ return resourceFinder.findResource(resourceName);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
/**
|
|
|
dc52fd |
@@ -164,11 +138,7 @@
|
|
|
dc52fd |
Enumeration parentResources = super.findResources(resourceName);
|
|
|
dc52fd |
|
|
|
dc52fd |
// get the classes from my urls
|
|
|
dc52fd |
- Enumeration myResources = (Enumeration) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- return resourceFinder.findResources(resourceName);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
+ Enumeration myResources = resourceFinder.findResources(resourceName);
|
|
|
dc52fd |
|
|
|
dc52fd |
// join the two together
|
|
|
dc52fd |
Enumeration resources = new UnionEnumeration(parentResources, myResources);
|
|
|
dc52fd |
@@ -196,11 +166,7 @@
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
// get a resource handle to the library
|
|
|
dc52fd |
- ResourceHandle resourceHandle = (ResourceHandle) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- return resourceFinder.getResource(resourceName);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
+ ResourceHandle resourceHandle = resourceFinder.getResource(resourceName);
|
|
|
dc52fd |
|
|
|
dc52fd |
if (resourceHandle == null) {
|
|
|
dc52fd |
return null;
|
|
|
dc52fd |
@@ -220,62 +186,53 @@
|
|
|
dc52fd |
* {@inheritDoc}
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
protected Class findClass(final String className) throws ClassNotFoundException {
|
|
|
dc52fd |
- try {
|
|
|
dc52fd |
- return (Class) AccessController.doPrivileged(new PrivilegedExceptionAction() {
|
|
|
dc52fd |
- public Object run() throws ClassNotFoundException {
|
|
|
dc52fd |
- // first think check if we are allowed to define the package
|
|
|
dc52fd |
- SecurityManager securityManager = System.getSecurityManager();
|
|
|
dc52fd |
- if (securityManager != null) {
|
|
|
dc52fd |
- String packageName;
|
|
|
dc52fd |
- int packageEnd = className.lastIndexOf('.');
|
|
|
dc52fd |
- if (packageEnd >= 0) {
|
|
|
dc52fd |
- packageName = className.substring(0, packageEnd);
|
|
|
dc52fd |
- securityManager.checkPackageDefinition(packageName);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
+ // first think check if we are allowed to define the package
|
|
|
dc52fd |
+ SecurityManager securityManager = System.getSecurityManager();
|
|
|
dc52fd |
+ if (securityManager != null) {
|
|
|
dc52fd |
+ String packageName;
|
|
|
dc52fd |
+ int packageEnd = className.lastIndexOf('.');
|
|
|
dc52fd |
+ if (packageEnd >= 0) {
|
|
|
dc52fd |
+ packageName = className.substring(0, packageEnd);
|
|
|
dc52fd |
+ securityManager.checkPackageDefinition(packageName);
|
|
|
dc52fd |
+ }
|
|
|
dc52fd |
+ }
|
|
|
dc52fd |
|
|
|
dc52fd |
+ // convert the class name to a file name
|
|
|
dc52fd |
+ String resourceName = className.replace('.', '/') + ".class";
|
|
|
dc52fd |
|
|
|
dc52fd |
- // convert the class name to a file name
|
|
|
dc52fd |
- String resourceName = className.replace('.', '/') + ".class";
|
|
|
dc52fd |
+ // find the class file resource
|
|
|
dc52fd |
+ ResourceHandle resourceHandle = resourceFinder.getResource(resourceName);
|
|
|
dc52fd |
+ if (resourceHandle == null) {
|
|
|
dc52fd |
+ throw new ClassNotFoundException(className);
|
|
|
dc52fd |
+ }
|
|
|
dc52fd |
|
|
|
dc52fd |
- // find the class file resource
|
|
|
dc52fd |
- ResourceHandle resourceHandle = resourceFinder.getResource(resourceName);
|
|
|
dc52fd |
- if (resourceHandle == null) {
|
|
|
dc52fd |
- throw new ClassNotFoundException(className);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
+ byte[] bytes;
|
|
|
dc52fd |
+ Manifest manifest;
|
|
|
dc52fd |
+ try {
|
|
|
dc52fd |
+ // get the bytes from the class file
|
|
|
dc52fd |
+ bytes = resourceHandle.getBytes();
|
|
|
dc52fd |
+
|
|
|
dc52fd |
+ // get the manifest for defining the packages
|
|
|
dc52fd |
+ manifest = resourceHandle.getManifest();
|
|
|
dc52fd |
+ } catch (IOException e) {
|
|
|
dc52fd |
+ throw new ClassNotFoundException(className, e);
|
|
|
dc52fd |
+ }
|
|
|
dc52fd |
|
|
|
dc52fd |
- byte[] bytes;
|
|
|
dc52fd |
- Manifest manifest;
|
|
|
dc52fd |
- try {
|
|
|
dc52fd |
- // get the bytes from the class file
|
|
|
dc52fd |
- bytes = resourceHandle.getBytes();
|
|
|
dc52fd |
+ // get the certificates for the code source
|
|
|
dc52fd |
+ Certificate[] certificates = resourceHandle.getCertificates();
|
|
|
dc52fd |
+
|
|
|
dc52fd |
+ // the code source url is used to define the package and as the security context for the class
|
|
|
dc52fd |
+ URL codeSourceUrl = resourceHandle.getCodeSourceUrl();
|
|
|
dc52fd |
|
|
|
dc52fd |
- // get the manifest for defining the packages
|
|
|
dc52fd |
- manifest = resourceHandle.getManifest();
|
|
|
dc52fd |
- } catch (IOException e) {
|
|
|
dc52fd |
- throw new ClassNotFoundException(className, e);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
+ // define the package (required for security)
|
|
|
dc52fd |
+ definePackage(className, codeSourceUrl, manifest);
|
|
|
dc52fd |
|
|
|
dc52fd |
- // get the certificates for the code source
|
|
|
dc52fd |
- Certificate[] certificates = resourceHandle.getCertificates();
|
|
|
dc52fd |
-
|
|
|
dc52fd |
- // the code source url is used to define the package and as the security context for the class
|
|
|
dc52fd |
- URL codeSourceUrl = resourceHandle.getCodeSourceUrl();
|
|
|
dc52fd |
-
|
|
|
dc52fd |
- // define the package (required for security)
|
|
|
dc52fd |
- definePackage(className, codeSourceUrl, manifest);
|
|
|
dc52fd |
-
|
|
|
dc52fd |
- // this is the security context of the class
|
|
|
dc52fd |
- CodeSource codeSource = new CodeSource(codeSourceUrl, certificates);
|
|
|
dc52fd |
-
|
|
|
dc52fd |
- // load the class into the vm
|
|
|
dc52fd |
- Class clazz = defineClass(className, bytes, 0, bytes.length, codeSource);
|
|
|
dc52fd |
- return clazz;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }, acc);
|
|
|
dc52fd |
- } catch (PrivilegedActionException e) {
|
|
|
dc52fd |
- throw (ClassNotFoundException) e.getException();
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
+ // this is the security context of the class
|
|
|
dc52fd |
+ CodeSource codeSource = new CodeSource(codeSourceUrl, certificates);
|
|
|
dc52fd |
+
|
|
|
dc52fd |
+ // load the class into the vm
|
|
|
dc52fd |
+ Class clazz = defineClass(className, bytes, 0, bytes.length, codeSource);
|
|
|
dc52fd |
+ return clazz;
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
private void definePackage(String className, URL jarUrl, Manifest manifest) {
|
|
|
dc52fd |
Index: xbean-classpath/src/main/java/org/apache/xbean/classpath/TomcatClassPath.java
|
|
|
dc52fd |
===================================================================
|
|
|
dc52fd |
--- xbean-classpath/src/main/java/org/apache/xbean/classpath/TomcatClassPath.java (revision 1539055)
|
|
|
dc52fd |
+++ xbean-classpath/src/main/java/org/apache/xbean/classpath/TomcatClassPath.java (revision 1539056)
|
|
|
dc52fd |
@@ -20,8 +20,6 @@
|
|
|
dc52fd |
import java.lang.reflect.Method;
|
|
|
dc52fd |
import java.net.URL;
|
|
|
dc52fd |
import java.net.URLClassLoader;
|
|
|
dc52fd |
-import java.security.AccessController;
|
|
|
dc52fd |
-import java.security.PrivilegedAction;
|
|
|
dc52fd |
|
|
|
dc52fd |
public class TomcatClassPath extends SunURLClassPath {
|
|
|
dc52fd |
|
|
|
dc52fd |
@@ -140,36 +138,19 @@
|
|
|
dc52fd |
* @return URLClassLoader.addURL method instance
|
|
|
dc52fd |
*/
|
|
|
dc52fd |
private Method getAddURLMethod() throws Exception {
|
|
|
dc52fd |
- return (Method) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- Method method = null;
|
|
|
dc52fd |
- try {
|
|
|
dc52fd |
- Class clazz = URLClassLoader.class;
|
|
|
dc52fd |
- method = clazz.getDeclaredMethod("addURL", new Class[]{URL.class});
|
|
|
dc52fd |
- method.setAccessible(true);
|
|
|
dc52fd |
- return method;
|
|
|
dc52fd |
- } catch (Exception e2) {
|
|
|
dc52fd |
- e2.printStackTrace();
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- return method;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- });
|
|
|
dc52fd |
+ Method method = null;
|
|
|
dc52fd |
+ Class clazz = URLClassLoader.class;
|
|
|
dc52fd |
+ method = clazz.getDeclaredMethod("addURL", new Class[]{URL.class});
|
|
|
dc52fd |
+ method.setAccessible(true);
|
|
|
dc52fd |
+ return method;
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
private Method getAddRepositoryMethod() throws Exception {
|
|
|
dc52fd |
- return (Method) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- Method method = null;
|
|
|
dc52fd |
- try {
|
|
|
dc52fd |
- Class clazz = getClassLoader().getClass();
|
|
|
dc52fd |
- method = clazz.getDeclaredMethod("addRepository", new Class[]{String.class});
|
|
|
dc52fd |
- method.setAccessible(true);
|
|
|
dc52fd |
- return method;
|
|
|
dc52fd |
- } catch (Exception e2) {
|
|
|
dc52fd |
- throw (IllegalStateException) new IllegalStateException("Unable to find or access the addRepository method in StandardClassLoader").initCause(e2);
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- });
|
|
|
dc52fd |
+ Method method = null;
|
|
|
dc52fd |
+ Class clazz = getClassLoader().getClass();
|
|
|
dc52fd |
+ method = clazz.getDeclaredMethod("addRepository", new Class[]{String.class});
|
|
|
dc52fd |
+ method.setAccessible(true);
|
|
|
dc52fd |
+ return method;
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|
|
|
dc52fd |
}
|
|
|
dc52fd |
Index: xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java
|
|
|
dc52fd |
===================================================================
|
|
|
dc52fd |
--- xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java (revision 1539055)
|
|
|
dc52fd |
+++ xbean-classpath/src/main/java/org/apache/xbean/classpath/SunURLClassPath.java (revision 1539056)
|
|
|
dc52fd |
@@ -19,10 +19,9 @@
|
|
|
dc52fd |
import java.io.File;
|
|
|
dc52fd |
import java.net.URL;
|
|
|
dc52fd |
import java.net.URLClassLoader;
|
|
|
dc52fd |
-import java.security.AccessController;
|
|
|
dc52fd |
-import java.security.PrivilegedAction;
|
|
|
dc52fd |
|
|
|
dc52fd |
public abstract class SunURLClassPath implements ClassPath {
|
|
|
dc52fd |
+
|
|
|
dc52fd |
public static ClassLoader getContextClassLoader() {
|
|
|
dc52fd |
return Thread.currentThread().getContextClassLoader();
|
|
|
dc52fd |
}
|
|
|
dc52fd |
@@ -64,20 +63,9 @@
|
|
|
dc52fd |
private java.lang.reflect.Field getUcpField() throws Exception {
|
|
|
dc52fd |
if (ucpField == null) {
|
|
|
dc52fd |
// Add them to the URLClassLoader's classpath
|
|
|
dc52fd |
- ucpField = (java.lang.reflect.Field) AccessController.doPrivileged(new PrivilegedAction() {
|
|
|
dc52fd |
- public Object run() {
|
|
|
dc52fd |
- java.lang.reflect.Field ucp = null;
|
|
|
dc52fd |
- try {
|
|
|
dc52fd |
- ucp = URLClassLoader.class.getDeclaredField("ucp");
|
|
|
dc52fd |
- ucp.setAccessible(true);
|
|
|
dc52fd |
- } catch (Exception e2) {
|
|
|
dc52fd |
- e2.printStackTrace();
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- return ucp;
|
|
|
dc52fd |
- }
|
|
|
dc52fd |
- });
|
|
|
dc52fd |
+ ucpField = URLClassLoader.class.getDeclaredField("ucp");
|
|
|
dc52fd |
+ ucpField.setAccessible(true);
|
|
|
dc52fd |
}
|
|
|
dc52fd |
-
|
|
|
dc52fd |
return ucpField;
|
|
|
dc52fd |
}
|
|
|
dc52fd |
|