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";
+    }
 }

Reply via email to