Skip to content

Commit 3dff18e

Browse files
committed
feat: error code combing
1 parent bd04427 commit 3dff18e

File tree

25 files changed

+147
-226
lines changed

25 files changed

+147
-226
lines changed

dongtai-api-gather/dongtai-api-gather-dubbo-api/src/main/java/io/dongtai/iast/api/gather/dubbo/convertor/MethodConvertor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ public Operation convert() {
3636
try {
3737
o.mergeParameters(this.parseParameters());
3838
} catch (Throwable e) {
39-
DongTaiLog.error("MethodConvertor.convert parseParameters error", e);
39+
DongTaiLog.debug("MethodConvertor.convert parseParameters exception", e);
4040
}
4141

4242
try {
4343
o.setResponses(this.parseResponse());
4444
} catch (Throwable e) {
45-
DongTaiLog.error("MethodConvertor.convert parseResponse error", e);
45+
DongTaiLog.debug("MethodConvertor.convert parseResponse exception", e);
4646
}
4747

4848
// 设置这两个字段
@@ -100,7 +100,7 @@ private List<Parameter> parseParameters() {
100100
parameterList.add(convert);
101101
}
102102
} catch (Throwable e) {
103-
DongTaiLog.error("MethodConvertor.parseParameters ParameterConvertor error", e);
103+
DongTaiLog.debug("MethodConvertor.parseParameters ParameterConvertor exception", e);
104104
}
105105
}
106106
return parameterList;

dongtai-api-gather/dongtai-api-gather-dubbo-api/src/main/java/io/dongtai/iast/api/gather/dubbo/convertor/ServiceConvertor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Map<String, Path> convert() {
3434
path.setDubbo(convert);
3535
pathMap.put(this.buildSign(parseServiceMethod), path);
3636
} catch (Throwable e) {
37-
DongTaiLog.error("ServiceConvertor.convert error", e);
37+
DongTaiLog.debug("ServiceConvertor.convert exception", e);
3838
}
3939
}
4040
return pathMap;

dongtai-api-gather/dongtai-api-gather-dubbo-api/src/main/java/io/dongtai/iast/api/gather/dubbo/extractor/AbstractDubboServiceExtractor.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import io.dongtai.iast.api.openapi.domain.OpenApi;
77
import io.dongtai.iast.api.openapi.domain.Path;
88
import io.dongtai.log.DongTaiLog;
9+
import io.dongtai.log.ErrorCode;
910

1011
import java.lang.reflect.Field;
1112
import java.util.HashMap;
1213
import java.util.List;
1314
import java.util.Map;
14-
import java.util.function.Consumer;
1515

1616
/**
1717
* 两个dubbo分支Service收集共同的逻辑抽象到这里
@@ -24,6 +24,8 @@
2424
*/
2525
public abstract class AbstractDubboServiceExtractor {
2626

27+
private static final String DUBBO_PROTOCOL_NAME = "dubbo";
28+
2729
// 每个Gather共享同一个Manager
2830
private OpenApiSchemaConvertorManager manager;
2931

@@ -32,19 +34,19 @@ public AbstractDubboServiceExtractor() {
3234
}
3335

3436
public OpenApi extract() {
35-
Object protocolObject = this.getProtocol("dubbo");
37+
Object protocolObject = this.getProtocol(DUBBO_PROTOCOL_NAME);
3638
if (protocolObject == null) {
37-
DongTaiLog.error("AbstractDubboServiceGather getProtocol null");
39+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_PROTOCOL_NULL);
3840
return null;
3941
}
4042
Object exporterMap = this.getExporterMap(protocolObject);
4143
if (exporterMap == null) {
42-
DongTaiLog.error("AbstractDubboServiceGather getExporterMap null");
44+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_EXPORT_MAP_NULL);
4345
return null;
4446
}
4547
List<Class> exportedServiceList = this.parseExportedServiceClassList(exporterMap);
4648
if (exportedServiceList == null || exportedServiceList.isEmpty()) {
47-
DongTaiLog.error("AbstractDubboServiceGather parseExportedServiceClassList empty");
49+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_EXPORT_LIST_EMPTY);
4850
return null;
4951
}
5052

