From 56074aea9c93611be043c7a93e879dddc341aa7d Mon Sep 17 00:00:00 2001 From: yaoxin <1752800946@qq.com> Date: Thu, 2 May 2024 20:45:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=BC=95=E6=93=8E=E4=BF=AE=E6=94=B9=E8=A7=84=E5=88=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=8E,=E5=86=8D=E6=AC=A1=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96,=E6=B5=8B=E8=AF=95=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClassLoading/CustomClassLoader.java | 42 ++----------------- .../impl/EngineMaintenanceServiceImpl.java | 36 +++++++++++++--- 2 files changed, 33 insertions(+), 45 deletions(-) diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java index f55d914..016cbb4 100644 --- a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java @@ -11,44 +11,8 @@ import java.net.URLClassLoader; * @Author Xin.Yao * @Date 2024/5/1 19:37 */ -public class CustomClassLoader extends URLClassLoader { - public CustomClassLoader(ClassLoader parent, String classPath) throws MalformedURLException { - super(new URL[]{new URL("file:" + classPath)},parent); - } - - @Override - protected Class findClass(String name) throws ClassNotFoundException { - try { - byte[] classBytes = loadClassData(name); - return defineClass(name, classBytes, 0, classBytes.length); - } catch (IOException e) { - throw new ClassNotFoundException(name, e); - } - } - - private byte[] loadClassData(String className) throws IOException { - String fileName = className.replace('.', File.separatorChar) + ".class"; - File classFile = new File(getPathForResource(fileName)); - if (!classFile.exists()) { - throw new FileNotFoundException("Class file not found: " + classFile.getAbsolutePath()); - } - - try (InputStream in = new FileInputStream(classFile)) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buffer = new byte[4096]; - int n; - while ((n = in.read(buffer)) != -1) { - out.write(buffer, 0, n); - } - return out.toByteArray(); - } - } - - private String getPathForResource(String resource) { - URL url = super.getResource(resource); - if (url == null) { - throw new IllegalArgumentException("Resource not found: " + resource); - } - return url.getPath(); +public class CustomClassLoader extends ClassLoader { + public Class defineClassFromBytes(String name, byte[] data) { + return defineClass(name, data, 0, data.length); } } diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java index 89abd5b..42a7460 100644 --- a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java @@ -3,6 +3,8 @@ package com.muyu.rule.engine.service.impl; import java.io.File; import java.io.FileWriter; import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -167,13 +169,13 @@ public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService @Override public Result testMethod(String code) { - String className = "Rule"+Character.toUpperCase(code.charAt(0)) + code.substring(1)+"Class"; - String classPath = "D:\\work\\ruoyi-cloud-server\\muyu-modules\\muyu-rule-engine\\target\\classes\\"; + String className = "com.muyu.rule.engine.domain.Rule"+Character.toUpperCase(code.charAt(0)) + code.substring(1)+"Class"; + String classPath = "D:\\work\\ruoyi-cloud-server\\muyu-modules\\muyu-rule-engine\\target\\classes\\"+className.replace(".", "\\")+".class"; try { - // 使用CustomClassLoader加载class到内存 - CustomClassLoader customClassLoader = new CustomClassLoader(ClassLoader.getSystemClassLoader(), classPath); - // 加载类 - Class aClass = customClassLoader.loadClass("com.muyu.rule.engine.domain."+className); + // 读取类文件 + byte[] classData = Files.readAllBytes(Paths.get(classPath)); + CustomClassLoader customClassLoader = new CustomClassLoader(); + Class aClass = customClassLoader.defineClassFromBytes(className,classData); // 实例化类 Object obj = aClass.newInstance(); //获取类中所有方法 @@ -189,4 +191,26 @@ public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService return Result.success("测试成功"); } + + public String getTypeCodeText(EngineMaintenance engineMaintenance) { + String className =Character.toUpperCase(engineMaintenance.getCode().charAt(0)) + engineMaintenance.getCode().substring(1); + switch (engineMaintenance.getType()) { + case "data-set": + className = className+"DataSetContext"; + return "package com.muyu.rule.engine.domain;\n" + + "\n" + + "public class "+className+" {\n" + + "\n" + + " private final RecordContext recordContext;\n" + + "\n" + + " public DataSetContext (RecordContext recordContext) {\n" + + " this.recordContext = recordContext;\n" + + " }\n" + + "}\n"; + case "data-record": + return "记录"; + default: + return "数据字段"; + } + } }