| | |
| | | IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException { |
| | | this.runInstance(c, d, packageNames, new ArrayList<>()); |
| | | } |
| | | |
| | | /** |
| | | * Einen Neon-Server gemaess einem Serverbeschreibungsobjekt herstellen und starten |
| | | * |
| | |
| | | auth = (Authenticator) authObj; |
| | | return auth; |
| | | } |
| | | } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | |
| | | InstantiationException | IllegalAccessException | IllegalArgumentException | |
| | | InvocationTargetException ex) { |
| | | } catch (ClassNotFoundException | NoSuchMethodException | SecurityException |
| | | | InstantiationException | IllegalAccessException | IllegalArgumentException |
| | | | InvocationTargetException ex) { |
| | | // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden? |
| | | return null; |
| | | } |
| | |
| | | // kein HttpHandler aus newInstance |
| | | return null; |
| | | } |
| | | } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | |
| | | InstantiationException | IllegalAccessException | IllegalArgumentException | |
| | | InvocationTargetException ex) { |
| | | } catch (ClassNotFoundException | NoSuchMethodException | SecurityException |
| | | | InstantiationException | IllegalAccessException | IllegalArgumentException |
| | | | InvocationTargetException ex) { |
| | | // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden? |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | private void wireActors(Class c, String packageName, Class annotation, Handler h, String contextName) { |
| | | JarScanner js = new JarScanner(); |
| | | URI path; |
| | | try { |
| | | path = js.getPath(c); |
| | | if(path.toString().endsWith(".class")) { |
| | | JarScanner js = new JarScanner(c, annotation); |
| | | if (!js.isJar()) { |
| | | ClassLoader cl = c.getClassLoader(); |
| | | InputStream stream = cl |
| | | .getResourceAsStream(packageName.replaceAll("[.]", "/")); |
| | |
| | | } |
| | | } |
| | | } else { |
| | | ClassLoader cl = js.getUrlClassLoader(c); |
| | | js.processZipContent(cl, new File(path), packageName, this, h, contextName); |
| | | } |
| | | //listClasses(c, packageName); |
| | | } catch (URISyntaxException ex) { |
| | | Logger.getLogger(Factory.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); |
| | | js.processZipContent(packageName, this, h, contextName); |
| | | } |
| | | } |
| | | |
| | |
| | | * Diese Testmethode zeigt, dass die Methode getResourceAsStream nicht funktioniert wie |
| | | * dokumentiert. |
| | | * |
| | | * 1. Sie liefert den Inhalt einer gegebenen Package mitsamt Unterpackages als |
| | | * Stream, wenn sie auf eine Packagestruktur angewendet wird, die unverpackt in einem |
| | | * Verzeichnis des Dateisystems liegt. |
| | | * 1. Sie liefert den Inhalt einer gegebenen Package mitsamt Unterpackages als Stream, wenn sie |
| | | * auf eine Packagestruktur angewendet wird, die unverpackt in einem Verzeichnis des Dateisystems |
| | | * liegt. |
| | | * |
| | | * 2. Sie liefert - faelschlicherweise - null bzw. einen leeren Stream, wenn die Packagestruktur |
| | | * in einem Jar verpackt ist. |
| | | * |
| | | * Saemtliche Versuche, ueber den ClassPath oder die Pfadangabe der Package das Verhalten zu |
| | | * aendern, gehen bislang fehl (z.B. / oder . als Separator, |
| | | * / oder . zu Beginn enthalten oder nicht, realative oder absolute packagepfadangabe). |
| | | * Es ist auch unerheblich, ob |
| | | * aendern, gehen bislang fehl (z.B. / oder . als Separator, / oder . zu Beginn enthalten oder |
| | | * nicht, realative oder absolute packagepfadangabe). Es ist auch unerheblich, ob |
| | | * Class.getResourceAsStream oder Class.getClassLoader().getResourceAsStream verwendet wird. |
| | | * |
| | | * Unabhaengig davon, ob und wie letztlich im Fall 2. oben die Methode getResourceAsStream |
| | | * dazu zu bringen waere, eine Inhaltsliste fuer eine Package zu liefern ist allein die |
| | | * Tatsache, dass sich die Methode unterschiedlich verhaelt bereits ein |
| | | * schwerer Bug. |
| | | * Unabhaengig davon, ob und wie letztlich im Fall 2. oben die Methode getResourceAsStream dazu zu |
| | | * bringen waere, eine Inhaltsliste fuer eine Package zu liefern ist allein die Tatsache, dass |
| | | * sich die Methode unterschiedlich verhaelt bereits ein schwerer Bug. |
| | | * |
| | | * @param c |
| | | * @param packageName |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /* |
| | | Eine Action-Annotation enthaelt gewoehnlich die Route, |
| | | die 'unterhalb' des Kontextpfades als 'Ausloeser' zur |
| | |
| | | Wenn die Action fuer alle Routen 'unterhalb' des |
| | | Kontextpfades ausgefuehrt werden soll, muss die Action |
| | | als Route '/' angeben. |
| | | */ |
| | | /** |
| | | * |
| | | * @param h Handler, dem der Actor hinzugefuegt wird, falls der Kontext uebereinstimmt |
| | | * @param c hinzuzufuegende Actor-Klasse |
| | | * @param contextName Name des Kontext, dem der Actor hinzugefuegt wird |
| | | */ |
| | | private void wire(Handler h, Class c, String contextName) { |
| | | Method[] methods = c.getMethods(); |
| | |
| | | } |
| | | |
| | | /* -------------- FactoryListener Implementierung --------------- */ |
| | | |
| | | private List<FactoryListener> listeners; |
| | | |
| | | public void addListener(FactoryListener l) { |
| | |
| | | } |
| | | |
| | | /* -------------- JarScannerListener Implementierung --------------- */ |
| | | |
| | | @Override |
| | | public void actorFound(Class actorClass, Handler h, String contextName) { |
| | | wire(h, actorClass, contextName); |
| | | public void annotationFound(Class foundClass, Handler h, String contextName) { |
| | | wire(h, foundClass, contextName); |
| | | } |
| | | } |