@@ -65,23 +67,20 @@ public OpenApi extract() {
6567
}
6668

6769
/**
68-
* 解析导出的类
70+
* 解析dubbo协议导出的Service为Open API的Path
6971
*
7072
* @param exportedServiceList
7173
* @return
7274
*/
7375
private Map<String, Path> parsePaths(List<Class> exportedServiceList) {
7476
Map<String, Path> pathMap = new HashMap<>();
75-
exportedServiceList.forEach(new Consumer<Class>() {
76-
@Override
77-
public void accept(Class aClass) {
78-
try {
79-
Map<String, Path> convert = new ServiceConvertor(manager, aClass).convert();
80-
// 暂不考虑key覆盖的问题
81-
pathMap.putAll(convert);
82-
} catch (Throwable e) {
83-
DongTaiLog.error("AbstractDubboServiceGather parsePaths error", e);
84-
}
77+
exportedServiceList.forEach(aClass -> {
78+
try {
79+
Map<String, Path> convert = new ServiceConvertor(manager, aClass).convert();
80+
// 暂不考虑key覆盖的问题
81+
pathMap.putAll(convert);
82+
} catch (Throwable e) {
83+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_SERVICE_CONVERT_ERROR, e);
8584
}
8685
});
8786
return pathMap;
@@ -95,17 +94,17 @@ public void accept(Class aClass) {
9594
*/
9695
private Object getProtocol(String protocolName) {
9796
Object protocolObj = this.getProtocolObject(protocolName);
98-
for (int i = 0; i < 10; i++) {
99-
try {
97+
try {
98+
for (int i = 0; i < 10; i++) {
10099
Field protocolField = protocolObj.getClass().getDeclaredField("protocol");
101100
protocolField.setAccessible(true);
102101
protocolObj = protocolField.get(protocolObj);
103102
if (protocolObj.getClass() == this.exceptedProtocolClass()) {
104103
break;
105104
}
106-
} catch (Throwable e) {
107-
DongTaiLog.error("AbstractDubboServiceGather getProtocol error", e);
108105
}
106+
} catch (Throwable e) {
107+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_GET_PROTOCOL_ERROR, e);
109108
}
110109
return protocolObj;
111110
}
@@ -137,7 +136,7 @@ private Object getExporterMap(Object protocolObject) {
137136
exporterMapField.setAccessible(true);
138137
return exporterMapField.get(protocolObject);
139138
} catch (Throwable e) {
140-
DongTaiLog.error("AbstractDubboServiceGather getExporterMap error", e);
139+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_GET_EXPORT_MAP_ERROR, e);
141140
}
142141
return null;
143142
}

dongtai-api-gather/dongtai-api-gather-dubbo-api/src/main/java/io/dongtai/iast/api/gather/dubbo/extractor/AlibabaDubboServiceExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
77
import io.dongtai.iast.api.openapi.domain.OpenApi;
88
import io.dongtai.log.DongTaiLog;
9+
import io.dongtai.log.ErrorCode;
910

1011
import java.util.ArrayList;
1112
import java.util.List;
@@ -57,7 +58,7 @@ public void accept(String s, Exporter exporter) {
5758
}
5859
});
5960
} catch (Throwable e) {
60-
DongTaiLog.error("AlibabaDubboServiceExtractor parseExportedServiceClassList error", e);
61+
DongTaiLog.error(ErrorCode.API_GATHER_DUBBO_ALIBABA_PARSE_SERVICE_LIST_ERROR, e);
6162
}
6263
return serviceClassList;
6364
}

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/ArrayOpenApiSchemaConvertor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public Schema convert(Class clazz) {
3030

3131
Class componentType = clazz.getComponentType();
3232
if (componentType == null) {
33-
return null;
33+
return new Schema(DataType.ObjectArray());
3434
}
3535

3636
// 如果是多层数组,则直接返回array,swagger spring也是这么处理的

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/BaseOpenApiSchemaConvertor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public BaseOpenApiSchemaConvertor(OpenApiSchemaConvertorManager manager) {
2020

2121
@Override
2222
public boolean canConvert(Class clazz, Field field) {
23+
// 在基类上把Field的转换复用一下Class的转换
2324
return field != null && canConvert(field.getType());
2425
}
2526

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/ClassOpenApiSchemaConvertor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
*/
1111
public interface ClassOpenApiSchemaConvertor {
1212

13+
/**
14+
* 转换器的名字,方便日志打印啥的
15+
*
16+
* @return
17+
*/
1318
String getConvertorName();
1419

1520
/**

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/CollectionOpenApiSchemaConvertor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
*/
1111
public class CollectionOpenApiSchemaConvertor extends BaseOpenApiSchemaConvertor {
1212

13-
private final ListOpenApiSchemaConvertor listOpenApiSchemaConvertor;
14-
private final SetOpenApiSchemaConvertor setOpenApiSchemaConvertor;
15-
private final MapOpenApiSchemaConvertor mapOpenApiSchemaConvertor;
13+
final ListOpenApiSchemaConvertor listOpenApiSchemaConvertor;
14+
final SetOpenApiSchemaConvertor setOpenApiSchemaConvertor;
15+
final MapOpenApiSchemaConvertor mapOpenApiSchemaConvertor;
1616

1717
public CollectionOpenApiSchemaConvertor(OpenApiSchemaConvertorManager manager) {
1818
super(manager);

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/ComponentDatabase.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class ComponentDatabase {
1616
// 类到Schema的映射
1717
private Map<Class, Schema> classToSchemaMap;
1818

19-
// 已经发现了的类,用于避免重复处理
19+
// 已经发现了的类,用于避免重复处理,也避免碰到循环引用时递归爆栈
2020
private Set<Class> existsClassSet = new HashSet<>();
2121

2222
// 符合类型的schema生成完毕的时候的回调方法,用于处理环形依赖
@@ -72,12 +72,7 @@ public void triggerSchemaCallback(Class clazz, Schema c) {
7272
if (consumers == null) {
7373
return;
7474
}
75-
consumers.forEach(new Consumer<Consumer<Schema>>() {
76-
@Override
77-
public void accept(Consumer<Schema> componentConsumer) {
78-
componentConsumer.accept(c);
79-
}
80-
});
75+
consumers.forEach(x -> x.accept(c));
8176
}
8277

8378
/**
@@ -130,18 +125,18 @@ public Map<String, Schema> toComponentSchemasMap() {
130125
return m;
131126
}
132127

133-
/**
134-
* 把给定的类注册到组件库中
135-
*
136-
* @param clazz
137-
* @return
138-
*/
139-
public Schema register(Class clazz) {
140-
Schema c = new Schema();
141-
c.setType("object");
142-
c.setName(clazz.getName());
143-
classToSchemaMap.put(clazz, c);
144-
return c.direct();
145-
}
128+
// /**
129+
// * 把给定的类注册到组件库中,但是并不解析名称,暂时未用到先注释掉
130+
// *
131+
// * @param clazz
132+
// * @return
133+
// */
134+
// public Schema register(Class clazz) {
135+
// Schema c = new Schema();
136+
// c.setType("object");
137+
// c.setName(clazz.getName());
138+
// classToSchemaMap.put(clazz, c);
139+
// return c.direct();
140+
// }
146141

147142
}

dongtai-api-gather/dongtai-api-gather-openapi/src/main/java/io/dongtai/iast/api/openapi/convertor/EnumOpenApiSchemaConvertor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Schema convert(Class clazz) {
3232
return null;
3333
}
3434

35-
// TODO 枚举类型是被看做一个有限取值的string,所以此处有必要查询缓存吗?
35+
// Open API里枚举类型是被看做一个有限取值的string
3636
Schema schema = manager.database.find(clazz);
3737
if (schema != null) {
3838
return schema;

0 commit comments

Comments
 (0)