RFR: JDK-8262277: java.net.URLClassLoader.getResource throws undocumented IllegalArgumentException [v5]
Craig Andrews
github.com+194713+candrews at openjdk.java.net
Sat Mar 6 01:35:28 UTC 2021
> `java.net.URLClassLoader.getResource` can throw an undocumented `IllegalArgumentException`.
>
> According to the javadoc for the `getResource` and `findResource` methods, neither should be throwing `IllegalArgumentException` - they should return null if the resource can't be resolved.
>
> Quoting the javadoc for [`URLClassLoader.html#findResource`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URLClassLoader.html#findResource(java.lang.String))
>> Returns:
>> a URL for the resource, or null if the resource could not be found, or if the loader is closed.
>
> And quoting the javadoc for [`ClassLoader.html#getResource`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ClassLoader.html#getResource(java.lang.String))
>> Returns:
>> URL object for reading the resource; null if the resource could not be found, a URL could not be constructed to locate the resource, the resource is in a package that is not opened unconditionally, or access to the resource is denied by the security manager.
>
> Neither mentions throwing `IllegalArgumentException` and both are clear that when URL can't be constructed, `null` should be returned.
>
> Here's a stack trace:
> java.lang.IllegalArgumentException: name
> at java.base/jdk.internal.loader.URLClassPath$Loader.findResource(URLClassPath.java:600)
> at java.base/jdk.internal.loader.URLClassPath.findResource(URLClassPath.java:291)
> at java.base/java.net.URLClassLoader$2.run(URLClassLoader.java:655)
> at java.base/java.net.URLClassLoader$2.run(URLClassLoader.java:653)
> at java.base/java.security.AccessController.doPrivileged(Native Method)
> at java.base/java.net.URLClassLoader.findResource(URLClassLoader.java:652)
>
> Looking at [`URLClassPath.findResource`](https://github.com/openjdk/jdk/blob/2b00367e1154feb2c05b84a11d62fb5750e46acf/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java#L603)
> URL findResource(final String name, boolean check) {
> URL url;
> try {
> url = new URL(base, ParseUtil.encodePath(name, false));
> } catch (MalformedURLException e) {
> throw new IllegalArgumentException("name");
> }
>
> Instead of throwing `IllegalArgumentException`, that line should simply return `null`.
>
> A similar issue exists at [`URLClassPath.getResource`](https://github.com/openjdk/jdk/blob/2b00367e1154feb2c05b84a11d62fb5750e46acf/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java#L639)
> URL findResource(final String name, boolean check) {
> URL url;
> try {
> url = new URL(base, ParseUtil.encodePath(name, false));
> } catch (MalformedURLException e) {
> throw new IllegalArgumentException("name");
> }
>
> Instead of throwing `IllegalArgumentException`, that line should simply return `null`.
Craig Andrews has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
JDK-8262277: java.net.URLClassLoader.getResource throws undocumented IllegalArgumentException
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/2662/files
- new: https://git.openjdk.java.net/jdk/pull/2662/files/79869e78..944956c9
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2662&range=04
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2662&range=03-04
Stats: 9 lines in 1 file changed: 3 ins; 0 del; 6 mod
Patch: https://git.openjdk.java.net/jdk/pull/2662.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/2662/head:pull/2662
PR: https://git.openjdk.java.net/jdk/pull/2662
More information about the core-libs-dev
mailing list