From dc22d24a31755c4f870018c6330a342f2aeda737 Mon Sep 17 00:00:00 2001 From: ulrich Date: Tue, 07 Oct 2025 08:40:38 +0000 Subject: [PATCH] Weitere Log-Ausgaben hinzugefuegt. --- src/de/uhilger/neon/Handler.java | 59 +++++++++++++++++++++++------ src/de/uhilger/neon/Factory.java | 3 + README.md | 4 + 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index dd7fb72..c7dfcbf 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,12 @@ cd $NEON mkdir classes mkdir dist -$JDK/bin/javac -classpath $JLIB/gson-2.8.6.jar -d classes src/de/uhilger/neon/*.java src/de/uhilger/neon/entity/*.java +$JDK/bin/javac -parameters -classpath $JLIB/gson-2.8.6.jar -d classes src/de/uhilger/neon/*.java src/de/uhilger/neon/entity/*.java $JDK/bin/jar -cf dist/neon.jar -C classes . ``` +**Wichtig**: Die Herstellung muss mit der Compiler-Option `-parameters` erfolgen, damit zur Laufzeit die von neon verwendete Reflection API die Namen von Methodenparametern ausgibt. Ohne die Option -parameters erscheinen anstelle von Namen nur `arg1`, `arg2` usw. Hierfuer gibt es im Code von neon zwar einen Workaround, aber besser ist es, mit den im Code deklarierten Parameternamen zu arbeiten. + Die fertig verwendbare Klassenbibliothek liegt anschließend unter `$NEON/dist/neon.jar`. ## Klassenbibliothek verwenden diff --git a/src/de/uhilger/neon/Factory.java b/src/de/uhilger/neon/Factory.java index 8b555ff..800a944 100644 --- a/src/de/uhilger/neon/Factory.java +++ b/src/de/uhilger/neon/Factory.java @@ -354,6 +354,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()); } } diff --git a/src/de/uhilger/neon/Handler.java b/src/de/uhilger/neon/Handler.java index 1af54e5..98ef1d9 100644 --- a/src/de/uhilger/neon/Handler.java +++ b/src/de/uhilger/neon/Handler.java @@ -73,6 +73,8 @@ * ausgefuehrt werden soll */ public void setActor(Type methodType, String route, String className) { + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "type {0} route {1} className {2}", new Object[]{methodType, route, className}); ActionDescriptor ad = new ActionDescriptor(); ad.className = className; ad.routeParams = new HashMap<>(); @@ -85,7 +87,8 @@ .split("/"); for (int i = 0; i < params.length; i++) { ad.routeParams.put(params[i], i); - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "ActionDescriptor param {0} no. {1}", new Object[]{params[i], i}); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "ActionDescriptor param {0} no. {1}", new Object[]{params[i], i}); } ad.route = route.substring(0, pos - 1); } else { @@ -101,7 +104,9 @@ @SuppressWarnings("unchecked") HashMap<String, ActionDescriptor> map = (HashMap) adMapObj; map.put(ad.route, ad); - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "ActionDescriptor route {0} className {1}", new Object[]{route, className}); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "ActionDescriptor route {0} className {1}", new Object[]{route, className}); + //dispatcher.put(methodType, map); } else { Logger.getLogger(Handler.class.getName()).finer("ActionDescriptorMap nicht gefunden"); } @@ -150,7 +155,8 @@ .getPath() .length()); String requestMethodStr = exchange.getRequestMethod(); - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "method {0} route {1}", new Object[]{requestMethodStr, route}); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "method {0} route {1}", new Object[]{requestMethodStr, route}); Type requestMethod = Type.valueOf(requestMethodStr); /* Es wird erst geprueft, ob zu einer bestimmten Route @@ -167,7 +173,8 @@ if (!(o instanceof ActionDescriptor)) { while (!found && (pos > -1)) { String routeRest = route.substring(0, pos); - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "pos {0} routeRest {1}", new Object[]{pos, routeRest}); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "pos {0} routeRest {1}", new Object[]{pos, routeRest}); o = ((Map) md).get(routeRest); if (o instanceof ActionDescriptor) { found = true; @@ -191,24 +198,33 @@ } } else { // keine Actions fuer HTTP Methode - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "Kein Actions fuer HTTP-Methode {0}", requestMethodStr); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "Kein Actions fuer HTTP-Methode {0}", requestMethodStr); } } - private void handleRequest(HttpExchange exchange, Object o, String route, String subroute, Type requestMethod) throws IOException { - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "Handle Request route {0} subroute {1}", new Object[]{route, subroute}); + private void handleRequest(HttpExchange exchange, Object o, String route, String subroute, + Type requestMethod) + throws IOException { + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "Handle Request route {0} subroute {1}", new Object[]{route, subroute}); ActionDescriptor ad = (ActionDescriptor) o; String actorClassName = ad.className; - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "Handle Request actor class name {0}", new Object[]{actorClassName}); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "Handle Request actor class name {0}", new Object[]{actorClassName}); try { - Class actorClass = Class.forName(actorClassName); - Logger.getLogger(Handler.class.getName()).log(Level.FINER, "Handle Request actor class found: {0}", new Object[]{actorClass.getName()}); + //Class actorClass = Class.forName(actorClassName); + Scanner s = new Scanner(o.getClass(), Actor.class); + Class actorClass = s.getCl().loadClass(actorClassName); + Logger.getLogger(Handler.class.getName()).log( + Level.FINER, "Handle Request actor class found: {0}", new Object[]{actorClass.getName()}); Method[] methods = actorClass.getMethods(); for (Method method : methods) { Action action = method.getAnnotation(Action.class); if (action != null) { - if ((action.route().equals("/") || action.route().startsWith(route)) && action.type().equals(requestMethod)) { + if ((action.route().equals("/") || + action.route().startsWith(route)) && action.type().equals(requestMethod)) { Object[] actionArgs = getActionArgs(exchange, method, ad, subroute); @SuppressWarnings("unchecked") Object conObj = actorClass.getDeclaredConstructor(); @@ -266,9 +282,18 @@ if (methodParam.getType().equals(HttpExchange.class)) { actionArgs[k] = exchange; } else { + Logger.getLogger(Handler.class.getName()).finer("method name " + methodParam.getName()); Integer i = ad.routeParams.getOrDefault(methodParam.getName(), -1); + Logger.getLogger(Handler.class.getName()).finer("param no " + i); if (i < 0) { - actionArgs[k] = queryParams.get(methodParam.getName()); + i = getArgNoFromArgStr(methodParam.getName()); + Logger.getLogger(Handler.class.getName()).finer("param no " + i); + if(i < 0) { + actionArgs[k] = queryParams.get(methodParam.getName()); + } else { + actionArgs[k] = routeParams[i]; + Logger.getLogger(Handler.class.getName()).finer("routeParam " + i + ": " + routeParams[i]); + } } else { actionArgs[k] = routeParams[i + 1]; Logger.getLogger(Handler.class.getName()).finer("routeParam " + i+1 + ": " + routeParams[i + 1]); @@ -279,6 +304,16 @@ } return actionArgs; } + + private int getArgNoFromArgStr(String argStr) { + int argNo = -1; + if(argStr.contains("arg")) { + String numStr = argStr.substring("arg".length()); + Logger.getLogger(Handler.class.getName()).finer("numStr " + numStr); + argNo = Integer.parseInt(numStr); + } + return argNo; + } private void addDataProvider(HttpExchange exchange, Object actorObj) { if (actorObj instanceof DataConsumer) { -- Gitblit v1.9.3