Skip to content

Commit 01b06df

Browse files
committed
统一异常添加
1 parent df25c93 commit 01b06df

File tree

5 files changed

+118
-7
lines changed

5 files changed

+118
-7
lines changed

src/main/java/com/karl/debugger/ui/core/DefaultMethodInvoker.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.karl.debugger.ui.model.dto.MethodExecuteInstance;
55
import org.springframework.stereotype.Component;
66

7+
import java.lang.reflect.Method;
8+
79

810
/**
911
* 默认的方法执行
@@ -17,6 +19,8 @@ public class DefaultMethodInvoker implements IMethodInvoker {
1719
public Object invoke(MethodExecuteInstance instance) throws MethodInvokeException {
1820
Object[] args = (instance.getArgs() != null && instance.getArgs().size() > 0) ? instance.getArgs().toArray() : null;
1921
try {
22+
Method method = instance.getMethod();
23+
method.setAccessible(true);
2024
return instance.getMethod().invoke(instance.getInstance(), args);
2125
} catch (Exception e) {
2226
throw new MethodInvokeException(e, instance);

src/main/java/com/karl/debugger/ui/core/IMethodExecuteInstanceBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.karl.debugger.ui.core;
22

33
import com.karl.debugger.ui.core.exception.InstanceException;
4+
import com.karl.debugger.ui.core.exception.MethodInstanceBuilderException;
45
import com.karl.debugger.ui.model.dto.MethodExecuteInstance;
56
import com.karl.debugger.ui.model.dto.MethodExecuteOriginal;
67

@@ -15,7 +16,8 @@ public interface IMethodExecuteInstanceBuilder {
1516
* 根据前端原始对象构建执行实例
1617
* @param original 原始对象
1718
* @return
18-
* @throws ClassNotFoundException
19+
* @throws MethodInstanceBuilderException 方法实例构建时抛出
20+
* @throws InstanceException 获取实例失败时抛出
1921
*/
20-
MethodExecuteInstance build(MethodExecuteOriginal original) throws ClassNotFoundException, InstanceException, NoSuchMethodException;
22+
MethodExecuteInstance build(MethodExecuteOriginal original) throws MethodInstanceBuilderException, InstanceException;
2123
}

src/main/java/com/karl/debugger/ui/core/SpringMethodExecuteInstanceBuilder.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.karl.debugger.ui.core.exception.InstanceException;
5+
import com.karl.debugger.ui.core.exception.MethodInstanceBuilderException;
56
import com.karl.debugger.ui.model.dto.MethodExecuteInstance;
67
import com.karl.debugger.ui.model.dto.MethodExecuteOriginal;
78
import com.karl.debugger.ui.utils.PropertiesUtil;
89
import org.springframework.beans.factory.annotation.Autowired;
910
import org.springframework.stereotype.Component;
10-
import org.springframework.util.Base64Utils;
1111
import org.springframework.util.ClassUtils;
1212
import org.springframework.util.StringUtils;
1313

@@ -30,18 +30,37 @@ public class SpringMethodExecuteInstanceBuilder implements IMethodExecuteInstanc
3030
private SpringApplicationContextInstanceStrategy instanceStrategy;
3131

