Turned AsyncRequestCallbackAdapter into a private inner class
Issue: SPR-8804
This commit is contained in:
		
							parent
							
								
									bb971cecf1
								
							
						
					
					
						commit
						38c8c6d085
					
				| 
						 | 
					@ -1,81 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright 2002-2013 the original author or authors.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package org.springframework.web.client;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					 | 
				
			||||||
import java.io.OutputStream;
 | 
					 | 
				
			||||||
import java.net.URI;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.springframework.http.HttpHeaders;
 | 
					 | 
				
			||||||
import org.springframework.http.HttpMethod;
 | 
					 | 
				
			||||||
import org.springframework.http.client.AsyncClientHttpRequest;
 | 
					 | 
				
			||||||
import org.springframework.http.client.ClientHttpRequest;
 | 
					 | 
				
			||||||
import org.springframework.http.client.ClientHttpResponse;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Adapts a {@link RequestCallback} to the {@link AsyncRequestCallback} interface.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @author Arjen Poutsma
 | 
					 | 
				
			||||||
 * @since 4.0
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public class AsyncRequestCallbackAdapter implements AsyncRequestCallback {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	private final RequestCallback adaptee;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Creates a new {@code AsyncRequestCallbackAdapter} from the given
 | 
					 | 
				
			||||||
	 * {@link RequestCallback}.
 | 
					 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @param requestCallback the callback to base this adapter on
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	public AsyncRequestCallbackAdapter(RequestCallback requestCallback) {
 | 
					 | 
				
			||||||
		this.adaptee = requestCallback;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void doWithRequest(final AsyncClientHttpRequest request) throws IOException {
 | 
					 | 
				
			||||||
		if (adaptee != null) {
 | 
					 | 
				
			||||||
			adaptee.doWithRequest(new ClientHttpRequest() {
 | 
					 | 
				
			||||||
				@Override
 | 
					 | 
				
			||||||
				public ClientHttpResponse execute() throws IOException {
 | 
					 | 
				
			||||||
					throw new UnsupportedOperationException("execute not supported");
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				@Override
 | 
					 | 
				
			||||||
				public OutputStream getBody() throws IOException {
 | 
					 | 
				
			||||||
					return request.getBody();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				@Override
 | 
					 | 
				
			||||||
				public HttpMethod getMethod() {
 | 
					 | 
				
			||||||
					return request.getMethod();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				@Override
 | 
					 | 
				
			||||||
				public URI getURI() {
 | 
					 | 
				
			||||||
					return request.getURI();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				@Override
 | 
					 | 
				
			||||||
				public HttpHeaders getHeaders() {
 | 
					 | 
				
			||||||
					return request.getHeaders();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,7 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	RestOperations getRestOperations();
 | 
						RestOperations getRestOperations();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// GET
 | 
						// GET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
| 
						 | 
					@ -272,6 +273,7 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	Future<Set<HttpMethod>> optionsForAllow(URI url) throws RestClientException;
 | 
						Future<Set<HttpMethod>> optionsForAllow(URI url) throws RestClientException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// exchange
 | 
						// exchange
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
| 
						 | 
					@ -281,8 +283,8 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * <p>URI Template variables are expanded using the given URI variables, if any.
 | 
						 * <p>URI Template variables are expanded using the given URI variables, if any.
 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the request, may
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the request
 | 
				
			||||||
	 *                      be {@code null}
 | 
						 * (may be {@code null})
 | 
				
			||||||
	 * @param responseType the type of the return value
 | 
						 * @param responseType the type of the return value
 | 
				
			||||||
	 * @param uriVariables the variables to expand in the template
 | 
						 * @param uriVariables the variables to expand in the template
 | 
				
			||||||
	 * @return the response as entity wrapped in a {@link Future}
 | 
						 * @return the response as entity wrapped in a {@link Future}
 | 
				
			||||||
| 
						 | 
					@ -298,8 +300,8 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * <p>URI Template variables are expanded using the given URI variables, if any.
 | 
						 * <p>URI Template variables are expanded using the given URI variables, if any.
 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the request, may
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the request
 | 
				
			||||||
	 *                      be {@code null}
 | 
						 * (may be {@code null})
 | 
				
			||||||
	 * @param responseType the type of the return value
 | 
						 * @param responseType the type of the return value
 | 
				
			||||||
	 * @param uriVariables the variables to expand in the template
 | 
						 * @param uriVariables the variables to expand in the template
 | 
				
			||||||
	 * @return the response as entity wrapped in a {@link Future}
 | 
						 * @return the response as entity wrapped in a {@link Future}
 | 
				
			||||||
| 
						 | 
					@ -314,8 +316,8 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * {@link ResponseEntity}.
 | 
						 * {@link ResponseEntity}.
 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the request, may
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the request
 | 
				
			||||||
	 *                      be {@code null}
 | 
						 * (may be {@code null})
 | 
				
			||||||
	 * @param responseType the type of the return value
 | 
						 * @param responseType the type of the return value
 | 
				
			||||||
	 * @return the response as entity wrapped in a {@link Future}
 | 
						 * @return the response as entity wrapped in a {@link Future}
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					@ -328,12 +330,10 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
						 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
				
			||||||
	 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
						 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
				
			||||||
	 * information:
 | 
						 * information:
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * <pre class="code">
 | 
						 * <pre class="code">
 | 
				
			||||||
	 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
						 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
				
			||||||
	 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
						 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
				
			||||||
	 * </pre>
 | 
						 * </pre>
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the
 | 
				
			||||||
| 
						 | 
					@ -351,12 +351,10 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
						 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
				
			||||||
	 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
						 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
				
			||||||
	 * information:
 | 
						 * information:
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * <pre class="code">
 | 
						 * <pre class="code">
 | 
				
			||||||
	 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
						 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
				
			||||||
	 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
						 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
				
			||||||
	 * </pre>
 | 
						 * </pre>
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null}
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null}
 | 
				
			||||||
| 
						 | 
					@ -373,12 +371,10 @@ public interface AsyncRestOperations {
 | 
				
			||||||
	 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
						 * request entity to the request, and returns the response as {@link ResponseEntity}.
 | 
				
			||||||
	 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
						 * The given {@link ParameterizedTypeReference} is used to pass generic type
 | 
				
			||||||
	 * information:
 | 
						 * information:
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * <pre class="code">
 | 
						 * <pre class="code">
 | 
				
			||||||
	 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
						 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {};
 | 
				
			||||||
	 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
						 * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
 | 
				
			||||||
	 * </pre>
 | 
						 * </pre>
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @param url the URL
 | 
						 * @param url the URL
 | 
				
			||||||
	 * @param method the HTTP method (GET, POST, etc)
 | 
						 * @param method the HTTP method (GET, POST, etc)
 | 
				
			||||||
	 * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null}
 | 
						 * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@
 | 
				
			||||||
package org.springframework.web.client;
 | 
					package org.springframework.web.client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.OutputStream;
 | 
				
			||||||
import java.lang.reflect.Type;
 | 
					import java.lang.reflect.Type;
 | 
				
			||||||
import java.net.URI;
 | 
					import java.net.URI;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
| 
						 | 
					@ -36,6 +37,7 @@ import org.springframework.http.HttpMethod;
 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.http.client.AsyncClientHttpRequest;
 | 
					import org.springframework.http.client.AsyncClientHttpRequest;
 | 
				
			||||||
import org.springframework.http.client.AsyncClientHttpRequestFactory;
 | 
					import org.springframework.http.client.AsyncClientHttpRequestFactory;
 | 
				
			||||||
 | 
					import org.springframework.http.client.ClientHttpRequest;
 | 
				
			||||||
import org.springframework.http.client.ClientHttpRequestFactory;
 | 
					import org.springframework.http.client.ClientHttpRequestFactory;
 | 
				
			||||||
import org.springframework.http.client.ClientHttpResponse;
 | 
					import org.springframework.http.client.ClientHttpResponse;
 | 
				
			||||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
 | 
					import org.springframework.http.client.SimpleClientHttpRequestFactory;
 | 
				
			||||||
| 
						 | 
					@ -55,7 +57,7 @@ import org.springframework.web.util.UriTemplate;
 | 
				
			||||||
 * {@linkplain #setMessageConverters(List) message converters} with this
 | 
					 * {@linkplain #setMessageConverters(List) message converters} with this
 | 
				
			||||||
 * {@code RestTemplate}.
 | 
					 * {@code RestTemplate}.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * <p>For more information, please refer to the {@link RestTemplate} API documentation</p>
 | 
					 * <p>For more information, please refer to the {@link RestTemplate} API documentation.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Arjen Poutsma
 | 
					 * @author Arjen Poutsma
 | 
				
			||||||
 * @since 4.0
 | 
					 * @since 4.0
 | 
				
			||||||
| 
						 | 
					@ -82,7 +84,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * with the given {@code AsyncTaskExecutor} for asynchronous execution.
 | 
						 * with the given {@code AsyncTaskExecutor} for asynchronous execution.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public AsyncRestTemplate(AsyncTaskExecutor taskExecutor) {
 | 
						public AsyncRestTemplate(AsyncTaskExecutor taskExecutor) {
 | 
				
			||||||
		Assert.notNull(taskExecutor, "'taskExecutor' must not be null");
 | 
							Assert.notNull(taskExecutor, "AsyncTaskExecutor must not be null");
 | 
				
			||||||
		SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
 | 
							SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
 | 
				
			||||||
		requestFactory.setTaskExecutor(taskExecutor);
 | 
							requestFactory.setTaskExecutor(taskExecutor);
 | 
				
			||||||
		this.syncTemplate = new RestTemplate(requestFactory);
 | 
							this.syncTemplate = new RestTemplate(requestFactory);
 | 
				
			||||||
| 
						 | 
					@ -108,8 +110,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * @param asyncRequestFactory the asynchronous request factory
 | 
						 * @param asyncRequestFactory the asynchronous request factory
 | 
				
			||||||
	 * @param syncRequestFactory the synchronous request factory
 | 
						 * @param syncRequestFactory the synchronous request factory
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public AsyncRestTemplate(AsyncClientHttpRequestFactory asyncRequestFactory,
 | 
						public AsyncRestTemplate(AsyncClientHttpRequestFactory asyncRequestFactory, ClientHttpRequestFactory syncRequestFactory) {
 | 
				
			||||||
			ClientHttpRequestFactory syncRequestFactory) {
 | 
					 | 
				
			||||||
		this(asyncRequestFactory, new RestTemplate(syncRequestFactory));
 | 
							this(asyncRequestFactory, new RestTemplate(syncRequestFactory));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,13 +120,13 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * @param requestFactory the asynchronous request factory to use
 | 
						 * @param requestFactory the asynchronous request factory to use
 | 
				
			||||||
	 * @param restTemplate the synchronous template to use
 | 
						 * @param restTemplate the synchronous template to use
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public AsyncRestTemplate(AsyncClientHttpRequestFactory requestFactory,
 | 
						public AsyncRestTemplate(AsyncClientHttpRequestFactory requestFactory, RestTemplate restTemplate) {
 | 
				
			||||||
			RestTemplate restTemplate) {
 | 
					 | 
				
			||||||
		Assert.notNull(restTemplate, "'restTemplate' must not be null");
 | 
							Assert.notNull(restTemplate, "'restTemplate' must not be null");
 | 
				
			||||||
		this.syncTemplate = restTemplate;
 | 
							this.syncTemplate = restTemplate;
 | 
				
			||||||
		setAsyncRequestFactory(requestFactory);
 | 
							setAsyncRequestFactory(requestFactory);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Set the error handler.
 | 
						 * Set the error handler.
 | 
				
			||||||
	 * <p>By default, AsyncRestTemplate uses a
 | 
						 * <p>By default, AsyncRestTemplate uses a
 | 
				
			||||||
| 
						 | 
					@ -160,11 +161,13 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		return syncTemplate.getMessageConverters();
 | 
							return syncTemplate.getMessageConverters();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// GET
 | 
						// GET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <T> Future<ResponseEntity<T>> getForEntity(String url, Class<T> responseType,
 | 
						public <T> Future<ResponseEntity<T>> getForEntity(String url, Class<T> responseType, Object... uriVariables)
 | 
				
			||||||
			Object... uriVariables) throws RestClientException {
 | 
								throws RestClientException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
							AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
				
			||||||
		ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
							ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
				
			||||||
		return execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
 | 
							return execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
 | 
				
			||||||
| 
						 | 
					@ -173,14 +176,14 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <T> Future<ResponseEntity<T>> getForEntity(String url, Class<T> responseType,
 | 
						public <T> Future<ResponseEntity<T>> getForEntity(String url, Class<T> responseType,
 | 
				
			||||||
			Map<String, ?> urlVariables) throws RestClientException {
 | 
								Map<String, ?> urlVariables) throws RestClientException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
							AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
				
			||||||
		ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
							ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
				
			||||||
		return execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
 | 
							return execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <T> Future<ResponseEntity<T>> getForEntity(URI url, Class<T> responseType)
 | 
						public <T> Future<ResponseEntity<T>> getForEntity(URI url, Class<T> responseType) throws RestClientException {
 | 
				
			||||||
			throws RestClientException {
 | 
					 | 
				
			||||||
		AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
							AsyncRequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
 | 
				
			||||||
		ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
							ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
 | 
				
			||||||
		return execute(url, HttpMethod.GET, requestCallback, responseExtractor);
 | 
							return execute(url, HttpMethod.GET, requestCallback, responseExtractor);
 | 
				
			||||||
| 
						 | 
					@ -189,15 +192,13 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	// HEAD
 | 
						// HEAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Future<HttpHeaders> headForHeaders(String url, Object... uriVariables)
 | 
						public Future<HttpHeaders> headForHeaders(String url, Object... uriVariables) throws RestClientException {
 | 
				
			||||||
			throws RestClientException {
 | 
					 | 
				
			||||||
		ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
							ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
				
			||||||
		return execute(url, HttpMethod.HEAD, null, headersExtractor, uriVariables);
 | 
							return execute(url, HttpMethod.HEAD, null, headersExtractor, uriVariables);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Future<HttpHeaders> headForHeaders(String url, Map<String, ?> uriVariables)
 | 
						public Future<HttpHeaders> headForHeaders(String url, Map<String, ?> uriVariables) throws RestClientException {
 | 
				
			||||||
			throws RestClientException {
 | 
					 | 
				
			||||||
		ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
							ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
				
			||||||
		return execute(url, HttpMethod.HEAD, null, headersExtractor, uriVariables);
 | 
							return execute(url, HttpMethod.HEAD, null, headersExtractor, uriVariables);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -248,23 +249,19 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
			public boolean cancel(boolean mayInterruptIfRunning) {
 | 
								public boolean cancel(boolean mayInterruptIfRunning) {
 | 
				
			||||||
				return headersFuture.cancel(mayInterruptIfRunning);
 | 
									return headersFuture.cancel(mayInterruptIfRunning);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public boolean isCancelled() {
 | 
								public boolean isCancelled() {
 | 
				
			||||||
				return headersFuture.isCancelled();
 | 
									return headersFuture.isCancelled();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public boolean isDone() {
 | 
								public boolean isDone() {
 | 
				
			||||||
				return headersFuture.isDone();
 | 
									return headersFuture.isDone();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public URI get() throws InterruptedException, ExecutionException {
 | 
								public URI get() throws InterruptedException, ExecutionException {
 | 
				
			||||||
				HttpHeaders headers = headersFuture.get();
 | 
									HttpHeaders headers = headersFuture.get();
 | 
				
			||||||
				return headers.getLocation();
 | 
									return headers.getLocation();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public URI get(long timeout, TimeUnit unit)
 | 
								public URI get(long timeout, TimeUnit unit)
 | 
				
			||||||
					throws InterruptedException, ExecutionException, TimeoutException {
 | 
										throws InterruptedException, ExecutionException, TimeoutException {
 | 
				
			||||||
| 
						 | 
					@ -348,30 +345,23 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	// OPTIONS
 | 
						// OPTIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Future<Set<HttpMethod>> optionsForAllow(String url, Object... uriVariables)
 | 
						public Future<Set<HttpMethod>> optionsForAllow(String url, Object... uriVariables) throws RestClientException {
 | 
				
			||||||
			throws RestClientException {
 | 
					 | 
				
			||||||
		ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
							ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
				
			||||||
		Future<HttpHeaders>
 | 
							Future<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor, uriVariables);
 | 
				
			||||||
				headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor,
 | 
					 | 
				
			||||||
				uriVariables);
 | 
					 | 
				
			||||||
		return extractAllowHeader(headersFuture);
 | 
							return extractAllowHeader(headersFuture);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Future<Set<HttpMethod>> optionsForAllow(String url,
 | 
						public Future<Set<HttpMethod>> optionsForAllow(String url, Map<String, ?> uriVariables) throws RestClientException {
 | 
				
			||||||
			Map<String, ?> uriVariables) throws RestClientException {
 | 
					 | 
				
			||||||
		ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
							ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
				
			||||||
		Future<HttpHeaders>
 | 
							Future<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor, uriVariables);
 | 
				
			||||||
				headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor,
 | 
					 | 
				
			||||||
				uriVariables);
 | 
					 | 
				
			||||||
		return extractAllowHeader(headersFuture);
 | 
							return extractAllowHeader(headersFuture);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Future<Set<HttpMethod>> optionsForAllow(URI url) throws RestClientException {
 | 
						public Future<Set<HttpMethod>> optionsForAllow(URI url) throws RestClientException {
 | 
				
			||||||
		ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
							ResponseExtractor<HttpHeaders> headersExtractor = headersExtractor();
 | 
				
			||||||
		Future<HttpHeaders>
 | 
							Future<HttpHeaders> headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor);
 | 
				
			||||||
				headersFuture = execute(url, HttpMethod.OPTIONS, null, headersExtractor);
 | 
					 | 
				
			||||||
		return extractAllowHeader(headersFuture);
 | 
							return extractAllowHeader(headersFuture);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -381,23 +371,19 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
			public boolean cancel(boolean mayInterruptIfRunning) {
 | 
								public boolean cancel(boolean mayInterruptIfRunning) {
 | 
				
			||||||
				return headersFuture.cancel(mayInterruptIfRunning);
 | 
									return headersFuture.cancel(mayInterruptIfRunning);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public boolean isCancelled() {
 | 
								public boolean isCancelled() {
 | 
				
			||||||
				return headersFuture.isCancelled();
 | 
									return headersFuture.isCancelled();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public boolean isDone() {
 | 
								public boolean isDone() {
 | 
				
			||||||
				return headersFuture.isDone();
 | 
									return headersFuture.isDone();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public Set<HttpMethod> get() throws InterruptedException, ExecutionException {
 | 
								public Set<HttpMethod> get() throws InterruptedException, ExecutionException {
 | 
				
			||||||
				HttpHeaders headers = headersFuture.get();
 | 
									HttpHeaders headers = headersFuture.get();
 | 
				
			||||||
				return headers.getAllow();
 | 
									return headers.getAllow();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public Set<HttpMethod> get(long timeout, TimeUnit unit)
 | 
								public Set<HttpMethod> get(long timeout, TimeUnit unit)
 | 
				
			||||||
					throws InterruptedException, ExecutionException, TimeoutException {
 | 
										throws InterruptedException, ExecutionException, TimeoutException {
 | 
				
			||||||
| 
						 | 
					@ -407,6 +393,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// exchange
 | 
						// exchange
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					@ -475,6 +462,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		return execute(url, method, requestCallback, responseExtractor);
 | 
							return execute(url, method, requestCallback, responseExtractor);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// general execution
 | 
						// general execution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					@ -496,8 +484,9 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <T> Future<T> execute(URI url, HttpMethod method, AsyncRequestCallback requestCallback,
 | 
						public <T> Future<T> execute(URI url, HttpMethod method,
 | 
				
			||||||
			ResponseExtractor<T> responseExtractor) throws RestClientException {
 | 
								AsyncRequestCallback requestCallback, ResponseExtractor<T> responseExtractor)
 | 
				
			||||||
 | 
								throws RestClientException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return doExecute(url, method, requestCallback, responseExtractor);
 | 
							return doExecute(url, method, requestCallback, responseExtractor);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -507,7 +496,6 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * {@link org.springframework.http.client.ClientHttpRequest}
 | 
						 * {@link org.springframework.http.client.ClientHttpRequest}
 | 
				
			||||||
	 * is processed using the {@link RequestCallback}; the response with
 | 
						 * is processed using the {@link RequestCallback}; the response with
 | 
				
			||||||
	 * the {@link ResponseExtractor}.
 | 
						 * the {@link ResponseExtractor}.
 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @param url the fully-expanded URL to connect to
 | 
						 * @param url the fully-expanded URL to connect to
 | 
				
			||||||
	 * @param method the HTTP method to execute (GET, POST, etc.)
 | 
						 * @param method the HTTP method to execute (GET, POST, etc.)
 | 
				
			||||||
	 * @param requestCallback object that prepares the request (can be {@code null})
 | 
						 * @param requestCallback object that prepares the request (can be {@code null})
 | 
				
			||||||
| 
						 | 
					@ -516,9 +504,8 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * @return an arbitrary object, as returned by the {@link ResponseExtractor}
 | 
						 * @return an arbitrary object, as returned by the {@link ResponseExtractor}
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
	protected <T> Future<T> doExecute(URI url, HttpMethod method,
 | 
						protected <T> Future<T> doExecute(URI url, HttpMethod method, AsyncRequestCallback requestCallback,
 | 
				
			||||||
			AsyncRequestCallback requestCallback, ResponseExtractor<T> responseExtractor)
 | 
								ResponseExtractor<T> responseExtractor) throws RestClientException {
 | 
				
			||||||
			throws RestClientException {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Assert.notNull(url, "'url' must not be null");
 | 
							Assert.notNull(url, "'url' must not be null");
 | 
				
			||||||
		Assert.notNull(method, "'method' must not be null");
 | 
							Assert.notNull(method, "'method' must not be null");
 | 
				
			||||||
| 
						 | 
					@ -541,8 +528,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void logResponseStatus(HttpMethod method, URI url,
 | 
						private void logResponseStatus(HttpMethod method, URI url, ClientHttpResponse response) {
 | 
				
			||||||
			ClientHttpResponse response) {
 | 
					 | 
				
			||||||
		if (logger.isDebugEnabled()) {
 | 
							if (logger.isDebugEnabled()) {
 | 
				
			||||||
			try {
 | 
								try {
 | 
				
			||||||
				logger.debug("Async " + method.name() + " request for \"" + url +
 | 
									logger.debug("Async " + method.name() + " request for \"" + url +
 | 
				
			||||||
| 
						 | 
					@ -555,8 +541,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void handleResponseError(HttpMethod method, URI url,
 | 
						private void handleResponseError(HttpMethod method, URI url, ClientHttpResponse response) throws IOException {
 | 
				
			||||||
			ClientHttpResponse response) throws IOException {
 | 
					 | 
				
			||||||
		if (logger.isWarnEnabled()) {
 | 
							if (logger.isWarnEnabled()) {
 | 
				
			||||||
			try {
 | 
								try {
 | 
				
			||||||
				logger.warn("Async " + method.name() + " request for \"" + url +
 | 
									logger.warn("Async " + method.name() + " request for \"" + url +
 | 
				
			||||||
| 
						 | 
					@ -575,10 +560,8 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * headers based on the given response type and configured {@linkplain
 | 
						 * headers based on the given response type and configured {@linkplain
 | 
				
			||||||
	 * #getMessageConverters() message converters}.
 | 
						 * #getMessageConverters() message converters}.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	protected <T> AsyncRequestCallbackAdapter acceptHeaderRequestCallback(
 | 
						protected <T> AsyncRequestCallback acceptHeaderRequestCallback(Class<T> responseType) {
 | 
				
			||||||
			Class<T> responseType) {
 | 
							return new AsyncRequestCallbackAdapter(this.syncTemplate.acceptHeaderRequestCallback(responseType));
 | 
				
			||||||
		return new AsyncRequestCallbackAdapter(
 | 
					 | 
				
			||||||
				this.syncTemplate.acceptHeaderRequestCallback(responseType));
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
| 
						 | 
					@ -586,25 +569,21 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	 * request stream.
 | 
						 * request stream.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	protected <T> AsyncRequestCallback httpEntityCallback(HttpEntity<T> requestBody) {
 | 
						protected <T> AsyncRequestCallback httpEntityCallback(HttpEntity<T> requestBody) {
 | 
				
			||||||
		return new AsyncRequestCallbackAdapter(
 | 
							return new AsyncRequestCallbackAdapter(this.syncTemplate.httpEntityCallback(requestBody));
 | 
				
			||||||
				this.syncTemplate.httpEntityCallback(requestBody));
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Returns a request callback implementation that writes the given object to the
 | 
						 * Returns a request callback implementation that writes the given object to the
 | 
				
			||||||
	 * request stream.
 | 
						 * request stream.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	protected <T> AsyncRequestCallback httpEntityCallback(HttpEntity<T> request,
 | 
						protected <T> AsyncRequestCallback httpEntityCallback(HttpEntity<T> request, Type responseType) {
 | 
				
			||||||
			Type responseType) {
 | 
							return new AsyncRequestCallbackAdapter(this.syncTemplate.httpEntityCallback(request, responseType));
 | 
				
			||||||
		return new AsyncRequestCallbackAdapter(
 | 
					 | 
				
			||||||
				this.syncTemplate.httpEntityCallback(request, responseType));
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Returns a response extractor for {@link ResponseEntity}.
 | 
						 * Returns a response extractor for {@link ResponseEntity}.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	protected <T> ResponseExtractor<ResponseEntity<T>> responseEntityExtractor(
 | 
						protected <T> ResponseExtractor<ResponseEntity<T>> responseEntityExtractor(Type responseType) {
 | 
				
			||||||
			Type responseType) {
 | 
					 | 
				
			||||||
		return this.syncTemplate.responseEntityExtractor(responseType);
 | 
							return this.syncTemplate.responseEntityExtractor(responseType);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -615,6 +594,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		return this.syncTemplate.headersExtractor();
 | 
							return this.syncTemplate.headersExtractor();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private abstract class ResponseFuture<T> implements Future<T> {
 | 
						private abstract class ResponseFuture<T> implements Future<T> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private final HttpMethod method;
 | 
							private final HttpMethod method;
 | 
				
			||||||
| 
						 | 
					@ -623,7 +603,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private final Future<ClientHttpResponse> responseFuture;
 | 
							private final Future<ClientHttpResponse> responseFuture;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		protected ResponseFuture(HttpMethod method, URI url, Future<ClientHttpResponse> responseFuture) {
 | 
							public ResponseFuture(HttpMethod method, URI url, Future<ClientHttpResponse> responseFuture) {
 | 
				
			||||||
			this.method = method;
 | 
								this.method = method;
 | 
				
			||||||
			this.url = url;
 | 
								this.url = url;
 | 
				
			||||||
			this.responseFuture = responseFuture;
 | 
								this.responseFuture = responseFuture;
 | 
				
			||||||
| 
						 | 
					@ -650,8 +630,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
		public T get(long timeout, TimeUnit unit)
 | 
							public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
 | 
				
			||||||
				throws InterruptedException, ExecutionException, TimeoutException {
 | 
					 | 
				
			||||||
			return getInternal(this.responseFuture.get(timeout, unit));
 | 
								return getInternal(this.responseFuture.get(timeout, unit));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -685,8 +664,7 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private final ResponseExtractor<T> responseExtractor;
 | 
							private final ResponseExtractor<T> responseExtractor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private ResponseExtractorFuture(HttpMethod method, URI url,
 | 
							public ResponseExtractorFuture(HttpMethod method, URI url, Future<ClientHttpResponse> responseFuture,
 | 
				
			||||||
				Future<ClientHttpResponse> responseFuture,
 | 
					 | 
				
			||||||
				ResponseExtractor<T> responseExtractor) {
 | 
									ResponseExtractor<T> responseExtractor) {
 | 
				
			||||||
			super(method, url, responseFuture);
 | 
								super(method, url, responseFuture);
 | 
				
			||||||
			this.responseExtractor = responseExtractor;
 | 
								this.responseExtractor = responseExtractor;
 | 
				
			||||||
| 
						 | 
					@ -698,10 +676,10 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private class VoidResponseFuture extends ResponseFuture<Void> {
 | 
						private class VoidResponseFuture extends ResponseFuture<Void> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private VoidResponseFuture(HttpMethod method, URI url,
 | 
							public VoidResponseFuture(HttpMethod method, URI url, Future<ClientHttpResponse> responseFuture) {
 | 
				
			||||||
				Future<ClientHttpResponse> responseFuture) {
 | 
					 | 
				
			||||||
			super(method, url, responseFuture);
 | 
								super(method, url, responseFuture);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -712,4 +690,49 @@ public class AsyncRestTemplate extends AsyncHttpAccessor implements AsyncRestOpe
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Adapts a {@link RequestCallback} to the {@link AsyncRequestCallback} interface.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private static class AsyncRequestCallbackAdapter implements AsyncRequestCallback {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private final RequestCallback adaptee;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Create a new {@code AsyncRequestCallbackAdapter} from the given
 | 
				
			||||||
 | 
							 * {@link RequestCallback}.
 | 
				
			||||||
 | 
							 * @param requestCallback the callback to base this adapter on
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							public AsyncRequestCallbackAdapter(RequestCallback requestCallback) {
 | 
				
			||||||
 | 
								this.adaptee = requestCallback;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public void doWithRequest(final AsyncClientHttpRequest request) throws IOException {
 | 
				
			||||||
 | 
								if (this.adaptee != null) {
 | 
				
			||||||
 | 
									this.adaptee.doWithRequest(new ClientHttpRequest() {
 | 
				
			||||||
 | 
										@Override
 | 
				
			||||||
 | 
										public ClientHttpResponse execute() throws IOException {
 | 
				
			||||||
 | 
											throw new UnsupportedOperationException("execute not supported");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										@Override
 | 
				
			||||||
 | 
										public OutputStream getBody() throws IOException {
 | 
				
			||||||
 | 
											return request.getBody();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										@Override
 | 
				
			||||||
 | 
										public HttpMethod getMethod() {
 | 
				
			||||||
 | 
											return request.getMethod();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										@Override
 | 
				
			||||||
 | 
										public URI getURI() {
 | 
				
			||||||
 | 
											return request.getURI();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										@Override
 | 
				
			||||||
 | 
										public HttpHeaders getHeaders() {
 | 
				
			||||||
 | 
											return request.getHeaders();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue