SelectorProvider.provider() throws CNFE if system property java.nio.channels.spi.SelectorProvider set to bad value

XMLWordPrintable

    • Type: Bug
    • Resolution: Unresolved
    • Priority: P4
    • None
    • Affects Version/s: 11, 17, 21, 25
    • Component/s: core-libs
    • None

      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());
              }
          }
      }

            Assignee:
            Shruthi Acharya
            Reporter:
            Shruthi Acharya
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: