This is an automated email from the ASF dual-hosted git repository.
liuhongyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new e765dbf81f fix some bug (#6180)
e765dbf81f is described below
commit e765dbf81ff4be47bd6fd779d790a53fba6cc525
Author: Yu Siheng <[email protected]>
AuthorDate: Wed Sep 24 14:41:21 2025 +0800
fix some bug (#6180)
Co-authored-by: aias00 <[email protected]>
---
.../generator/McpToolsRegisterDTOGenerator.java | 6 ++---
.../client/mcp/utils/OpenApiConvertorUtil.java | 4 ++--
.../shenyu/client/mcp/McpServiceEventListener.java | 27 +++++++++++++++------
.../apache/shenyu/controller/OrderController.java | 28 +++++++++++++++++++---
4 files changed, 50 insertions(+), 15 deletions(-)
diff --git
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/generator/McpToolsRegisterDTOGenerator.java
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/generator/McpToolsRegisterDTOGenerator.java
index 39f7ad6bbc..a599db1c4a 100644
---
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/generator/McpToolsRegisterDTOGenerator.java
+++
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/generator/McpToolsRegisterDTOGenerator.java
@@ -31,8 +31,8 @@ import
org.apache.shenyu.register.common.dto.McpToolsRegisterDTO;
*/
public class McpToolsRegisterDTOGenerator {
- public static McpToolsRegisterDTO generateRegisterDTO(final ShenyuMcpTool
classMcpClient, final ShenyuMcpTool methodMcpClient,
- final JsonObject
openApiJsonObject, final String url, final String namespaceId) {
+ public static McpToolsRegisterDTO generateRegisterDTO(final ShenyuMcpTool
methodMcpClient, final JsonObject openApiJsonObject,
+ final String url,
final String namespaceId) {
JsonObject root = new JsonObject();
Operation operation = methodMcpClient.operation();
@@ -43,7 +43,7 @@ public class McpToolsRegisterDTOGenerator {
JsonObject method = path.getAsJsonObject(operation.method());
JsonArray parameters =
method.getAsJsonArray(OpenApiConstants.OPEN_API_PATH_OPERATION_METHOD_PARAMETERS_KEY);
- root.addProperty(ShenyuToolConfigConstants.NAME_KEY,
classMcpClient.toolName());
+ root.addProperty(ShenyuToolConfigConstants.NAME_KEY,
methodMcpClient.toolName());
root.add(ShenyuToolConfigConstants.PARAMETERS_KEY, parameters);
JsonObject requestConfig =
McpRequestConfigGenerator.generateRequestConfig(openApiJsonObject,
shenyuMcpRequestConfig);
diff --git
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/utils/OpenApiConvertorUtil.java
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/utils/OpenApiConvertorUtil.java
index f61287546b..846ecbca29 100644
---
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/utils/OpenApiConvertorUtil.java
+++
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-common/src/main/java/org/apache/shenyu/client/mcp/utils/OpenApiConvertorUtil.java
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
public class OpenApiConvertorUtil {
public static io.swagger.v3.oas.models.parameters.Parameter
convertParameter(final io.swagger.v3.oas.annotations.Parameter annotation) {
- if (Objects.nonNull(annotation)) {
+ if (!Objects.nonNull(annotation)) {
return null;
}
io.swagger.v3.oas.models.parameters.Parameter parameter = new
io.swagger.v3.oas.models.parameters.Parameter();
@@ -56,7 +56,7 @@ public class OpenApiConvertorUtil {
}
public static Operation convertOperation(final
io.swagger.v3.oas.annotations.Operation operationAnnotation) {
- if (Objects.nonNull(operationAnnotation)) {
+ if (Objects.isNull(operationAnnotation)) {
return null;
}
Operation operation = new Operation();
diff --git
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-register/src/main/java/org/apache/shenyu/client/mcp/McpServiceEventListener.java
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-register/src/main/java/org/apache/shenyu/client/mcp/McpServiceEventListener.java
index e49d0a3c31..fd798d5922 100644
---
a/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-register/src/main/java/org/apache/shenyu/client/mcp/McpServiceEventListener.java
+++
b/shenyu-client/shenyu-client-mcp/shenyu-client-mcp-register/src/main/java/org/apache/shenyu/client/mcp/McpServiceEventListener.java
@@ -20,6 +20,7 @@ package org.apache.shenyu.client.mcp;
import com.google.gson.JsonObject;
import io.swagger.v3.oas.annotations.servers.Server;
import io.swagger.v3.oas.models.Operation;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import
org.apache.shenyu.client.core.client.AbstractContextRefreshedEventListener;
import org.apache.shenyu.client.mcp.common.annotation.ShenyuMcpTool;
@@ -112,13 +113,20 @@ public class McpServiceEventListener extends
AbstractContextRefreshedEventListen
return;
}
Operation operation =
OpenApiConvertorUtil.convertOperation(methodMcpClient.operation());
- List<io.swagger.v3.oas.models.parameters.Parameter> parameters =
Arrays.stream(methodMcpClient.operation().parameters())
- .map(OpenApiConvertorUtil::convertParameter)
- .collect(Collectors.toCollection(ArrayList::new));
+ List<io.swagger.v3.oas.models.parameters.Parameter> parameters;
+ if (ArrayUtils.isNotEmpty(methodMcpClient.operation().parameters())) {
+ parameters =
Arrays.stream(methodMcpClient.operation().parameters())
+ .map(OpenApiConvertorUtil::convertParameter)
+ .collect(Collectors.toCollection(ArrayList::new));
+ } else {
+ parameters = new ArrayList<>();
+ }
injectParameter(parameters, method);
List<String> mergeUrls = findMergeUrl(clazz, method);
- operation.setParameters(parameters);
+ if (Objects.nonNull(operation)) {
+ operation.setParameters(parameters);
+ }
List<String> namespaceIds = this.getNamespace();
mergeUrls.forEach(url -> {
namespaceIds.forEach(namespaceId -> getPublisher().publishEvent(
@@ -130,13 +138,14 @@ public class McpServiceEventListener extends
AbstractContextRefreshedEventListen
private void injectParameter(final
List<io.swagger.v3.oas.models.parameters.Parameter> parameters, final Method
method) {
for (java.lang.reflect.Parameter parameter : method.getParameters()) {
ShenyuMcpToolParam mcpToolParam =
parameter.getAnnotation(ShenyuMcpToolParam.class);
- if (Objects.nonNull(mcpToolParam)) {
+ if (Objects.nonNull(mcpToolParam.parameter())) {
parameters.add(OpenApiConvertorUtil.convertParameter(mcpToolParam.parameter()));
}
}
}
private List<String> findMergeUrl(final Class<?> clazz, final Method
method) {
+
List<String> classPaths = Collections.emptyList();
RequestMapping classMapping =
AnnotatedElementUtils.findMergedAnnotation(clazz, RequestMapping.class);
if (Objects.nonNull(classMapping)) {
@@ -219,8 +228,12 @@ public class McpServiceEventListener extends
AbstractContextRefreshedEventListen
@Override
protected MetaDataRegisterDTO buildMetaDataDTO(final Object bean, final
ShenyuMcpTool shenyuClient, final String path,
final Class<?> clazz, final
Method method, final String namespaceId) {
+ ShenyuMcpTool methodClient =
AnnotatedElementUtils.findMergedAnnotation(method, ShenyuMcpTool.class);
String desc = shenyuClient.desc();
- String configRuleName = shenyuClient.toolName();
+ String configRuleName = null;
+ if (Objects.nonNull(methodClient)) {
+ configRuleName = methodClient.toolName();
+ }
String ruleName = ("".equals(configRuleName)) ? path : configRuleName;
String methodName = method.getName();
Class<?>[] parameterTypesClazz = method.getParameterTypes();
@@ -249,7 +262,7 @@ public class McpServiceEventListener extends
AbstractContextRefreshedEventListen
final Method method,
final String url, final String namespaceId) {
validateClientConfig(methodShenyuClient, url);
JsonObject openApiJson =
McpOpenApiGenerator.generateOpenApiJson(classShenyuClient, operation,
methodShenyuClient, url);
- McpToolsRegisterDTO mcpToolsRegisterDTO =
McpToolsRegisterDTOGenerator.generateRegisterDTO(classShenyuClient,
methodShenyuClient, openApiJson, url, namespaceId);
+ McpToolsRegisterDTO mcpToolsRegisterDTO =
McpToolsRegisterDTOGenerator.generateRegisterDTO(methodShenyuClient,
openApiJson, url, namespaceId);
MetaDataRegisterDTO metaDataRegisterDTO = buildMetaDataDTO(bean,
classShenyuClient, superPath, clazz, method, namespaceId);
metaDataRegisterDTO.setEnabled(methodShenyuClient.enabled());
mcpToolsRegisterDTO.setMetaDataRegisterDTO(metaDataRegisterDTO);
diff --git
a/shenyu-examples/shenyu-examples-mcp/src/main/java/org/apache/shenyu/controller/OrderController.java
b/shenyu-examples/shenyu-examples-mcp/src/main/java/org/apache/shenyu/controller/OrderController.java
index 0271ccd835..aad1c51ef9 100644
---
a/shenyu-examples/shenyu-examples-mcp/src/main/java/org/apache/shenyu/controller/OrderController.java
+++
b/shenyu-examples/shenyu-examples-mcp/src/main/java/org/apache/shenyu/controller/OrderController.java
@@ -43,8 +43,7 @@ import org.springframework.web.bind.annotation.RestController;
@ShenyuMcpTool(
definition = @OpenAPIDefinition(
servers = @Server(url = "http://localhost:8150")
- ), toolName = "order"
-
+ )
)
@ApiModule(value = "order")
public class OrderController {
@@ -66,7 +65,7 @@ public class OrderController {
@ShenyuMcpHeader(key = "aaa", value = "bbb")
}
),
- enabled = true
+ enabled = true, toolName = "findOrderById"
)
@ApiDoc(desc = "findById")
public OrderDTO findById(@ShenyuMcpToolParam(
@@ -85,4 +84,27 @@ public class OrderController {
dto.setId(id);
return dto;
}
+
+ /**
+ * Find all order dto.
+ *
+ * @return success
+ */
+ @GetMapping("/findAll")
+ @ShenyuMcpTool(
+ operation = @Operation(
+ method = "Get", description = "find all order"
+ ),
+ requestConfig = @ShenyuMcpRequestConfig(
+ bodyJson = "shenyu",
+ headers = {
+ @ShenyuMcpHeader(key = "aaa", value = "bbb")
+ }
+ ),
+ enabled = true, toolName = "findAllOrder"
+ )
+ @ApiDoc(desc = "findAll")
+ public String findAll() {
+ return "findAll success";
+ }
}