apache / apache/dubbo-spi-extensions
Exception getting generics in completabilefuture when using api doc
- Dominant language
- Java
- Stars
- 206
- Forks
- 121
- PR merge metrics
- No merged PRs in 30d
Description
there are some warnings when running application.
It seems like DubboApiDocsAnnotationScanner cant handle the parameter's class which extends generic parent.
For example com.alibaba.fastjson2.JSONObject
```java
public interface ITestDubboService {
public String call(name, JSONObject params);
}
```
```java
import com.alibaba.fastjson2.JSONObject;
import org.apache.dubbo.apidocs.annotations.ApiDoc;
import org.apache.dubbo.apidocs.annotations.ApiModule;
import org.apache.dubbo.apidocs.annotations.RequestParam;
import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance;
@DubboService(
timeout = 3000,
loadbalance = RoundRobinLoadBalance.NAME)
@ApiModule(value = "dubbo测试接口", apiInterface = ITestDubboService.class)
public class TestDubboServiceImpl implements ITestDubboService {
@ApiDoc(
value = "call",
description = "方法调用测试",
responseClassDescription = "json字串")
@Override
public String call(
@RequestParam(value = "name", description = "调用者") String name,
@RequestParam(value = "params", description = "参数列表") JSONObject params) {
System.out.println(name+" calls "+params);
}
}
```
```java
DubboApiDocsAnnotationScanner#processApiDocAnnotation(...) {
...
String key = String.format("%s.%s%s", moduleAnn.apiInterface().getCanonicalName(), method.getName(), desc);
DubboApiDocsCache.addApiParamsAndResp(key, apiParamsAndResp);
Class[] argsClass = method.getParameterTypes();
Annotation[][] argsAnns = method.getParameterAnnotations();
Parameter[] parameters = method.getParameters();
Type[] parametersTypes = method.getGenericParameterTypes();
List paramList = new ArrayList<>(argsClass.length);
...
for (int i = 0; i < argsClass.length; i++) {
Class argClass = argsClass[i];
Type parameterType = parametersTypes[i];
methodParamInfoSb.append(METHOD_PARAM_INDEX_BOUNDARY_LEFT).append(i)
.append(METHOD_PARAM_INDEX_BOUNDARY_RIGHT).append(argClass.getCanonicalName());
if (i + 1 < argsClass.length) {
methodParamInfoSb.append(METHOD_PARAMETER_SEPARATOR);
}
...
}
```
```
java.lang.ClassNotFoundException: V
at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?]
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:375) ~[?:?]
at org.apache.dubbo.apidocs.utils.ClassTypeUtil.makeClass(ClassTypeUtil.java:407) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.utils.ClassTypeUtil.initClassTypeWithDefaultValueNoProceeField(ClassTypeUtil.java:294) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.utils.ClassTypeUtil.initClassTypeWithDefaultValue(ClassTypeUtil.java:145) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.utils.ClassTypeUtil.initClassTypeWithDefaultValue(ClassTypeUtil.java:122) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.core.DubboApiDocsAnnotationScanner.processField(DubboApiDocsAnnotationScanner.java:359) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.core.DubboApiDocsAnnotationScanner.processApiDocAnnotation(DubboApiDocsAnnotationScanner.java:282) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.core.DubboApiDocsAnnotationScanner.lambda$onApplicationEvent$2(DubboApiDocsAnnotationScanner.java:166) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) ~[?:?]
at org.apache.dubbo.apidocs.core.DubboApiDocsAnnotationScanner.onApplicationEvent(DubboApiDocsAnnotationScanner.java:113) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.apache.dubbo.apidocs.core.DubboApiDocsAnnotationScanner.onApplicationEvent(DubboApiDocsAnnotationScanner.java:84) ~[dubbo-api-docs-core-2.7.8.3.jar:2.7.8.3]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.21.jar:5.3.21]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.21.jar:5.3.21]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.21.jar:5.3.21]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.21.jar:5.3.21]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.21.jar:5.3.21]
at org.springframework.boot.context.event.EventPublishingRunListener.ready(EventPublishingRunListener.java:114) ~[spring-boot-2.7.1.jar:2.7.1]
at org.springframework.boot.SpringApplicationRunListeners.lambda$ready$6(SpringApplicationRunListeners.java:82) ~[spring-boot-2.7.1.jar:2.7.1]
at java.util.ArrayList.forEach(ArrayList.java:1511) [?:?]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120) [spring-boot-2.7.1.jar:2.7.1]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114) [spring-boot-2.7.1.jar:2.7.1]
at org.springframework.boot.SpringApplicationRunListeners.ready(SpringApplicationRunListeners.java:82) [spring-boot-2.7.1.jar:2.7.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) [spring-boot-2.7.1.jar:2.7.1]
```
Contributor guide
Assessment
This issue has not been assessed yet.