@ -24,8 +24,6 @@ import java.util.List;
@@ -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;
@@ -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
@@ -245,75 +240,37 @@ public class AsyncRestTemplate extends InterceptingAsyncHttpAccessor implements
// POST
@Override
public ListenableFuture < URI > postForLocation ( String url , HttpEntity < ? > request , Object . . . uriVariable s )
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 , ? > uriVariable s )
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 > ( ) {
@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 ( ) ;
}
private static ListenableFuture < URI > adaptToLocationHeader ( ListenableFuture < HttpHeaders > future ) {
return new ListenableFutureAdapter < URI , HttpHeaders > ( future ) {
@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
@@ -389,71 +346,35 @@ public class AsyncRestTemplate extends InterceptingAsyncHttpAccessor implements
// OPTIONS
@Override
public ListenableFuture < Set < HttpMethod > > optionsForAllow ( String url , Object . . . uriVariable s ) throws RestClientException {
ResponseExtractor < HttpHeaders > h eadersE xtractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > headersF uture = execute ( url , HttpMethod . OPTIONS , null , h eadersE xtractor, uriVariable s ) ;
return extractAllowHeader ( headersF uture) ;
public ListenableFuture < Set < HttpMethod > > optionsForAllow ( String url , Object . . . uriVars ) throws RestClientException {
ResponseExtractor < HttpHeaders > extractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > f uture = execute ( url , HttpMethod . OPTIONS , null , extractor , uriVars ) ;
return adaptToAllowHeader ( f uture) ;
}
@Override
public ListenableFuture < Set < HttpMethod > > optionsForAllow ( String url , Map < String , ? > uriVariable s ) throws RestClientException {
ResponseExtractor < HttpHeaders > h eadersE xtractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > headersF uture = execute ( url , HttpMethod . OPTIONS , null , h eadersE xtractor, uriVariable s ) ;
return extractAllowHeader ( headersF uture) ;
public ListenableFuture < Set < HttpMethod > > optionsForAllow ( String url , Map < String , ? > uriVars ) throws RestClientException {
ResponseExtractor < HttpHeaders > extractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > f uture = execute ( url , HttpMethod . OPTIONS , null , extractor , uriVars ) ;
return adaptToAllowHeader ( f uture) ;
}
@Override
public ListenableFuture < Set < HttpMethod > > optionsForAllow ( URI url ) throws RestClientException {
ResponseExtractor < HttpHeaders > h eadersE xtractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > headersF uture = execute ( url , HttpMethod . OPTIONS , null , h eadersE xtractor) ;
return extractAllowHeader ( headersF uture) ;
ResponseExtractor < HttpHeaders > extractor = headersExtractor ( ) ;
ListenableFuture < HttpHeaders > f uture = execute ( url , HttpMethod . OPTIONS , null , extractor ) ;
return adaptToAllowHeader ( f uture) ;
}
private static ListenableFuture < Set < HttpMethod > > extractAllowHeader ( final ListenableFuture < HttpHeaders > headersFuture ) {
return new ListenableFuture < Set < HttpMethod > > ( ) {
@Override
public void addCallback ( final ListenableFutureCallback < ? super Set < HttpMethod > > callback ) {
addCallback ( callback , callback ) ;
}
private static ListenableFuture < Set < HttpMethod > > adaptToAllowHeader ( ListenableFuture < HttpHeaders > future ) {
return new ListenableFutureAdapter < Set < HttpMethod > , HttpHeaders > ( future ) {
@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