This commit is contained in:
redkale
2024-10-11 22:37:07 +08:00
parent bb611413a5
commit a1c4fafa47
5 changed files with 106 additions and 15 deletions

View File

@@ -4057,7 +4057,6 @@ public final class Rest {
}
cw2.visitEnd();
byte[] bytes = cw2.toByteArray();
classLoader.addDynClass((newDynName + "$" + entry.newActionClassName).replace('/', '.'), bytes);
innerClassBytesMap.put((newDynName + "$" + entry.newActionClassName).replace('/', '.'), bytes);
}
} // end for each
@@ -4221,17 +4220,9 @@ public final class Rest {
cw.visitEnd();
byte[] bytes = cw.toByteArray();
classLoader.addDynClass(newDynName.replace('/', '.'), bytes);
try {
Class<?> newClazz = classLoader.loadClass(newDynName.replace('/', '.'));
innerClassBytesMap.forEach((n, bs) -> {
try {
classLoader.loadClass(n, bs);
RedkaleClassLoader.putReflectionClass(n);
} catch (Exception e) {
throw new RestException(e);
}
});
Class<?> newClazz = classLoader.loadClass(newDynName.replace('/', '.'), bytes, innerClassBytesMap);
innerClassBytesMap.forEach((n, bs) -> RedkaleClassLoader.putReflectionClass(n));
RedkaleClassLoader.putReflectionDeclaredConstructors(newClazz, newDynName.replace('/', '.'));
for (java.lang.reflect.Type t : retvalTypes) {
JsonFactory.root().loadEncoder(t);

View File

@@ -504,6 +504,19 @@ public class RedkaleClassLoader extends URLClassLoader {
return clz;
}
public Class loadClass(String name, byte[] bs, Map<String, byte[]> innerClassMap) {
innerClassMap.forEach((k, v) -> {
dynClassBytesMap.put(k, v);
allDynClassBytesMap.put(k, v);
});
Class clz = defineClass(name, bs, 0, bs.length);
dynClassTypeMap.put(name, clz);
dynClassBytesMap.put(name, bs);
allDynClassTypeMap.put(name, clz);
allDynClassBytesMap.put(name, bs);
return clz;
}
@Override
public Class loadClass(String name) throws ClassNotFoundException {
Class clazz = allDynClassTypeMap.get(name);
@@ -532,10 +545,6 @@ public class RedkaleClassLoader extends URLClassLoader {
}
}
public final void addDynClass(String name, byte[] bs) {
dynClassBytesMap.put(name, bs);
}
public void addURI(URI uri) {
try {
super.addURL(uri.toURL());