From b37e75b80c473e1a055f739202148a70de06cb08 Mon Sep 17 00:00:00 2001 From: Aarti Gupta Date: Fri, 17 Apr 2020 16:03:28 -0700 Subject: [PATCH 1/2] try to add RSocketMessageHandlerCustomizer --- .../RSocketMessageHandlerCustomizer.java | 17 ++++++++++++++++ .../RSocketMessagingAutoConfiguration.java | 20 ++++++++++++------- ...SocketMessagingAutoConfigurationTests.java | 5 +++-- 3 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java new file mode 100644 index 000000000000..7fb492493065 --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java @@ -0,0 +1,17 @@ +package org.springframework.boot.autoconfigure.rsocket; + +import org.apache.catalina.connector.Connector; +import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory; +import org.springframework.messaging.rsocket.RSocketStrategies; +import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; +import org.springframework.util.RouteMatcher; + +/** + * Callback interface that can be used to customize a RSocketMessageHandler {@link Connector}. + */ +@FunctionalInterface +public interface RSocketMessageHandlerCustomizer { + + RSocketMessageHandler setRouteMatcher(RouteMatcher handler); + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfiguration.java index 09a3898180bf..ccfac21c4e36 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfiguration.java @@ -19,6 +19,9 @@ import io.rsocket.RSocketFactory; import io.rsocket.transport.netty.server.TcpServerTransport; +import java.util.Objects; +import java.util.stream.Collectors; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -28,6 +31,7 @@ import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; +import org.springframework.util.RouteMatcher; /** * {@link EnableAutoConfiguration Auto-configuration} for Spring RSocket support in Spring @@ -36,17 +40,19 @@ * @author Brian Clozel * @since 2.2.0 */ -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass({ RSocketRequester.class, RSocketFactory.class, TcpServerTransport.class }) +@Configuration(proxyBeanMethods = true) +@ConditionalOnClass({RSocketRequester.class, RSocketFactory.class, TcpServerTransport.class}) @AutoConfigureAfter(RSocketStrategiesAutoConfiguration.class) public class RSocketMessagingAutoConfiguration { + @Bean - @ConditionalOnMissingBean - public RSocketMessageHandler messageHandler(RSocketStrategies rSocketStrategies) { - RSocketMessageHandler messageHandler = new RSocketMessageHandler(); - messageHandler.setRSocketStrategies(rSocketStrategies); - return messageHandler; + @ConditionalOnMissingBean(RSocketMessageHandler.class) + public RSocketMessageHandler messageHandler(RSocketStrategies rSocketStrategies, ObjectProvider customizers) { + RSocketMessageHandlerCustomizer rSocketMessageHandlerCustomizer = customizers.getIfAvailable(); + return rSocketMessageHandlerCustomizer.setRouteMatcher(rSocketStrategies.routeMatcher()); } + + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java index 41b7bc24a0aa..89dd1796709e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java @@ -34,10 +34,11 @@ * * @author Brian Clozel */ -class RSocketMessagingAutoConfigurationTests { +class +RSocketMessagingAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(RSocketMessagingAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(RSocketMessagingAutoConfiguration.class, RSocketMessageHandlerCustomizer.class)) .withUserConfiguration(BaseConfiguration.class); @Test From b8d32e0b04946c2f11171a51b47fddac1c0a4188 Mon Sep 17 00:00:00 2001 From: Aarti Gupta Date: Tue, 21 Apr 2020 09:50:28 -0700 Subject: [PATCH 2/2] add author tag and revert change to test --- .../rsocket/RSocketMessageHandlerCustomizer.java | 1 + .../rsocket/RSocketMessagingAutoConfigurationTests.java | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java index 7fb492493065..978dffd5dbe8 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessageHandlerCustomizer.java @@ -7,6 +7,7 @@ import org.springframework.util.RouteMatcher; /** + * @author Aarti Gupta * Callback interface that can be used to customize a RSocketMessageHandler {@link Connector}. */ @FunctionalInterface diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java index 89dd1796709e..41b7bc24a0aa 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java @@ -34,11 +34,10 @@ * * @author Brian Clozel */ -class -RSocketMessagingAutoConfigurationTests { +class RSocketMessagingAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(RSocketMessagingAutoConfiguration.class, RSocketMessageHandlerCustomizer.class)) + .withConfiguration(AutoConfigurations.of(RSocketMessagingAutoConfiguration.class)) .withUserConfiguration(BaseConfiguration.class); @Test