Merge branch '4.0.x'

Closes gh-1518
This commit is contained in:
Stéphane Nicoll
2025-04-07 13:28:20 +02:00
2 changed files with 70 additions and 40 deletions

View File

@@ -633,14 +633,14 @@ public class EchoConfig {
----
====
To customize the `@EnableWs` configuration, you can implement `WsConfigurer`:
To customize the `@EnableWs` configuration, you can implement `WsConfigurer` and override individual methods:
====
[source,java]
----
@Configuration
@EnableWs
public class MyConfiguration implements WsConfigurer {
public class EchoConfig implements WsConfigurer {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
@@ -652,7 +652,30 @@ public class MyConfiguration implements WsConfigurer {
argumentResolvers.add(new MyArgumentResolver());
}
// More overridden methods ...
}
----
====
If `WsConfigurer` does not expose some more advanced setting that needs to be configured, consider removing `@EnableWs` and extending directly from `WsConfigurationSupport` or `DelegatingWsConfiguration`.
====
[source,java]
----
@Configuration
public class EchoConfig extends WsConfigurationSupport {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
interceptors.add(new MyInterceptor());
}
@Bean
@Override
public PayloadRootAnnotationMethodEndpointMapping payloadRootAnnotationMethodEndpointMapping() {
// Create or delegate to "super" to create and
// customize properties of PayloadRootAnnotationMethodEndpointMapping
}
}
----
====
@@ -670,7 +693,7 @@ If you want to use a different scope, such as prototype, see the {spring-framewo
Note that all abstract base classes provided in Spring-WS are thread safe, unless otherwise indicated in the class-level Javadoc.
[[server-atEndpoint-methods]]
=== `@Endpoint` handling methods
== `@Endpoint` handling methods
For an endpoint to actually handle incoming XML messages, it needs to have one or more handling methods.
Handling methods can take wide range of parameters and return types.
@@ -697,7 +720,7 @@ The `order` method takes an `Element` (annotated with `@RequestPayload`) as a pa
This means that the payload of the message is passed on this method as a DOM element.
The method has a `void` return type, indicating that no response message is sent.
==== Handling Method Parameters
=== Handling Method Parameters
The handling method typically has one or more parameters that refer to various parts of the incoming XML message.
Most commonly, the handling method has a single parameter that maps to the payload of the message, but it can also map to other parts of the request message, such as a SOAP header.
@@ -808,7 +831,7 @@ You can even extend this mechanism to support your own parameter types.
See the Javadoc of {spring-ws-api}/server/endpoint/adapter/DefaultMethodEndpointAdapter.html[`DefaultMethodEndpointAdapter`] and {spring-ws-api}/server/endpoint/adapter/method/MethodArgumentResolver.html[`MethodArgumentResolver`] to see how.
[[server-xpath-param]]
===== `@XPathParam`
==== `@XPathParam`
One parameter type needs some extra explanation: `@XPathParam`.
The idea here is that you annotate one or more method parameters with an XPath expression and that each such annotated parameter is bound to the evaluation of the expression.
@@ -860,7 +883,7 @@ By using the `@XPathParam`, you can bind to all the data types supported by XPat
In addition to this list, you can use any type that can be converted from a `String` by a Spring {spring-framework-docs}/core/validation/convert.html#core-convert-ConversionService-API[conversion service].
==== Handling method return types
=== Handling method return types
To send a response message, the handling needs to specify a return type.
If no response message is required, the method can declare a `void` return type.
@@ -942,8 +965,8 @@ The concept of configurable endpoint mappings that can optionally contain interc
A lot of supporting functionality can be built into custom `EndpointMapping` implementations.
For example, a custom endpoint mapping could choose an endpoint based not only on the contents of a message but also on a specific SOAP header (or, indeed, multiple SOAP headers).
Most endpoint mappings inherit from the `AbstractEndpointMapping`, which offers an '`interceptors`' property, which is the list of interceptors to use. `EndpointInterceptors` are discussed in <<server-endpoint-interceptor>>.
Additionally, there is the `defaultEndpoint`, which is the default endpoint to use when this endpoint mapping does not result in a matching endpoint.
Most endpoint mappings inherit from the `AbstractEndpointMapping`, which offers an '`interceptors`' property, which is the list of interceptors to use.
`EndpointInterceptors` are discussed in <<server-endpoint-interceptor>>.
As explained in <<server-endpoints>>, the `@Endpoint` style lets you handle multiple requests in one endpoint class.
This is the responsibility of the `MethodEndpointMapping`.
@@ -957,6 +980,8 @@ Whenever a message comes in with this qualified name for the payload root elemen
Alternatively, the `SoapActionAnnotationMethodEndpointMapping` uses the `@SoapAction` annotation to mark methods with a particular SOAP Action.
Whenever a message comes in with this `SOAPAction` header, the method is invoked.
`AbstractEndpointMapping` implementations provides a `defaultEndpoint` property that configures the endpoint to use when a configured mapping does not result in a matching endpoint.
[[server-ws-addressing]]
=== WS-Addressing