Fix new Sonar smells

This commit is contained in:
Artem Bilan
2021-07-08 12:24:28 -04:00
parent 920b8ae744
commit 4b83241e90
4 changed files with 87 additions and 52 deletions

View File

@@ -28,7 +28,6 @@ import java.util.stream.Collectors;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.config.EmbeddedValueResolver;
@@ -57,7 +56,7 @@ import org.springframework.util.StringUtils;
/**
* The {@link ImportBeanDefinitionRegistrar} to parse {@link MessagingGateway} and its {@code service-interface}
* and to register {@link BeanDefinition} {@link GatewayProxyFactoryBean}.
* and to register bean definition for {@link GatewayProxyFactoryBean}.
*
* @author Artem Bilan
* @author Gary Russell
@@ -88,7 +87,7 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
}
}
public BeanDefinitionHolder gatewayProxyBeanDefinition(Map<String, Object> gatewayAttributes,
public BeanDefinitionHolder gatewayProxyBeanDefinition(Map<String, Object> gatewayAttributes, // NOSONAR - complexity
BeanDefinitionRegistry registry) {
String defaultPayloadExpression = (String) gatewayAttributes.get("defaultPayloadExpression");
@@ -116,7 +115,6 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
EmbeddedValueResolver embeddedValueResolver = new EmbeddedValueResolver(beanFactory);
Class<?> serviceInterface = getServiceInterface((String) gatewayAttributes.get("serviceInterface"), beanFactory);
@SuppressWarnings("unchecked")
AbstractBeanDefinition beanDefinition = new RootBeanDefinition(GatewayProxyFactoryBean.class,
() -> {
GatewayProxyFactoryBean proxyFactoryBean = new GatewayProxyFactoryBean(serviceInterface);
@@ -152,6 +150,7 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
proxyFactoryBean.setGlobalMethodMetadata(globalMethodMetadata);
}
@SuppressWarnings("unchecked")
Map<String, AbstractBeanDefinition> methodDefinitions =
(Map<String, AbstractBeanDefinition>) gatewayAttributes.get("methods");
@@ -160,7 +159,8 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
methodDefinitions.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getKey,
entry -> (GatewayMethodMetadata) entry.getValue().getInstanceSupplier().get()));
entry -> (GatewayMethodMetadata) entry.getValue()
.getInstanceSupplier().get()));
proxyFactoryBean.setMethodMetadataMap(methodMetadataMap);
}
@@ -223,7 +223,9 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
if (hasDefaultPayloadExpression) {
String actualPayloadExpression = embeddedValueResolver.resolveStringValue(defaultPayloadExpression);
gatewayMethodMetadata.setPayloadExpression(EXPRESSION_PARSER.parseExpression(actualPayloadExpression));
if (actualPayloadExpression != null) {
gatewayMethodMetadata.setPayloadExpression(EXPRESSION_PARSER.parseExpression(actualPayloadExpression));
}
}
if (hasDefaultHeaders) {
@@ -238,12 +240,7 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
"is required on a gateway's header.");
}
Expression expression =
hasValue
? new LiteralExpression(embeddedValueResolver.resolveStringValue(headerValue))
: EXPRESSION_PARSER.parseExpression(
embeddedValueResolver.resolveStringValue(headerExpression));
Expression expression = buildHeaderExpression(embeddedValueResolver, headerValue, headerExpression);
headerExpressions.put((String) header.get("name"), expression);
}
gatewayMethodMetadata.setHeaderExpressions(headerExpressions);
@@ -251,6 +248,19 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar
return gatewayMethodMetadata;
}
private static Expression buildHeaderExpression(EmbeddedValueResolver embeddedValueResolver, String headerValue,
String headerExpression) {
if (StringUtils.hasText(headerValue)) {
String resolvedValue = embeddedValueResolver.resolveStringValue(headerValue);
return resolvedValue != null ? new LiteralExpression(resolvedValue) : null;
}
else {
String resolvedValue = embeddedValueResolver.resolveStringValue(headerExpression);
return resolvedValue != null ? EXPRESSION_PARSER.parseExpression(resolvedValue) : null;
}
}
/**
* TODO until SPR-11710 will be resolved.
* Captures the meta-annotation attribute values, in order.

View File

@@ -176,8 +176,10 @@ public class GatewayParser implements BeanDefinitionParser {
"'payload-expression' is not allowed when a 'mapper' is provided");
if (StringUtils.hasText(payloadExpression)) {
gatewayMethodMetadata.setPayloadExpression(
EXPRESSION_PARSER.parseExpression(embeddedValueResolver.resolveStringValue(payloadExpression)));
String expressionString = embeddedValueResolver.resolveStringValue(payloadExpression);
if (expressionString != null) {
gatewayMethodMetadata.setPayloadExpression(EXPRESSION_PARSER.parseExpression(expressionString));
}
}
List<Element> invocationHeaders = DomUtils.getChildElementsByTagName(methodElement, "header");
@@ -188,11 +190,7 @@ public class GatewayParser implements BeanDefinitionParser {
for (Element headerElement : invocationHeaders) {
String headerValue = headerElement.getAttribute("value");
String headerExpression = headerElement.getAttribute("expression");
Expression expression =
StringUtils.hasText(headerValue)
? new LiteralExpression(embeddedValueResolver.resolveStringValue(headerValue))
: EXPRESSION_PARSER.parseExpression(
embeddedValueResolver.resolveStringValue(headerExpression));
Expression expression = buildHeaderExpression(embeddedValueResolver, headerValue, headerExpression);
headerExpressions.put(headerElement.getAttribute(AbstractBeanDefinitionParser.NAME_ATTRIBUTE),
expression);
@@ -202,5 +200,18 @@ public class GatewayParser implements BeanDefinitionParser {
return gatewayMethodMetadata;
}
private static Expression buildHeaderExpression(EmbeddedValueResolver embeddedValueResolver, String headerValue,
String headerExpression) {
if (StringUtils.hasText(headerValue)) {
String resolvedValue = embeddedValueResolver.resolveStringValue(headerValue);
return resolvedValue != null ? new LiteralExpression(resolvedValue) : null;
}
else {
String resolvedValue = embeddedValueResolver.resolveStringValue(headerExpression);
return resolvedValue != null ? EXPRESSION_PARSER.parseExpression(resolvedValue) : null;
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2021 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.
@@ -54,10 +54,11 @@ public class GatewayMethodMetadata {
return this.payloadExpression;
}
public void setPayloadExpression(Expression payloadExpression) {
public void setPayloadExpression(@Nullable Expression payloadExpression) {
this.payloadExpression = payloadExpression;
}
@Nullable
public Map<String, Expression> getHeaderExpressions() {
return this.headerExpressions;
}
@@ -85,19 +86,21 @@ public class GatewayMethodMetadata {
this.replyChannelName = replyChannelName;
}
@Nullable
public String getRequestTimeout() {
return this.requestTimeout;
}
public void setRequestTimeout(String requestTimeout) {
public void setRequestTimeout(@Nullable String requestTimeout) {
this.requestTimeout = requestTimeout;
}
@Nullable
public String getReplyTimeout() {
return this.replyTimeout;
}
public void setReplyTimeout(String replyTimeout) {
public void setReplyTimeout(@Nullable String replyTimeout) {
this.replyTimeout = replyTimeout;
}

View File

@@ -80,40 +80,51 @@ public class IntegrationGraphControllerRegistrar implements ImportBeanDefinition
String path = (String) annotationAttributes.get("value");
String[] allowedOrigins = (String[]) annotationAttributes.get("allowedOrigins");
if (allowedOrigins != null && allowedOrigins.length > 0) {
AbstractBeanDefinition controllerCorsConfigurer = null;
if (HttpContextUtils.WEB_MVC_PRESENT) {
controllerCorsConfigurer = webMvcControllerCorsConfigurerBean(path, allowedOrigins);
}
else if (HttpContextUtils.WEB_FLUX_PRESENT) {
controllerCorsConfigurer = webFluxControllerCorsConfigurerBean(path, allowedOrigins);
}
if (controllerCorsConfigurer != null) {
BeanDefinitionReaderUtils.registerWithGeneratedName(controllerCorsConfigurer, registry);
}
else {
LOGGER.warn("Nor Spring MVC, neither WebFlux is present to configure CORS origins " +
"for Integration Graph Controller.");
}
registerControlerCorsConfigurer(registry, path, allowedOrigins);
}
if (!registry.containsBeanDefinition(HttpContextUtils.GRAPH_CONTROLLER_BEAN_NAME)) {
Map<String, Object> properties = annotationAttributes;
AbstractBeanDefinition controllerPropertiesPopulator =
BeanDefinitionBuilder.genericBeanDefinition(GraphControllerPropertiesPopulator.class,
() -> new GraphControllerPropertiesPopulator(properties))
.setRole(BeanDefinition.ROLE_INFRASTRUCTURE)
.getBeanDefinition();
BeanDefinitionReaderUtils.registerWithGeneratedName(controllerPropertiesPopulator, registry);
registerIntegrationGraphController(registry, annotationAttributes);
}
}
BeanDefinition graphController =
new RootBeanDefinition(IntegrationGraphController.class, () ->
new IntegrationGraphController(
((BeanFactory) registry)
.getBean(IntegrationContextUtils.INTEGRATION_GRAPH_SERVER_BEAN_NAME,
IntegrationGraphServer.class)));
private static void registerIntegrationGraphController(BeanDefinitionRegistry registry,
Map<String, Object> properties) {
registry.registerBeanDefinition(HttpContextUtils.GRAPH_CONTROLLER_BEAN_NAME, graphController);
AbstractBeanDefinition controllerPropertiesPopulator =
BeanDefinitionBuilder.genericBeanDefinition(GraphControllerPropertiesPopulator.class,
() -> new GraphControllerPropertiesPopulator(properties))
.setRole(BeanDefinition.ROLE_INFRASTRUCTURE)
.getBeanDefinition();
BeanDefinitionReaderUtils.registerWithGeneratedName(controllerPropertiesPopulator, registry);
BeanDefinition graphController =
new RootBeanDefinition(IntegrationGraphController.class, () ->
new IntegrationGraphController(
((BeanFactory) registry)
.getBean(IntegrationContextUtils.INTEGRATION_GRAPH_SERVER_BEAN_NAME,
IntegrationGraphServer.class)));
registry.registerBeanDefinition(HttpContextUtils.GRAPH_CONTROLLER_BEAN_NAME, graphController);
}
private static void registerControlerCorsConfigurer(BeanDefinitionRegistry registry, String path,
String[] allowedOrigins) {
AbstractBeanDefinition controllerCorsConfigurer = null;
if (HttpContextUtils.WEB_MVC_PRESENT) {
controllerCorsConfigurer = webMvcControllerCorsConfigurerBean(path, allowedOrigins);
}
else if (HttpContextUtils.WEB_FLUX_PRESENT) {
controllerCorsConfigurer = webFluxControllerCorsConfigurerBean(path, allowedOrigins);
}
if (controllerCorsConfigurer != null) {
BeanDefinitionReaderUtils.registerWithGeneratedName(controllerCorsConfigurer, registry);
}
else {
LOGGER.warn("Nor Spring MVC, neither WebFlux is present to configure CORS origins " +
"for Integration Graph Controller.");
}
}