From bab3b6fd1c4946cdba59aca365aba1a7f4ca6033 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 13 Oct 2015 12:33:26 +0200 Subject: [PATCH 1/6] Introduce HttpMessage hierarchy This commit introduces "reactive" sub-interfaces of the HttpMessage interface found in the Spring Framework. --- .../ReactiveHttpInputMessage.java} | 15 +++-- .../http/ReactiveHttpOutputMessage.java | 41 +++++++++++++ .../client/ReactiveClientHttpRequest.java} | 16 +++-- .../client/ReactiveClientHttpResponse.java | 59 +++++++++++++++++++ .../server/ReactiveServerHttpRequest.java} | 14 +++-- .../server/ReactiveServerHttpResponse.java} | 32 ++++------ .../web/dispatch/DispatcherHandler.java | 20 ++++--- .../reactive/web/dispatch/HandlerAdapter.java | 7 ++- .../reactive/web/dispatch/HandlerMapping.java | 5 +- .../web/dispatch/HandlerResultHandler.java | 7 ++- .../dispatch/SimpleHandlerResultHandler.java | 7 +-- .../dispatch/handler/HttpHandlerAdapter.java | 8 +-- .../handler/SimpleUrlHandlerMapping.java | 6 +- .../method/HandlerMethodArgumentResolver.java | 6 +- .../method/InvocableHandlerMethod.java | 6 +- .../RequestBodyArgumentResolver.java | 34 +++++++---- .../RequestMappingHandlerAdapter.java | 7 ++- .../RequestMappingHandlerMapping.java | 5 +- .../RequestParamArgumentResolver.java | 5 +- .../annotation/ResponseBodyResultHandler.java | 39 +++++++----- .../reactive/web/http/HttpHandler.java | 8 ++- .../reactor/ReactorServerHttpRequest.java | 16 ++++- .../reactor/ReactorServerHttpResponse.java | 4 +- .../rxnetty/RxNettyServerHttpRequest.java | 19 +++--- .../rxnetty/RxNettyServerHttpResponse.java | 13 ++-- .../servlet/ServletServerHttpRequest.java | 6 +- .../servlet/ServletServerHttpResponse.java | 8 +-- ...mpleUrlHandlerMappingIntegrationTests.java | 13 ++-- .../RequestMappingHandlerMappingTests.java | 11 ++-- .../reactive/web/http/EchoHandler.java | 7 ++- .../reactive/web/http/RandomHandler.java | 7 ++- .../reactive/web/http/XmlHandler.java | 12 ++-- 32 files changed, 310 insertions(+), 153 deletions(-) rename spring-web-reactive/src/main/java/org/springframework/{reactive/web/http/ServerHttpRequest.java => http/ReactiveHttpInputMessage.java} (60%) create mode 100644 spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java rename spring-web-reactive/src/main/java/org/springframework/{reactive/web/http/HttpRequest.java => http/client/ReactiveClientHttpRequest.java} (66%) create mode 100644 spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpResponse.java rename spring-web-reactive/src/main/java/org/springframework/{reactive/web/http/HttpMessage.java => http/server/ReactiveServerHttpRequest.java} (66%) rename spring-web-reactive/src/main/java/org/springframework/{reactive/web/http/ServerHttpResponse.java => http/server/ReactiveServerHttpResponse.java} (58%) diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpInputMessage.java similarity index 60% rename from spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpRequest.java rename to spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpInputMessage.java index dca48dee1cb..8cd4535b6bd 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpInputMessage.java @@ -13,21 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.reactive.web.http; + +package org.springframework.http; import java.nio.ByteBuffer; import org.reactivestreams.Publisher; /** - * Represent a server-side HTTP request. + * Represents a "reactive" HTTP input message, consisting of {@linkplain #getHeaders() headers} + * and a readable {@linkplain #getBody() streaming body }. + * + *

Typically implemented by an HTTP request on the server-side, or a response on the client-side. * - * @author Rossen Stoyanchev + * @author Arjen Poutsma */ -public interface ServerHttpRequest extends HttpRequest { +public interface ReactiveHttpInputMessage extends HttpMessage { /** - * Return the body of the message as a reactive stream. + * Return the body of the message as an publisher of {@code ByteBuffer}s. + * @return the body */ Publisher getBody(); diff --git a/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java new file mode 100644 index 00000000000..bbd5022a888 --- /dev/null +++ b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java @@ -0,0 +1,41 @@ +/* + * Copyright 2002-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.http; + +import java.nio.ByteBuffer; + +import org.reactivestreams.Publisher; + +/** + * Represents a "reactive" HTTP output message, consisting of {@linkplain #getHeaders() headers} + * and the capability to add a {@linkplain #addBody(Publisher) body}. + * + *

Typically implemented by an HTTP request on the client-side, or a response on the server-side. + * + * @author Arjen Poutsma + */ +public interface ReactiveHttpOutputMessage extends HttpMessage { + + /** + * Adds the given publisher of {@link ByteBuffer}s as a body. A HTTP/1.1 message has + * one body, but HTTP/1.2 supports multiple bodies. + * @param body the body to add + * @return a publisher that indicates completion + */ + Publisher addBody(Publisher body); + +} diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpRequest.java similarity index 66% rename from spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpRequest.java rename to spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpRequest.java index 96767fe2fee..591a0177275 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpRequest.java @@ -13,19 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.reactive.web.http; -import java.net.URI; +package org.springframework.http.client; -import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.http.ReactiveHttpOutputMessage; /** - * @author Rossen Stoyanchev + * Represents a "reactive" client-side HTTP request. + * + * @author Arjen Poutsma */ -public interface HttpRequest extends HttpMessage { - - HttpMethod getMethod(); - - URI getURI(); +public interface ReactiveClientHttpRequest extends HttpRequest, ReactiveHttpOutputMessage { } diff --git a/spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpResponse.java new file mode 100644 index 00000000000..b5f619bdc92 --- /dev/null +++ b/spring-web-reactive/src/main/java/org/springframework/http/client/ReactiveClientHttpResponse.java @@ -0,0 +1,59 @@ +/* + * Copyright 2002-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.http.client; + +import java.io.Closeable; +import java.io.IOException; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ReactiveHttpInputMessage; + +/** + * Represents a "reactive" client-side HTTP response. + * + * @author Arjen Poutsma + */ +public interface ReactiveClientHttpResponse extends ReactiveHttpInputMessage, Closeable { + + /** + * Return the HTTP status code of the response. + * @return the HTTP status as an HttpStatus enum value + * @throws IOException in case of I/O errors + */ + HttpStatus getStatusCode() throws IOException; + + /** + * Return the HTTP status code of the response as integer + * @return the HTTP status as an integer + * @throws IOException in case of I/O errors + */ + int getRawStatusCode() throws IOException; + + /** + * Return the HTTP status text of the response. + * @return the HTTP status text + * @throws IOException in case of I/O errors + */ + String getStatusText() throws IOException; + + /** + * Close this response, freeing any resources created. + */ + @Override + void close(); + +} diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpMessage.java b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpRequest.java similarity index 66% rename from spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpMessage.java rename to spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpRequest.java index a3c6092d312..4b5d0d1fa2c 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpMessage.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpRequest.java @@ -13,15 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.reactive.web.http; -import org.springframework.http.HttpHeaders; +package org.springframework.http.server; + +import org.springframework.http.HttpRequest; +import org.springframework.http.ReactiveHttpInputMessage; /** - * @author Rossen Stoyanchev + * Represents a "reactive" server-side HTTP request + * + * @author Arjen Poutsma */ -public interface HttpMessage { - - HttpHeaders getHeaders(); +public interface ReactiveServerHttpRequest extends HttpRequest, ReactiveHttpInputMessage { } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java similarity index 58% rename from spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpResponse.java rename to spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java index 1f64f2dd6e0..514592df514 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/ServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java @@ -13,23 +13,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.reactive.web.http; -import java.nio.ByteBuffer; - -import org.reactivestreams.Publisher; +package org.springframework.http.server; import org.springframework.http.HttpStatus; +import org.reactivestreams.Publisher; +import org.springframework.http.ReactiveHttpOutputMessage; /** - * Represent a server-side HTTP response. + * Represents a "reactive" server-side HTTP response. * - * @author Rossen Stoyanchev + * @author Arjen Poutsma */ -public interface ServerHttpResponse extends HttpMessage { +public interface ReactiveServerHttpResponse + extends ReactiveHttpOutputMessage { + /** + * Set the HTTP status code of the response. + * @param status the HTTP status as an HttpStatus enum value + */ void setStatusCode(HttpStatus status); - + /** * Write the response headers. This method must be invoked to send responses without body. * @return A {@code Publisher} used to signal the demand, and receive a notification @@ -37,16 +41,4 @@ public interface ServerHttpResponse extends HttpMessage { * network. */ Publisher writeHeaders(); - - /** - * Write the provided reactive stream of bytes to the response body. Most servers - * support multiple {@code writeWith} calls. Headers are written automatically - * before the body, so not need to call {@link #writeHeaders()} explicitly. - * @param contentPublisher the stream to write in the response body. - * @return A {@code Publisher} used to signal the demand, and receive a notification - * when the handling is complete (success or error) including the flush of the data on the - * network. - */ - Publisher writeWith(Publisher contentPublisher); - } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/DispatcherHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/DispatcherHandler.java index b50aebff180..89c372946ea 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/DispatcherHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/DispatcherHandler.java @@ -13,25 +13,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.reactivestreams.Publisher; +import reactor.Publishers; + import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.http.HttpStatus; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.web.http.HttpHandler; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; -import reactor.Publishers; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; /** * Central dispatcher for HTTP request handlers/controllers. Dispatches to registered @@ -91,7 +93,7 @@ public class DispatcherHandler implements HttpHandler, ApplicationContextAware { @Override - public Publisher handle(ServerHttpRequest request, ServerHttpResponse response) { + public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { if (logger.isDebugEnabled()) { logger.debug("Processing " + request.getMethod() + " request for [" + request.getURI() + "]"); @@ -123,7 +125,7 @@ public class DispatcherHandler implements HttpHandler, ApplicationContextAware { } - protected Object getHandler(ServerHttpRequest request) { + protected Object getHandler(ReactiveServerHttpRequest request) { Object handler = null; for (HandlerMapping handlerMapping : this.handlerMappings) { handler = handlerMapping.getHandler(request); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerAdapter.java index 01fc9a9f0ef..91d94204127 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerAdapter.java @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; /** * Interface that must be implemented for each handler type to handle an HTTP request. @@ -52,6 +53,6 @@ public interface HandlerAdapter { * @throws Exception in case of errors * @return An {@link HandlerResult} instance */ - HandlerResult handle(ServerHttpRequest request, ServerHttpResponse response, Object handler) throws Exception; + HandlerResult handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response, Object handler) throws Exception; } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerMapping.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerMapping.java index e3472eba535..2a087989a7c 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerMapping.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerMapping.java @@ -13,15 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; /** * @author Rossen Stoyanchev */ public interface HandlerMapping { - Object getHandler(ServerHttpRequest request); + Object getHandler(ReactiveServerHttpRequest request); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResultHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResultHandler.java index 7a4a9cb23bf..aee3d6eab53 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResultHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResultHandler.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch; import org.reactivestreams.Publisher; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; /** * Process the {@link HandlerResult}, usually returned by an {@link HandlerAdapter}. @@ -47,6 +48,6 @@ public interface HandlerResultHandler { * when the handling is complete (success or error) including the flush of the data on the * network. */ - Publisher handleResult(ServerHttpRequest request, ServerHttpResponse response, HandlerResult result); + Publisher handleResult(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response, HandlerResult result); } \ No newline at end of file diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/SimpleHandlerResultHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/SimpleHandlerResultHandler.java index 0e9556eb30f..0fe01b02be3 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/SimpleHandlerResultHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/SimpleHandlerResultHandler.java @@ -22,8 +22,8 @@ import org.reactivestreams.Publisher; import reactor.Publishers; import org.springframework.core.Ordered; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; /** * Supports {@link HandlerResult} with a {@code Publisher} value. @@ -46,9 +46,8 @@ public class SimpleHandlerResultHandler implements Ordered, HandlerResultHandler } @Override - public Publisher handleResult(ServerHttpRequest request, ServerHttpResponse response, HandlerResult result) { + public Publisher handleResult(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response, HandlerResult result) { Publisher handleComplete = Publishers.completable((Publisher)result.getValue()); return Publishers.concat(Publishers.from(Arrays.asList(handleComplete, response.writeHeaders()))); } - } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/HttpHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/HttpHandlerAdapter.java index 0dc2e9463d4..67c563355ad 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/HttpHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/HttpHandlerAdapter.java @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.handler; import org.reactivestreams.Publisher; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.web.dispatch.HandlerAdapter; import org.springframework.reactive.web.dispatch.HandlerResult; import org.springframework.reactive.web.http.HttpHandler; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; - /** * Support use of {@link HttpHandler} with @@ -44,7 +44,7 @@ public class HttpHandlerAdapter implements HandlerAdapter { } @Override - public HandlerResult handle(ServerHttpRequest request, ServerHttpResponse response, Object handler) { + public HandlerResult handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response, Object handler) { HttpHandler httpHandler = (HttpHandler)handler; Publisher completion = httpHandler.handle(request, response); return new HandlerResult(httpHandler, completion); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMapping.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMapping.java index 64bae7f0ae0..c49f9fa0c5d 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMapping.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMapping.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.handler; import java.util.HashMap; import java.util.Map; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.reactive.web.dispatch.HandlerMapping; -import org.springframework.reactive.web.http.ServerHttpRequest; - /** * @author Rossen Stoyanchev @@ -39,7 +39,7 @@ public class SimpleUrlHandlerMapping implements HandlerMapping { @Override - public Object getHandler(ServerHttpRequest request) { + public Object getHandler(ReactiveServerHttpRequest request) { return this.handlerMap.get(request.getURI().getPath()); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/HandlerMethodArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/HandlerMethodArgumentResolver.java index e4d77d3dbc8..f09fa428306 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/HandlerMethodArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/HandlerMethodArgumentResolver.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.reactive.web.dispatch.method; +package org.springframework.reactive.web.dispatch.method; import org.springframework.core.MethodParameter; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; /** @@ -27,6 +27,6 @@ public interface HandlerMethodArgumentResolver { boolean supportsParameter(MethodParameter parameter); - Object resolveArgument(MethodParameter parameter, ServerHttpRequest request); + Object resolveArgument(MethodParameter parameter, ReactiveServerHttpRequest request); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/InvocableHandlerMethod.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/InvocableHandlerMethod.java index ab49c6b6e14..75076771803 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/InvocableHandlerMethod.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/InvocableHandlerMethod.java @@ -26,7 +26,7 @@ import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.GenericTypeResolver; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.util.ReflectionUtils; import org.springframework.web.method.HandlerMethod; @@ -55,7 +55,7 @@ public class InvocableHandlerMethod extends HandlerMethod { } - public Object invokeForRequest(ServerHttpRequest request, Object... providedArgs) throws Exception { + public Object invokeForRequest(ReactiveServerHttpRequest request, Object... providedArgs) throws Exception { Object[] args = getMethodArgumentValues(request, providedArgs); if (logger.isTraceEnabled()) { logger.trace("Invoking [" + getBeanType().getSimpleName() + "." + @@ -68,7 +68,7 @@ public class InvocableHandlerMethod extends HandlerMethod { return returnValue; } - private Object[] getMethodArgumentValues(ServerHttpRequest request, Object... providedArgs) throws Exception { + private Object[] getMethodArgumentValues(ReactiveServerHttpRequest request, Object... providedArgs) throws Exception { MethodParameter[] parameters = getMethodParameters(); Object[] args = new Object[parameters.length]; for (int i = 0; i < parameters.length; i++) { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java index daf58211687..0dea573a221 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java @@ -16,23 +16,35 @@ package org.springframework.reactive.web.dispatch.method.annotation; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + import org.reactivestreams.Publisher; +import reactor.Publishers; +import reactor.core.publisher.convert.CompletableFutureConverter; +import reactor.core.publisher.convert.RxJava1Converter; +import reactor.core.publisher.convert.RxJava1SingleConverter; +import reactor.rx.Promise; +import reactor.rx.Stream; +import reactor.rx.Streams; +import rx.Observable; +import rx.Single; + import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; import org.springframework.core.convert.ConversionService; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.reactive.codec.decoder.ByteToMessageDecoder; import org.springframework.reactive.web.dispatch.method.HandlerMethodArgumentResolver; -import org.springframework.reactive.web.http.ServerHttpRequest; import org.springframework.web.bind.annotation.RequestBody; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - /** * @author Sebastien Deleuze * @author Stephane Maldini @@ -66,7 +78,7 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve @Override @SuppressWarnings("unchecked") - public Object resolveArgument(MethodParameter parameter, ServerHttpRequest request) { + public Object resolveArgument(MethodParameter parameter, ReactiveServerHttpRequest request) { MediaType mediaType = resolveMediaType(request); ResolvableType type = ResolvableType.forMethodParameter(parameter); @@ -92,14 +104,14 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve } } - private MediaType resolveMediaType(ServerHttpRequest request) { + private MediaType resolveMediaType(ReactiveServerHttpRequest request) { String acceptHeader = request.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); List mediaTypes = MediaType.parseMediaTypes(acceptHeader); MediaType.sortBySpecificityAndQuality(mediaTypes); return ( mediaTypes.size() > 0 ? mediaTypes.get(0) : MediaType.TEXT_PLAIN); } - private ByteToMessageDecoder resolveDeserializers(ServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { + private ByteToMessageDecoder resolveDeserializers(ReactiveServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { for (ByteToMessageDecoder deserializer : this.deserializers) { if (deserializer.canDecode(type, mediaType, hints)) { return deserializer; @@ -108,7 +120,7 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve return null; } - private List> resolvePreProcessors(ServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { + private List> resolvePreProcessors(ReactiveServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { List> preProcessors = new ArrayList<>(); for (ByteToMessageDecoder preProcessor : this.preProcessors) { if (preProcessor.canDecode(type, mediaType, hints)) { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java index 6afcb3d44d9..a24859915bd 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.method.annotation; import java.nio.ByteBuffer; @@ -23,6 +24,8 @@ import java.util.List; import org.springframework.beans.factory.InitializingBean; import org.springframework.reactive.codec.decoder.ByteBufferDecoder; import org.springframework.reactive.codec.decoder.ByteToMessageDecoder; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.codec.decoder.JacksonJsonDecoder; import org.springframework.reactive.codec.decoder.JsonObjectDecoder; import org.springframework.reactive.codec.decoder.StringDecoder; @@ -30,8 +33,6 @@ import org.springframework.reactive.web.dispatch.HandlerAdapter; import org.springframework.reactive.web.dispatch.HandlerResult; import org.springframework.reactive.web.dispatch.method.HandlerMethodArgumentResolver; import org.springframework.reactive.web.dispatch.method.InvocableHandlerMethod; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; import org.springframework.web.method.HandlerMethod; @@ -68,7 +69,7 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, Initializin } @Override - public HandlerResult handle(ServerHttpRequest request, ServerHttpResponse response, + public HandlerResult handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response, Object handler) throws Exception { final InvocableHandlerMethod invocable = new InvocableHandlerMethod((HandlerMethod) handler); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMapping.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMapping.java index 17df6ff8192..3dd42b38316 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMapping.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMapping.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.method.annotation; import java.util.Arrays; @@ -32,8 +33,8 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.http.HttpMethod; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.reactive.web.dispatch.HandlerMapping; -import org.springframework.reactive.web.http.ServerHttpRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -92,7 +93,7 @@ public class RequestMappingHandlerMapping implements HandlerMapping, } @Override - public Object getHandler(ServerHttpRequest request) { + public Object getHandler(ReactiveServerHttpRequest request) { String path = request.getURI().getPath(); HttpMethod method = request.getMethod(); for (Map.Entry entry : this.methodMap.entrySet()) { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestParamArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestParamArgumentResolver.java index e3aaed22384..ab7fa92d857 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestParamArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestParamArgumentResolver.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.method.annotation; import org.springframework.core.MethodParameter; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.reactive.web.dispatch.method.HandlerMethodArgumentResolver; -import org.springframework.reactive.web.http.ServerHttpRequest; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; @@ -39,7 +40,7 @@ public class RequestParamArgumentResolver implements HandlerMethodArgumentResolv @Override - public Object resolveArgument(MethodParameter param, ServerHttpRequest request) { + public Object resolveArgument(MethodParameter param, ReactiveServerHttpRequest request) { RequestParam annotation = param.getParameterAnnotation(RequestParam.class); String name = (annotation.value().length() != 0 ? annotation.value() : param.getParameterName()); UriComponents uriComponents = UriComponentsBuilder.fromUri(request.getURI()).build(); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java index bfd39cdbfff..221b0cbd61e 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java @@ -13,9 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.method.annotation; +import java.lang.reflect.Type; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; + import org.reactivestreams.Publisher; +import reactor.Publishers; +import reactor.core.publisher.convert.CompletableFutureConverter; +import reactor.core.publisher.convert.RxJava1Converter; +import reactor.core.publisher.convert.RxJava1SingleConverter; +import reactor.rx.Promise; +import rx.Observable; +import rx.Single; + import org.springframework.core.MethodParameter; import org.springframework.core.Ordered; import org.springframework.core.ResolvableType; @@ -23,20 +40,13 @@ import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.convert.ConversionService; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.codec.encoder.MessageToByteEncoder; import org.springframework.reactive.web.dispatch.HandlerResult; import org.springframework.reactive.web.dispatch.HandlerResultHandler; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.method.HandlerMethod; -import reactor.Publishers; - -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; /** @@ -95,7 +105,8 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered @Override @SuppressWarnings("unchecked") - public Publisher handleResult(ServerHttpRequest request, ServerHttpResponse response, + public Publisher handleResult(ReactiveServerHttpRequest request, + ReactiveServerHttpResponse response, HandlerResult result) { Object value = result.getValue(); @@ -129,20 +140,20 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered outputStream = postProcessor.encode(outputStream, elementType, mediaType, hints.toArray()); } response.getHeaders().setContentType(mediaType); - return response.writeWith(outputStream); + return response.addBody(outputStream); } return Publishers.error(new IllegalStateException( "Return value type '" + returnType.getParameterType().getName() + "' with media type '" + mediaType + "' not supported" )); } - private MediaType resolveMediaType(ServerHttpRequest request) { + private MediaType resolveMediaType(ReactiveServerHttpRequest request) { String acceptHeader = request.getHeaders().getFirst(HttpHeaders.ACCEPT); List mediaTypes = MediaType.parseMediaTypes(acceptHeader); MediaType.sortBySpecificityAndQuality(mediaTypes); return ( mediaTypes.size() > 0 ? mediaTypes.get(0) : MediaType.TEXT_PLAIN); } - private MessageToByteEncoder resolveSerializer(ServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { + private MessageToByteEncoder resolveSerializer(ReactiveServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { for (MessageToByteEncoder codec : this.serializers) { if (codec.canEncode(type, mediaType, hints)) { return codec; @@ -151,7 +162,7 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered return null; } - private List> resolvePostProcessors(ServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { + private List> resolvePostProcessors(ReactiveServerHttpRequest request, ResolvableType type, MediaType mediaType, Object[] hints) { List> postProcessors = new ArrayList<>(); for (MessageToByteEncoder postProcessor : this.postProcessors) { if (postProcessor.canEncode(type, mediaType, hints)) { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java index 4158526da8d..87076451b6b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java @@ -18,6 +18,8 @@ package org.springframework.reactive.web.http; import org.reactivestreams.Publisher; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; /** * Interface for handlers that process HTTP requests and generate an HTTP response. @@ -28,8 +30,8 @@ import org.reactivestreams.Publisher; * @author Arjen Poutsma * @author Rossen Stoyanchev * @author Sebastien Deleuze - * @see ServerHttpRequest#getBody() - * @see ServerHttpResponse#writeWith(Publisher) + * @see ReactiveServerHttpRequest#getBody() + * @see ReactiveServerHttpResponse#addBody(Publisher) */ public interface HttpHandler { @@ -44,6 +46,6 @@ public interface HttpHandler { * when the handling is complete (success or error) including the flush of the data on the * network. */ - Publisher handle(ServerHttpRequest request, ServerHttpResponse response); + Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java index 75b22152d72..b79763bd332 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,6 +21,18 @@ import reactor.io.buffer.Buffer; import reactor.io.net.http.HttpChannel; import reactor.rx.Stream; import reactor.rx.Streams; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.ByteBuffer; + +import org.reactivestreams.Publisher; +import reactor.io.buffer.Buffer; +import reactor.io.net.http.HttpChannel; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.util.Assert; /** * @author Stephane Maldini diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java index eec16e85214..12426ba5c16 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpRequest.java index 7aa05a50cd5..5f3be593e65 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpRequest.java @@ -13,28 +13,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.rxnetty; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.ByteBuffer; + import io.netty.buffer.ByteBuf; import io.reactivex.netty.protocol.http.server.HttpServerRequest; import org.reactivestreams.Publisher; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.util.Assert; - import reactor.core.publisher.convert.RxJava1Converter; import rx.Observable; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.ByteBuffer; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.util.Assert; /** * @author Rossen Stoyanchev * @author Stephane Maldini */ -public class RxNettyServerHttpRequest implements ServerHttpRequest { +public class RxNettyServerHttpRequest implements ReactiveServerHttpRequest { private final HttpServerRequest request; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java index 1143663e66f..91989ec9c2b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java @@ -13,14 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.rxnetty; +import java.nio.ByteBuffer; + import io.netty.handler.codec.http.HttpResponseStatus; import io.reactivex.netty.protocol.http.server.HttpServerResponse; import org.reactivestreams.Publisher; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.reactive.web.http.ServerHttpResponse; import org.springframework.util.Assert; import reactor.Publishers; @@ -28,13 +30,16 @@ import reactor.core.publisher.convert.RxJava1Converter; import reactor.io.buffer.Buffer; import rx.Observable; -import java.nio.ByteBuffer; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.ReactiveServerHttpResponse; +import org.springframework.util.Assert; /** * @author Rossen Stoyanchev * @author Stephane Maldini */ -public class RxNettyServerHttpResponse implements ServerHttpResponse { +public class RxNettyServerHttpResponse implements ReactiveServerHttpResponse { private final HttpServerResponse response; @@ -70,7 +75,7 @@ public class RxNettyServerHttpResponse implements ServerHttpResponse { } @Override - public Publisher writeWith(Publisher contentPublisher) { + public Publisher addBody(Publisher contentPublisher) { applyHeaders(); Observable contentObservable = RxJava1Converter.from(contentPublisher).map(content -> new Buffer(content).asBytes()); return RxJava1Converter.from(this.response.writeBytes(contentObservable)); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpRequest.java index b6aaea8fb76..80a14063519 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpRequest.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.servlet; import java.net.URI; @@ -21,7 +22,6 @@ import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.Enumeration; import java.util.Map; - import javax.servlet.http.HttpServletRequest; import org.reactivestreams.Publisher; @@ -29,7 +29,7 @@ import org.reactivestreams.Publisher; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.util.Assert; import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.util.StringUtils; @@ -37,7 +37,7 @@ import org.springframework.util.StringUtils; /** * @author Rossen Stoyanchev */ -public class ServletServerHttpRequest implements ServerHttpRequest { +public class ServletServerHttpRequest implements ReactiveServerHttpRequest { private final HttpServletRequest servletRequest; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java index ff462ec1583..614942283a0 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.servlet; import java.nio.ByteBuffer; import java.util.List; import java.util.Map; - import javax.servlet.http.HttpServletResponse; import org.reactivestreams.Publisher; @@ -26,13 +26,13 @@ import reactor.Publishers; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.reactive.web.http.ServerHttpResponse; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.util.Assert; /** * @author Rossen Stoyanchev */ -public class ServletServerHttpResponse implements ServerHttpResponse { +public class ServletServerHttpResponse implements ReactiveServerHttpResponse { private final HttpServletResponse servletResponse; @@ -69,7 +69,7 @@ public class ServletServerHttpResponse implements ServerHttpResponse { } @Override - public Publisher writeWith(final Publisher contentPublisher) { + public Publisher addBody(final Publisher contentPublisher) { applyHeaders(); return (s -> contentPublisher.subscribe(responseSubscriber)); } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java index de986c811ff..764a66ce564 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.handler; import java.net.URI; @@ -27,12 +28,12 @@ import reactor.rx.Streams; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.web.dispatch.DispatcherHandler; import org.springframework.reactive.web.dispatch.SimpleHandlerResultHandler; import org.springframework.reactive.web.http.AbstractHttpHandlerIntegrationTests; import org.springframework.reactive.web.http.HttpHandler; -import org.springframework.reactive.web.http.ServerHttpRequest; -import org.springframework.reactive.web.http.ServerHttpResponse; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.support.StaticWebApplicationContext; @@ -99,16 +100,16 @@ public class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandler private static class FooHandler implements HttpHandler { @Override - public Publisher handle(ServerHttpRequest request, ServerHttpResponse response) { - return response.writeWith(Streams.just(Buffer.wrap("foo").byteBuffer())); + public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { + return response.addBody(Streams.just(Buffer.wrap("foo").byteBuffer())); } } private static class BarHandler implements HttpHandler { @Override - public Publisher handle(ServerHttpRequest request, ServerHttpResponse response) { - return response.writeWith(Streams.just(Buffer.wrap("bar").byteBuffer())); + public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { + return response.addBody(Streams.just(Buffer.wrap("bar").byteBuffer())); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMappingTests.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMappingTests.java index 9bb4a02aede..0d53aac9bf4 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMappingTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerMappingTests.java @@ -20,20 +20,21 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; -import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.reactivestreams.Publisher; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.support.StaticWebApplicationContext; import org.springframework.web.method.HandlerMethod; +import static org.junit.Assert.assertEquals; + /** * @author Sebastien Deleuze */ @@ -52,14 +53,14 @@ public class RequestMappingHandlerMappingTests { @Test public void path() throws NoSuchMethodException { - ServerHttpRequest request = new MockServerHttpRequest(HttpMethod.GET, "boo"); + ReactiveServerHttpRequest request = new MockServerHttpRequest(HttpMethod.GET, "boo"); HandlerMethod handler = (HandlerMethod) this.mapping.getHandler(request); assertEquals(TestController.class.getMethod("boo"), handler.getMethod()); } @Test public void method() throws NoSuchMethodException { - ServerHttpRequest request = new MockServerHttpRequest(HttpMethod.POST, "foo"); + ReactiveServerHttpRequest request = new MockServerHttpRequest(HttpMethod.POST, "foo"); HandlerMethod handler = (HandlerMethod) this.mapping.getHandler(request); assertEquals(TestController.class.getMethod("postFoo"), handler.getMethod()); @@ -104,7 +105,7 @@ public class RequestMappingHandlerMappingTests { } - private static class MockServerHttpRequest implements ServerHttpRequest{ + private static class MockServerHttpRequest implements ReactiveServerHttpRequest{ private HttpMethod method; diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java index a5241cc9343..62a29932fcf 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java @@ -18,13 +18,16 @@ package org.springframework.reactive.web.http; import org.reactivestreams.Publisher; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; + /** * @author Arjen Poutsma */ public class EchoHandler implements HttpHandler { @Override - public Publisher handle(ServerHttpRequest request, ServerHttpResponse response) { - return response.writeWith(request.getBody()); + public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { + return response.addBody(request.getBody()); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java index 69244b098c3..592b510c386 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java @@ -27,6 +27,9 @@ import org.reactivestreams.Subscription; import reactor.io.buffer.Buffer; import reactor.rx.Streams; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; + import static org.junit.Assert.assertEquals; /** @@ -41,7 +44,7 @@ public class RandomHandler implements HttpHandler { private final Random rnd = new Random(); @Override - public Publisher handle(ServerHttpRequest request, ServerHttpResponse response) { + public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { request.getBody().subscribe(new Subscriber() { private Subscription s; @@ -73,7 +76,7 @@ public class RandomHandler implements HttpHandler { }); response.getHeaders().setContentLength(RESPONSE_SIZE); - return response.writeWith(Streams.just(ByteBuffer.wrap(randomBytes()))); + return response.addBody(Streams.just(ByteBuffer.wrap(randomBytes()))); } private byte[] randomBytes() { diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java index dcf95a8dc2a..fc18ec885f3 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java @@ -23,14 +23,16 @@ import javax.xml.bind.Unmarshaller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.reactivestreams.Publisher; +import reactor.io.buffer.Buffer; +import reactor.rx.Streams; import org.springframework.http.MediaType; +import org.springframework.http.server.ReactiveServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.reactive.io.BufferOutputStream; import org.springframework.reactive.io.ByteBufferPublisherInputStream; import static org.junit.Assert.fail; -import reactor.io.buffer.Buffer; -import reactor.rx.Streams; /** * @author Arjen Poutsma @@ -40,8 +42,8 @@ public class XmlHandler implements HttpHandler { private static final Log logger = LogFactory.getLog(XmlHandler.class); @Override - public Publisher handle(ServerHttpRequest request, - ServerHttpResponse response) { + public Publisher handle(ReactiveServerHttpRequest request, + ReactiveServerHttpResponse response) { try { JAXBContext jaxbContext = JAXBContext.newInstance(XmlHandlerIntegrationTests.Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); @@ -73,7 +75,7 @@ public class XmlHandler implements HttpHandler { bos.close(); buffer.flip(); - return response.writeWith(Streams.just(buffer.byteBuffer())); + return response.addBody(Streams.just(buffer.byteBuffer())); } catch (Exception ex) { logger.error(ex, ex); From 5727abc82d8583c67b3d01e375309fbd9ecf8c57 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 29 Oct 2015 16:08:10 +0100 Subject: [PATCH 2/6] Resolved merge conflicts --- .../reactor/PublisherReactorServerHttpRequest.java | 4 ++-- .../PublisherReactorServerHttpResponse.java | 6 +++--- .../http/reactor/ReactorServerHttpResponse.java | 14 ++++---------- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java index 10960ab2aec..28f7a0e5ba6 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java @@ -26,13 +26,13 @@ import reactor.io.net.http.HttpChannel; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; -import org.springframework.reactive.web.http.ServerHttpRequest; +import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.util.Assert; /** * @author Stephane Maldini */ -public class PublisherReactorServerHttpRequest implements ServerHttpRequest { +public class PublisherReactorServerHttpRequest implements ReactiveServerHttpRequest { private final HttpChannel channel; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java index 4f52316968f..0e9827ad2f5 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java @@ -25,13 +25,13 @@ import reactor.io.net.http.model.Status; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.reactive.web.http.ServerHttpResponse; +import org.springframework.http.server.ReactiveServerHttpResponse; import org.springframework.util.Assert; /** * @author Stephane Maldini */ -public class PublisherReactorServerHttpResponse implements ServerHttpResponse { +public class PublisherReactorServerHttpResponse implements ReactiveServerHttpResponse { private final HttpChannel channel; @@ -67,7 +67,7 @@ public class PublisherReactorServerHttpResponse implements ServerHttpResponse { } @Override - public Publisher writeWith(Publisher contentPublisher) { + public Publisher addBody(Publisher contentPublisher) { applyHeaders(); return this.channel.writeWith(Publishers.map(contentPublisher, Buffer::new)); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java index 12426ba5c16..2a50a26edff 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java @@ -15,20 +15,14 @@ */ package org.springframework.reactive.web.http.reactor; +import java.nio.ByteBuffer; + import org.reactivestreams.Publisher; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.reactive.web.http.ServerHttpResponse; -import org.springframework.util.Assert; -import reactor.Publishers; import reactor.io.buffer.Buffer; import reactor.io.net.http.HttpChannel; -import reactor.io.net.http.model.Status; import reactor.rx.Stream; import reactor.rx.Streams; -import java.nio.ByteBuffer; - /** * @author Stephane Maldini */ @@ -44,7 +38,7 @@ public class ReactorServerHttpResponse extends PublisherReactorServerHttpRespons } @Override - public Stream writeWith(Publisher contentPublisher) { - return Streams.wrap(super.writeWith(contentPublisher)); + public Stream addBody(Publisher contentPublisher) { + return Streams.wrap(super.addBody(contentPublisher)); } } From 45a88974bc9545eff6c7de07d054a2836dcbdfca Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 29 Oct 2015 16:28:22 +0100 Subject: [PATCH 3/6] Changed addBody() to setBody() --- .../org/springframework/http/ReactiveHttpOutputMessage.java | 4 ++-- .../method/annotation/ResponseBodyResultHandler.java | 5 +++-- .../org/springframework/reactive/web/http/HttpHandler.java | 2 +- .../web/http/reactor/PublisherReactorServerHttpResponse.java | 2 +- .../reactive/web/http/reactor/ReactorServerHttpResponse.java | 4 ++-- .../reactive/web/http/rxnetty/RxNettyServerHttpResponse.java | 2 +- .../reactive/web/http/servlet/ServletServerHttpResponse.java | 2 +- .../handler/SimpleUrlHandlerMappingIntegrationTests.java | 4 ++-- .../org/springframework/reactive/web/http/EchoHandler.java | 2 +- .../org/springframework/reactive/web/http/RandomHandler.java | 2 +- .../org/springframework/reactive/web/http/XmlHandler.java | 2 +- 11 files changed, 16 insertions(+), 15 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java index bbd5022a888..13e2b6d8e7a 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java @@ -22,7 +22,7 @@ import org.reactivestreams.Publisher; /** * Represents a "reactive" HTTP output message, consisting of {@linkplain #getHeaders() headers} - * and the capability to add a {@linkplain #addBody(Publisher) body}. + * and the capability to add a {@linkplain #setBody(Publisher) body}. * *

Typically implemented by an HTTP request on the client-side, or a response on the server-side. * @@ -36,6 +36,6 @@ public interface ReactiveHttpOutputMessage extends HttpMessage { * @param body the body to add * @return a publisher that indicates completion */ - Publisher addBody(Publisher body); + Publisher setBody(Publisher body); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java index 221b0cbd61e..2fa6eb650a1 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java @@ -140,10 +140,11 @@ public class ResponseBodyResultHandler implements HandlerResultHandler, Ordered outputStream = postProcessor.encode(outputStream, elementType, mediaType, hints.toArray()); } response.getHeaders().setContentType(mediaType); - return response.addBody(outputStream); + return response.setBody(outputStream); } return Publishers.error(new IllegalStateException( - "Return value type '" + returnType.getParameterType().getName() + "' with media type '" + mediaType + "' not supported" )); + "Return value type '" + returnType.getParameterType().getName() + + "' with media type '" + mediaType + "' not supported")); } private MediaType resolveMediaType(ReactiveServerHttpRequest request) { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java index 87076451b6b..ff86a9a7221 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpHandler.java @@ -31,7 +31,7 @@ import org.springframework.http.server.ReactiveServerHttpResponse; * @author Rossen Stoyanchev * @author Sebastien Deleuze * @see ReactiveServerHttpRequest#getBody() - * @see ReactiveServerHttpResponse#addBody(Publisher) + * @see ReactiveServerHttpResponse#setBody(Publisher) */ public interface HttpHandler { diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java index 0e9827ad2f5..dcc605fc3cf 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java @@ -67,7 +67,7 @@ public class PublisherReactorServerHttpResponse implements ReactiveServerHttpRes } @Override - public Publisher addBody(Publisher contentPublisher) { + public Publisher setBody(Publisher contentPublisher) { applyHeaders(); return this.channel.writeWith(Publishers.map(contentPublisher, Buffer::new)); } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java index 2a50a26edff..54bcac5eaa8 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java @@ -38,7 +38,7 @@ public class ReactorServerHttpResponse extends PublisherReactorServerHttpRespons } @Override - public Stream addBody(Publisher contentPublisher) { - return Streams.wrap(super.addBody(contentPublisher)); + public Stream setBody(Publisher contentPublisher) { + return Streams.wrap(super.setBody(contentPublisher)); } } diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java index 91989ec9c2b..b19180dd892 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java @@ -75,7 +75,7 @@ public class RxNettyServerHttpResponse implements ReactiveServerHttpResponse { } @Override - public Publisher addBody(Publisher contentPublisher) { + public Publisher setBody(Publisher contentPublisher) { applyHeaders(); Observable contentObservable = RxJava1Converter.from(contentPublisher).map(content -> new Buffer(content).asBytes()); return RxJava1Converter.from(this.response.writeBytes(contentObservable)); diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java index 614942283a0..e0bc7c78f77 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/ServletServerHttpResponse.java @@ -69,7 +69,7 @@ public class ServletServerHttpResponse implements ReactiveServerHttpResponse { } @Override - public Publisher addBody(final Publisher contentPublisher) { + public Publisher setBody(final Publisher contentPublisher) { applyHeaders(); return (s -> contentPublisher.subscribe(responseSubscriber)); } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java index 764a66ce564..70ca1c7b5c5 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/handler/SimpleUrlHandlerMappingIntegrationTests.java @@ -101,7 +101,7 @@ public class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandler @Override public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { - return response.addBody(Streams.just(Buffer.wrap("foo").byteBuffer())); + return response.setBody(Streams.just(Buffer.wrap("foo").byteBuffer())); } } @@ -109,7 +109,7 @@ public class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandler @Override public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { - return response.addBody(Streams.just(Buffer.wrap("bar").byteBuffer())); + return response.setBody(Streams.just(Buffer.wrap("bar").byteBuffer())); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java index 62a29932fcf..907191b95fd 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/EchoHandler.java @@ -28,6 +28,6 @@ public class EchoHandler implements HttpHandler { @Override public Publisher handle(ReactiveServerHttpRequest request, ReactiveServerHttpResponse response) { - return response.addBody(request.getBody()); + return response.setBody(request.getBody()); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java index 592b510c386..79a87fd76e6 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/RandomHandler.java @@ -76,7 +76,7 @@ public class RandomHandler implements HttpHandler { }); response.getHeaders().setContentLength(RESPONSE_SIZE); - return response.addBody(Streams.just(ByteBuffer.wrap(randomBytes()))); + return response.setBody(Streams.just(ByteBuffer.wrap(randomBytes()))); } private byte[] randomBytes() { diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java index fc18ec885f3..490cbd4c1b0 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/http/XmlHandler.java @@ -75,7 +75,7 @@ public class XmlHandler implements HttpHandler { bos.close(); buffer.flip(); - return response.addBody(Streams.just(buffer.byteBuffer())); + return response.setBody(Streams.just(buffer.byteBuffer())); } catch (Exception ex) { logger.error(ex, ex); From e121f7ecd462c5fd58a37d13b8b7b8f187a2cb74 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 29 Oct 2015 16:44:13 +0100 Subject: [PATCH 4/6] Improved documentation on setBody() --- .../springframework/http/ReactiveHttpOutputMessage.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java index 13e2b6d8e7a..674268f6cd0 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/ReactiveHttpOutputMessage.java @@ -31,9 +31,11 @@ import org.reactivestreams.Publisher; public interface ReactiveHttpOutputMessage extends HttpMessage { /** - * Adds the given publisher of {@link ByteBuffer}s as a body. A HTTP/1.1 message has - * one body, but HTTP/1.2 supports multiple bodies. - * @param body the body to add + * Sets the body of this message to the given publisher of {@link ByteBuffer}s. The + * publisher will be used to write to the underlying HTTP layer with asynchronously, + * given pull demand by this layer. + * + * @param body the body to use * @return a publisher that indicates completion */ Publisher setBody(Publisher body); From 6006fa6ec2c811dca36ec49a884c6028eb9b81a7 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Fri, 30 Oct 2015 09:24:53 +0100 Subject: [PATCH 5/6] Optimized imports --- .../server/ReactiveServerHttpResponse.java | 3 +- .../codec/decoder/JacksonJsonDecoder.java | 9 ++--- .../reactive/codec/decoder/Jaxb2Decoder.java | 33 +++++++++++-------- .../codec/decoder/JsonObjectDecoder.java | 14 ++++---- .../reactive/codec/decoder/StringDecoder.java | 13 ++++---- .../codec/encoder/JacksonJsonEncoder.java | 11 ++++--- .../reactive/codec/encoder/Jaxb2Encoder.java | 23 ++++++------- .../codec/encoder/JsonObjectEncoder.java | 19 +++++------ .../reactive/codec/encoder/StringEncoder.java | 11 ++++--- .../io/ByteBufferPublisherInputStream.java | 11 ++++--- .../RequestBodyArgumentResolver.java | 11 ------- .../RequestMappingHandlerAdapter.java | 4 +-- .../annotation/ResponseBodyResultHandler.java | 8 ----- .../reactor/ReactorServerHttpRequest.java | 12 ------- .../web/http/rxnetty/RxNettyHttpServer.java | 1 - .../rxnetty/RxNettyServerHttpResponse.java | 4 --- .../servlet/AsyncContextSynchronizer.java | 1 - .../web/http/servlet/HttpHandlerServlet.java | 1 - .../http/servlet/RequestBodyPublisher.java | 2 -- 19 files changed, 81 insertions(+), 110 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java index 514592df514..3563b7b07b2 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/server/ReactiveServerHttpResponse.java @@ -16,8 +16,9 @@ package org.springframework.http.server; -import org.springframework.http.HttpStatus; import org.reactivestreams.Publisher; + +import org.springframework.http.HttpStatus; import org.springframework.http.ReactiveHttpOutputMessage; /** diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JacksonJsonDecoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JacksonJsonDecoder.java index 0562653bdc3..3b98fbfa5b5 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JacksonJsonDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JacksonJsonDecoder.java @@ -16,18 +16,19 @@ package org.springframework.reactive.codec.decoder; +import java.io.IOException; +import java.nio.ByteBuffer; + import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import org.reactivestreams.Publisher; +import reactor.Publishers; + import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.reactive.codec.CodecException; import org.springframework.reactive.codec.encoder.JacksonJsonEncoder; import org.springframework.reactive.io.ByteBufferInputStream; -import reactor.Publishers; - -import java.io.IOException; -import java.nio.ByteBuffer; /** * Decode from a bytes stream of JSON objects to a stream of {@code Object} (POJO). diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/Jaxb2Decoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/Jaxb2Decoder.java index bff1ef03341..c1c0dc1883a 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/Jaxb2Decoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/Jaxb2Decoder.java @@ -16,27 +16,32 @@ package org.springframework.reactive.codec.decoder; +import java.nio.ByteBuffer; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import javax.xml.bind.UnmarshalException; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.transform.Source; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.stream.StreamSource; + import org.reactivestreams.Publisher; -import org.springframework.core.ResolvableType; -import org.springframework.http.MediaType; -import org.springframework.reactive.codec.CodecException; -import org.springframework.reactive.codec.encoder.Jaxb2Encoder; -import org.springframework.reactive.io.ByteBufferPublisherInputStream; -import org.springframework.util.Assert; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; import reactor.Publishers; -import javax.xml.bind.*; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.transform.Source; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamSource; -import java.nio.ByteBuffer; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; +import org.springframework.core.ResolvableType; +import org.springframework.http.MediaType; +import org.springframework.reactive.codec.CodecException; +import org.springframework.reactive.codec.encoder.Jaxb2Encoder; +import org.springframework.reactive.io.ByteBufferPublisherInputStream; +import org.springframework.util.Assert; /** * Decode from a bytes stream of XML elements to a stream of {@code Object} (POJO). diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JsonObjectDecoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JsonObjectDecoder.java index 9831b4035f4..e3346d97934 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JsonObjectDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/JsonObjectDecoder.java @@ -16,20 +16,20 @@ package org.springframework.reactive.codec.decoder; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; import org.reactivestreams.Publisher; -import org.springframework.core.ResolvableType; -import org.springframework.http.MediaType; -import org.springframework.reactive.codec.encoder.JsonObjectEncoder; - import reactor.Publishers; import reactor.fn.Function; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; +import org.springframework.core.ResolvableType; +import org.springframework.http.MediaType; +import org.springframework.reactive.codec.encoder.JsonObjectEncoder; /** * Decode an arbitrary split byte stream representing JSON objects to a byte stream diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/StringDecoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/StringDecoder.java index 91742a84b7f..152cb6cf34d 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/StringDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/decoder/StringDecoder.java @@ -16,17 +16,18 @@ package org.springframework.reactive.codec.decoder; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + import org.reactivestreams.Publisher; +import reactor.Publishers; +import reactor.io.buffer.Buffer; + import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.reactive.codec.encoder.StringEncoder; import org.springframework.reactive.codec.support.HintUtils; -import reactor.Publishers; -import reactor.io.buffer.Buffer; - -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; /** * Decode from a bytes stream to a String stream. diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JacksonJsonEncoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JacksonJsonEncoder.java index efdb652be0f..f24f7d76d15 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JacksonJsonEncoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JacksonJsonEncoder.java @@ -16,18 +16,19 @@ package org.springframework.reactive.codec.encoder; +import java.io.IOException; +import java.nio.ByteBuffer; + import com.fasterxml.jackson.databind.ObjectMapper; import org.reactivestreams.Publisher; +import reactor.Publishers; +import reactor.io.buffer.Buffer; + import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.reactive.codec.CodecException; import org.springframework.reactive.codec.decoder.JacksonJsonDecoder; import org.springframework.reactive.io.BufferOutputStream; -import reactor.Publishers; -import reactor.io.buffer.Buffer; - -import java.io.IOException; -import java.nio.ByteBuffer; /** * Encode from an {@code Object} stream to a byte stream of JSON objects. diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/Jaxb2Encoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/Jaxb2Encoder.java index 3a2887e21f7..6533e5fe904 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/Jaxb2Encoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/Jaxb2Encoder.java @@ -16,7 +16,19 @@ package org.springframework.reactive.codec.encoder; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.MarshalException; +import javax.xml.bind.Marshaller; + import org.reactivestreams.Publisher; +import reactor.Publishers; +import reactor.io.buffer.Buffer; + import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.reactive.codec.CodecException; @@ -24,17 +36,6 @@ import org.springframework.reactive.codec.decoder.Jaxb2Decoder; import org.springframework.reactive.io.BufferOutputStream; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; -import reactor.Publishers; -import reactor.io.buffer.Buffer; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.MarshalException; -import javax.xml.bind.Marshaller; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; /** * Encode from an {@code Object} stream to a byte stream of XML elements. diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JsonObjectEncoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JsonObjectEncoder.java index d39e530f732..e6a070642af 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JsonObjectEncoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/JsonObjectEncoder.java @@ -16,23 +16,22 @@ package org.springframework.reactive.codec.encoder; -import org.reactivestreams.Publisher; -import org.reactivestreams.Subscriber; -import org.springframework.core.ResolvableType; -import org.springframework.http.MediaType; -import org.springframework.reactive.codec.decoder.JsonObjectDecoder; - -import reactor.core.subscriber.SubscriberBarrier; - import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicLongFieldUpdater; -import static reactor.Publishers.*; - +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscriber; +import reactor.core.subscriber.SubscriberBarrier; import reactor.core.support.BackpressureUtils; import reactor.io.buffer.Buffer; +import org.springframework.core.ResolvableType; +import org.springframework.http.MediaType; +import org.springframework.reactive.codec.decoder.JsonObjectDecoder; + +import static reactor.Publishers.lift; + /** * Encode a byte stream of individual JSON element to a byte stream representing a single * JSON array when if it contains more than one element. diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/StringEncoder.java b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/StringEncoder.java index ac267de1c1a..f7bc6699fcf 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/StringEncoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/codec/encoder/StringEncoder.java @@ -16,16 +16,17 @@ package org.springframework.reactive.codec.encoder; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + import org.reactivestreams.Publisher; +import reactor.Publishers; + import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.reactive.codec.decoder.StringDecoder; import org.springframework.reactive.codec.support.HintUtils; -import reactor.Publishers; - -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; /** * Encode from a String stream to a bytes stream. diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/io/ByteBufferPublisherInputStream.java b/spring-web-reactive/src/main/java/org/springframework/reactive/io/ByteBufferPublisherInputStream.java index 647e6887126..a4eace4e866 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/io/ByteBufferPublisherInputStream.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/io/ByteBufferPublisherInputStream.java @@ -16,16 +16,17 @@ package org.springframework.reactive.io; -import org.reactivestreams.Publisher; -import org.reactivestreams.Subscription; -import org.springframework.util.Assert; -import reactor.Publishers; - import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.concurrent.BlockingQueue; +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscription; +import reactor.Publishers; + +import org.springframework.util.Assert; + /** * {@code InputStream} implementation based on a byte array {@link Publisher}. * diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java index 0dea573a221..e14be9ee214 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestBodyArgumentResolver.java @@ -21,19 +21,8 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; import org.reactivestreams.Publisher; -import reactor.Publishers; -import reactor.core.publisher.convert.CompletableFutureConverter; -import reactor.core.publisher.convert.RxJava1Converter; -import reactor.core.publisher.convert.RxJava1SingleConverter; -import reactor.rx.Promise; -import reactor.rx.Stream; -import reactor.rx.Streams; -import rx.Observable; -import rx.Single; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java index a24859915bd..3ffa44d83c3 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingHandlerAdapter.java @@ -22,10 +22,10 @@ import java.util.Arrays; import java.util.List; import org.springframework.beans.factory.InitializingBean; -import org.springframework.reactive.codec.decoder.ByteBufferDecoder; -import org.springframework.reactive.codec.decoder.ByteToMessageDecoder; import org.springframework.http.server.ReactiveServerHttpRequest; import org.springframework.http.server.ReactiveServerHttpResponse; +import org.springframework.reactive.codec.decoder.ByteBufferDecoder; +import org.springframework.reactive.codec.decoder.ByteToMessageDecoder; import org.springframework.reactive.codec.decoder.JacksonJsonDecoder; import org.springframework.reactive.codec.decoder.JsonObjectDecoder; import org.springframework.reactive.codec.decoder.StringDecoder; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java index 2fa6eb650a1..0bfd9cdd479 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/ResponseBodyResultHandler.java @@ -16,22 +16,14 @@ package org.springframework.reactive.web.dispatch.method.annotation; -import java.lang.reflect.Type; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; import org.reactivestreams.Publisher; import reactor.Publishers; -import reactor.core.publisher.convert.CompletableFutureConverter; -import reactor.core.publisher.convert.RxJava1Converter; -import reactor.core.publisher.convert.RxJava1SingleConverter; -import reactor.rx.Promise; -import rx.Observable; -import rx.Single; import org.springframework.core.MethodParameter; import org.springframework.core.Ordered; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java index b79763bd332..b0a7512d92f 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java @@ -21,18 +21,6 @@ import reactor.io.buffer.Buffer; import reactor.io.net.http.HttpChannel; import reactor.rx.Stream; import reactor.rx.Streams; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.ByteBuffer; - -import org.reactivestreams.Publisher; -import reactor.io.buffer.Buffer; -import reactor.io.net.http.HttpChannel; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.server.ReactiveServerHttpRequest; -import org.springframework.util.Assert; /** * @author Stephane Maldini diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java index d07cc78c840..f1526d1a3bb 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java @@ -20,7 +20,6 @@ import io.netty.buffer.ByteBuf; import org.springframework.beans.factory.InitializingBean; import org.springframework.reactive.web.http.HttpServer; import org.springframework.reactive.web.http.HttpServerSupport; -import org.springframework.reactive.web.http.rxnetty.RequestHandlerAdapter; import org.springframework.util.Assert; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java index b19180dd892..241d76fa59b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyServerHttpResponse.java @@ -21,10 +21,6 @@ import java.nio.ByteBuffer; import io.netty.handler.codec.http.HttpResponseStatus; import io.reactivex.netty.protocol.http.server.HttpServerResponse; import org.reactivestreams.Publisher; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.util.Assert; - import reactor.Publishers; import reactor.core.publisher.convert.RxJava1Converter; import reactor.io.buffer.Buffer; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/AsyncContextSynchronizer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/AsyncContextSynchronizer.java index 98811b67a21..65240b963c3 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/AsyncContextSynchronizer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/AsyncContextSynchronizer.java @@ -18,7 +18,6 @@ package org.springframework.reactive.web.http.servlet; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; - import javax.servlet.AsyncContext; import javax.servlet.ServletInputStream; import javax.servlet.ServletOutputStream; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/HttpHandlerServlet.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/HttpHandlerServlet.java index 9bcddbfd6f8..5a6b7c2155a 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/HttpHandlerServlet.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/HttpHandlerServlet.java @@ -17,7 +17,6 @@ package org.springframework.reactive.web.http.servlet; import java.io.IOException; - import javax.servlet.AsyncContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/RequestBodyPublisher.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/RequestBodyPublisher.java index c685882a094..12368fc1836 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/RequestBodyPublisher.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/RequestBodyPublisher.java @@ -18,9 +18,7 @@ package org.springframework.reactive.web.http.servlet; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.charset.Charset; import java.util.Arrays; - import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; From bd472af37e656bb2ec84b8ec3a67486ee79f3506 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Fri, 30 Oct 2015 09:26:34 +0100 Subject: [PATCH 6/6] Updated Copyright notices --- .../convert/support/ReactiveStreamsToReactorConverter.java | 4 ++-- .../convert/support/ReactiveStreamsToRxJava1Converter.java | 4 ++-- .../springframework/reactive/web/dispatch/HandlerResult.java | 1 + .../dispatch/method/annotation/DefaultConversionService.java | 4 ++-- .../org/springframework/reactive/web/http/HttpServer.java | 1 + .../springframework/reactive/web/http/HttpServerSupport.java | 1 + .../web/http/reactor/PublisherReactorServerHttpRequest.java | 4 ++-- .../web/http/reactor/PublisherReactorServerHttpResponse.java | 4 ++-- .../reactive/web/http/reactor/ReactorHttpServer.java | 4 ++-- .../reactive/web/http/reactor/ReactorServerHttpRequest.java | 1 + .../reactive/web/http/reactor/ReactorServerHttpResponse.java | 1 + .../reactive/web/http/reactor/RequestHandlerAdapter.java | 4 ++-- .../reactive/web/http/rxnetty/RequestHandlerAdapter.java | 1 + .../reactive/web/http/rxnetty/RxNettyHttpServer.java | 1 + .../reactive/web/http/servlet/JettyHttpServer.java | 1 + .../reactive/web/http/servlet/TomcatHttpServer.java | 1 + .../method/annotation/RequestMappingIntegrationTests.java | 1 + 17 files changed, 24 insertions(+), 14 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToReactorConverter.java b/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToReactorConverter.java index 52d894048c1..411e0ab42ad 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToReactorConverter.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToReactorConverter.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToRxJava1Converter.java b/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToRxJava1Converter.java index b4b2043dcb5..b82d4742c83 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToRxJava1Converter.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/convert/support/ReactiveStreamsToRxJava1Converter.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResult.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResult.java index 2b3c912071a..156f2f5c965 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResult.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/HandlerResult.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/DefaultConversionService.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/DefaultConversionService.java index 327bd8d8f8c..f38d00a063e 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/DefaultConversionService.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/dispatch/method/annotation/DefaultConversionService.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServer.java index 7d0e436377b..6006e974220 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServerSupport.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServerSupport.java index ae5b1a820cc..f7aa9aae8b1 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServerSupport.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/HttpServerSupport.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java index 28f7a0e5ba6..81c761230b0 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpRequest.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java index dcc605fc3cf..d6b25ba4547 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/PublisherReactorServerHttpResponse.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorHttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorHttpServer.java index 9cbd3976e94..5528fea3a8b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorHttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorHttpServer.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java index b0a7512d92f..7dff1f2b7ce 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpRequest.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.reactor; import java.nio.ByteBuffer; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java index 54bcac5eaa8..831e0f24788 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/ReactorServerHttpResponse.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.reactor; import java.nio.ByteBuffer; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/RequestHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/RequestHandlerAdapter.java index ecf4f560ba0..2e6d1207941 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/RequestHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/reactor/RequestHandlerAdapter.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011-2015 Pivotal Software Inc, All Rights Reserved. + * Copyright 2002-2015 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RequestHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RequestHandlerAdapter.java index 4149dce5ea5..1a8fea2b8f8 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RequestHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RequestHandlerAdapter.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.rxnetty; import io.netty.buffer.ByteBuf; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java index f1526d1a3bb..21dc109a2ae 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/rxnetty/RxNettyHttpServer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.rxnetty; import io.netty.buffer.ByteBuf; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/JettyHttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/JettyHttpServer.java index ddfd5d01ab1..4acad5dfe7e 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/JettyHttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/JettyHttpServer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.servlet; import org.eclipse.jetty.server.Server; diff --git a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/TomcatHttpServer.java b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/TomcatHttpServer.java index 16e37d0e85a..472a74afc3b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/TomcatHttpServer.java +++ b/spring-web-reactive/src/main/java/org/springframework/reactive/web/http/servlet/TomcatHttpServer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.http.servlet; import java.io.File; diff --git a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingIntegrationTests.java b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingIntegrationTests.java index 6aa048e2597..e46dc4ff467 100644 --- a/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingIntegrationTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/reactive/web/dispatch/method/annotation/RequestMappingIntegrationTests.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.reactive.web.dispatch.method.annotation;