Ultrakompakter HTTP Server
ulrich
2024-12-01 1f6776f237cb98c1222ee9dd2f75220de0d02c34
wireActors zugunsten von Scanner aufgeloest
2 files modified
74 ■■■■ changed files
src/de/uhilger/neon/Factory.java 13 ●●●●● patch | view | raw | blame | history
src/de/uhilger/neon/Scanner.java 61 ●●●●● patch | view | raw | blame | history
src/de/uhilger/neon/Factory.java
@@ -187,9 +187,7 @@
        ctxAttrs.putAll(cd.attributes);
        if (h instanceof Handler) {
          for (String packageName : packageNames) {
            wireActors(scn,
                    packageName, (Handler) h,
                    cd.attributes.get("contextName"));
            scn.process(this, packageName, (Handler) h, cd.attributes.get("contextName"));
            ctx.getAttributes().put("serverDataProviderList", sdp);
          }
        }
@@ -262,15 +260,6 @@
            | InvocationTargetException ex) {
      // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden?
      return null;
    }
  }
  @SuppressWarnings("unchecked")
  private void wireActors(Scanner scn, String packageName, /*Class annotation, */Handler h, String contextName) {
    if (!scn.isJar()) {
      scn.processClasses(this, packageName, h, contextName);
    } else {
      scn.processZipContent(packageName, this, h, contextName);
    }
  }
src/de/uhilger/neon/Scanner.java
@@ -35,8 +35,8 @@
import java.util.zip.ZipFile;
/**
 * Die Klasse Scanner enthaelt Methoden, um fuer eine Klasse zu bestimmen, in welcher JAR-Datei
 * sie liegt und diese JAR-Datei nach Klassen zu durchsuchen.
 * Die Klasse Scanner enthaelt Methoden, um fuer eine Klasse zu bestimmen, in welcher JAR-Datei sie
 * liegt und diese JAR-Datei nach Klassen zu durchsuchen.
 *
 * @author Ulrich Hilger
 * @version 0.1, 30.11.2024
@@ -50,8 +50,8 @@
  private final ClassLoader urlCL;
  /**
   * Einen Scanner erzeugen, der das Archiv, in dem sich eine gegebene Klasse befindet, nach
   * Klassen durchsucht, die eine bestimmte Annotation besitzen
   * Einen Scanner erzeugen, der das Archiv, in dem sich eine gegebene Klasse befindet, nach Klassen
   * durchsucht, die eine bestimmte Annotation besitzen
   *
   * @param c eine Klasse die sich im Archiv befindet, das durchsucht werden soll
   * @param annotation die Annotation, nach der gesucht wird
@@ -65,6 +65,14 @@
  public Class getAnnotation() {
    return annotation;
  }
  public void process(ScannerListener l, String packageName, Handler h, String contextName) {
    if (isJar()) {
      processZipContent(packageName, l, h, contextName);
    } else {
      processClasses(l, packageName, h, contextName);
    }
  }
  /**
@@ -127,31 +135,32 @@
    }
  }
  @SuppressWarnings("unchecked")
  public void processClasses(ScannerListener l, String packageName, Handler h, String contextName) {
      ClassLoader cl = getCl();
      InputStream stream = cl.getResourceAsStream(packageName.replaceAll("[.]", "/"));
      BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
      Iterator i = reader.lines().iterator();
      while (i.hasNext()) {
        String line = i.next().toString();
        if (line.endsWith(".class")) {
          try {
            Class actorClass = cl.loadClass(packageName + "."
                    + line.substring(0, line.lastIndexOf('.')));
            if (actorClass != null && actorClass.isAnnotationPresent(getAnnotation())) {
              //wire(h, actorClass, contextName);
              l.annotationFound(actorClass, h, contextName);
            }
          } catch (ClassNotFoundException ex) {
            // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden?
    ClassLoader cl = getCl();
    InputStream stream = cl.getResourceAsStream(packageName.replaceAll("[.]", "/"));
    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
    Iterator i = reader.lines().iterator();
    while (i.hasNext()) {
      String line = i.next().toString();
      if (line.endsWith(".class")) {
        try {
          Class actorClass = cl.loadClass(packageName + "."
                  + line.substring(0, line.lastIndexOf('.')));
          if (actorClass != null && actorClass.isAnnotationPresent(getAnnotation())) {
            //wire(h, actorClass, contextName);
            l.annotationFound(actorClass, h, contextName);
          }
        } else {
          //wireActors(js, packageName + "." + line, h, contextName);
          processClasses(l, packageName + "." + line, h, contextName);
        } catch (ClassNotFoundException ex) {
          // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden?
        }
      } else {
        //wireActors(js, packageName + "." + line, h, contextName);
        processClasses(l, packageName + "." + line, h, contextName);
      }
    }
  }
  private String getPackageName(String fullClassName) {
    String packageName;
    int pos = fullClassName.lastIndexOf(".");
@@ -227,8 +236,6 @@
  }
  public interface ScannerListener {
    public void annotationFound(Class foundClass, Handler h, String contextName);
  }
}
}