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