Ultrakompakter HTTP Server
ulrich
yesterday 5cca043c2f466b347813e89e552e1ea5e1a4f8af
src/de/uhilger/neon/Factory.java
@@ -36,9 +36,6 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -49,7 +46,6 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import de.uhilger.neon.Scanner.ScannerListener;
import java.util.Set;
/**
 * Einen Neon-Server aus einer Beschreibungsdatei herstellen
@@ -133,7 +129,7 @@
          IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
    Logger.getLogger(Factory.class.getName()).log(Level.FINER, System.getProperty("java.class.path"));
    List<ServerDescriptor> serverList = d.server;
    for (ServerDescriptor sd : serverList) {
      HttpServer server = HttpServer.create(new InetSocketAddress(sd.port), 0);
@@ -154,23 +150,34 @@
      server.setExecutor(Executors.newFixedThreadPool(10));
      server.start();
    }
    fireInstanceStarted();
   fireInstanceStarted();
  }
  private Authenticator createAuthenticator(NeonDescriptor d) {
    Logger.getLogger(Factory.class.getName()).log(
            Level.FINER, "{0} ", new Object[]{"creating Authenticator"});
    Authenticator auth = null;
    if (d.authenticator != null) {
      try {
      Logger.getLogger(Factory.class.getName()).log(
              Level.FINER, "Authenticator className {0} ", new Object[]{d.authenticator.className});
        Object authObj = Class.forName(d.authenticator.className)
                .getDeclaredConstructor().newInstance();
        if (authObj instanceof Authenticator) {
          auth = (Authenticator) authObj;
          Logger.getLogger(Factory.class.getName()).log(
                  Level.FINER, "Authenticator className {0} created", new Object[]{d.authenticator.className});
          return auth;
        }
      } catch (ClassNotFoundException | NoSuchMethodException | SecurityException
              | InstantiationException | IllegalAccessException | IllegalArgumentException
              | InvocationTargetException ex) {
        // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden?
        Logger.getLogger(Factory.class.getName()).log(
              Level.FINER, "Authenticator className {0} not created, error {1}",
                new Object[]{d.authenticator.className, ex.getLocalizedMessage()});
        return null;
      }
    }
@@ -196,8 +203,8 @@
         */
        ctxAttrs.putAll(cd.attributes);
        ctxAttrs.put("serverDataProviderList", sdp);
        if (h instanceof Handler handler) {
          wire(handler, cd.attributes.get("contextName"));
        if (h instanceof Handler) {
          wire((Handler) h, cd.attributes.get("contextName"));
        }
        if (cd.authenticator instanceof String) {
          if (!(auth instanceof Authenticator)) {
@@ -214,8 +221,8 @@
            //
            Object filterObj = Class.forName(filterClassName)
                    .getDeclaredConstructor().newInstance();
            if (filterObj instanceof Filter filter) {
              ctx.getFilters().add(filter);
            if (filterObj instanceof Filter) {
              ctx.getFilters().add((Filter) filterObj);
            }
          }
        }
@@ -354,6 +361,9 @@
    Iterator<ActorDescriptor> i = actorList.iterator();
    while(i.hasNext()) {
      ActorDescriptor actor = i.next();
      Logger.getLogger(Factory.class.getName()).log(
              Level.FINER, "actorClassName {0} route {1}",
              new Object[]{actor.getActorClassName(), actor.getRoute()});
      h.setActor(actor.getHttpMethod(), actor.getRoute(), actor.getActorClassName());
    }
  }
@@ -381,7 +391,7 @@
      l.serverCreated(server);
    }
  }
  private void fireHandlerCreated(HttpContext ctx, HttpHandler h) {
    for (FactoryListener l : listeners) {
      l.handlerCreated(ctx, h);