Skip to content

Instantly share code, notes, and snippets.

@ezhov-da
Last active March 10, 2019 12:15
Show Gist options
  • Save ezhov-da/8a8d3291da3e9f09f8b5acaa12ccb4e1 to your computer and use it in GitHub Desktop.
Save ezhov-da/8a8d3291da3e9f09f8b5acaa12ccb4e1 to your computer and use it in GitHub Desktop.
groovy closeable
//[https://dzone.com/articles/groovy-goodness-making-sure-closeable-objects-are]
/*
If a class implements the Closeable interface, Groovy adds the withCloseable method to the class. The withCloseable method has a closure as an argument. The code in the closure is executed and then the implementation of the close method of the Closeable interface is invoked. The Closeable object is passed as an argument to the closure so we can refer to it inside the closure.
In the following example, we have two objects that implement the Closeable interface. By using withCloseable, we know for sure the close method is invoked after all the code in the closure is executed:
*/
@Grab(group='org.apache.httpcomponents', module='httpclient', version='4.5.3')
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.client.methods.HttpGet
// HttpClientBuilder.create().build() returns a CloseableHttpClient
// that implements the Closeable interface. Therefore we can use
// the withCloseable method to make sure the client is closed
// after the closure code is executed.
HttpClientBuilder.create().build().withCloseable { client ->
final request = new HttpGet('http://www.mrhaki.com')
// The execute method returns a CloseableHttpResponse object
// that implements the Closeable interface. We can use
// withCloseable method to make sure the response is closed
// after the closure code is executed.
client.execute(request).withCloseable { response ->
assert response.statusLine.statusCode == 200
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment