-
Bug
-
Resolution: Fixed
-
P3
-
7
-
b64
-
generic
-
generic
The specification for URLClassLoader.addURL(URL) states:
"If the URL specified is null or is already in the list of URLs, or if this loader is closed, then invoking this method has no effect."
However the method successfully adds new url to closed class loader.
Please see the following minitest:
------------------------------------------------------------
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
public class addURL_minitest {
static class CustomURLClassLoader extends URLClassLoader {
public CustomURLClassLoader(URL[] urls) {
super(urls);
}
public void addURL(URL url) {
super.addURL(url);
}
}
public static void main(String[] args) throws IOException {
CustomURLClassLoader loader = new CustomURLClassLoader(
new URL[] { new URL("file:///a") });
System.out.println("before close():"
+ Arrays.toString(loader.getURLs()));
loader.close();
loader.addURL(new URL("file:///b"));
System.out.println("after close() and addURL():"
+ Arrays.toString(loader.getURLs()));
}
}
------------------------------------------------------------
The output is:
------------------------------------------------------------
before close():[file:/a]
after close() and addURL():[file:/a, file:/b]
------------------------------------------------------------
"If the URL specified is null or is already in the list of URLs, or if this loader is closed, then invoking this method has no effect."
However the method successfully adds new url to closed class loader.
Please see the following minitest:
------------------------------------------------------------
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
public class addURL_minitest {
static class CustomURLClassLoader extends URLClassLoader {
public CustomURLClassLoader(URL[] urls) {
super(urls);
}
public void addURL(URL url) {
super.addURL(url);
}
}
public static void main(String[] args) throws IOException {
CustomURLClassLoader loader = new CustomURLClassLoader(
new URL[] { new URL("file:///a") });
System.out.println("before close():"
+ Arrays.toString(loader.getURLs()));
loader.close();
loader.addURL(new URL("file:///b"));
System.out.println("after close() and addURL():"
+ Arrays.toString(loader.getURLs()));
}
}
------------------------------------------------------------
The output is:
------------------------------------------------------------
before close():[file:/a]
after close() and addURL():[file:/a, file:/b]
------------------------------------------------------------