Selector header name is exposed for configuration
Issue: SPR-16732
This commit is contained in:
@@ -383,6 +383,10 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
String heartbeatValue = simpleBrokerElem.getAttribute("heartbeat");
|
||||
brokerDef.getPropertyValues().add("heartbeatValue", heartbeatValue);
|
||||
}
|
||||
if (simpleBrokerElem.hasAttribute("selector-header")) {
|
||||
String headerName = simpleBrokerElem.getAttribute("selector-header");
|
||||
brokerDef.getPropertyValues().add("selectorHeaderName", headerName);
|
||||
}
|
||||
}
|
||||
else if (brokerRelayElem != null) {
|
||||
String prefix = brokerRelayElem.getAttribute("prefix");
|
||||
|
||||
@@ -384,6 +384,23 @@
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="selector-header" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation source="java:org.springframework.messaging.simp.stomp.SimpleBrokerMessageHandler"><![CDATA[
|
||||
Configure the name of a header that a subscription message can have for
|
||||
the purpose of filtering messages matched to the subscription. The header
|
||||
value is expected to be a Spring EL boolean expression to be applied to
|
||||
the headers of messages matched to the subscription.
|
||||
|
||||
For example:
|
||||
headers.foo == 'bar'
|
||||
|
||||
By default this is set to "selector". You can set it to a different
|
||||
name, or to "" to turn off support for a selector header.
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="channel">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 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.
|
||||
@@ -47,6 +47,7 @@ import org.springframework.messaging.handler.invocation.HandlerMethodArgumentRes
|
||||
import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler;
|
||||
import org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry;
|
||||
import org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler;
|
||||
import org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler;
|
||||
import org.springframework.messaging.simp.user.DefaultUserDestinationResolver;
|
||||
@@ -202,6 +203,8 @@ public class MessageBrokerBeanDefinitionParserTests {
|
||||
assertNotNull(brokerMessageHandler);
|
||||
Collection<String> prefixes = brokerMessageHandler.getDestinationPrefixes();
|
||||
assertEquals(Arrays.asList("/topic", "/queue"), new ArrayList<>(prefixes));
|
||||
DefaultSubscriptionRegistry registry = (DefaultSubscriptionRegistry) brokerMessageHandler.getSubscriptionRegistry();
|
||||
assertEquals("my-selector", registry.getSelectorHeaderName());
|
||||
assertNotNull(brokerMessageHandler.getTaskScheduler());
|
||||
assertArrayEquals(new long[] {15000, 15000}, brokerMessageHandler.getHeartbeatValue());
|
||||
|
||||
@@ -228,7 +231,7 @@ public class MessageBrokerBeanDefinitionParserTests {
|
||||
|
||||
assertNotNull(this.appContext.getBean("webSocketScopeConfigurer", CustomScopeConfigurer.class));
|
||||
|
||||
DirectFieldAccessor accessor = new DirectFieldAccessor(brokerMessageHandler.getSubscriptionRegistry());
|
||||
DirectFieldAccessor accessor = new DirectFieldAccessor(registry);
|
||||
Object pathMatcher = accessor.getPropertyValue("pathMatcher");
|
||||
String pathSeparator = (String) new DirectFieldAccessor(pathMatcher).getPropertyValue("pathSeparator");
|
||||
assertEquals(".", pathSeparator);
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
|
||||
<websocket:stomp-error-handler ref="errorHandler" />
|
||||
|
||||
<websocket:simple-broker prefix="/topic, /queue" heartbeat="15000,15000" scheduler="scheduler" />
|
||||
<websocket:simple-broker prefix="/topic, /queue" selector-header="my-selector"
|
||||
heartbeat="15000,15000" scheduler="scheduler" />
|
||||
|
||||
</websocket:message-broker>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user