diff --git a/admin/admin-biz/pom.xml b/admin/admin-biz/pom.xml
index cd917e2d0dd7825072cc86ac65a1d348bf0a86bf..b347226dc64913f33674a877dd507081af6c4529 100644
--- a/admin/admin-biz/pom.xml
+++ b/admin/admin-biz/pom.xml
@@ -40,6 +40,11 @@
org.mapstruct
mapstruct
+
+ cn.icanci.loopstack.amc
+ amc-spi
+ ${parent.version}
+
diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/model/AppMockDebugResult.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/model/AppMockDebugResult.java
index 18540a0e6a2807e82143e9d49d2e689e73975f7c..fd595240247403a39fc045b38a3d348de2244aab 100644
--- a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/model/AppMockDebugResult.java
+++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/model/AppMockDebugResult.java
@@ -25,6 +25,32 @@ public class AppMockDebugResult implements Serializable {
*/
private String exceptionMessage;
+ public AppMockDebugResult() {
+ }
+
+ public AppMockDebugResult(boolean success, String scriptType, Object realResult, String exceptionMessage) {
+ this.success = success;
+ this.scriptType = scriptType;
+ this.realResult = realResult;
+ this.exceptionMessage = exceptionMessage;
+ }
+
+ public static AppMockDebugResult fail(String scriptType, String localizedMessage) {
+ AppMockDebugResult result = new AppMockDebugResult();
+ result.setSuccess(false);
+ result.setScriptType(scriptType);
+ result.setExceptionMessage(localizedMessage);
+ return result;
+ }
+
+ public static AppMockDebugResult success(String scriptType, Object realResult) {
+ AppMockDebugResult result = new AppMockDebugResult();
+ result.setSuccess(true);
+ result.setScriptType(scriptType);
+ result.setRealResult(realResult);
+ return result;
+ }
+
public boolean isSuccess() {
return success;
}
diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallServiceImpl.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallServiceImpl.java
index 4475cb04ebdf61bcfc537ba649359f1244f3ba63..28be2c26c080cbb1035e9afc3e3c73fc20f32754 100644
--- a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallServiceImpl.java
+++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallServiceImpl.java
@@ -16,8 +16,10 @@ import cn.icanci.loopstack.amc.common.model.PageList;
import cn.icanci.loopstack.amc.common.model.TextValue;
import cn.icanci.loopstack.amc.common.model.config.AppMockCallVO;
import cn.icanci.loopstack.amc.common.result.R;
+import cn.icanci.loopstack.amc.spi.mock.MockCallStandardHandler;
import cn.icanci.loopstack.api.client.Client;
import cn.icanci.loopstack.script.LsiScriptEngine;
+import cn.icanci.loopstack.script.compile.GroovyClassLoaderHolder;
import cn.icanci.loopstack.script.context.LsiScriptEngineContext;
import cn.icanci.loopstack.script.enums.ScriptTypeEnum;
@@ -103,8 +105,45 @@ public class AppMockCallServiceImpl extends BaseService implement
@Override
public AppMockDebugResult debug(AppMockCallVO appMock, String scriptContentTest) {
ScriptTypeEnum scriptType = appMock.getScriptType();
+ String script = appMock.getScript();
+ // mvel2.0 脚本
+ if (scriptType == ScriptTypeEnum.MVEL2) {
+ return noneHandlerMockDebugResult(scriptContentTest, scriptType, script);
+ }
+
+ // groovy脚本
+ if (scriptType == ScriptTypeEnum.GROOVY) {
+ try {
+ Class> compile = GroovyClassLoaderHolder.compile(script);
+ Object instance = compile.newInstance();
+ if (instance instanceof MockCallStandardHandler) {
+ MockCallStandardHandler handler = (MockCallStandardHandler) instance;
+ // 全限定类名重复的处理。此处无需处理,
+ // 经过 GroovyClassLoaderHolder.compile 的class对象是不重复的,即使代码是完全一样的
+ Object execute = handler.execute(scriptContentTest);
+ return AppMockDebugResult.success(scriptType.getDesc(), execute);
+ }
+ } catch (Exception e) {
+ logger.info("[AppMockCallService][debug] error msg:{}", e.getLocalizedMessage());
+ return AppMockDebugResult.fail(scriptType.getDesc(), e.getLocalizedMessage());
+ }
+ return noneHandlerMockDebugResult(scriptContentTest, scriptType, script);
+ }
+
+ throw new IllegalArgumentException("Not Support ScriptType: " + scriptType);
+ }
+
+ /**
+ * 非标准化处理器执行流程
+ *
+ * @param scriptContentTest scriptContentTest
+ * @param scriptType scriptType
+ * @param script script
+ * @return script
+ */
+ private AppMockDebugResult noneHandlerMockDebugResult(String scriptContentTest, ScriptTypeEnum scriptType, String script) {
Bindings bindings = JSONUtil.toBean(scriptContentTest, SimpleBindings.class);
- LsiScriptEngineContext