In the current OpenJDK 11 and later implementations, providing an invalid value for the system property -Djava.nio.channels.spi.SelectorProvider results in a ClassNotFoundException during startup.
Instead of failing with an exception, the runtime should gracefully fall back to the default SelectorProvider when the specified provider class is invalid or not present. An appropriate error message should be printed indicating that the supplied provider is invalid or unavailable and that the default provider is being used.
This behavior would improve robustness and align with the expected fallback behavior when optional service providers cannot be loaded.
Steps to Reproduce:
jdk-11.0.28+6/bin/java -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.abc SelectorTypeCheck
Exception in thread "main" java.util.ServiceConfigurationError
at java.base/java.nio.channels.spi.SelectorProvider.loadProviderFromProperty(SelectorProvider.java:104)
at java.base/java.nio.channels.spi.SelectorProvider$1.run(SelectorProvider.java:178)
at java.base/java.nio.channels.spi.SelectorProvider$1.run(SelectorProvider.java:176)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:693)
at java.base/java.nio.channels.spi.SelectorProvider.provider(SelectorProvider.java:175)
at java.base/java.nio.channels.Selector.open(Selector.java:295)
at SelectorTypeCheck.main(SelectorTypeCheck.java:5)
Caused by: java.lang.ClassNotFoundException: sun.nio.ch.abc
at java.base/java.lang.Class.forNameImpl(Native Method)
at java.base/java.lang.Class.forName(Class.java:417)
at java.base/java.nio.channels.spi.SelectorProvider.loadProviderFromProperty(SelectorProvider.java:99)
... 6 more
SelectorTypeCheck.java
import java.nio.channels.Selector;
public class SelectorTypeCheck {
public static void main(String[] args) throws Exception {
try (Selector selector = Selector.open()) {
System.out.println("Selector provider: " + selector.provider());
System.out.println("Selector implementation class: " + selector.getClass().getName());
}
}
}
Instead of failing with an exception, the runtime should gracefully fall back to the default SelectorProvider when the specified provider class is invalid or not present. An appropriate error message should be printed indicating that the supplied provider is invalid or unavailable and that the default provider is being used.
This behavior would improve robustness and align with the expected fallback behavior when optional service providers cannot be loaded.
Steps to Reproduce:
jdk-11.0.28+6/bin/java -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.abc SelectorTypeCheck
Exception in thread "main" java.util.ServiceConfigurationError
at java.base/java.nio.channels.spi.SelectorProvider.loadProviderFromProperty(SelectorProvider.java:104)
at java.base/java.nio.channels.spi.SelectorProvider$1.run(SelectorProvider.java:178)
at java.base/java.nio.channels.spi.SelectorProvider$1.run(SelectorProvider.java:176)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:693)
at java.base/java.nio.channels.spi.SelectorProvider.provider(SelectorProvider.java:175)
at java.base/java.nio.channels.Selector.open(Selector.java:295)
at SelectorTypeCheck.main(SelectorTypeCheck.java:5)
Caused by: java.lang.ClassNotFoundException: sun.nio.ch.abc
at java.base/java.lang.Class.forNameImpl(Native Method)
at java.base/java.lang.Class.forName(Class.java:417)
at java.base/java.nio.channels.spi.SelectorProvider.loadProviderFromProperty(SelectorProvider.java:99)
... 6 more
SelectorTypeCheck.java
import java.nio.channels.Selector;
public class SelectorTypeCheck {
public static void main(String[] args) throws Exception {
try (Selector selector = Selector.open()) {
System.out.println("Selector provider: " + selector.provider());
System.out.println("Selector implementation class: " + selector.getClass().getName());
}
}
}
- links to
-
Review(master)
openjdk/jdk/28998