1 package org.onap.sdc.dcae.catalog.commons;
5 import org.springframework.http.HttpEntity;
6 import org.springframework.http.HttpMethod;
7 import org.springframework.http.HttpStatus;
8 import org.springframework.http.ResponseEntity;
9 import org.springframework.http.client.SimpleClientHttpRequestFactory;
10 import org.springframework.http.converter.HttpMessageConverter;
11 import org.springframework.util.concurrent.ListenableFutureCallback;
12 import org.springframework.web.client.AsyncRestTemplate;
13 import org.springframework.web.client.HttpClientErrorException;
14 import org.springframework.web.client.RestClientException;
15 import org.springframework.web.client.RestTemplate;
23 public static <T> Future<T> exchange(String theUri, HttpMethod theMethod, HttpEntity theRequest, Class<T> theResponseType) {
25 AsyncRestTemplate restTemplate = new AsyncRestTemplate();
27 List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
28 converters.add(0, new JSONHttpMessageConverter());
29 restTemplate.setMessageConverters(converters);
31 HttpFuture<T> result = new HttpFuture<T>();
34 .exchange(theUri, theMethod, theRequest, theResponseType)
35 .addCallback(result.callback);
37 catch (RestClientException rcx) {
38 return Futures.failedFuture(rcx);
41 return Futures.failedFuture(x);
52 * @param theResponseType
53 * @param readTimeOut pass -1 if you dont need to customize the read time out interval
56 public static <T> ResponseEntity<T> exchangeSync(String theUri, HttpMethod theMethod, HttpEntity theRequest, Class<T> theResponseType, int readTimeOut) {
58 RestTemplate restTemplate = new RestTemplate();
61 SimpleClientHttpRequestFactory rf = (SimpleClientHttpRequestFactory) restTemplate.getRequestFactory();
62 rf.setReadTimeout(1 * readTimeOut);
65 List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
66 converters.add(0, new JSONHttpMessageConverter());
67 restTemplate.setMessageConverters(converters);
68 ResponseEntity<T> result = null;
71 result = restTemplate.exchange(theUri, theMethod, theRequest, theResponseType);
73 catch (RestClientException rcx) {
74 return new ResponseEntity<T>((T) rcx.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
77 return new ResponseEntity<T>((T) x.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
85 public static class HttpFuture<T> extends Futures.BasicFuture<T> {
90 ListenableFutureCallback<ResponseEntity<T>> callback = new ListenableFutureCallback<ResponseEntity<T>>() {
92 public void onSuccess(ResponseEntity<T> theResult) {
93 HttpFuture.this.result(theResult.getBody());
96 public void onFailure(Throwable theError) {
97 if (theError instanceof HttpClientErrorException) {
98 HttpFuture.this.cause(new Exception((HttpClientErrorException)theError));
101 HttpFuture.this.cause(theError);