Reputation: 4403
I have written the following code and it works well.
public void callingTheAPI() throws IOException{
BufferedReader bufferedReader= null;
CloseableHttpClient httpclient= null;
CloseableHttpResponse httpResponse= null;
try {
httpclient = HttpClients.createDefault();
HttpGet httpGet= new HttpGet(URL);
httpGet.addHeader("Authorization","Bearer "+getToken());
httpResponse=httpclient.execute(httpGet);
int responseCode= httpResponse.getStatusLine().getStatusCode();
System.out.println(responseCode);
bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent()));
StringBuilder stringBuilder= new StringBuilder();
String line;
while((line=bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
System.out.println(stringBuilder.toString());
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if (bufferedReader != null){
bufferedReader.close();
}
if(httpResponse != null){
httpResponse.close();
}
if (httpclient != null){
httpclient.close();
}
}
}
Recently I found out that there is a new feature called try-with-resource
from java 7
onwards which closes the resources automatically after the statement run correctly. How can I convert the following code to use try-with-resource
statement. I did a little bit but I am confuse with how to add all the resources to it. Here is the code
public void closeResources(){
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet= new HttpGet(URL);
httpGet.addHeader("Authorization","Bearer "+getToken());
CloseableHttpResponse httpResponse=httpclient.execute(httpGet);
int responseCode= httpResponse.getStatusLine().getStatusCode();
System.out.println(responseCode);
try(BufferedReader bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent()))){
StringBuilder stringBuilder= new StringBuilder();
String line;
while((line=bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
System.out.println(stringBuilder.toString());
} catch (UnsupportedOperationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Can you please help me to convert this code, so that it uses try-with-resources
statements. Thanks in advance
Upvotes: 0
Views: 10349
Reputation: 11620
Use ';
' as delimiter to separate your resources. Now the resources will close in oposite order of their declaration, so: BufferedReader,
InputStreamReader, CloseableHttpResponse.
You can look at this tutorial to undestand multiple try-catch-resources.
public void closeResources(){
// some code
try(CloseableHttpResponse httpResponse=httpclient.execute(httpGet);
InputStreamReader reader = new InputStreamReader(httpResponse.getEntity().getContent());
BufferedReader bufferedReader= new BufferedReader(reader)){
StringBuilder stringBuilder= new StringBuilder();
String line;
while((line=bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
System.out.println(stringBuilder.toString());
} catch (UnsupportedOperationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Upvotes: 0