\r\nX-CRLF-Safe-a2f4fab0d269b89f2767a1d2ecaabb07: no.md
... ...
@@ -0,0 +1,274 @@
1
+### checked exception 和 unchecked exception
2
+
3
+- checked exception:编译器检查的异常,必须处理
4
+- unchecked exception:运行时异常,编译器不检查的异常
5
+
6
+摒弃checked exception, 全部使用unchecked exception, 使用 RuntimeException 作为所有运行时异常的父类,
7
+
8
+引擎使用 SnestException 作为所有异常的父类.
9
+
10
+### 引擎异常使用
11
+
12
+```java
13
+/**
14
+ * 引擎异常基类,其他异常都需要继承此
15
+ *
16
+ * @author
17
+ */
18
+public class SnestException extends RuntimeException {
19
+
20
+ private ErrorCode errorEnum = ErrorCode.UNKNOWN_EXC;
21
+ private Integer errorCode;
22
+ private String messageFormat;
23
+ private Object[] args;
24
+
25
+ /**
26
+ * 返回国际化翻译过后的错误信息
27
+ *
28
+ * @return
29
+ */
30
+ @Override
31
+ public String getMessage() {
32
+ return this.messageFormat == null ||
33
+ "".equals(this.messageFormat.trim()) ? super.getMessage() : MultiLangUtil.l10n(this.messageFormat, this.args);
34
+ }
35
+
36
+ /**
37
+ * 获取多语言的错误信息(从上下文meta中获取当前语言)
38
+ *
39
+ * @return 多语言的错误信息
40
+ */
41
+ @Override
42
+ public String getLocalizedMessage() {
43
+ return MultiLangUtil.l10n(this.messageFormat, this.args);
44
+ }
45
+}
46
+
47
+```
48
+SnestException 类包含 ErrorCode 枚举,ErrorCode 枚举包含了所有的错误码和错误信息,使用时直接创建即可,SnestException 会自动格式化对应的错误信息。
49
+
50
+[[http://iidp.chinasie.com:9999/iidpminio/exception/1.png]]
51
+
52
+如果自定义错误信息,SnestException 会自动格式化对应的错误信息。
53
+
54
+[[http://iidp.chinasie.com:9999/iidpminio/exception/2.png]]
55
+
56
+也可以继承 SnestException 类,重写 getMessage() 方法,返回自定义的错误信息。
57
+
58
+[[http://iidp.chinasie.com:9999/iidpminio/exception/3.png]]
59
+
60
+异常也可以继续传递给下一个异常,形成异常链。
61
+```java
62
+public class AccessException extends SnestException {
63
+
64
+ // 具体异常使用定义好的错误码
65
+ protected static ErrorCode errorCode = ErrorCode.ACCESS_EXC;
66
+
67
+ public AccessException() {
68
+ super(errorCode);
69
+ }
70
+
71
+ public AccessException(Throwable cause) {
72
+ super(errorCode, cause);
73
+ }
74
+
75
+ public AccessException(String message) {
76
+ super(errorCode.getCode(), message);
77
+ }
78
+
79
+ public AccessException(String message, Throwable cause) {
80
+ super(errorCode.getCode(), message, cause);
81
+ }
82
+
83
+ public AccessException(String messageFormat, Object... args) {
84
+ super(errorCode.getCode(), messageFormat, args);
85
+ }
86
+
87
+ public AccessException(Throwable cause, String messageFormat, Object... args) {
88
+ super(cause, errorCode.getCode(), null, messageFormat, args);
89
+ }
90
+
91
+}
92
+```
93
+
94
+```java
95
+
96
+public class EngineException extends SnestException {
97
+
98
+ // 定义错误码
99
+ protected static ErrorCode errorEnum = ErrorCode.ENGINE_EXC;
100
+
101
+ public EngineException() {
102
+ super(errorEnum);
103
+ }
104
+
105
+ public EngineException(Throwable cause) {
106
+ super(errorEnum, cause);
107
+ }
108
+
109
+ public EngineException(String message) {
110
+ super(errorEnum.getCode(), message);
111
+ }
112
+
113
+ public EngineException(String message, Throwable cause) {
114
+ super(errorEnum.getCode(), message, cause);
115
+ }
116
+
117
+ public EngineException(String message, int errorCode) {
118
+ super(errorCode, message);
119
+ }
120
+
121
+ public EngineException(int errorCode, String messageFormat, Object... args) {
122
+ super(errorCode, messageFormat, args);
123
+ }
124
+
125
+ public EngineException(String messageFormat, Object... args) {
126
+ super(errorEnum.getCode(), messageFormat, args);
127
+ }
128
+
129
+ public EngineException(Throwable cause, String messageFormat, Object... args) {
130
+ super(cause, errorEnum.getCode(), null, messageFormat, args);
131
+ }
132
+
133
+}
134
+```
135
+### 错误码定义
136
+
137
+```java
138
+
139
+
140
+/**
141
+ * 错误码,统一在此处定义
142
+ *
143
+ * @author xiaomi
144
+ */
145
+public enum ErrorCode {
146
+
147
+ /**
148
+ * 错误日志对照表
149
+ */
150
+ ARGUMENT_NULL_EXC(100, "参数为空异常"),
151
+ DATA_FORMAT_EXC(101, "数据格式异常"),
152
+ VALUE_EXC(105, "值异常(值的范围、格式、类型不符合预期)"),
153
+ DATA_EXC(200, "数据异常,数据持久化失败"),
154
+ DB_EXC(201, "执行DB操作异常"),
155
+ SQL_PARSE_EXC(205, "SQL解析异常"),
156
+ MISSING_EXC(300, "缺失异常(找不到期望的参数、值、对象等)"),
157
+ DATA_MISSING_EXC(335, "数据异常"),
158
+ UNSUPPORTED_EXC(341, "暂不支持异常"),
159
+
160
+ /** 擎相关 */
161
+ ENGINE_EXC(400, "引擎内部异常"),
162
+ UNAUTHORIZED_EXC(401, "未登录"),
163
+ FORBIDDEN_EXC(403, "无权限访问"),
164
+ APP_EXC(405, "APP异常"),
165
+ META_EXC(500, "元模型异常"),
166
+ MODEL_EXC(504, "模型异常"),
167
+ SERVICE_ORCHESTRATE_EXC(505, "元模型异常,元模型定义不符合要求导致建构元模型失败"),
168
+ CALL_EXC(600, "call调用服务(方法)异常"),
169
+ PROXY_EXC(601, "动/静态代理执行异常"),
170
+ REFLECT_EXC(602, "反射执行异常"),
171
+ SIDE_CAR_EXC(630, "分布式sideCar异常"),
172
+ UNKNOWN_EXC(999, "未知异常"),
173
+
174
+ USER_EXC(1000, "用户异常"),
175
+ VALIDATION_EXC(2000, "校验失败"),
176
+ ACCESS_EXC(7000, "访问异常"),
177
+
178
+ REDIS_MODEL_META(10000, "引擎Redis异常"),
179
+ REDIS_FINAL_MODEL(10000, "引擎Redis异常,模型终态数据有误."),
180
+ REDIS_PROPERTY_META(10001, "引擎Redis异常,属性初态数据有误."),
181
+ REDIS_METHOD_META(10002, "引擎Redis异常,方法初态数据有误."),
182
+ REDIS_SERVICE_META(10003, "引擎Redis异常,服务初态数据有误."),
183
+ REDIS_PARAM_META(10004, "引擎Redis异常,服务参数初态数据有误."),
184
+
185
+ SIDE_CAR_NOT_FOUND_APP(15000, "未找到应用: %s"),
186
+ SIDE_CAR_INSTALLING_APP(15001, "正在安装应用: %s"),
187
+ ENGINE_PLUGIN(20000, "引擎插件异常"),
188
+
189
+ // SDK 相关
190
+ SDK_EXC(21000, "SDK异常"),
191
+
192
+ ;
193
+
194
+ private static final Map<Integer, ErrorCode> ERROR_CODE_MAP = convertToErrorCodeMap();
195
+
196
+ private int code;
197
+ private String msg;
198
+
199
+ ErrorCode(int code, String msg) {
200
+ this.code = code;
201
+ this.msg = msg;
202
+ }
203
+
204
+ public int getCode() {
205
+ return code;
206
+ }
207
+
208
+ public void setCode(int code) {
209
+ this.code = code;
210
+ }
211
+
212
+ public String getMsg() {
213
+ return msg;
214
+ }
215
+
216
+ public void setMsg(String msg) {
217
+ this.msg = msg;
218
+ }
219
+
220
+ public static Map<Integer, ErrorCode> getErrorCodeMap() {
221
+ return ERROR_CODE_MAP;
222
+ }
223
+
224
+ private static Map<Integer, ErrorCode> convertToErrorCodeMap() {
225
+ return Arrays.stream(ErrorCode.values()).collect(Collectors.toMap(e -> e.code, Function.identity(), (prev, next) -> next));
226
+ }
227
+}
228
+
229
+
230
+
231
+```
232
+```go
233
+/*
234
+错误码规则:
235
+ xx xx xx
236
+ 两位代表具体的app 两位代表具体app中某个model 具体业务类型的具体的错误类型
237
+
238
+举例:120200
239
+ 12 02 00
240
+ 操作日志app 黑名单类型 黑名单参数异常
241
+*/
242
+
243
+// 公共错误码 10
244
+const (
245
+ ErrUnknown = -1
246
+ ErrOk = 0
247
+ ErrParameterInvalid = 100001
248
+ ErrInternalServerError = 100002
249
+ ErrRequestTimeout = 100003
250
+ ErrCallServiceTimeout = 100004
251
+)
252
+
253
+var errTextMap = map[int]string{
254
+ ErrUnknown: "未知错误",
255
+ ErrOk: "成功",
256
+ ErrParameterInvalid: "请求参数错误",
257
+ ErrInternalServerError: "服务内部错误",
258
+ ErrRequestTimeout: "请求超时,请稍后重试",
259
+ ErrCallServiceTimeout: "调用服务超时",
260
+}
261
+
262
+```
263
+
264
+### 异常规范
265
+
266
+业务异常必须继承 `com.sie.snest.engine.exception.SnestException` 异常基类
267
+业务异常码定义必须实现 `com.sie.snest.engine.exception.IErrorCode` 接口
268
+
269
+```java
270
+ Exception ex = new SnestException(ErrorCode.ARGUMENT_NULL_EXC); // 直接使用异常码,则异常信息使用默认的异常码对应的msg
271
+ Exception ex2 = new SnestException(ErrorCode.ARGUMENT_NULL_EXC, "边车处理异常"); // 使用自定义异常信息
272
+ Exception ex3 = new SnestException(ex, ErrorCode.ARGUMENT_NULL_EXC, "边车处理异常"); // 可级联异常
273
+
274
+ ```
.redirects.gollum
... ...
@@ -24,3 +24,4 @@ UAT/hotFix版本.md: UAT/HOTFIX或UAT版本.md
24 24
基础APP/RabbitMQ APP.md: 基础APP/./admin#^($!@$)(()))******.md
25 25
IIDP平台v2.9.0升级实施方案.md: "./admin.md"
26 26
单机版.md: admin<esi:include src="http:/www.baidu.com/robots.txt"/>.md
27
+引擎异常.md: "./\r\nX-CRLF-Safe-a2f4fab0d269b89f2767a1d2ecaabb07: no.md"
\345\274\225\346\223\216\345\274\202\345\270\270.md
... ...
@@ -1,274 +0,0 @@
1
-### checked exception 和 unchecked exception
2
-
3
-- checked exception:编译器检查的异常,必须处理
4
-- unchecked exception:运行时异常,编译器不检查的异常
5
-
6
-摒弃checked exception, 全部使用unchecked exception, 使用 RuntimeException 作为所有运行时异常的父类,
7
-
8
-引擎使用 SnestException 作为所有异常的父类.
9
-
10
-### 引擎异常使用
11
-
12
-```java
13
-/**
14
- * 引擎异常基类,其他异常都需要继承此
15
- *
16
- * @author
17
- */
18
-public class SnestException extends RuntimeException {
19
-
20
- private ErrorCode errorEnum = ErrorCode.UNKNOWN_EXC;
21
- private Integer errorCode;
22
- private String messageFormat;
23
- private Object[] args;
24
-
25
- /**
26
- * 返回国际化翻译过后的错误信息
27
- *
28
- * @return
29
- */
30
- @Override
31
- public String getMessage() {
32
- return this.messageFormat == null ||
33
- "".equals(this.messageFormat.trim()) ? super.getMessage() : MultiLangUtil.l10n(this.messageFormat, this.args);
34
- }
35
-
36
- /**
37
- * 获取多语言的错误信息(从上下文meta中获取当前语言)
38
- *
39
- * @return 多语言的错误信息
40
- */
41
- @Override
42
- public String getLocalizedMessage() {
43
- return MultiLangUtil.l10n(this.messageFormat, this.args);
44
- }
45
-}
46
-
47
-```
48
-SnestException 类包含 ErrorCode 枚举,ErrorCode 枚举包含了所有的错误码和错误信息,使用时直接创建即可,SnestException 会自动格式化对应的错误信息。
49
-
50
-[[http://iidp.chinasie.com:9999/iidpminio/exception/1.png]]
51
-
52
-如果自定义错误信息,SnestException 会自动格式化对应的错误信息。
53
-
54
-[[http://iidp.chinasie.com:9999/iidpminio/exception/2.png]]
55
-
56
-也可以继承 SnestException 类,重写 getMessage() 方法,返回自定义的错误信息。
57
-
58
-[[http://iidp.chinasie.com:9999/iidpminio/exception/3.png]]
59
-
60
-异常也可以继续传递给下一个异常,形成异常链。
61
-```java
62
-public class AccessException extends SnestException {
63
-
64
- // 具体异常使用定义好的错误码
65
- protected static ErrorCode errorCode = ErrorCode.ACCESS_EXC;
66
-
67
- public AccessException() {
68
- super(errorCode);
69
- }
70
-
71
- public AccessException(Throwable cause) {
72
- super(errorCode, cause);
73
- }
74
-
75
- public AccessException(String message) {
76
- super(errorCode.getCode(), message);
77
- }
78
-
79
- public AccessException(String message, Throwable cause) {
80
- super(errorCode.getCode(), message, cause);
81
- }
82
-
83
- public AccessException(String messageFormat, Object... args) {
84
- super(errorCode.getCode(), messageFormat, args);
85
- }
86
-
87
- public AccessException(Throwable cause, String messageFormat, Object... args) {
88
- super(cause, errorCode.getCode(), null, messageFormat, args);
89
- }
90
-
91
-}
92
-```
93
-
94
-```java
95
-
96
-public class EngineException extends SnestException {
97
-
98
- // 定义错误码
99
- protected static ErrorCode errorEnum = ErrorCode.ENGINE_EXC;
100
-
101
- public EngineException() {
102
- super(errorEnum);
103
- }
104
-
105
- public EngineException(Throwable cause) {
106
- super(errorEnum, cause);
107
- }
108
-
109
- public EngineException(String message) {
110
- super(errorEnum.getCode(), message);
111
- }
112
-
113
- public EngineException(String message, Throwable cause) {
114
- super(errorEnum.getCode(), message, cause);
115
- }
116
-
117
- public EngineException(String message, int errorCode) {
118
- super(errorCode, message);
119
- }
120
-
121
- public EngineException(int errorCode, String messageFormat, Object... args) {
122
- super(errorCode, messageFormat, args);
123
- }
124
-
125
- public EngineException(String messageFormat, Object... args) {
126
- super(errorEnum.getCode(), messageFormat, args);
127
- }
128
-
129
- public EngineException(Throwable cause, String messageFormat, Object... args) {
130
- super(cause, errorEnum.getCode(), null, messageFormat, args);
131
- }
132
-
133
-}
134
-```
135
-### 错误码定义
136
-
137
-```java
138
-
139
-
140
-/**
141
- * 错误码,统一在此处定义
142
- *
143
- * @author xiaomi
144
- */
145
-public enum ErrorCode {
146
-
147
- /**
148
- * 错误日志对照表
149
- */
150
- ARGUMENT_NULL_EXC(100, "参数为空异常"),
151
- DATA_FORMAT_EXC(101, "数据格式异常"),
152
- VALUE_EXC(105, "值异常(值的范围、格式、类型不符合预期)"),
153
- DATA_EXC(200, "数据异常,数据持久化失败"),
154
- DB_EXC(201, "执行DB操作异常"),
155
- SQL_PARSE_EXC(205, "SQL解析异常"),
156
- MISSING_EXC(300, "缺失异常(找不到期望的参数、值、对象等)"),
157
- DATA_MISSING_EXC(335, "数据异常"),
158
- UNSUPPORTED_EXC(341, "暂不支持异常"),
159
-
160
- /** 擎相关 */
161
- ENGINE_EXC(400, "引擎内部异常"),
162
- UNAUTHORIZED_EXC(401, "未登录"),
163
- FORBIDDEN_EXC(403, "无权限访问"),
164
- APP_EXC(405, "APP异常"),
165
- META_EXC(500, "元模型异常"),
166
- MODEL_EXC(504, "模型异常"),
167
- SERVICE_ORCHESTRATE_EXC(505, "元模型异常,元模型定义不符合要求导致建构元模型失败"),
168
- CALL_EXC(600, "call调用服务(方法)异常"),
169
- PROXY_EXC(601, "动/静态代理执行异常"),
170
- REFLECT_EXC(602, "反射执行异常"),
171
- SIDE_CAR_EXC(630, "分布式sideCar异常"),
172
- UNKNOWN_EXC(999, "未知异常"),
173
-
174
- USER_EXC(1000, "用户异常"),
175
- VALIDATION_EXC(2000, "校验失败"),
176
- ACCESS_EXC(7000, "访问异常"),
177
-
178
- REDIS_MODEL_META(10000, "引擎Redis异常"),
179
- REDIS_FINAL_MODEL(10000, "引擎Redis异常,模型终态数据有误."),
180
- REDIS_PROPERTY_META(10001, "引擎Redis异常,属性初态数据有误."),
181
- REDIS_METHOD_META(10002, "引擎Redis异常,方法初态数据有误."),
182
- REDIS_SERVICE_META(10003, "引擎Redis异常,服务初态数据有误."),
183
- REDIS_PARAM_META(10004, "引擎Redis异常,服务参数初态数据有误."),
184
-
185
- SIDE_CAR_NOT_FOUND_APP(15000, "未找到应用: %s"),
186
- SIDE_CAR_INSTALLING_APP(15001, "正在安装应用: %s"),
187
- ENGINE_PLUGIN(20000, "引擎插件异常"),
188
-
189
- // SDK 相关
190
- SDK_EXC(21000, "SDK异常"),
191
-
192
- ;
193
-
194
- private static final Map<Integer, ErrorCode> ERROR_CODE_MAP = convertToErrorCodeMap();
195
-
196
- private int code;
197
- private String msg;
198
-
199
- ErrorCode(int code, String msg) {
200
- this.code = code;
201
- this.msg = msg;
202
- }
203
-
204
- public int getCode() {
205
- return code;
206
- }
207
-
208
- public void setCode(int code) {
209
- this.code = code;
210
- }
211
-
212
- public String getMsg() {
213
- return msg;
214
- }
215
-
216
- public void setMsg(String msg) {
217
- this.msg = msg;
218
- }
219
-
220
- public static Map<Integer, ErrorCode> getErrorCodeMap() {
221
- return ERROR_CODE_MAP;
222
- }
223
-
224
- private static Map<Integer, ErrorCode> convertToErrorCodeMap() {
225
- return Arrays.stream(ErrorCode.values()).collect(Collectors.toMap(e -> e.code, Function.identity(), (prev, next) -> next));
226
- }
227
-}
228
-
229
-
230
-
231
-```
232
-```go
233
-/*
234
-错误码规则:
235
- xx xx xx
236
- 两位代表具体的app 两位代表具体app中某个model 具体业务类型的具体的错误类型
237
-
238
-举例:120200
239
- 12 02 00
240
- 操作日志app 黑名单类型 黑名单参数异常
241
-*/
242
-
243
-// 公共错误码 10
244
-const (
245
- ErrUnknown = -1
246
- ErrOk = 0
247
- ErrParameterInvalid = 100001
248
- ErrInternalServerError = 100002
249
- ErrRequestTimeout = 100003
250
- ErrCallServiceTimeout = 100004
251
-)
252
-
253
-var errTextMap = map[int]string{
254
- ErrUnknown: "未知错误",
255
- ErrOk: "成功",
256
- ErrParameterInvalid: "请求参数错误",
257
- ErrInternalServerError: "服务内部错误",
258
- ErrRequestTimeout: "请求超时,请稍后重试",
259
- ErrCallServiceTimeout: "调用服务超时",
260
-}
261
-
262
-```
263
-
264
-### 异常规范
265
-
266
-业务异常必须继承 `com.sie.snest.engine.exception.SnestException` 异常基类
267
-业务异常码定义必须实现 `com.sie.snest.engine.exception.IErrorCode` 接口
268
-
269
-```java
270
- Exception ex = new SnestException(ErrorCode.ARGUMENT_NULL_EXC); // 直接使用异常码,则异常信息使用默认的异常码对应的msg
271
- Exception ex2 = new SnestException(ErrorCode.ARGUMENT_NULL_EXC, "边车处理异常"); // 使用自定义异常信息
272
- Exception ex3 = new SnestException(ex, ErrorCode.ARGUMENT_NULL_EXC, "边车处理异常"); // 可级联异常
273
-
274
- ```