3232
@Override
33-
public MethodExecuteInstance build(MethodExecuteOriginal original) throws ClassNotFoundException, InstanceException, NoSuchMethodException {
33+
public MethodExecuteInstance build(MethodExecuteOriginal original) throws MethodInstanceBuilderException, InstanceException {
3434
MethodExecuteInstance instance = new MethodExecuteInstance();
3535
//获取类名
36-
Class<?> clazz = ClassUtils.forName(original.getClassName(), null);
36+
Class<?> clazz;
37+
try {
38+
clazz = ClassUtils.forName(original.getClassName(), null);
39+
} catch (ClassNotFoundException e) {
40+
throw new MethodInstanceBuilderException(e, original);
41+
}
3742
//执行实例
3843
instance.setInstance(instanceStrategy.getInstance(clazz));
3944

4045
//参数类型
41-
List<Class<?>> types = getTypes(original.getParamsTypes());
46+
List<Class<?>> types ;
47+
try {
48+
types = getTypes(original.getParamsTypes());
49+
} catch (ClassNotFoundException e) {
50+
throw new MethodInstanceBuilderException(e, original);
51+
}
4252
Class<?>[] typesArr = types != null ? types.toArray(new Class[]{}) : null;
43-
Method method = clazz.getDeclaredMethod(original.getMethodName(), typesArr);
53+
54+
//执行方法
55+
Method method;
56+
try {
57+
//获取自身方法
58+
method = clazz.getDeclaredMethod(original.getMethodName(), typesArr);
59+
} catch (NoSuchMethodException e) {
60+
throw new MethodInstanceBuilderException(e, original);
61+
}
4462
instance.setMethod(method);
63+
4564
try {
4665
instance.setArgs(getParamsInstance(original.getParamsValue(), types));
4766
} catch (IOException e) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.karl.debugger.ui.core.exception;
2+
3+
import com.karl.debugger.ui.model.dto.MethodExecuteOriginal;
4+
5+
/**
6+
* 方法构建实例时出现异常时抛出
7+
*
8+
* @author karl
9+
* @date 2018/8/5
10+
*/
11+
public class MethodInstanceBuilderException extends Exception {
12+
private MethodExecuteOriginal original;
13+
14+
public MethodExecuteOriginal getOriginal() {
15+
return original;
16+
}
17+
18+
public MethodInstanceBuilderException(String message, Throwable cause, MethodExecuteOriginal original) {
19+
super(message, cause);
20+
this.original = original;
21+
}
22+
23+
public MethodInstanceBuilderException(Throwable cause, MethodExecuteOriginal original) {
24+
super(cause);
25+
this.original = original;
26+
}
27+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,69 @@
11
package com.karl.debugger.ui.endpoint;
22

3+
import com.karl.debugger.ui.core.exception.InstanceException;
4+
import com.karl.debugger.ui.core.exception.MethodInstanceBuilderException;
5+
import com.karl.debugger.ui.core.exception.MethodInvokeException;
6+
import com.karl.debugger.ui.model.dto.EndpointResponse;
7+
import org.springframework.web.bind.annotation.ControllerAdvice;
8+
import org.springframework.web.bind.annotation.ExceptionHandler;
9+
10+
import java.io.ByteArrayOutputStream;
11+
import java.io.IOException;
12+
import java.io.PrintStream;
13+
314
/**
415
* 抽象的接口调用,主要负责上层统一异常
516
*
617
* @author karl
718
* @date 2018/8/5
819
*/
20+
@ControllerAdvice
921
public abstract class BaseEndpoint {
22+
/**
23+
* 方法执行异常时调用
24+
*
25+
* @param e
26+
* @return
27+
*/
28+
@ExceptionHandler(MethodInvokeException.class)
29+
public EndpointResponse<?> invokeException(MethodInvokeException e) {
30+
31+
return EndpointResponse.fail("方法执行异常[" + exceptionToString(e) + "]" ,
32+
e.getInstance().getArgs());
33+
34+
}
35+
36+
@ExceptionHandler(MethodInstanceBuilderException.class)
37+
public EndpointResponse<?> methodInstanceBuilderException(MethodInstanceBuilderException e) {
38+
return EndpointResponse.fail("构建方法实例异常[" + exceptionToString(e) + "]");
39+
}
40+
41+
@ExceptionHandler(InstanceException.class)
42+
public EndpointResponse<?> instanceException(InstanceException e) {
43+
return EndpointResponse.fail("构建执行实例异常-[" + exceptionToString(e) + "]");
44+
}
45+
46+
@ExceptionHandler(IOException.class)
47+
public EndpointResponse<?> ioException(IOException e) {
48+
e.printStackTrace();
49+
return EndpointResponse.fail(500, "出现io异常-[" + exceptionToString(e) + "]");
50+
}
51+
52+
@ExceptionHandler(Throwable.class)
53+
public EndpointResponse<?> ioException(Throwable e) {
54+
e.printStackTrace();
55+
return EndpointResponse.fail(500, "系统异常[" + exceptionToString(e) + "]");
56+
}
57+
58+
/**
59+
* 把错误信息转成字符串
60+
* @param throwable
61+
* @return
62+
*/
63+
private String exceptionToString(Throwable throwable) {
64+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
65+
outputStream.toByteArray();
66+
throwable.printStackTrace(new PrintStream(outputStream));
67+
return new String(outputStream.toByteArray());
68+
}
1069
}

0 commit comments

Comments
 (0)