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(); + } }
