This commit is contained in:
Rossen Stoyanchev
2014-07-29 17:58:16 -04:00
parent 20c9a8bad4
commit f50cb06dc2

View File

@@ -38168,9 +38168,8 @@ method arguments.
[NOTE]
====
Applications can switch to using other path separator like "." (dot) instead of
"/" (slash) as the separator for destinations mapped to `@MessageMapping`.
For further details, see <<websocket-stomp-destination-separator>>.
Applications can also use dot-separated destinations (vs slash).
See <<websocket-stomp-destination-separator>>.
====
The following method arguments are supported for `@MessageMapping` methods:
@@ -38261,9 +38260,8 @@ to Ant-style destination patterns.
[NOTE]
====
Applications can switch to using other path separator like "." (dot) instead of
"/" (slash) as the separator for destinations mapped to `@MessageMapping`.
For further details, see <<websocket-stomp-destination-separator>>.
Applications can also use dot-separated destinations (vs slash).
See <<websocket-stomp-destination-separator>>.
====
@@ -38396,18 +38394,14 @@ the TCP connection is established is different from the host providing the
cloud-based STOMP service.
[[websocket-stomp-destination-separator]]
==== Destination separator
==== Using Dot as Separator in `@MessageMapping` Destinations
Although Ant-style, slash-separated, path patterns should feel familiar to web developers,
in message brokers and in messaging it is common to use "." as the separator, for example
in the names of destinations such as topics, queues, exchanges, etc.
Although slash-separated path patterns are familiar to web developers, in messaging
it is common to use "." as separator for example in the names of topics, queues,
exchanges, etc. Applications can also switch to using "." (dot) instead of "/" (slash)
as the separator in `@MessageMapping` mappings by configuring a custom `AntPathMatcher`.
Applications can switch to using "." (dot) instead of "/" (slash) as the separator for
destinations handled by the broker simply by configuring an AntPathMatcher with a customized
path separator property. This can be done easily through the provided Java config and XML
namespace.
Below is example configuration that enables using "." separator:
In Java config:
[source,java,indent=0]
[subs="verbatim,quotes"]
@@ -38416,10 +38410,7 @@ Below is example configuration that enables using "." separator:
@EnableWebSocketMessageBroker
public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp");
}
// ...
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
@@ -38431,7 +38422,7 @@ Below is example configuration that enables using "." separator:
}
----
XML configuration equivalent:
In XML config:
[source,xml,indent=0]
[subs="verbatim,quotes,attributes"]
@@ -38443,58 +38434,40 @@ XML configuration equivalent:
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket-4.1.xsd">
<bean id="pathMatcher" class="org.springframework.util.AntPathMatcher">
<constructor-arg index="0" value="." />
</bean>
http://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:message-broker application-destination-prefix="/app" path-matcher="pathMatcher">
<websocket:stomp-endpoint path="/stomp" />
<websocket:simple-broker prefix="/topic, /queue"/>
</websocket:message-broker>
<bean id="pathMatcher" class="org.springframework.util.AntPathMatcher">
<constructor-arg index="0" value="." />
</bean>
</beans>
----
And below is a simple example to illustrate a controller with "." separator:
[source,java,indent=0]
[subs="verbatim,quotes"]
----
@Controller
public class FooController {
@MessageMapping("foo.{bar}")
public String foo(@DestinationVariable String bar) {
return bar;
}
}
----
If the application prefix configured is "/app", the foo method will be mapped
to the "/app/foo.{bar}" destination. If bar="value", "value" will be sent to
the "/topic/foo.value" destination.
You can also use type + method level `@MessageMapping` annotations:
[source,java,indent=0]
[subs="verbatim,quotes"]
----
@Controller
@MessageMapping("foo")
public class FooController {
@MessageMapping("{bar}")
public String foo(@DestinationVariable String bar) {
return bar;
@MessageMapping("bar.{baz}")
public void handleBaz(@DestinationVariable String baz) {
}
}
----
In this example, the "." separator will be automatically added when combining "foo"
and "{bar}", so the foo method will be mapped to the "/app/foo.{bar}" destination,
like in the previous example.
If the application prefix is set to "/app" then the foo method is effectively mapped to "/app/foo.bar.{baz}".
[[websocket-stomp-authentication]]
==== Authentication