Эх сурвалжийг харах

异常信息改为`WebSocket`通讯,解决部分场景无法查看异常信息的问题。

mxd 3 жил өмнө
parent
commit
b62d499371

+ 2 - 0
magic-api/src/main/java/org/ssssssss/magicapi/config/MessageType.java

@@ -9,6 +9,8 @@ public enum MessageType {
 	LOG,
 	/* 进入断点 */
 	BREAKPOINT,
+	/* 请求接口发生异常 */
+	EXCEPTION,
 
 	/* C -> S message */
 	/* 设置断点 */

+ 9 - 10
magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java

@@ -1,6 +1,5 @@
 package org.ssssssss.magicapi.controller;
 
-import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,18 +36,16 @@ import org.ssssssss.script.exception.MagicScriptException;
 import org.ssssssss.script.functions.ObjectConvertExtension;
 import org.ssssssss.script.parsing.Span;
 import org.ssssssss.script.parsing.ast.literal.BooleanLiteral;
-import org.ssssssss.script.reflection.JavaInvoker;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static org.springframework.http.HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS;
 import static org.ssssssss.magicapi.config.MessageType.BREAKPOINT;
+import static org.ssssssss.magicapi.config.MessageType.EXCEPTION;
 import static org.ssssssss.magicapi.model.Constants.*;
 
 public class RequestHandler extends MagicController {
@@ -291,16 +288,18 @@ public class RequestHandler extends MagicController {
 				se = (MagicScriptException) parent;
 			}
 		} while ((parent = parent.getCause()) != null);
+		if(se != null && requestEntity.isRequestedFromTest()){
+			Span.Line line = se.getLine();
+			WebSocketSessionManager.sendBySessionId(requestEntity.getRequestedSessionId(), EXCEPTION, Arrays.asList(
+					requestEntity.getRequestedSessionId(),
+					se.getSimpleMessage(),
+					line == null ? null : Arrays.asList(line.getLineNumber(), line.getEndLineNumber(), line.getStartCol(), line.getEndCol())
+			));
+		}
 		if (configuration.isThrowException()) {
 			throw root;
 		}
 		logger.error("接口{}请求出错", requestEntity.getRequest().getRequestURI(), root);
-		if (se != null && requestEntity.isRequestedFromTest()) {
-			Span.Line line = se.getLine();
-			requestEntity.getResponse().setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, HEADER_RESPONSE_WITH_MAGIC_API);
-			requestEntity.getResponse().setHeader(HEADER_RESPONSE_WITH_MAGIC_API, CONST_STRING_TRUE);
-			return new JsonBodyBean<>(-1000, se.getSimpleMessage(), resultProvider.buildException(requestEntity, se), line == null ? null : Arrays.asList(line.getLineNumber(), line.getEndLineNumber(), line.getStartCol(), line.getEndCol()));
-		}
 		return resultProvider.buildException(requestEntity, root);
 	}
 

+ 0 - 2
magic-api/src/main/java/org/ssssssss/magicapi/model/Constants.java

@@ -99,8 +99,6 @@ public class Constants {
 
 	public static final String HEADER_REQUEST_BREAKPOINTS = "Magic-Request-Breakpoints";
 
-	public static final String HEADER_RESPONSE_WITH_MAGIC_API = "Response-With-Magic-API";
-
 	public static final String ATTRIBUTE_MAGIC_USER = "MAGIC_API_ATTRIBUTE_USER";
 
 	public static final String MAGIC_TOKEN_HEADER = "Magic-Token";

+ 23 - 26
magic-editor/src/console/src/components/editor/magic-script-editor.vue

@@ -193,6 +193,7 @@ export default {
     })
     bus.$on('ws_log', rows => this.onLogReceived(rows[0]))
     bus.$on('ws_breakpoint', rows => this.onBreakpoint(rows[0]))
+    bus.$on('ws_exception', args => this.onException(args[0]))
     let javaTypes = {
       'String': 'java.lang.String',
       'Integer': 'java.lang.Integer',
@@ -236,6 +237,28 @@ export default {
         }
       }
     },
+    onException(args){
+      if (this.info?.ext?.sessionId === args[0]) {
+        let line = args[2]
+        let range = new monaco.Range(line[0], line[2], line[1], line[3] + 1)
+        let decorations = this.editor.deltaDecorations(
+            [],
+            [{
+              range,
+              options: {
+                hoverMessage: {
+                  value: args[1]
+                },
+                inlineClassName: 'squiggly-error'
+              }
+            }])
+        this.editor.revealRangeInCenter(range)
+        this.editor.focus()
+        if (contants.DECORATION_TIMEOUT >= 0) {
+          setTimeout(() => this.editor.deltaDecorations(decorations, []), contants.DECORATION_TIMEOUT)
+        }
+      }
+    },
     onBreakpoint(data){
       bus.$emit('status', '进入断点...')
       // 进入断点
@@ -650,32 +673,6 @@ export default {
               target.ext.debugDecorations = target.ext.debugDecoration = null
               if (!(data instanceof Blob)) {
                 target.ext.debuging = target.running = false
-                if (data.body && res.headers[contants.HEADER_RESPONSE_WITH_MAGIC_API] === 'true') {
-                  let line = data.body
-                  if (this.info.id === target.id) {
-                    let range = new monaco.Range(line[0], line[2], line[1], line[3] + 1)
-                    let decorations = this.editor.deltaDecorations(
-                        [],
-                        [
-                          {
-                            range,
-                            options: {
-                              hoverMessage: {
-                                value: data.message
-                              },
-                              inlineClassName: 'squiggly-error'
-                            }
-                          }
-                        ]
-                    )
-                    this.editor.revealRangeInCenter(range)
-                    this.editor.focus()
-                    if(contants.DECORATION_TIMEOUT >= 0){
-                      setTimeout(() => this.editor.deltaDecorations(decorations, []), contants.DECORATION_TIMEOUT)
-                    }
-                  }
-                  data = data.data;
-                }
                 target.responseBody = utils.formatJson(data)
                 bus.$emit('switch-tab', 'result')
                 bus.$emit('update-response-body-definition', target.responseBodyDefinition);

+ 0 - 3
magic-editor/src/console/src/scripts/contants.js

@@ -12,9 +12,6 @@ const contants = {
   MAGIC_API_VERSION,
   HEADER_REQUEST_SESSION: 'Magic-Request-Session',
   HEADER_REQUEST_BREAKPOINTS: 'Magic-Request-Breakpoints',
-  HEADER_REQUEST_CONTINUE: 'Magic-Request-Continue',
-  HEADER_REQUEST_STEP_INTO: 'Magic-Request-Step-Into',
-  HEADER_RESPONSE_WITH_MAGIC_API: 'response-with-magic-api',
   HEADER_RESPONSE_MAGIC_CONTENT_TYPE: 'ma-content-type',
   HEADER_APPLICATION_STREAM: 'application/octet-stream',
   HEADER_CONTENT_DISPOSITION: 'ma-content-disposition',