Commit Graph

1949 Commits

Author SHA1 Message Date
Juergen Hoeller
4371350b5d Polishing 2017-09-10 21:56:31 +02:00
Rossen Stoyanchev
bc470fca30 Polish 2017-09-09 17:40:59 -04:00
Yi EungJun
cf106ec99e Fix typo 2017-09-08 10:48:27 +02:00
Brian Clozel
1a883b863d Remove temporary workaround for reactor-netty client
Now that https://github.com/reactor/reactor-netty/issues/138 is solved,
this commit removes the temporary workaround introduced in SPR-15784
but leaves the general mechanism for detecting empty responses.
2017-09-08 10:27:35 +02:00
Andy Clement
3956423afe Polish
The high level matchStarting API was removed a few commits ago.
This change tidies up by removing the supporting infrastructure
for that from the PathElements.
2017-09-07 14:03:46 -07:00
Arjen Poutsma
ec6475a24c Expose scheme in ReactorServerHttpRequest URI
This commit determines fixes ReactorServerHttpRequest.getUri() so that
it includes a URL scheme.

Issue: SPR-15931
2017-09-07 12:29:28 +02:00
Rossen Stoyanchev
2fc2dab230 Fold DefaultWebSession within InMemoryWebSessionStore
InMemoryWebSessionStore is very closely associated to DefaultWebSession
passing it to it several fields and functions. Now that the store also
creates the session, it makes sense to bring the latter in as an inner,
nested class.

Issue: SPR-15875, 15876
2017-09-06 11:47:43 -04:00
Rossen Stoyanchev
c7d54c8b52 Polish 2017-09-06 11:47:43 -04:00
Rob Winch
8ad14ae95c DefaultWebSessionManager decoupled from DefaultWebSession
DefaultWebSessionManager no longer requires the WebSessionStore
to use DefaultWebSession.

Removed explicit start() in save(). This seemed unnecessary since at
that point isStarted is guaranteed to return true. The status can
be updated through the copy constructor.

DefaultWebSessionTests added.

Issue: SPR-15875
2017-09-06 11:47:43 -04:00
Rob Winch
86912475af Refactor WebSessionStore
- Add WebSessionStore.createWebSession.

- Remove remove WebSessionStore.changeSessionId

- Add WebSessionStore updateLastAccessTime which allows updating the
WebSession lastAccessTime without exposing a method on WebSession in
an implementation independent way.

- Remove WebSessionStore.storeSession. This method is not necessary
since the WebSession that is returned allows saving the WebSession.
Additionally, it is error prone since the wrong type might be passed
into it.

Issue: SPR-15875, 15876
2017-09-06 11:47:43 -04:00
Rob Winch
167ddc7cfc Polish HeaderWebSessionIdResolver
Use constant for default header name and make getHeaderName private.

Also switch HeaderWebSessionIdResolverTests to unit tests rather than
testing with DefaultWebSessionManager.

Issue: SPR-15917
2017-09-06 11:47:43 -04:00
Brian Clozel
16f3f8d28f Add close() method on HTTP client response
Before this commit, there was no way to signal the HTTP client that we
were done consuming the response. Without that, the underlying client
library cannot know when it is safe to release the associated resources
(e.g. the HTTP connection).

This commit adds new `close()` methods on both `ClientHttpResponse`
and `ClientResponse`. This methods is non-blocking and its behavior
depends on the library, its configuration, HTTP version, etc.

At the `WebClient` level, `close()` is called automatically if we
consume the response body through the `ResponseSpec` or the
`ClientResponse` itself.

Note that it is *required* to call `close()` manually otherwise; not
doing so might create resource leaks or connection issues.

Issue: SPR-15920
2017-09-06 17:29:18 +02:00
Arjen Poutsma
02a2c400c7 Move URL transform methods from ServerHttpResponse to ServerWebExchange
This commit moves `encodeUrl` and `registerUrlEncoder` from
ServerHttpResponse to ServerWebExchange.

It also renames `encodeUrl` to `transformUrl` and `registerUrlEncoder`
to `addUrlTransformer` to make it clearer that these methods do not
perform actual URL encodings (i.e. they do not replaceinvalid
characters).
The `add` prefix (instead of `register`) makes it clearer that each
function is added in addition to the previous one.

