This is an automated email from the ASF dual-hosted git repository.

Aias00 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 392db947fb  fix: default namespace for Swagger MCP imports (#6714) 
(#7025)
392db947fb is described below

commit 392db947fbfdad606864951510c29bd23356230c
Author: Southern <[email protected]>
AuthorDate: Wed Sep 2 13:15:46 2026 +0800

     fix: default namespace for Swagger MCP imports (#6714) (#7025)
    
    - In the `importMcpConfig` method of `SwaggerImportServiceImpl`, use 
`Constants.SYS_DEFAULT_NAMESPACE_ID` for an empty namespace.
     - Ensure that the MCP tool DTOs and metadata DTOs use the same namespace.
     - Add unit tests for missing namespaces.
    
    Co-authored-by: zhengpeng <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../service/impl/SwaggerImportServiceImpl.java     |  6 ++++-
 .../service/impl/SwaggerImportServiceImplTest.java | 31 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImpl.java
index 62846158ed..81e31f0b39 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImpl.java
@@ -26,6 +26,7 @@ import io.swagger.v3.oas.models.Paths;
 import io.swagger.v3.oas.models.parameters.Parameter;
 import io.swagger.v3.parser.OpenAPIV3Parser;
 import okhttp3.Response;
+import org.apache.commons.lang3.StringUtils;
 
 import org.apache.shenyu.admin.model.bean.UpstreamInstance;
 import org.apache.shenyu.admin.model.dto.SwaggerImportRequest;
@@ -59,6 +60,8 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
+
 /**
  * Implementation of the {@link 
org.apache.shenyu.admin.service.SwaggerImportService}.
  */
@@ -126,7 +129,8 @@ public class SwaggerImportServiceImpl implements 
SwaggerImportService {
 
             String swaggerJson = fetchSwaggerDoc(request.getSwaggerUrl());
 
-            List<McpToolsRegisterDTO> mcpToolsRegisterDTOList = 
buildMcpToolRegisterDTO(swaggerJson, request.getNamespaceId());
+            String namespaceId = 
StringUtils.defaultIfEmpty(request.getNamespaceId(), SYS_DEFAULT_NAMESPACE_ID);
+            List<McpToolsRegisterDTO> mcpToolsRegisterDTOList = 
buildMcpToolRegisterDTO(swaggerJson, namespaceId);
 
             mcpToolsRegisterDTOList.forEach(mcpToolsRegisterDTO -> {
                 
shenyuClientRegisterMcpService.registerMcpTools(mcpToolsRegisterDTO);
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImplTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImplTest.java
index 231c01aa8a..cb48e6f2b4 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImplTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/impl/SwaggerImportServiceImplTest.java
@@ -28,9 +28,15 @@ import org.apache.shenyu.admin.model.bean.DocInfo;
 import org.apache.shenyu.admin.model.bean.UpstreamInstance;
 import org.apache.shenyu.admin.model.dto.SwaggerImportRequest;
 import org.apache.shenyu.admin.service.manager.DocManager;
+import 
org.apache.shenyu.admin.service.register.ShenyuClientRegisterMcpServiceImpl;
 import org.apache.shenyu.admin.utils.HttpUtils;
+import org.apache.shenyu.register.common.dto.McpToolsRegisterDTO;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import java.io.IOException;
@@ -41,18 +47,25 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.function.Consumer;
 
+import static 
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.verify;
 
 /**
  * Test for {@link SwaggerImportServiceImpl}.
  */
+@ExtendWith(MockitoExtension.class)
 public class SwaggerImportServiceImplTest {
 
     private static final String SWAGGER_URL = "https://8.8.8.8/swagger.json";;
 
     private static final String SWAGGER_JSON = 
"{\"swagger\":\"2.0\",\"info\":{\"title\":\"test\",\"version\":\"1.0\"},\"paths\":{}}";
 
+    private static final String MCP_SWAGGER_JSON = 
"{\"openapi\":\"3.0.0\",\"info\":{\"title\":\"test\",\"version\":\"1.0\"},"
+            + 
"\"servers\":[{\"url\":\"http://localhost:8080\"}],\"paths\":{\"/pets\":{\"get\":{";
+            + 
"\"operationId\":\"listPets\",\"parameters\":[],\"responses\":{\"200\":{\"description\":\"ok\"}}}}}}";
+
     private static final MediaType JSON_UTF_8 = 
MediaType.parse("application/json; charset=utf-8");
 
     private static final long DEFAULT_MAX_SWAGGER_BODY_SIZE = 10L * 1024 * 
1024;
@@ -63,12 +76,16 @@ public class SwaggerImportServiceImplTest {
 
     private SwaggerImportServiceImpl service;
 
+    @Mock
+    private ShenyuClientRegisterMcpServiceImpl mcpService;
+
     @BeforeEach
     public void setUp() {
         docManager = new RecordingDocManager();
         httpUtils = new StubHttpUtils();
         service = new SwaggerImportServiceImpl(docManager, httpUtils);
         ReflectionTestUtils.setField(service, "maxSwaggerBodySize", 
DEFAULT_MAX_SWAGGER_BODY_SIZE);
+        ReflectionTestUtils.setField(service, 
"shenyuClientRegisterMcpService", mcpService);
     }
 
     @Test
@@ -98,6 +115,20 @@ public class SwaggerImportServiceImplTest {
         assertThrows(IllegalArgumentException.class, () -> 
service.importSwagger(request()));
     }
 
+    @Test
+    public void importMcpConfigShouldDefaultMissingNamespaceId() throws 
IOException {
+        httpUtils.setResponse(response(responseBody(MCP_SWAGGER_JSON,
+                MCP_SWAGGER_JSON.getBytes(StandardCharsets.UTF_8).length, 
JSON_UTF_8)));
+
+        service.importMcpConfig(request());
+
+        ArgumentCaptor<McpToolsRegisterDTO> captor = 
ArgumentCaptor.forClass(McpToolsRegisterDTO.class);
+        verify(mcpService).registerMcpTools(captor.capture());
+        assertEquals(SYS_DEFAULT_NAMESPACE_ID, 
captor.getValue().getNamespaceId());
+        assertEquals(SYS_DEFAULT_NAMESPACE_ID,
+                captor.getValue().getMetaDataRegisterDTO().getNamespaceId());
+    }
+
     private SwaggerImportRequest request() {
         SwaggerImportRequest request = new SwaggerImportRequest();
         request.setSwaggerUrl(SWAGGER_URL);

Reply via email to