parent
2ca64ad88a
commit
165fba868c
|
@ -10642,7 +10642,7 @@ shows such a class:
|
||||||
----
|
----
|
||||||
class BlockedListNotifier : ApplicationListener<BlockedListEvent> {
|
class BlockedListNotifier : ApplicationListener<BlockedListEvent> {
|
||||||
|
|
||||||
lateinit var notificationAddres: String
|
lateinit var notificationAddress: String
|
||||||
|
|
||||||
override fun onApplicationEvent(event: BlockedListEvent) {
|
override fun onApplicationEvent(event: BlockedListEvent) {
|
||||||
// notify appropriate parties via notificationAddress...
|
// notify appropriate parties via notificationAddress...
|
||||||
|
|
|
@ -96,7 +96,7 @@ The following example shows how to use JNDI to look up an environment variable w
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
[[xsd-schemas-jee-jndi-lookup-evironment-multiple]]
|
[[xsd-schemas-jee-jndi-lookup-environment-multiple]]
|
||||||
==== `<jee:jndi-lookup/>` (with Multiple JNDI Environment Settings)
|
==== `<jee:jndi-lookup/>` (with Multiple JNDI Environment Settings)
|
||||||
|
|
||||||
The following example shows how to use JNDI to look up multiple environment variables
|
The following example shows how to use JNDI to look up multiple environment variables
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
= RSocket
|
= RSocket
|
||||||
:gh-rsocket: https://github.com/rsocket
|
:gh-rsocket: https://github.com/rsocket
|
||||||
:gh-rsocket-java: {gh-rsocket}/rsocket-java
|
:gh-rsocket-java: {gh-rsocket}/rsocket-java
|
||||||
:gh-rsocket-extentions: {gh-rsocket}/rsocket/blob/master/Extensions
|
:gh-rsocket-extensions: {gh-rsocket}/rsocket/blob/master/Extensions
|
||||||
|
|
||||||
This section describes Spring Framework's support for the RSocket protocol.
|
This section describes Spring Framework's support for the RSocket protocol.
|
||||||
|
|
||||||
|
@ -99,9 +99,9 @@ and therefore only included in the first message on a request, i.e. with one of
|
||||||
|
|
||||||
Protocol extensions define common metadata formats for use in applications:
|
Protocol extensions define common metadata formats for use in applications:
|
||||||
|
|
||||||
* {gh-rsocket-extentions}/CompositeMetadata.md[Composite Metadata]-- multiple,
|
* {gh-rsocket-extensions}/CompositeMetadata.md[Composite Metadata]-- multiple,
|
||||||
independently formatted metadata entries.
|
independently formatted metadata entries.
|
||||||
* {gh-rsocket-extentions}/Routing.md[Routing] -- the route for a request.
|
* {gh-rsocket-extensions}/Routing.md[Routing] -- the route for a request.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ established transparently and used.
|
||||||
|
|
||||||
For data, the default mime type is derived from the first configured `Decoder`. For
|
For data, the default mime type is derived from the first configured `Decoder`. For
|
||||||
metadata, the default mime type is
|
metadata, the default mime type is
|
||||||
{gh-rsocket-extentions}/CompositeMetadata.md[composite metadata] which allows multiple
|
{gh-rsocket-extensions}/CompositeMetadata.md[composite metadata] which allows multiple
|
||||||
metadata value and mime type pairs per request. Typically both don't need to be changed.
|
metadata value and mime type pairs per request. Typically both don't need to be changed.
|
||||||
|
|
||||||
Data and metadata in the `SETUP` frame is optional. On the server side,
|
Data and metadata in the `SETUP` frame is optional. On the server side,
|
||||||
|
@ -291,7 +291,7 @@ infrastructure that's used on a server, but registered programmatically as follo
|
||||||
----
|
----
|
||||||
<1> Use `PathPatternRouteMatcher`, if `spring-web` is present, for efficient
|
<1> Use `PathPatternRouteMatcher`, if `spring-web` is present, for efficient
|
||||||
route matching.
|
route matching.
|
||||||
<2> Create a responder from a class with `@MessageMaping` and/or `@ConnectMapping` methods.
|
<2> Create a responder from a class with `@MessageMapping` and/or `@ConnectMapping` methods.
|
||||||
<3> Register the responder.
|
<3> Register the responder.
|
||||||
|
|
||||||
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
||||||
|
@ -310,7 +310,7 @@ infrastructure that's used on a server, but registered programmatically as follo
|
||||||
----
|
----
|
||||||
<1> Use `PathPatternRouteMatcher`, if `spring-web` is present, for efficient
|
<1> Use `PathPatternRouteMatcher`, if `spring-web` is present, for efficient
|
||||||
route matching.
|
route matching.
|
||||||
<2> Create a responder from a class with `@MessageMaping` and/or `@ConnectMapping` methods.
|
<2> Create a responder from a class with `@MessageMapping` and/or `@ConnectMapping` methods.
|
||||||
<3> Register the responder.
|
<3> Register the responder.
|
||||||
|
|
||||||
Note the above is only a shortcut designed for programmatic registration of client
|
Note the above is only a shortcut designed for programmatic registration of client
|
||||||
|
@ -494,7 +494,7 @@ The `data(Object)` step is optional. Skip it for requests that don't send data:
|
||||||
----
|
----
|
||||||
|
|
||||||
Extra metadata values can be added if using
|
Extra metadata values can be added if using
|
||||||
{gh-rsocket-extentions}/CompositeMetadata.md[composite metadata] (the default) and if the
|
{gh-rsocket-extensions}/CompositeMetadata.md[composite metadata] (the default) and if the
|
||||||
values are supported by a registered `Encoder`. For example:
|
values are supported by a registered `Encoder`. For example:
|
||||||
|
|
||||||
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
||||||
|
@ -605,8 +605,8 @@ Then start an RSocket server through the Java RSocket API and plug the
|
||||||
----
|
----
|
||||||
|
|
||||||
`RSocketMessageHandler` supports
|
`RSocketMessageHandler` supports
|
||||||
{gh-rsocket-extentions}/CompositeMetadata.md[composite] and
|
{gh-rsocket-extensions}/CompositeMetadata.md[composite] and
|
||||||
{gh-rsocket-extentions}/Routing.md[routing] metadata by default. You can set its
|
{gh-rsocket-extensions}/Routing.md[routing] metadata by default. You can set its
|
||||||
<<rsocket-metadata-extractor>> if you need to switch to a
|
<<rsocket-metadata-extractor>> if you need to switch to a
|
||||||
different mime type or register additional metadata mime types.
|
different mime type or register additional metadata mime types.
|
||||||
|
|
||||||
|
@ -821,7 +821,7 @@ requests to the `RSocketRequester` for the connection. See
|
||||||
== MetadataExtractor
|
== MetadataExtractor
|
||||||
|
|
||||||
Responders must interpret metadata.
|
Responders must interpret metadata.
|
||||||
{gh-rsocket-extentions}/CompositeMetadata.md[Composite metadata] allows independently
|
{gh-rsocket-extensions}/CompositeMetadata.md[Composite metadata] allows independently
|
||||||
formatted metadata values (e.g. for routing, security, tracing) each with its own mime
|
formatted metadata values (e.g. for routing, security, tracing) each with its own mime
|
||||||
type. Applications need a way to configure metadata mime types to support, and a way
|
type. Applications need a way to configure metadata mime types to support, and a way
|
||||||
to access extracted values.
|
to access extracted values.
|
||||||
|
@ -832,7 +832,7 @@ in annotated handler methods.
|
||||||
|
|
||||||
`DefaultMetadataExtractor` can be given `Decoder` instances to decode metadata. Out of
|
`DefaultMetadataExtractor` can be given `Decoder` instances to decode metadata. Out of
|
||||||
the box it has built-in support for
|
the box it has built-in support for
|
||||||
{gh-rsocket-extentions}/Routing.md["message/x.rsocket.routing.v0"] which it decodes to
|
{gh-rsocket-extensions}/Routing.md["message/x.rsocket.routing.v0"] which it decodes to
|
||||||
`String` and saves under the "route" key. For any other mime type you'll need to provide
|
`String` and saves under the "route" key. For any other mime type you'll need to provide
|
||||||
a `Decoder` and register the mime type as follows:
|
a `Decoder` and register the mime type as follows:
|
||||||
|
|
||||||
|
|
|
@ -498,7 +498,7 @@ The following example shows such a case:
|
||||||
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
|
||||||
.Java
|
.Java
|
||||||
----
|
----
|
||||||
@ContextConfiguration(initializers = CustomContextIntializer.class) // <1>
|
@ContextConfiguration(initializers = CustomContextInitializer.class) // <1>
|
||||||
class ContextInitializerTests {
|
class ContextInitializerTests {
|
||||||
// class body...
|
// class body...
|
||||||
}
|
}
|
||||||
|
@ -508,7 +508,7 @@ The following example shows such a case:
|
||||||
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
||||||
.Kotlin
|
.Kotlin
|
||||||
----
|
----
|
||||||
@ContextConfiguration(initializers = [CustomContextIntializer::class]) // <1>
|
@ContextConfiguration(initializers = [CustomContextInitializer::class]) // <1>
|
||||||
class ContextInitializerTests {
|
class ContextInitializerTests {
|
||||||
// class body...
|
// class body...
|
||||||
}
|
}
|
||||||
|
@ -6964,7 +6964,7 @@ do they involve any of the supporting `@InitBinder`, `@ModelAttribute`, or
|
||||||
|
|
||||||
The Spring MVC Test framework, also known as `MockMvc`, aims to provide more complete
|
The Spring MVC Test framework, also known as `MockMvc`, aims to provide more complete
|
||||||
testing for Spring MVC controllers without a running server. It does that by invoking
|
testing for Spring MVC controllers without a running server. It does that by invoking
|
||||||
the `DispacherServlet` and passing
|
the `DispatcherServlet` and passing
|
||||||
<<mock-objects-servlet, "`mock`" implementations of the Servlet API>> from the
|
<<mock-objects-servlet, "`mock`" implementations of the Servlet API>> from the
|
||||||
`spring-test` module which replicates the full Spring MVC request handling without
|
`spring-test` module which replicates the full Spring MVC request handling without
|
||||||
a running server.
|
a running server.
|
||||||
|
|
|
@ -145,7 +145,7 @@ val string = request.awaitBody<String>()
|
||||||
|
|
||||||
|
|
||||||
The following example extracts the body to a `Flux<Person>` (or a `Flow<Person>` in Kotlin),
|
The following example extracts the body to a `Flux<Person>` (or a `Flow<Person>` in Kotlin),
|
||||||
where `Person` objects are decoded from someserialized form, such as JSON or XML:
|
where `Person` objects are decoded from some serialized form, such as JSON or XML:
|
||||||
|
|
||||||
[source,java,role="primary"]
|
[source,java,role="primary"]
|
||||||
.Java
|
.Java
|
||||||
|
|
|
@ -353,7 +353,7 @@ into the attributes of the `WebSocketSession`.
|
||||||
|
|
||||||
|
|
||||||
[[webflux-websocket-server-config]]
|
[[webflux-websocket-server-config]]
|
||||||
=== Server Configation
|
=== Server Configuration
|
||||||
[.small]#<<web.adoc#websocket-server-runtime-configuration, Same as in the Servlet stack>>#
|
[.small]#<<web.adoc#websocket-server-runtime-configuration, Same as in the Servlet stack>>#
|
||||||
|
|
||||||
The `RequestUpgradeStrategy` for each server exposes configuration specific to the
|
The `RequestUpgradeStrategy` for each server exposes configuration specific to the
|
||||||
|
|
|
@ -650,7 +650,7 @@ a proxy at the boundary of trust should be configured to remove untrusted forwar
|
||||||
from the outside. You can also configure the `ForwardedHeaderTransformer` with
|
from the outside. You can also configure the `ForwardedHeaderTransformer` with
|
||||||
`removeOnly=true`, in which case it removes but does not use the headers.
|
`removeOnly=true`, in which case it removes but does not use the headers.
|
||||||
|
|
||||||
NOTE: In 5.1 `ForwardedHeaderFilter` was deprecated and superceded by
|
NOTE: In 5.1 `ForwardedHeaderFilter` was deprecated and superseded by
|
||||||
`ForwardedHeaderTransformer` so forwarded headers can be processed earlier, before the
|
`ForwardedHeaderTransformer` so forwarded headers can be processed earlier, before the
|
||||||
exchange is created. If the filter is configured anyway, it is taken out of the list of
|
exchange is created. If the filter is configured anyway, it is taken out of the list of
|
||||||
filters, and `ForwardedHeaderTransformer` is used instead.
|
filters, and `ForwardedHeaderTransformer` is used instead.
|
||||||
|
@ -2256,7 +2256,7 @@ The following example gets the value of the `Accept-Encoding` and `Keep-Alive` h
|
||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
<1> Get the value of the `Accept-Encoging` header.
|
<1> Get the value of the `Accept-Encoding` header.
|
||||||
<2> Get the value of the `Keep-Alive` header.
|
<2> Get the value of the `Keep-Alive` header.
|
||||||
|
|
||||||
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"]
|
||||||
|
@ -2269,7 +2269,7 @@ The following example gets the value of the `Accept-Encoding` and `Keep-Alive` h
|
||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
<1> Get the value of the `Accept-Encoging` header.
|
<1> Get the value of the `Accept-Encoding` header.
|
||||||
<2> Get the value of the `Keep-Alive` header.
|
<2> Get the value of the `Keep-Alive` header.
|
||||||
|
|
||||||
Type conversion is applied automatically if the target method parameter type is not
|
Type conversion is applied automatically if the target method parameter type is not
|
||||||
|
|
|
@ -533,7 +533,7 @@ resolve exceptions thrown during request processing. Those exception resolvers a
|
||||||
customizing the logic to address exceptions. See <<mvc-exceptionhandlers>> for more details.
|
customizing the logic to address exceptions. See <<mvc-exceptionhandlers>> for more details.
|
||||||
|
|
||||||
For HTTP caching support, handlers can use the `checkNotModified` methods of `WebRequest`,
|
For HTTP caching support, handlers can use the `checkNotModified` methods of `WebRequest`,
|
||||||
along with further options for annoated controllers as described in
|
along with further options for annotated controllers as described in
|
||||||
<<mvc-caching-etag-lastmodified,HTTP Caching for Controllers>>.
|
<<mvc-caching-etag-lastmodified,HTTP Caching for Controllers>>.
|
||||||
|
|
||||||
You can customize individual `DispatcherServlet` instances by adding Servlet
|
You can customize individual `DispatcherServlet` instances by adding Servlet
|
||||||
|
@ -691,7 +691,7 @@ The following table lists the available `HandlerExceptionResolver` implementatio
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
|
||||||
[[mvc-excetionhandlers-handling]]
|
[[mvc-exceptionhandlers-handling]]
|
||||||
==== Chain of Resolvers
|
==== Chain of Resolvers
|
||||||
|
|
||||||
You can form an exception resolver chain by declaring multiple `HandlerExceptionResolver`
|
You can form an exception resolver chain by declaring multiple `HandlerExceptionResolver`
|
||||||
|
|
|
@ -1987,7 +1987,7 @@ Note that this incurs a small performance overhead, so you should enable it only
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[websocket-stomp-appplication-context-events]]
|
[[websocket-stomp-application-context-events]]
|
||||||
=== Events
|
=== Events
|
||||||
|
|
||||||
Several `ApplicationContext` events are published and can be
|
Several `ApplicationContext` events are published and can be
|
||||||
|
@ -2030,7 +2030,7 @@ implement their own reconnecting logic.
|
||||||
[[websocket-stomp-interceptors]]
|
[[websocket-stomp-interceptors]]
|
||||||
=== Interception
|
=== Interception
|
||||||
|
|
||||||
<<websocket-stomp-appplication-context-events>> provide notifications for the lifecycle
|
<<websocket-stomp-application-context-events>> provide notifications for the lifecycle
|
||||||
of a STOMP connection but not for every client message. Applications can also register a
|
of a STOMP connection but not for every client message. Applications can also register a
|
||||||
`ChannelInterceptor` to intercept any message and in any part of the processing chain.
|
`ChannelInterceptor` to intercept any message and in any part of the processing chain.
|
||||||
The following example shows how to intercept inbound messages from clients:
|
The following example shows how to intercept inbound messages from clients:
|
||||||
|
@ -2424,7 +2424,7 @@ through any other application instances.
|
||||||
=== Monitoring
|
=== Monitoring
|
||||||
|
|
||||||
When you use `@EnableWebSocketMessageBroker` or `<websocket:message-broker>`, key
|
When you use `@EnableWebSocketMessageBroker` or `<websocket:message-broker>`, key
|
||||||
infrastructure components automatically gather statisticss and counters that provide
|
infrastructure components automatically gather statistics and counters that provide
|
||||||
important insight into the internal state of the application. The configuration
|
important insight into the internal state of the application. The configuration
|
||||||
also declares a bean of type `WebSocketMessageBrokerStats` that gathers all
|
also declares a bean of type `WebSocketMessageBrokerStats` that gathers all
|
||||||
available information in one place and by default logs it at the `INFO` level once
|
available information in one place and by default logs it at the `INFO` level once
|
||||||
|
|
Loading…
Reference in New Issue