Replace anonymous impls with ListenableFutureAdapater
Before this change AsyncRestTemplate had two anonymous implementations of ListenableFuture that were adapting the result. Those have been replaces with ListenableFutureAdapter. This commit is preparation for SPR-13785.
This commit is contained in:
parent
93298fc9fa
commit
037f351efd
|
|
@ -24,8 +24,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.core.task.AsyncListenableTaskExecutor;
|
||||
|
|
@ -44,11 +42,8 @@ import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
|||
import org.springframework.http.client.support.InterceptingAsyncHttpAccessor;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.concurrent.FailureCallback;
|
||||
import org.springframework.util.concurrent.ListenableFuture;
|
||||
import org.springframework.util.concurrent.ListenableFutureAdapter;
|
||||
import org.springframework.util.concurrent.ListenableFutureCallback;
|
||||
import org.springframework.util.concurrent.SuccessCallback;
|
||||
import org.springframework.web.util.DefaultUriTemplateHandler;
|
||||
import org.springframework.web.util.UriTemplateHandler;
|
||||
|
||||
|
|
@ -245,75 +240,37 @@ public class AsyncRestTemplate extends InterceptingAsyncHttpAccessor implements
|
|||
// POST
|
||||
|
||||
@Override
|
||||
public ListenableFuture<URI> postForLocation(String url, HttpEntity<?> request, Object... uriVariables)
|
||||
public ListenableFuture<URI> postForLocation(String url, HttpEntity<?> request, Object... uriVars)
|
||||
throws RestClientException {
|
||||
|
||||
AsyncRequestCallback requestCallback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture =
|
||||
execute(url, HttpMethod.POST, requestCallback, headersExtractor, uriVariables);
|
||||
return extractLocationHeader(headersFuture);
|
||||
AsyncRequestCallback callback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.POST, callback, extractor, uriVars);
|
||||
return adaptToLocationHeader(future);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<URI> postForLocation(String url, HttpEntity<?> request, Map<String, ?> uriVariables)
|
||||
public ListenableFuture<URI> postForLocation(String url, HttpEntity<?> request, Map<String, ?> uriVars)
|
||||
throws RestClientException {
|
||||
|
||||
AsyncRequestCallback requestCallback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture =
|
||||
execute(url, HttpMethod.POST, requestCallback, headersExtractor, uriVariables);
|
||||
return extractLocationHeader(headersFuture);
|
||||
AsyncRequestCallback callback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.POST, callback, extractor, uriVars);
|
||||
return adaptToLocationHeader(future);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<URI> postForLocation(URI url, HttpEntity<?> request) throws RestClientException {
|
||||
AsyncRequestCallback requestCallback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture =
|
||||
execute(url, HttpMethod.POST, requestCallback, headersExtractor);
|
||||
return extractLocationHeader(headersFuture);
|
||||
AsyncRequestCallback callback = httpEntityCallback(request);
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.POST, callback, extractor);
|
||||
return adaptToLocationHeader(future);
|
||||
}
|
||||
|
||||
private static ListenableFuture<URI> extractLocationHeader(final ListenableFuture<HttpHeaders> headersFuture) {
|
||||
return new ListenableFuture<URI>() {
|
||||
private static ListenableFuture<URI> adaptToLocationHeader(ListenableFuture<HttpHeaders> future) {
|
||||
return new ListenableFutureAdapter<URI, HttpHeaders>(future) {
|
||||
@Override
|
||||
public void addCallback(final ListenableFutureCallback<? super URI> callback) {
|
||||
addCallback(callback, callback);
|
||||
}
|
||||
@Override
|
||||
public void addCallback(final SuccessCallback<? super URI> successCallback, final FailureCallback failureCallback) {
|
||||
headersFuture.addCallback(new ListenableFutureCallback<HttpHeaders>() {
|
||||
@Override
|
||||
public void onSuccess(HttpHeaders result) {
|
||||
successCallback.onSuccess(result.getLocation());
|
||||
}
|
||||
@Override
|
||||
public void onFailure(Throwable ex) {
|
||||
failureCallback.onFailure(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public boolean cancel(boolean mayInterruptIfRunning) {
|
||||
return headersFuture.cancel(mayInterruptIfRunning);
|
||||
}
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return headersFuture.isCancelled();
|
||||
}
|
||||
@Override
|
||||
public boolean isDone() {
|
||||
return headersFuture.isDone();
|
||||
}
|
||||
@Override
|
||||
public URI get() throws InterruptedException, ExecutionException {
|
||||
HttpHeaders headers = headersFuture.get();
|
||||
return headers.getLocation();
|
||||
}
|
||||
@Override
|
||||
public URI get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
|
||||
HttpHeaders headers = headersFuture.get(timeout, unit);
|
||||
protected URI adapt(HttpHeaders headers) throws ExecutionException {
|
||||
return headers.getLocation();
|
||||
}
|
||||
};
|
||||
|
|
@ -389,71 +346,35 @@ public class AsyncRestTemplate extends InterceptingAsyncHttpAccessor implements
|
|||
// OPTIONS
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Set<HttpMethod>> optionsForAllow(String url, Object... uriVariables) throws RestClientException {
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor, uriVariables);
|
||||
return extractAllowHeader(headersFuture);
|
||||
public ListenableFuture<Set<HttpMethod>> optionsForAllow(String url, Object... uriVars) throws RestClientException {
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.OPTIONS, null, extractor, uriVars);
|
||||
return adaptToAllowHeader(future);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Set<HttpMethod>> optionsForAllow(String url, Map<String, ?> uriVariables) throws RestClientException {
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor, uriVariables);
|
||||
return extractAllowHeader(headersFuture);
|
||||
public ListenableFuture<Set<HttpMethod>> optionsForAllow(String url, Map<String, ?> uriVars) throws RestClientException {
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.OPTIONS, null, extractor, uriVars);
|
||||
return adaptToAllowHeader(future);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Set<HttpMethod>> optionsForAllow(URI url) throws RestClientException {
|
||||
ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor);
|
||||
return extractAllowHeader(headersFuture);
|
||||
ResponseExtractor<HttpHeaders> extractor = headersExtractor();
|
||||
ListenableFuture<HttpHeaders> future = execute(url, HttpMethod.OPTIONS, null, extractor);
|
||||
return adaptToAllowHeader(future);
|
||||
}
|
||||
|
||||
private static ListenableFuture<Set<HttpMethod>> extractAllowHeader(final ListenableFuture<HttpHeaders> headersFuture) {
|
||||
return new ListenableFuture<Set<HttpMethod>>() {
|
||||
private static ListenableFuture<Set<HttpMethod>> adaptToAllowHeader(ListenableFuture<HttpHeaders> future) {
|
||||
return new ListenableFutureAdapter<Set<HttpMethod>, HttpHeaders>(future) {
|
||||
@Override
|
||||
public void addCallback(final ListenableFutureCallback<? super Set<HttpMethod>> callback) {
|
||||
addCallback(callback, callback);
|
||||
}
|
||||
@Override
|
||||
public void addCallback(final SuccessCallback<? super Set<HttpMethod>> successCallback, final FailureCallback failureCallback) {
|
||||
headersFuture.addCallback(new ListenableFutureCallback<HttpHeaders>() {
|
||||
@Override
|
||||
public void onSuccess(HttpHeaders result) {
|
||||
successCallback.onSuccess(result.getAllow());
|
||||
}
|
||||
@Override
|
||||
public void onFailure(Throwable ex) {
|
||||
failureCallback.onFailure(ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public boolean cancel(boolean mayInterruptIfRunning) {
|
||||
return headersFuture.cancel(mayInterruptIfRunning);
|
||||
}
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return headersFuture.isCancelled();
|
||||
}
|
||||
@Override
|
||||
public boolean isDone() {
|
||||
return headersFuture.isDone();
|
||||
}
|
||||
@Override
|
||||
public Set<HttpMethod> get() throws InterruptedException, ExecutionException {
|
||||
HttpHeaders headers = headersFuture.get();
|
||||
return headers.getAllow();
|
||||
}
|
||||
@Override
|
||||
public Set<HttpMethod> get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
|
||||
HttpHeaders headers = headersFuture.get(timeout, unit);
|
||||
protected Set<HttpMethod> adapt(HttpHeaders headers) throws ExecutionException {
|
||||
return headers.getAllow();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// exchange
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue