docs: @Override
      public SSLContext getSSLContextInstance(final SSLConfig config) throws SSLException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "getSSLContextInstance");
  
          if (config == null) {
              throw new IllegalArgumentException("SSL configuration is not specified.");
          }
  
          // now generate a new SSLContext
          final String ctxtProvider = config.getProperty(Constants.SSLPROP_CONTEXT_PROVIDER);
          final String protocol = config.getProperty(Constants.SSLPROP_PROTOCOL);
          final String alias = config.getProperty(Constants.SSLPROP_ALIAS);
          final String configURL = config.getProperty(Constants.SSLPROP_CONFIGURL_LOADED_FROM);
  
          SSLContext sslContext = null;
  
          if (protocol == null) {
              throw new IllegalArgumentException("Protocol is not specified.");
          }
  
          try {
              sslContext = AccessController.doPrivileged(new PrivilegedExceptionAction<SSLContext>() {
                  @Override
                  public SSLContext run() throws NoSuchAlgorithmException, NoSuchProviderException {
                      if (ctxtProvider != null)
                          return SSLContext.getInstance(protocol, ctxtProvider);
                      return SSLContext.getInstance(protocol);
                  }
              });
          } catch (PrivilegedActionException e) {
              Exception ex = e.getException();
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "Exception occurred getting SSL context.", new Object[] { ex });
  
              if (ex instanceof NoSuchAlgorithmException) {
                  String message = TraceNLSHelper.getInstance().getFormattedMessage("ssl.no.such.algorithm.CWPKI0028E",
                                                                                    new Object[] { protocol, alias, configURL, ex.getMessage() },
                                                                                    "CWPKI0028E: SSL handshake protocol " + protocol
                                                                                                                                                  + " is not valid.  This protocol is specified in the SSL configuration alias "
                                                                                                                                                  + alias
                                                                                                                                                  + " loaded from SSL configuration file "
                                                                                                                                                  + configURL
                                                                                                                                                  + ".  The extended error message is: "
                                                                                                                                                  + ex.getMessage() + ".");
                  Tr.error(tc, "ssl.no.such.algorithm.CWPKI0028E",
                           new Object[] { protocol, alias, configURL, ex.getMessage() });
                  throw new SSLException(message, ex);
              } else if (ex instanceof NoSuchProviderException) {
                  String message = TraceNLSHelper.getInstance().getFormattedMessage("ssl.invalid.context.provider.CWPKI0029E",
                                                                                    new Object[] { Constants.IBMJSSE2_NAME, alias, configURL, ex.getMessage() },
                                                                                    "CWPKI0029E: SSL context provider " + Constants.IBMJSSE2_NAME
                                                                                                                                                                 + " is not valid.  This provider is specified in the SSL configuration alias "
                                                                                                                                                                 + alias
                                                                                                                                                                 + " loaded from SSL configuration file "
                                                                                                                                                                 + configURL
                                                                                                                                                                 + ".  The extended error message is: "
                                                                                                                                                                 + ex.getMessage()
                                                                                                                                                                 + ".");
                  Tr.error(tc, "ssl.invalid.context.provider.CWPKI0029E",
                           new Object[] { Constants.IBMJSSE2_NAME, alias, configURL, ex.getMessage() });
                  throw new SSLException(message, ex);
              } else {
                  throw new SSLException(ex);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "getSSLContextInstance");
          return sslContext;
      }