docs: @Override
     public synchronized void start(StartContext startContext) throws StartException {
        RestServerConfigurationBuilder builder = new RestServerConfigurationBuilder();
        builder.name(serverName).extendedHeaders(extendedHeaders).ignoredCaches(ignoredCaches).contextPath(contextPath)
              .maxContentLength(maxContentLength).compressionLevel(compressionLevel);
  
        EncryptableServiceHelper.fillSecurityConfiguration(this, builder.ssl());
  
        String protocolName = getProtocolName();
  
        ROOT_LOGGER.endpointStarting(serverName);
        try {
           SocketBinding socketBinding = getSocketBinding().getOptionalValue();
           if (socketBinding == null) {
              builder.startTransport(false);
              ROOT_LOGGER.startingServerWithoutTransport("REST");
           } else {
              InetSocketAddress socketAddress = socketBinding.getSocketAddress();
              builder.host(socketAddress.getAddress().getHostAddress());
              builder.port(socketAddress.getPort());
           }
  
           int mgmtHttpPort = getSocketBindingManagementPlain().getValue().getAbsolutePort();
           int mgmtHttpsPort = getSocketBindingManagementSecured().getValue().getAbsolutePort();
  
           builder.corsAllowForLocalhost("http", mgmtHttpPort);
           builder.corsAllowForLocalhost("https", mgmtHttpsPort);
           builder.corsAllowForLocalhost("http", CROSS_ORIGIN_CONSOLE_PORT);
           builder.corsAllowForLocalhost("https", CROSS_ORIGIN_CONSOLE_PORT);
           builder.addAll(corsConfigList);
  
           Authenticator authenticator;
           switch (authMethod) {
              case BASIC: {
                 SecurityRealm authenticationRealm = authenticationSecurityRealm.getOptionalValue();
                 SecurityDomain restSecurityDomain = new BasicRestSecurityDomain(authenticationRealm);
                 authenticator = new BasicAuthenticator(restSecurityDomain, authenticationRealm.getName());
                 break;
              }
              case CLIENT_CERT: {
                 if (!EncryptableServiceHelper.isSecurityEnabled(this)) {
                    throw ROOT_LOGGER.cannotUseCertificateAuthenticationWithoutEncryption();
                 }
                 authenticator = new ClientCertAuthenticator();
                 break;
              }
              case NONE: {
                 authenticator = new VoidAuthenticator();
                 break;
              }
              default:
                 throw ROOT_LOGGER.restAuthMethodUnsupported(authMethod.toString());
           }
  
           restServer = new RestServer();
           restServer.setAuthenticator(authenticator);
        } catch (Exception e) {
           throw ROOT_LOGGER.restContextCreationFailed(e);
        }
  
        try {
           restServer.start(builder.build(), cacheManagerInjector.getValue());
           ROOT_LOGGER.httpEndpointStarted(protocolName, restServer.getHost() + ":" + restServer.getPort(), contextPath);
        } catch (Exception e) {
           throw ROOT_LOGGER.restContextStartFailed(e);
        }
     }