-
Notifications
You must be signed in to change notification settings - Fork 3
Description
PR Review Summary
The Pull Request introduces a new JiraService for interacting with Jira APIs. While the functional logic is present, there are critical issues related to HTTP client lifecycle management and character encoding reliability. The current implementation creates a new HTTP client for every request, which is a severe performance anti-pattern, and uses platform-dependent string decoding for authentication headers.
1. Performance & Resource Exhaustion (JiraService.java)
Problem:
The code instantiates a new DefaultHttpClient (which is also deprecated) for every single API call (GET, POST, PUT, DELETE). This prevents connection pooling, forcing a full TCP/TLS handshake for every request. Under load, this will cause high latency and potentially exhaust the server's available ports (TIME_WAIT state).
Location:
src/main/java/com/aliyun/api/gateway/demo/service/JiraService.java lines 207, 234, 267, 300.
// Current implementation (Anti-pattern)
private String executeGet(String url) throws Exception {
HttpClient httpClient = new DefaultHttpClient(); // Creates new client per request
// ...
httpClient.getConnectionManager().shutdown();
}Suggested Fix:
Use a single, shared CloseableHttpClient instance for the lifetime of the JiraService. Initialize it once (e.g., in the constructor) and reuse it.
// Recommended implementation
private final CloseableHttpClient httpClient;
public JiraService(JiraConfig config) {
this.config = config;
// ... auth setup ...
this.httpClient = HttpClients.createDefault(); // Or use a custom connection manager
}
// In execute methods:
// Do NOT shutdown the client after each request.2. Reliability & Encoding (JiraService.java)
Problem:
The Basic Auth header is constructed using new String(encodedAuth), which uses the JVM's default charset. If the application runs in an environment with a non-compatible default charset (e.g., certain Windows configurations or misconfigured containers), the Base64 string may be corrupted, leading to authentication failures.
Location:
src/main/java/com/aliyun/api/gateway/demo/service/JiraService.java line 57.
// Current
this.authHeader = "Basic " + new String(encodedAuth);Suggested Fix:
Explicitly use StandardCharsets.UTF_8 or use the Base64.encodeBase64String helper method which handles this automatically.
// Recommended
this.authHeader = "Basic " + new String(encodedAuth, StandardCharsets.UTF_8);
// OR
this.authHeader = "Basic " + Base64.encodeBase64String(auth.getBytes(StandardCharsets.UTF_8));