1 package com.griddynamics.jagger.invoker.v2;
3 import org.apache.http.conn.ssl.NoopHostnameVerifier;
4 import org.apache.http.impl.client.CloseableHttpClient;
5 import org.apache.http.impl.client.HttpClients;
6 import org.springframework.http.RequestEntity;
7 import org.springframework.http.ResponseEntity;
8 import org.springframework.http.client.ClientHttpRequestFactory;
9 import org.springframework.http.client.ClientHttpRequestInterceptor;
10 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
11 import org.springframework.http.converter.HttpMessageConverter;
12 import org.springframework.web.client.ResponseErrorHandler;
13 import org.springframework.web.client.RestTemplate;
14 import org.springframework.web.util.UriTemplateHandler;
17 import java.util.HashMap;
18 import java.util.List;
22 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.DEFAULT_URI_VARIABLES;
23 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.ERROR_HANDLER;
24 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.INTERCEPTORS;
25 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.MESSAGE_CONVERTERS;
26 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.REQUEST_FACTORY;
27 import static com.griddynamics.jagger.invoker.v2.SpringBasedHttpClient.JSpringBasedHttpClientParameters.URI_TEMPLATE_HANDLER;
28 import static java.lang.String.format;
38 @SuppressWarnings({
"unused",
"unchecked"})
77 private Map<String, Object> clientParams;
79 private RestTemplate restTemplate;
82 clientParams =
new HashMap<>();
83 restTemplate =
new RestTemplate();
84 restTemplate.setRequestFactory(getSslAllTrustRequestFactory());
89 this.clientParams.putAll(clientParams);
90 setRestTemplateParams(this.clientParams);
95 URI endpointURI = endpoint.
getURI(query.getPath(), query.getQueryParams());
96 RequestEntity requestEntity = mapToRequestEntity(query, endpointURI);
97 ResponseEntity responseEntity;
98 if (query.getResponseBodyType() != null) {
99 responseEntity = restTemplate.exchange(endpointURI, query.getMethod(), requestEntity, query.getResponseBodyType());
101 responseEntity = restTemplate.exchange(endpointURI, query.getMethod(), requestEntity, byte[].class);
103 return mapToJHttpResponse(responseEntity);
106 private void setRestTemplateParams(Map<String, Object> clientParams) {
107 clientParams.forEach((parameterKey, parameterVal) -> {
108 if (parameterKey.equals(DEFAULT_URI_VARIABLES.value)) {
109 restTemplate.setDefaultUriVariables((Map<String, ?>) parameterVal);
110 }
else if (parameterKey.equals(ERROR_HANDLER.value)) {
111 restTemplate.setErrorHandler((ResponseErrorHandler) parameterVal);
112 }
else if (parameterKey.equals(MESSAGE_CONVERTERS.value)) {
113 restTemplate.setMessageConverters((List<HttpMessageConverter<?>>) parameterVal);
114 }
else if (parameterKey.equals(URI_TEMPLATE_HANDLER.value)) {
115 restTemplate.setUriTemplateHandler((UriTemplateHandler) parameterVal);
116 }
else if (parameterKey.equals(INTERCEPTORS.value)) {
117 restTemplate.setInterceptors((List<ClientHttpRequestInterceptor>) parameterVal);
118 }
else if (parameterKey.equals(REQUEST_FACTORY.value)) {
119 restTemplate.setRequestFactory((ClientHttpRequestFactory) parameterVal);
121 throw new IllegalArgumentException(format(
"Unknown parameter name '%s'!", parameterKey));
126 private HttpComponentsClientHttpRequestFactory getSslAllTrustRequestFactory() {
127 HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();
128 CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(
new NoopHostnameVerifier()).build();
129 requestFactory.setHttpClient(httpClient);
130 return requestFactory;
133 private <T> RequestEntity<T> mapToRequestEntity(JHttpQuery<T> query, URI endpointURI) {
134 return new RequestEntity<>(query.getBody(), query.getHeaders(), query.getMethod(), endpointURI);
137 private <T> JHttpResponse<T> mapToJHttpResponse(ResponseEntity<T> responseEntity) {
138 return new JHttpResponse<>(responseEntity.getStatusCode(), responseEntity.getBody(), responseEntity.getHeaders());
146 this.clientParams = clientParams;