_NOTE_: I've reported this issue at https://bugreport.java.com/ (internal review ID : 9069151)
`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`. ------------- Commit messages: - 8262277: java.net.URLClassLoader.getResource throws undocumented IllegalArgumentException Changes: https://git.openjdk.java.net/jdk/pull/2662/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=2662&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8262277 Stats: 4 lines in 1 file changed: 2 ins; 0 del; 2 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