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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<RSocketStrategiesCustomizer> 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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user