From 070eedaa19d3f4e4a762887b218b7d3c408eafd6 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 20 Sep 2019 18:32:21 +0200 Subject: [PATCH] Configure RouteMatcher at the RSocketStrategies level After a change in Spring Framework (see spring-projects/spring-framework#23314), the `RouteMatcher` to be used with the RSocket infrastructure is configured on the `RSocketStrategies` directly. This commit moves the auto-configuration of the `PathPatternRouteMatcher` from the message handling parts to the RSocket strategy one. Closes gh-17571 --- .../rsocket/RSocketMessagingAutoConfiguration.java | 7 ------- .../rsocket/RSocketStrategiesAutoConfiguration.java | 7 +++++++ .../rsocket/RSocketMessagingAutoConfigurationTests.java | 7 +------ .../rsocket/RSocketStrategiesAutoConfigurationTests.java | 2 ++ 4 files changed, 10 insertions(+), 13 deletions(-) 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 2f35954229a..09a3898180b 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 @@ -28,8 +28,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; -import org.springframework.util.ClassUtils; -import org.springframework.web.util.pattern.PathPatternRouteMatcher; /** * {@link EnableAutoConfiguration Auto-configuration} for Spring RSocket support in Spring @@ -43,16 +41,11 @@ import org.springframework.web.util.pattern.PathPatternRouteMatcher; @AutoConfigureAfter(RSocketStrategiesAutoConfiguration.class) public class RSocketMessagingAutoConfiguration { - private static final String PATHPATTERN_ROUTEMATCHER_CLASS = "org.springframework.web.util.pattern.PathPatternRouteMatcher"; - @Bean @ConditionalOnMissingBean public RSocketMessageHandler messageHandler(RSocketStrategies rSocketStrategies) { RSocketMessageHandler messageHandler = new RSocketMessageHandler(); messageHandler.setRSocketStrategies(rSocketStrategies); - if (ClassUtils.isPresent(PATHPATTERN_ROUTEMATCHER_CLASS, null)) { - messageHandler.setRouteMatcher(new PathPatternRouteMatcher()); - } return messageHandler; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfiguration.java index 4a3faa25cb0..b458d8739dc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfiguration.java @@ -39,6 +39,8 @@ import org.springframework.http.codec.json.Jackson2JsonDecoder; import org.springframework.http.codec.json.Jackson2JsonEncoder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.messaging.rsocket.RSocketStrategies; +import org.springframework.util.ClassUtils; +import org.springframework.web.util.pattern.PathPatternRouteMatcher; /** * {@link EnableAutoConfiguration Auto-configuration} for {@link RSocketStrategies}. @@ -51,10 +53,15 @@ import org.springframework.messaging.rsocket.RSocketStrategies; @AutoConfigureAfter(JacksonAutoConfiguration.class) public class RSocketStrategiesAutoConfiguration { + private static final String PATHPATTERN_ROUTEMATCHER_CLASS = "org.springframework.web.util.pattern.PathPatternRouteMatcher"; + @Bean @ConditionalOnMissingBean public RSocketStrategies rSocketStrategies(ObjectProvider customizers) { RSocketStrategies.Builder builder = RSocketStrategies.builder(); + if (ClassUtils.isPresent(PATHPATTERN_ROUTEMATCHER_CLASS, null)) { + builder.routeMatcher(new PathPatternRouteMatcher()); + } customizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); return builder.build(); } 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 71d5ddab929..41b7bc24a0a 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 @@ -26,7 +26,6 @@ import org.springframework.core.codec.CharSequenceEncoder; import org.springframework.core.codec.StringDecoder; import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; -import org.springframework.web.util.pattern.PathPatternRouteMatcher; import static org.assertj.core.api.Assertions.assertThat; @@ -43,11 +42,7 @@ class RSocketMessagingAutoConfigurationTests { @Test void shouldCreateDefaultBeans() { - this.contextRunner.run((context) -> { - assertThat(context).getBeans(RSocketMessageHandler.class).hasSize(1); - assertThat(context.getBean(RSocketMessageHandler.class).getRouteMatcher()) - .isInstanceOf(PathPatternRouteMatcher.class); - }); + this.contextRunner.run((context) -> assertThat(context).getBeans(RSocketMessageHandler.class).hasSize(1)); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfigurationTests.java index b00f1d85c33..39734705102 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketStrategiesAutoConfigurationTests.java @@ -33,6 +33,7 @@ import org.springframework.http.codec.cbor.Jackson2CborEncoder; import org.springframework.http.codec.json.Jackson2JsonDecoder; import org.springframework.http.codec.json.Jackson2JsonEncoder; import org.springframework.messaging.rsocket.RSocketStrategies; +import org.springframework.web.util.pattern.PathPatternRouteMatcher; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -56,6 +57,7 @@ class RSocketStrategiesAutoConfigurationTests { .hasAtLeastOneElementOfType(Jackson2JsonDecoder.class); assertThat(strategies.encoders()).hasAtLeastOneElementOfType(Jackson2CborEncoder.class) .hasAtLeastOneElementOfType(Jackson2JsonEncoder.class); + assertThat(strategies.routeMatcher()).isInstanceOf(PathPatternRouteMatcher.class); }); }