|
@@ -6,8 +6,12 @@ import org.ssssssss.magicapi.model.ApiInfo;
|
|
|
import org.ssssssss.magicapi.provider.MagicAPIService;
|
|
|
import org.ssssssss.magicapi.provider.ResultProvider;
|
|
|
import org.ssssssss.magicapi.script.ScriptManager;
|
|
|
+import org.ssssssss.script.MagicResourceLoader;
|
|
|
import org.ssssssss.script.MagicScript;
|
|
|
import org.ssssssss.script.MagicScriptContext;
|
|
|
+import org.ssssssss.script.parsing.Scope;
|
|
|
+import org.ssssssss.script.parsing.Span;
|
|
|
+import org.ssssssss.script.parsing.ast.Expression;
|
|
|
|
|
|
import javax.script.ScriptContext;
|
|
|
import javax.script.SimpleScriptContext;
|
|
@@ -25,6 +29,31 @@ public class DefaultMagicAPIService implements MagicAPIService {
|
|
|
this.mappingHandlerMapping = mappingHandlerMapping;
|
|
|
this.resultProvider = resultProvider;
|
|
|
this.throwException = throwException;
|
|
|
+ MagicResourceLoader.addFunctionLoader((name) -> {
|
|
|
+ int index = name.indexOf(":");
|
|
|
+ if (index > -1) {
|
|
|
+ String method = name.substring(0, index);
|
|
|
+ String path = name.substring(index + 1);
|
|
|
+ ApiInfo info = this.mappingHandlerMapping.getApiInfo(method, path);
|
|
|
+ if (info != null) {
|
|
|
+ return new Expression(new Span("unknown source")) {
|
|
|
+ @Override
|
|
|
+ public Object evaluate(MagicScriptContext context, Scope scope) {
|
|
|
+ return execute(info, scope.getVariables());
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private Object execute(ApiInfo info, Map<String, Object> context) {
|
|
|
+ MagicScriptContext scriptContext = new MagicScriptContext();
|
|
|
+ scriptContext.putMapIntoContext(context);
|
|
|
+ SimpleScriptContext simpleScriptContext = new SimpleScriptContext();
|
|
|
+ simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE);
|
|
|
+ return ScriptManager.compile("MagicScript", info.getScript()).eval(simpleScriptContext);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -33,11 +62,7 @@ public class DefaultMagicAPIService implements MagicAPIService {
|
|
|
if (info == null) {
|
|
|
throw new MagicServiceException(String.format("找不到对应接口 [%s:%s]", method, path));
|
|
|
}
|
|
|
- MagicScriptContext scriptContext = new MagicScriptContext();
|
|
|
- scriptContext.putMapIntoContext(context);
|
|
|
- SimpleScriptContext simpleScriptContext = new SimpleScriptContext();
|
|
|
- simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE);
|
|
|
- return ScriptManager.compile("MagicScript", info.getScript()).eval(simpleScriptContext);
|
|
|
+ return execute(info, context);
|
|
|
}
|
|
|
|
|
|
@Override
|