Ultrakompakter HTTP Server
ulrich
2024-12-01 40f0b0d27ec38c97fadb4c64dba6855c6ee2e904
src/de/uhilger/neon/Scanner.java
@@ -50,8 +50,12 @@
  private final ClassLoader urlCL;
  /**
   * Einen Scanner erzeugen, der das Archiv, in dem sich eine gegebene Klasse befindet, nach Klassen
   * Einen Scanner erzeugen, der den Ort,
   * in dem sich eine gegebene Klasse befindet, nach Klassen
   * durchsucht, die eine bestimmte Annotation besitzen
   *
   * Der Ort fur Klassen kann ein Java-Archiv (.jar) oder ein Ordner
   * im Dateisystem sein.
   *
   * @param c eine Klasse die sich im Archiv befindet, das durchsucht werden soll
   * @param annotation die Annotation, nach der gesucht wird
@@ -67,6 +71,20 @@
    return annotation;
  }
  /**
   * Klassen suchen, die die dem Konstruktor gegebene Annotation besitzen.
   *
   * Anhand der im Konstruktor uebergebenen Klasse wird deren Ablageort ermittelt, entweder
   * ein Ordner im Dateisystem oder ein Java-Archiv (.jar). Dieser Ablageort wird dann
   * nach annotierten Klassen durchsucht. Gefundene Klassen werden dem Listener gemeldet.
   *
   * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen
   * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft
   * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde
   * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll
   * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen
   */
  public void process(ScannerListener l, String packageName, Handler h, String contextName) {
    if (isJar()) {
      processZipContent(packageName, l, h, contextName);
@@ -85,7 +103,7 @@
   * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll
   * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen
   */
  public void processZipContent(String packageName, ScannerListener l, Handler h, String contextName) {
  private void processZipContent(String packageName, ScannerListener l, Handler h, String contextName) {
    try {
      ZipFile zipfile = new ZipFile(new File(path));
      Enumeration en = zipfile.entries();
@@ -135,8 +153,17 @@
    }
  }
  /**
   * Einen Ordner mit Klassen durchsuchen
   *
   * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen
   * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft
   * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde
   * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll
   * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen
   */
  @SuppressWarnings("unchecked")
  public void processClasses(ScannerListener l, String packageName, Handler h, String contextName) {
  private 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));