mxd 3 vuotta sitten
vanhempi
sitoutus
ba0d37e691

+ 0 - 1
magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java

@@ -52,7 +52,6 @@ public class MagicFunctionManager {
 					try {
 						MagicScriptContext functionContext = new MagicScriptContext(context.getRootVariables());
 						functionContext.setScriptName(scriptName);
-						MagicScriptContext.set(functionContext);
 						if (objects != null) {
 							for (int i = 0, len = objects.length, size = parameters.size(); i < len && i < size; i++) {
 								functionContext.set(parameters.get(i).getName(), objects[i]);

+ 0 - 2
magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java

@@ -275,7 +275,6 @@ public class RequestHandler extends MagicController {
 	private Object invokeRequest(RequestEntity requestEntity) throws Throwable {
 		try {
 			MagicScriptContext context = requestEntity.getMagicScriptContext();
-			MagicScriptContext.set(context);
 			Object result = ScriptManager.executeScript(requestEntity.getApiInfo().getScript(), context);
 			Object value = result;
 			// 执行后置拦截器
@@ -288,7 +287,6 @@ public class RequestHandler extends MagicController {
 			return afterCompletion(requestEntity, processException(requestEntity, root), root);
 		} finally {
 			RequestContext.remove();
-			MagicScriptContext.remove();
 		}
 	}
 

+ 2 - 7
magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java

@@ -128,7 +128,6 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant
 						varMap.putAll(variables.getVariables());
 						newContext.setScriptName(groupServiceProvider.getScriptName(info.getId(), info.getName(), info.getPath()));
 						newContext.putMapIntoContext(varMap);
-						MagicScriptContext.set(newContext);
 						try {
 							Object value = ScriptManager.executeScript(info.getScript(), newContext);
 							if (value instanceof ExitValue) {
@@ -153,11 +152,9 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant
 		MagicScriptContext scriptContext = new MagicScriptContext();
 		scriptContext.setScriptName(groupServiceProvider.getScriptName(info.getGroupId(), info.getName(), info.getPath()));
 		scriptContext.putMapIntoContext(context);
-		SimpleScriptContext simpleScriptContext = new SimpleScriptContext();
-		simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE);
 		final Object evalVal;
 		try {
-			evalVal = ((MagicScript) ScriptManager.compile("MagicScript", info.getScript())).eval(simpleScriptContext);
+			evalVal = ScriptManager.executeScript(info.getScript(), scriptContext);
 		} finally {
 			// 恢复原接口上下文,修复当前调完其它接口后原接口上下文丢失的问题
 			MagicScriptContext.set(magicScriptContext);
@@ -199,9 +196,7 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant
 		MagicScriptContext scriptContext = new MagicScriptContext(context);
 		scriptContext.setScriptName(groupServiceProvider.getScriptName(functionInfo.getGroupId(), functionInfo.getName(), functionInfo.getPath()));
 		scriptContext.putMapIntoContext(context);
-		SimpleScriptContext simpleScriptContext = new SimpleScriptContext();
-		simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE);
-		return ((MagicScript) ScriptManager.compile("MagicScript", functionInfo.getScript())).eval(simpleScriptContext);
+		return ScriptManager.executeScript(functionInfo.getScript(), scriptContext);
 	}
 
 	@Override

+ 14 - 2
magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/JSR223LanguageProvider.java

@@ -1,8 +1,10 @@
 package org.ssssssss.magicapi.provider.impl;
 
+import org.ssssssss.magicapi.exception.MagicAPIException;
 import org.ssssssss.magicapi.provider.LanguageProvider;
-import org.ssssssss.magicapi.script.ScriptManager;
 
+import javax.script.Compilable;
+import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.SimpleBindings;
 import java.util.Map;
@@ -23,7 +25,17 @@ public class JSR223LanguageProvider implements LanguageProvider {
 
 	@Override
 	public Object execute(String languageName, String script, Map<String, Object> context) throws Exception {
-		return ScriptManager.compile(languageName, script).eval(new SimpleBindings(context));
+		ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(languageName);
+		if (scriptEngine instanceof Compilable) {
+			Compilable compilable = (Compilable) scriptEngine;
+			try {
+				return compilable.compile(script).eval(new SimpleBindings(context));
+			} catch (Exception e) {
+				throw new MagicAPIException(String.format("编译%s出错", languageName), e);
+			}
+		} else {
+			return scriptEngine.eval(script, new SimpleBindings(context));
+		}
 	}
 
 }