in dubbo-mock-extensions/dubbo-mock-admin/src/main/java/org/apache/dubbo/mock/filter/AdminMockFilter.java [129:167]
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
// check if open the admin mock config, global config.
if (!ENABLE_ADMIN_MOCK) {
return invoker.invoke(invocation);
}
String interfaceName = invocation.getTargetServiceUniqueName();
String methodName = invocation.getMethodName();
Object[] params = solveParams(invocation.getArguments());
// check if the MockService's invoker, then request.
if (Objects.equals(interfaceName, MockService.class.getName())) {
return invoker.invoke(invocation);
}
MockService mockService = getMockService();
if (Objects.isNull(mockService)) {
log.warn("[Admin Mock] cloud not find MockService, will ignore this mock.");
return invoker.invoke(invocation);
}
// parse the result from MockService, build the real method's return value.
MockContext mockContext = MockContext.newMockContext()
.serviceName(interfaceName).methodName(methodName).arguments(params).build();
MockResult mockResult = mockService.mock(mockContext);
if (!mockResult.getEnable()) {
return invoker.invoke(invocation);
}
// parse the return data.
Class<?> returnType = ((RpcInvocation) invocation).getReturnType();
ResultContext resultContext = ResultContext.newResultContext()
.data(mockResult.getContent()).targetType(returnType)
.serviceName(interfaceName).methodName(methodName).build();
Object data = typeHandler.handleResult(resultContext);
AppResponse appResponse = new AppResponse(data);
CompletableFuture<AppResponse> appResponseFuture = new CompletableFuture<>();
appResponseFuture.complete(appResponse);
return new AsyncRpcResult(appResponseFuture, invocation);
}