Issue: SPR-15924
2017-09-06 14:39:09 +02:00
Sebastien Deleuze
5d4ee09d53 Fix AbstractJackson2Encoder#canEncode
This commit ensures that the Jackson encoder is selected only
with supported mime types.

Issue: SPR-15910
2017-09-06 08:26:15 +02:00
Rossen Stoyanchev
320bfdf413 Polish 2017-09-05 17:47:02 -04:00
Greg Turnquist
c98e01ad1f Create session-based WebSessionIdResolver
Introduces HeaderSessionIdResolver, which reads session ids from a session header and generates a session response header when new session are created.

Related issue: SPR-15917
2017-09-05 17:37:50 -04:00
Brian Clozel
bff54788e8 Enable HTTP compression Reactor ClientHttpConnector
`ReactorClientHttpConnector` provides an adapter layer to `WebClient`
for using Reactor-Netty's `HttpClient`.
This commit enables HTTP compression support by default for this client
Connector.

Another constructor is still available for providing a custom
`HttpOptions` configuration.

Issue: SPR-15908
2017-09-01 23:14:58 +02:00
Brian Bohl
81dfadcb16 Fix StringIndexOutOfBoundsException in RestTemplate.doExecute IOException handler when query string is an empty string 2017-09-01 16:48:53 -04:00
Juergen Hoeller
2b44e6e21c Strong references to mapped exception handler methods
Issue: SPR-15907
2017-08-29 15:07:23 +02:00
Sebastien Deleuze
9abe77670c Sync with reactor-core when() -> zip() change 2017-08-21 19:54:08 +02:00
Juergen Hoeller
b61c055e43 Polishing 2017-08-21 01:37:33 +02:00
Juergen Hoeller
3991ab4a23 Efficient Kotlin metadata detection
Issue: SPR-15673
2017-08-21 01:33:20 +02:00
Stephane Nicoll
f6e7fef236 Polish 2017-08-19 10:50:41 +02:00
Juergen Hoeller
9aa369f402 Data class construction supports field default/marker parameters
Issue: SPR-15871
2017-08-18 17:59:06 +02:00
Juergen Hoeller
47a7475898 Resolve remaining nullability warnings
Issue: SPR-15869
2017-08-18 00:15:46 +02:00
Juergen Hoeller
b94302b5bd Enforce non-null value from getBean and at injection points
Bean-derived null values may still get passed into bean properties and injection points but only if those are declared as non-required. Note that getBean will never return null; a manual bean.equals(null) / "null".equals(bean.toString()) check identifies expected null values now.  This will only ever happen with custom FactoryBeans or factory methods returning null - and since all common cases are handled by autowiring or bean property values in bean definitions, there should be no need to ever manually check for such a null value received from getBean.

Issue: SPR-15829
2017-08-18 00:11:35 +02:00
Sebastien Deleuze
73cf07e9a4 Fix overridden methods nullability
Issue: SPR-15869
2017-08-17 15:02:59 +02:00
Juergen Hoeller
61cdc842e0 BindingResult support for constructor argument mismatch on immutable data object
Issue: SPR-15542
2017-08-17 11:02:40 +02:00
Rossen Stoyanchev
e433d8b66a Polish 2017-08-16 15:45:14 +02:00
rlindooren
5b29555d88 Jackson encoder and decoder should use provided mime types
Instead of always using the default JSON mime types
2017-08-16 15:25:18 +02:00
Rossen Stoyanchev
645e3492db Use URLDecoder for query params in WebFlux
Issue: SPR-15860
2017-08-16 13:34:31 +02:00
Rossen Stoyanchev
8b7a670821 Cancel WebAsyncManager thread on request timeout
Issue: SPR-15852
2017-08-16 09:26:21 +02:00
Rossen Stoyanchev
280c64ba35 Polish 2017-08-14 18:55:39 +03:00
Rossen Stoyanchev
8c4b1ab781 Functional PathPattern comparator 2017-08-14 16:33:39 +03:00
Rossen Stoyanchev
631b546d1c Proper null handling in PathPattern comparator 2017-08-14 11:45:27 +03:00
Juergen Hoeller
adeb521ce4 Polishing 2017-08-08 17:27:28 +02:00
Stephane Maldini
2677bab560 Use Bismut-BUILD-SNAPSHOT
Sync 3.1.0.BUILD-SNAPSHOT changes to Operators.checkRequest (removed)
2017-08-03 14:30:08 -07:00
Rossen Stoyanchev
08dfce2cb5 Dedicated specificity comparator in PathPattern
The PathPattern compareTo method is now consistent with equals when
two patterns are of the same specificity but otherwise different.

