2016-05-25 61 views
0

eclipseの「潜在的なリソースリーク」警告が正しくありません。eclipse「潜在的なリソースリーク」警告が正しくない

警告なし:

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); 
String apiUrl = ...; 
HttpPost httpPost = new HttpPost(apiUrl); 
CloseableHttpResponse response = null; 
HttpEntity entity; 
try { 
    response = httpClient.execute(httpPost); 
    int statusCode = response.getStatusLine().getStatusCode(); 
    if (statusCode != HttpStatus.SC_OK) { 
     logger.warn("invoke failed, response status={},key={}",statusCode,key); 
     httpPost.close(); 
     if (response != null) { 
      response.close(); 
     } 
     return null; 
    } 
} 

警告:潜在的なリソースリーク:

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); 
    String apiUrl = ...; 
    HttpPost httpPost = new HttpPost(apiUrl); 
    CloseableHttpResponse response = null; 
    HttpEntity entity; 
    try { 
     response = httpClient.execute(httpPost); 
     int statusCode = response.getStatusLine().getStatusCode(); 
     if (statusCode != HttpStatus.SC_OK) { 
      logger.warn("invoke failed, response status={},key={}",statusCode,key); 
      closeBoth(httpClient, response) 
      return null; 
     } 
    } 

private void closeBoth(CloseableHttpClient client, CloseableHttpResponse resp) { 
    org.apache.poi.util.IOUtils.closeQuitely(client); 
    org.apache.poi.util.IOUtils.closeQuitely(resp); 
} 

なぜ第二のアプローチ原因警告 "応答は、この場所で閉鎖することはできませんか"?

ありがとうございます!

+1

'closeBoth'が常に' httpClient'と 'response'を閉じることをeclipseがどのように知っていますか? –

+1

try-with-resourcesを使用してみませんか? –

答えて

0

Eclipseクローズ警告コードは、現在のメソッドのみを調べます。 closeBothメソッドを分析して、それが何であるかを確認しません(この場合は、closeQuitelyも参照する必要があります)。

+0

次のようにしてください:また、それが何であるかを取る:警告。それはあなたを助けることです。クラスアイコンの警告サインが気になる場合は、マークされた行の上に '@SuppressWarning(" resource ")'を追加できます。 –

関連する問題