Package private request and response implementations

Concrete server and client, reactive request and response
implementations should not have to be accessed outside their package.
They could be seen as private to their HttpHandler adapters and
ClientHttpConnector's respectively.

The one exception, WebSocket upgrades in spring-webflux, is an internal
framework use case, accommodated via downcast + accessors in the
abstract base classes.
This commit is contained in:
Rossen Stoyanchev
2017-09-29 12:46:32 -04:00
parent 95fdfac128
commit 223e27d53d
25 changed files with 153 additions and 72 deletions

View File

@@ -28,10 +28,10 @@ import reactor.core.publisher.Mono;
import org.springframework.context.Lifecycle;
import org.springframework.core.NamedThreadLocal;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.server.reactive.AbstractServerHttpRequest;
import org.springframework.http.server.reactive.AbstractServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.http.server.reactive.ServletServerHttpRequest;
import org.springframework.http.server.reactive.ServletServerHttpResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.web.reactive.socket.HandshakeInfo;
@@ -149,13 +149,13 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Life
}
private HttpServletRequest getHttpServletRequest(ServerHttpRequest request) {
Assert.isInstanceOf(ServletServerHttpRequest.class, request, "ServletServerHttpRequest required");
return ((ServletServerHttpRequest) request).getServletRequest();
Assert.isInstanceOf(AbstractServerHttpRequest.class, request, "ServletServerHttpRequest required");
return ((AbstractServerHttpRequest) request).getNativeRequest();
}
private HttpServletResponse getHttpServletResponse(ServerHttpResponse response) {
Assert.isInstanceOf(ServletServerHttpResponse.class, response, "ServletServerHttpResponse required");
return ((ServletServerHttpResponse) response).getServletResponse();
Assert.isInstanceOf(AbstractServerHttpResponse.class, response, "ServletServerHttpResponse required");
return ((AbstractServerHttpResponse) response).getNativeResponse();
}
private HandshakeInfo getHandshakeInfo(ServerWebExchange exchange, @Nullable String protocol) {

View File

@@ -19,10 +19,12 @@ package org.springframework.web.reactive.socket.server.upgrade;
import java.security.Principal;
import reactor.core.publisher.Mono;
import reactor.ipc.netty.http.server.HttpServerResponse;
import org.springframework.core.io.buffer.NettyDataBufferFactory;
import org.springframework.http.server.reactive.ReactorServerHttpResponse;
import org.springframework.http.server.reactive.AbstractServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.lang.Nullable;
import org.springframework.web.reactive.socket.HandshakeInfo;
import org.springframework.web.reactive.socket.WebSocketHandler;
@@ -40,11 +42,12 @@ public class ReactorNettyRequestUpgradeStrategy implements RequestUpgradeStrateg
@Override
public Mono<Void> upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) {
ReactorServerHttpResponse response = (ReactorServerHttpResponse) exchange.getResponse();
ServerHttpResponse response = exchange.getResponse();
HttpServerResponse nativeResponse = ((AbstractServerHttpResponse) response).getNativeResponse();
HandshakeInfo info = getHandshakeInfo(exchange, subProtocol);
NettyDataBufferFactory bufferFactory = (NettyDataBufferFactory) response.bufferFactory();
return response.getReactorResponse().sendWebsocket(subProtocol,
return nativeResponse.sendWebsocket(subProtocol,
(in, out) -> handler.handle(new ReactorNettyWebSocketSession(in, out, info, bufferFactory)));
}

View File

@@ -28,10 +28,10 @@ import org.apache.tomcat.websocket.server.WsServerContainer;
import reactor.core.publisher.Mono;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.server.reactive.AbstractServerHttpRequest;
import org.springframework.http.server.reactive.AbstractServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.http.server.reactive.ServletServerHttpRequest;
import org.springframework.http.server.reactive.ServletServerHttpResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.web.reactive.socket.HandshakeInfo;
@@ -83,13 +83,13 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy {
}
private HttpServletRequest getHttpServletRequest(ServerHttpRequest request) {
Assert.isInstanceOf(ServletServerHttpRequest.class, request, "ServletServerHttpRequest required");
return ((ServletServerHttpRequest) request).getServletRequest();
Assert.isInstanceOf(AbstractServerHttpRequest.class, request, "ServletServerHttpRequest required");
return ((AbstractServerHttpRequest) request).getNativeRequest();
}
private HttpServletResponse getHttpServletResponse(ServerHttpResponse response) {
Assert.isInstanceOf(ServletServerHttpResponse.class, response, "ServletServerHttpResponse required");
return ((ServletServerHttpResponse) response).getServletResponse();
Assert.isInstanceOf(AbstractServerHttpResponse.class, response, "ServletServerHttpResponse required");
return ((AbstractServerHttpResponse) response).getNativeResponse();
}
private HandshakeInfo getHandshakeInfo(ServerWebExchange exchange, @Nullable String protocol) {

View File

@@ -33,8 +33,8 @@ import reactor.core.publisher.Mono;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.AbstractServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.UndertowServerHttpRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.web.reactive.socket.HandshakeInfo;
@@ -55,8 +55,8 @@ public class UndertowRequestUpgradeStrategy implements RequestUpgradeStrategy {
@Override
public Mono<Void> upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) {
ServerHttpRequest request = exchange.getRequest();
Assert.isInstanceOf(UndertowServerHttpRequest.class, request, "UndertowServerHttpRequest required");
HttpServerExchange httpExchange = ((UndertowServerHttpRequest) request).getUndertowExchange();
Assert.isInstanceOf(AbstractServerHttpRequest.class, request);
HttpServerExchange httpExchange = ((AbstractServerHttpRequest) request).getNativeRequest();
Set<String> protocols = (subProtocol != null ? Collections.singleton(subProtocol) : Collections.emptySet());
Hybi13Handshake handshake = new Hybi13Handshake(protocols, false);

View File

@@ -25,8 +25,9 @@ import reactor.core.publisher.Mono;
import rx.RxReactiveStreams;
import org.springframework.core.io.buffer.NettyDataBufferFactory;
import org.springframework.http.server.reactive.RxNettyServerHttpResponse;
import org.springframework.http.server.reactive.AbstractServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.lang.Nullable;
import org.springframework.web.reactive.socket.HandshakeInfo;
import org.springframework.web.reactive.socket.WebSocketHandler;
@@ -45,8 +46,8 @@ public class RxNettyRequestUpgradeStrategy implements RequestUpgradeStrategy {
@Override
public Mono<Void> upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) {
RxNettyServerHttpResponse response = (RxNettyServerHttpResponse) exchange.getResponse();
HttpServerResponse<?> rxNettyResponse = response.getRxNettyResponse();
ServerHttpResponse response = exchange.getResponse();
HttpServerResponse<?> rxNettyResponse = ((AbstractServerHttpResponse) response).getNativeResponse();
HandshakeInfo info = getHandshakeInfo(exchange, subProtocol);
NettyDataBufferFactory factory = (NettyDataBufferFactory) response.bufferFactory();