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

robertlazarski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git

commit 1fcb977114da64bcf231e7f0093b5208c5c49e6f
Author: Robert Lazarski <[email protected]>
AuthorDate: Fri Apr 10 09:02:59 2026 -1000

    Apply Gemini review: close HC5 HttpClient on shutdown
    
    Both ToolRegistry and McpStdioServer now implement Closeable with
    close() calling httpClient.close(). McpBridgeMain uses try-with-
    resources to ensure connection pools are released when stdin closes
    (Claude Desktop terminates the MCP subprocess).
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
---
 .../main/java/org/apache/axis2/mcp/bridge/McpBridgeMain.java   | 10 ++++++----
 .../main/java/org/apache/axis2/mcp/bridge/McpStdioServer.java  |  7 ++++++-
 .../main/java/org/apache/axis2/mcp/bridge/ToolRegistry.java    |  7 ++++++-
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpBridgeMain.java
 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpBridgeMain.java
index f78d7103cc..02a44385ad 100644
--- 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpBridgeMain.java
+++ 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpBridgeMain.java
@@ -88,11 +88,13 @@ public class McpBridgeMain {
                     keystorePath, keystorePass.toCharArray(),
                     truststorePath, truststorePass.toCharArray());
 
-            ToolRegistry registry = new ToolRegistry(baseUrl, mapper, 
sslContext);
-            registry.load();
+            try (ToolRegistry registry = new ToolRegistry(baseUrl, mapper, 
sslContext)) {
+                registry.load();
 
-            McpStdioServer server = new McpStdioServer(baseUrl, registry, 
mapper, sslContext);
-            server.run();
+                try (McpStdioServer server = new McpStdioServer(baseUrl, 
registry, mapper, sslContext)) {
+                    server.run();
+                }
+            }
 
         } catch (Exception e) {
             System.err.println("[axis2-mcp-bridge] Fatal: " + e.getMessage());
diff --git 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpStdioServer.java
 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpStdioServer.java
index 2d2723d7de..e94d93bbe9 100644
--- 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpStdioServer.java
+++ 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/McpStdioServer.java
@@ -57,7 +57,7 @@ import java.nio.charset.StandardCharsets;
  * <p>Notifications (messages without an {@code id} field) are silently 
consumed
  * with no response, as required by JSON-RPC 2.0.
  */
-public class McpStdioServer {
+public class McpStdioServer implements java.io.Closeable {
 
     private static final String PROTOCOL_VERSION = "2024-11-05";
     private static final String SERVER_NAME = "axis2-mcp-bridge";
@@ -281,4 +281,9 @@ public class McpStdioServer {
         out.println(json);
         out.flush();
     }
+
+    @Override
+    public void close() throws IOException {
+        httpClient.close();
+    }
 }
diff --git 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/ToolRegistry.java
 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/ToolRegistry.java
index 796116be13..e69f7c07b3 100644
--- 
a/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/ToolRegistry.java
+++ 
b/modules/mcp-bridge/src/main/java/org/apache/axis2/mcp/bridge/ToolRegistry.java
@@ -47,7 +47,7 @@ import java.util.Map;
  * It is fetched once at startup; restart the bridge to pick up newly deployed
  * services.
  */
-public class ToolRegistry {
+public class ToolRegistry implements java.io.Closeable {
 
     private final String baseUrl;
     private final ObjectMapper mapper;
@@ -140,4 +140,9 @@ public class ToolRegistry {
     public List<McpTool> getTools() { return tools; }
 
     public McpTool getTool(String name) { return toolMap.get(name); }
+
+    @Override
+    public void close() throws IOException {
+        httpClient.close();
+    }
 }

Reply via email to