Fix complexity for DefaultHttpHeaderMapper (#2881)

* Fix complexity for DefaultHttpHeaderMapper

* Deprecate `DefaultHttpHeaderMapper` constants which are fully
Spring Web `HttpHeaders` constants
* Introduce lowercase constants for `getHttpHeader()` switch
* Reuse `HttpHeaders` API as much as possible
* Simplify logic in some methods to break them to smaller methods

* * Remove Java Streams from critical paths
* Rework `setHttpHeader()` for `switch`

* * Use `ObjectUtils.toObjectArray()` to simplify complexity

* * Fix complexity in `setAccept()`, `setAcceptCharset()`, `setAllow()`
& `setIfNoneMatch()` using newly extracted `valueToCollection()`
This commit is contained in:
Artem Bilan
2019-04-05 13:48:47 -04:00
committed by Gary Russell
parent 2e2b49a22f
commit cff67ccdb4
5 changed files with 1042 additions and 858 deletions

View File

@@ -188,9 +188,7 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
* be returned as a payload of the reply Message.
* To take advantage of the HttpMessageConverters
* registered on this adapter, provide a different type).
*
* @param expectedResponseType The expected type.
*
* Also see {@link #setExpectedResponseTypeExpression(Expression)}
*/
public void setExpectedResponseType(Class<?> expectedResponseType) {
@@ -221,7 +219,6 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
/**
* Set the Map of URI variable expressions to evaluate against the outbound message
* when replacing the variable placeholders in a URI template.
*
* @param uriVariableExpressions The URI variable expressions.
*/
public void setUriVariableExpressions(Map<String, Expression> uriVariableExpressions) {
@@ -235,7 +232,6 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
* Set the {@link Expression} to evaluate against the outbound message; the expression
* must evaluate to a Map of URI variable expressions to evaluate against the outbound message
* when replacing the variable placeholders in a URI template.
*
* @param uriVariablesExpression The URI variables expression.
*/
public void setUriVariablesExpression(Expression uriVariablesExpression) {
@@ -246,7 +242,6 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
* Set to true if you wish 'Set-Cookie' headers in responses to be
* transferred as 'Cookie' headers in subsequent interactions for
* a message.
*
* @param transferCookies the transferCookies to set.
*/
public void setTransferCookies(boolean transferCookies) {
@@ -343,14 +338,14 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
private void doConvertSetCookie(Map<String, Object> headers) {
String keyName = null;
for (String key : headers.keySet()) {
if (key.equalsIgnoreCase(DefaultHttpHeaderMapper.SET_COOKIE)) {
if (key.equalsIgnoreCase(HttpHeaders.SET_COOKIE)) {
keyName = key;
break;
}
}
if (keyName != null) {
Object cookies = headers.remove(keyName);
headers.put(DefaultHttpHeaderMapper.COOKIE, cookies);
headers.put(HttpHeaders.COOKIE, cookies);
if (logger.isDebugEnabled()) {
logger.debug("Converted Set-Cookie header to Cookie for: "
+ cookies);
@@ -562,7 +557,6 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
.usingEvaluationContext(evaluationContextToUse)
.withRoot(requestMessage)
.build();
}
}

View File

@@ -61,11 +61,11 @@ import org.springframework.web.client.RestTemplate;
* @since 2.0
*/
public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecutingMessageHandler {
private final RestTemplate restTemplate;
/**
* Create a handler that will send requests to the provided URI.
*
* @param uri The URI.
*/
public HttpRequestExecutingMessageHandler(URI uri) {
@@ -74,7 +74,6 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
/**
* Create a handler that will send requests to the provided URI.
*
* @param uri The URI.
*/
public HttpRequestExecutingMessageHandler(String uri) {
@@ -83,7 +82,6 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
/**
* Create a handler that will send requests to the provided URI Expression.
*
* @param uriExpression The URI expression.
*/
public HttpRequestExecutingMessageHandler(Expression uriExpression) {
@@ -142,9 +140,7 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
/**
* Set the {@link ClientHttpRequestFactory} for the underlying {@link RestTemplate}.
*
* @param requestFactory The request factory.
*
* @see RestTemplate#setRequestFactory(ClientHttpRequestFactory)
*/
public void setRequestFactory(ClientHttpRequestFactory requestFactory) {
@@ -154,6 +150,7 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
@Override
protected Object exchange(Supplier<URI> uriSupplier, HttpMethod httpMethod, HttpEntity<?> httpRequest,
Object expectedResponseType, Message<?> requestMessage) {
URI uri = uriSupplier.get();
ResponseEntity<?> httpResponse;
try {
@@ -162,14 +159,13 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
(ParameterizedTypeReference<?>) expectedResponseType);
}
else {
httpResponse = this.restTemplate.exchange(uri, httpMethod, httpRequest,
(Class<?>) expectedResponseType);
httpResponse = this.restTemplate.exchange(uri, httpMethod, httpRequest, (Class<?>) expectedResponseType);
}
return getReply(httpResponse);
}
catch (RestClientException e) {
throw new MessageHandlingException(requestMessage,
"HTTP request execution failed for URI [" + uri + "]", e);
throw new MessageHandlingException(requestMessage, "HTTP request execution failed for URI [" + uri + "]", e);
}
}
}