Ultrakompakter HTTP Server
ulrich
6 days ago 31ff37baa3f5562ef959ec91aa3ea60b7c89f2fe
src/de/uhilger/neon/Factory.java
@@ -17,6 +17,7 @@
 */
package de.uhilger.neon;
import de.uhilger.neon.entity.ActorDescriptor;
import com.google.gson.Gson;
import com.sun.net.httpserver.Authenticator;
import com.sun.net.httpserver.Filter;
@@ -48,6 +49,7 @@
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
@@ -67,7 +69,7 @@
 */
public class Factory implements ScannerListener {
  
  private Map<String, List<TempActor>> actorMap;
  private Map<String, List<ActorDescriptor>> actorMap;
  public Factory() {
    listeners = new ArrayList<>();
@@ -156,19 +158,29 @@
  }
  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;
      }
    }
@@ -194,8 +206,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)) {
@@ -212,8 +224,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);
            }
          }
        }
@@ -348,10 +360,13 @@
   * @param contextName Name des Kontext, dem der Handler zugeordnet ist
   */
  private void wire(Handler h, String contextName) {
    List<TempActor> actorList = actorMap.get(contextName);
    Iterator<TempActor> i = actorList.iterator();
    List<ActorDescriptor> actorList = actorMap.get(contextName);
    Iterator<ActorDescriptor> i = actorList.iterator();
    while(i.hasNext()) {
      TempActor actor = i.next();
      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());
    }
  }
@@ -413,13 +428,13 @@
      if (action != null) {
        List<String> actionHandlers = Arrays.asList(action.handler());
        for (String contextName : actionHandlers) {
           TempActor tempActor = new TempActor();
           ActorDescriptor tempActor = new ActorDescriptor();
           tempActor.setContextName(contextName);
           tempActor.setHttpMethod(action.type());
           tempActor.setRoute(action.route());
           tempActor.setActorClassName(foundClass.getName());
           
           List<TempActor> actorList = actorMap.get(contextName);
           List<ActorDescriptor> actorList = actorMap.get(contextName);
           if(actorList == null) {
             actorList = new ArrayList<>();
           }