Separately PathPattern now exposes a Comparator by specificity that
offers the current functionality of compareTo. This can be used for
actual sorting where we only care about specificity.
2017-08-02 18:11:36 +02:00
Rossen Stoyanchev
62fa20fd6f PathPattern#matchAndExtract minor refactoring
Consistent behavior with matches(PathContainer), the two had slightly
different logic for handling of empty paths.

Make matchAndExtract independantly usable without the need to call
matches(PathContainer) first. Essentially no longer raising ISE if the
pattern doesn't match but simply returning null.
2017-08-02 16:31:06 +02:00
Rossen Stoyanchev
dccedd5ad5 Minor refactoring in PathPattern
Rename getPathRemaining to matchStartOfPath since the method does
match and to be more clear about what the method and the return value
intuitively follows.

Remove matchStart which matches the start of the pattern (rather than
the start of the path). It is a use case that does not come up in
request mapping.
2017-08-02 15:05:28 +02:00
Rossen Stoyanchev
c060f4f615 Polish PathPattern and parser
Updates to Javadoc
Consistent and separator type neutral naming for trailing slash
PathPattern extracts options from the parser instance
2017-08-02 14:21:16 +02:00
Arjen Poutsma
5394cc0c63 WebClientException should allow access to status code of the response
This commit changes the WebClient so that it now throws a
`WebClientResponseException` for `ResponseSpec.bodyTo`. This newly
introduces exception contains the status code, headers, and body of the
response message.

As a consequence of the above, we had to change `onStatus` so that the
`exceptionFunction` now returns a `Mono<Throwable>` rather than a
`Throwable`, which it was before. The Mono allows for asynchronous
operations, such as reading the contents of the body.

Issue: SPR-15824
2017-08-02 10:20:58 +02:00
Rossen Stoyanchev
b6d1fd9d22 Minor refactoring in PathPatternParser
Remove the separator constructor argument (but preserve internal
functionality) now that PathPatternParser is more explicitly purposed
for URL paths and in any case the use of an alternate separator would
also requires a similar input option on the PathContainer parsing side.
2017-08-01 22:52:18 +02:00
Rossen Stoyanchev
1794f1cea4 Polish path pattern parsing javadoc
Emphasize specific purpose for URL path matching.
2017-08-01 22:31:21 +02:00
Rossen Stoyanchev
b1440b6816 Remove ParsingPathMatcher
Now that we also have RequestPath and PathContainer with the latter as
the required input, the ParsingPathMatcher adapter can be removed.
2017-08-01 13:35:21 +02:00
Juergen Hoeller
ca0983cd85 Polishing 2017-08-01 12:08:57 +02:00
Rossen Stoyanchev
f813a63fd8 PathContainer parses URL paths only
Collapse non-URL vs URL based path parsing into one essentially
supporting URL paths only.
2017-07-31 22:10:08 +02:00
Rossen Stoyanchev
af83d2332a Fix regression in HttpPutFormContentFilter
Re-arrange the checks so that if there is no form parameter, then
immediately and unconditionally delegate to super.getParameterValues().
Or reversely if there is no super.getParameterValues() then return the
form parameter.

So the only remaining case is when combining values present in both.
In that case we'll take both only if a queryString exists.

One extra fix is to not even wrap the request if we did not parse any
form parameters at all which can happen with HttpHiddenMethodFilter.

Issue: SPR-15828, 15835
2017-07-31 17:30:22 +02:00
Rossen Stoyanchev
dbe25cf717 Add RequestPath tests for modifying the contextPath 2017-07-28 12:26:34 +02:00
Rossen Stoyanchev
6855a85c41 Move RequestPath to parent server package 2017-07-28 12:26:34 +02:00