I have a process that uses RestTemplate
to call getForObject
. This task is submitted to an executor service. I allow the process x seconds of run time before attempting to cancel it. However when I call Future.cancel(true)
and the task is waiting in the getForObject
method, the thread / task is not cancelled.
I have tested the code such that if I put a Thread.sleep
in place of the getForObject
I get an InterruptedException
. However, when the task is inside getForObject
not interruption occurrs. In face the method does not return until the Restful invocation is complete.
Is there a way to cancel the rest call?
I saw this post cancel abort interrupt a spring android resttemplate request but the only proposed solution seems to be a kludge.
I'm not familiar with the
RestTemplate
class, but it sound like you have a non-interruptable blocking call. This means that canceling the future or interrupting the thread won't have any effect. The only solution that I know of in this case is to use the deprecatedThread.terminate()
method to kill the thread. Please note that you have to be VERY careful doing this because it can leave your object in an invalid state.