Fix new Sonar smells
This commit is contained in:
@@ -61,7 +61,6 @@ import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.util.DefaultUriBuilderFactory;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
/**
|
||||
* Base class for http outbound adapter/gateway.
|
||||
@@ -123,7 +122,7 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
|
||||
* {@link org.springframework.web.client.RestTemplate}. The default value is
|
||||
* <code>true</code>.
|
||||
* @param encodeUri true if the URI should be encoded.
|
||||
* @see UriComponentsBuilder
|
||||
* @see org.springframework.web.util.UriComponentsBuilder
|
||||
* @deprecated since 5.3 in favor of {@link #setEncodingMode}
|
||||
*/
|
||||
@Deprecated
|
||||
@@ -295,6 +294,7 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object handleRequestMessage(Message<?> requestMessage) {
|
||||
HttpMethod httpMethod = determineHttpMethod(requestMessage);
|
||||
if (this.extractPayloadExplicitlySet && logger.isWarnEnabled() && !shouldIncludeRequestBody(httpMethod)) {
|
||||
@@ -320,34 +320,32 @@ public abstract class AbstractHttpRequestExecutingMessageHandler extends Abstrac
|
||||
return exchange(uri, httpMethod, httpRequest, expectedResponseType, requestMessage, uriVariables);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected abstract Object exchange(Object uri, HttpMethod httpMethod, HttpEntity<?> httpRequest,
|
||||
Object expectedResponseType, Message<?> requestMessage, Map<String, ?> uriVariables);
|
||||
|
||||
protected Object getReply(ResponseEntity<?> httpResponse) {
|
||||
if (this.expectReply) {
|
||||
HttpHeaders httpHeaders = httpResponse.getHeaders();
|
||||
Map<String, Object> headers = this.headerMapper.toHeaders(httpHeaders);
|
||||
if (this.transferCookies) {
|
||||
doConvertSetCookie(headers);
|
||||
}
|
||||
|
||||
AbstractIntegrationMessageBuilder<?> replyBuilder;
|
||||
MessageBuilderFactory messageBuilderFactory = getMessageBuilderFactory();
|
||||
if (httpResponse.hasBody()) {
|
||||
Object responseBody = httpResponse.getBody();
|
||||
replyBuilder = (responseBody instanceof Message<?>)
|
||||
? messageBuilderFactory.fromMessage((Message<?>) responseBody)
|
||||
: messageBuilderFactory.withPayload(responseBody); // NOSONAR - hasBody()
|
||||
|
||||
}
|
||||
else {
|
||||
replyBuilder = messageBuilderFactory.withPayload(httpResponse);
|
||||
}
|
||||
replyBuilder.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE,
|
||||
httpResponse.getStatusCode());
|
||||
return replyBuilder.copyHeaders(headers);
|
||||
HttpHeaders httpHeaders = httpResponse.getHeaders();
|
||||
Map<String, Object> headers = this.headerMapper.toHeaders(httpHeaders);
|
||||
if (this.transferCookies) {
|
||||
doConvertSetCookie(headers);
|
||||
}
|
||||
return null;
|
||||
|
||||
AbstractIntegrationMessageBuilder<?> replyBuilder;
|
||||
MessageBuilderFactory messageBuilderFactory = getMessageBuilderFactory();
|
||||
if (httpResponse.hasBody()) {
|
||||
Object responseBody = httpResponse.getBody();
|
||||
replyBuilder = (responseBody instanceof Message<?>)
|
||||
? messageBuilderFactory.fromMessage((Message<?>) responseBody)
|
||||
: messageBuilderFactory.withPayload(responseBody); // NOSONAR - hasBody()
|
||||
|
||||
}
|
||||
else {
|
||||
replyBuilder = messageBuilderFactory.withPayload(httpResponse);
|
||||
}
|
||||
replyBuilder.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE,
|
||||
httpResponse.getStatusCode());
|
||||
return replyBuilder.copyHeaders(headers);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -171,6 +171,7 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object exchange(Object uri, HttpMethod httpMethod, HttpEntity<?> httpRequest,
|
||||
Object expectedResponseType, Message<?> requestMessage, Map<String, ?> uriVariables) {
|
||||
|
||||
@@ -197,7 +198,13 @@ public class HttpRequestExecutingMessageHandler extends AbstractHttpRequestExecu
|
||||
}
|
||||
}
|
||||
|
||||
return getReply(httpResponse);
|
||||
if (isExpectReply()) {
|
||||
return getReply(httpResponse);
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
catch (RestClientException e) {
|
||||
throw new MessageHandlingException(requestMessage,
|
||||
|
||||
@@ -204,9 +204,82 @@ public class WebFluxRequestExecutingMessageHandler extends AbstractHttpRequestEx
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object exchange(Object uri, HttpMethod httpMethod, HttpEntity<?> httpRequest,
|
||||
Object expectedResponseType, Message<?> requestMessage, Map<String, ?> uriVariables) {
|
||||
|
||||
WebClient.RequestBodySpec requestSpec =
|
||||
createRequestBodySpec(uri, httpMethod, httpRequest, requestMessage, uriVariables);
|
||||
|
||||
Mono<ClientResponse> responseMono = exchangeForResponseMono(requestSpec);
|
||||
|
||||
if (isExpectReply()) {
|
||||
return createReplyFromResponse(expectedResponseType, responseMono);
|
||||
}
|
||||
else {
|
||||
responseMono.subscribe(v -> { }, ex -> sendErrorMessage(requestMessage, ex));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Object createReplyFromResponse(Object expectedResponseType, Mono<ClientResponse> responseMono) {
|
||||
return responseMono
|
||||
.flatMap(response -> {
|
||||
ResponseEntity.BodyBuilder httpEntityBuilder =
|
||||
ResponseEntity.status(response.statusCode())
|
||||
.headers(response.headers().asHttpHeaders());
|
||||
|
||||
Mono<?> bodyMono;
|
||||
|
||||
if (expectedResponseType != null) {
|
||||
if (this.replyPayloadToFlux) {
|
||||
BodyExtractor<? extends Flux<?>, ReactiveHttpInputMessage> extractor;
|
||||
if (expectedResponseType instanceof ParameterizedTypeReference<?>) {
|
||||
extractor = BodyExtractors.toFlux(
|
||||
(ParameterizedTypeReference<?>) expectedResponseType);
|
||||
}
|
||||
else {
|
||||
extractor = BodyExtractors.toFlux((Class<?>) expectedResponseType);
|
||||
}
|
||||
Flux<?> flux = response.body(extractor);
|
||||
bodyMono = Mono.just(flux);
|
||||
}
|
||||
else {
|
||||
BodyExtractor<? extends Mono<?>, ReactiveHttpInputMessage> extractor;
|
||||
if (expectedResponseType instanceof ParameterizedTypeReference<?>) {
|
||||
extractor = BodyExtractors.toMono(
|
||||
(ParameterizedTypeReference<?>) expectedResponseType);
|
||||
}
|
||||
else {
|
||||
extractor = BodyExtractors.toMono((Class<?>) expectedResponseType);
|
||||
}
|
||||
bodyMono = response.body(extractor);
|
||||
}
|
||||
}
|
||||
else if (this.bodyExtractor != null) {
|
||||
Object body = response.body(this.bodyExtractor);
|
||||
if (body instanceof Mono) {
|
||||
bodyMono = (Mono<?>) body;
|
||||
}
|
||||
else {
|
||||
bodyMono = Mono.just(body);
|
||||
}
|
||||
}
|
||||
else {
|
||||
bodyMono = Mono.empty();
|
||||
}
|
||||
|
||||
return bodyMono
|
||||
.map(httpEntityBuilder::body)
|
||||
.defaultIfEmpty(httpEntityBuilder.build());
|
||||
}
|
||||
)
|
||||
.map(this::getReply);
|
||||
}
|
||||
|
||||
private WebClient.RequestBodySpec createRequestBodySpec(Object uri, HttpMethod httpMethod,
|
||||
HttpEntity<?> httpRequest, Message<?> requestMessage, Map<String, ?> uriVariables) {
|
||||
|
||||
WebClient.RequestBodyUriSpec requestBodyUriSpec = this.webClient.method(httpMethod);
|
||||
WebClient.RequestBodySpec requestSpec;
|
||||
|
||||
@@ -222,100 +295,42 @@ public class WebFluxRequestExecutingMessageHandler extends AbstractHttpRequestEx
|
||||
if (inserter != null) {
|
||||
requestSpec.body(inserter);
|
||||
}
|
||||
return requestSpec;
|
||||
}
|
||||
|
||||
Mono<ClientResponse> responseMono =
|
||||
requestSpec.exchange()
|
||||
.flatMap(response -> {
|
||||
HttpStatus httpStatus = response.statusCode();
|
||||
if (httpStatus.isError()) {
|
||||
return response.body(BodyExtractors.toDataBuffers())
|
||||
.reduce(DataBuffer::write)
|
||||
.map(dataBuffer -> {
|
||||
byte[] bytes = new byte[dataBuffer.readableByteCount()];
|
||||
dataBuffer.read(bytes);
|
||||
DataBufferUtils.release(dataBuffer);
|
||||
return bytes;
|
||||
})
|
||||
.defaultIfEmpty(new byte[0])
|
||||
.map(bodyBytes -> {
|
||||
throw new WebClientResponseException(
|
||||
"ClientResponse has erroneous status code: "
|
||||
+ httpStatus.value() + " "
|
||||
+ httpStatus.getReasonPhrase(),
|
||||
httpStatus.value(),
|
||||
httpStatus.getReasonPhrase(),
|
||||
response.headers().asHttpHeaders(),
|
||||
bodyBytes,
|
||||
response.headers().contentType()
|
||||
.map(MimeType::getCharset)
|
||||
.orElse(StandardCharsets.ISO_8859_1));
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
return Mono.just(response);
|
||||
}
|
||||
});
|
||||
|
||||
if (isExpectReply()) {
|
||||
return responseMono
|
||||
.flatMap(response -> {
|
||||
ResponseEntity.BodyBuilder httpEntityBuilder =
|
||||
ResponseEntity.status(response.statusCode())
|
||||
.headers(response.headers().asHttpHeaders());
|
||||
|
||||
Mono<?> bodyMono;
|
||||
|
||||
if (expectedResponseType != null) {
|
||||
if (this.replyPayloadToFlux) {
|
||||
BodyExtractor<? extends Flux<?>, ReactiveHttpInputMessage> extractor;
|
||||
if (expectedResponseType instanceof ParameterizedTypeReference<?>) {
|
||||
extractor = BodyExtractors.toFlux(
|
||||
(ParameterizedTypeReference<?>) expectedResponseType);
|
||||
private Mono<ClientResponse> exchangeForResponseMono(WebClient.RequestBodySpec requestSpec) {
|
||||
return requestSpec.exchange()
|
||||
.flatMap(response -> {
|
||||
HttpStatus httpStatus = response.statusCode();
|
||||
if (httpStatus.isError()) {
|
||||
return response.body(BodyExtractors.toDataBuffers())
|
||||
.reduce(DataBuffer::write)
|
||||
.map(dataBuffer -> {
|
||||
byte[] bytes = new byte[dataBuffer.readableByteCount()];
|
||||
dataBuffer.read(bytes);
|
||||
DataBufferUtils.release(dataBuffer);
|
||||
return bytes;
|
||||
})
|
||||
.defaultIfEmpty(new byte[0])
|
||||
.map(bodyBytes -> {
|
||||
throw new WebClientResponseException(
|
||||
"ClientResponse has erroneous status code: "
|
||||
+ httpStatus.value() + " "
|
||||
+ httpStatus.getReasonPhrase(),
|
||||
httpStatus.value(),
|
||||
httpStatus.getReasonPhrase(),
|
||||
response.headers().asHttpHeaders(),
|
||||
bodyBytes,
|
||||
response.headers().contentType()
|
||||
.map(MimeType::getCharset)
|
||||
.orElse(StandardCharsets.ISO_8859_1));
|
||||
}
|
||||
else {
|
||||
extractor = BodyExtractors.toFlux((Class<?>) expectedResponseType);
|
||||
}
|
||||
Flux<?> flux = response.body(extractor);
|
||||
bodyMono = Mono.just(flux);
|
||||
}
|
||||
else {
|
||||
BodyExtractor<? extends Mono<?>, ReactiveHttpInputMessage> extractor;
|
||||
if (expectedResponseType instanceof ParameterizedTypeReference<?>) {
|
||||
extractor = BodyExtractors.toMono(
|
||||
(ParameterizedTypeReference<?>) expectedResponseType);
|
||||
}
|
||||
else {
|
||||
extractor = BodyExtractors.toMono((Class<?>) expectedResponseType);
|
||||
}
|
||||
bodyMono = response.body(extractor);
|
||||
}
|
||||
}
|
||||
else if (this.bodyExtractor != null) {
|
||||
Object body = response.body(this.bodyExtractor);
|
||||
if (body instanceof Mono) {
|
||||
bodyMono = (Mono<?>) body;
|
||||
}
|
||||
else {
|
||||
bodyMono = Mono.just(body);
|
||||
}
|
||||
}
|
||||
else {
|
||||
bodyMono = Mono.empty();
|
||||
}
|
||||
|
||||
return bodyMono
|
||||
.map(httpEntityBuilder::body)
|
||||
.defaultIfEmpty(httpEntityBuilder.build());
|
||||
}
|
||||
)
|
||||
.map(this::getReply);
|
||||
}
|
||||
else {
|
||||
responseMono.subscribe(v -> { }, ex -> sendErrorMessage(requestMessage, ex));
|
||||
|
||||
return null;
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
return Mono.just(response);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
Reference in New Issue
Block a user