Browse Source

Polish

pull/1307/head
Rossen Stoyanchev 9 years ago
parent
commit
a2aaa05592
  1. 2
      build.gradle
  2. 23
      spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java
  3. 23
      spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java
  4. 9
      spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java
  5. 6
      spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java
  6. 44
      spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java

2
build.gradle

@ -748,6 +748,7 @@ project("spring-web") { @@ -748,6 +748,7 @@ project("spring-web") {
optional("io.reactivex:rxjava:${rxjavaVersion}")
optional "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
optional("org.apache.tomcat:tomcat-catalina:${tomcatVersion}")
optional("io.undertow:undertow-core:${undertowVersion}")
optional("org.jboss.xnio:xnio-api:${xnioVersion}")
optional("io.netty:netty-buffer:${nettyVersion}") // temporarily for JsonObjectDecoder
@ -779,7 +780,6 @@ project("spring-web") { @@ -779,7 +780,6 @@ project("spring-web") {
optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
optional("javax.mail:javax.mail-api:${javamailVersion}")
optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
optional("org.apache.tomcat:tomcat-catalina:${tomcatVersion}")
testCompile(project(":spring-context-support")) // for JafMediaTypeFactory
testCompile("io.projectreactor.addons:reactor-test")
testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {

23
spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java

@ -31,9 +31,8 @@ import org.springframework.core.io.buffer.DataBuffer; @@ -31,9 +31,8 @@ import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
/**
* Adapt {@link HttpHandler} to an {@link HttpServlet} using Servlet Async
* support and Servlet 3.1 non-blocking I/O. Use Jetty API for writing with
* ByteBuffer.
* {@link ServletHttpHandlerAdapter} extension that uses Jetty APIs for writing
* to the response with {@link ByteBuffer}.
*
* @author Violeta Georgieva
* @since 5.0
@ -41,6 +40,7 @@ import org.springframework.core.io.buffer.DataBufferFactory; @@ -41,6 +40,7 @@ import org.springframework.core.io.buffer.DataBufferFactory;
@WebServlet(asyncSupported = true)
public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
public JettyHttpHandlerAdapter(HttpHandler httpHandler) {
super(httpHandler);
}
@ -51,22 +51,23 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter { @@ -51,22 +51,23 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected ServerHttpResponse createServletServerHttpResponse(
HttpServletResponse response, AsyncContext asyncContext) throws IOException {
return new JettyServerHttpResponse(
response, asyncContext, getDataBufferFactory(), getBufferSize());
protected ServerHttpResponse createResponse(HttpServletResponse response,
AsyncContext context) throws IOException {
return new JettyServerHttpResponse(response, context, getDataBufferFactory(), getBufferSize());
}
private static final class JettyServerHttpResponse extends ServletServerHttpResponse {
public JettyServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext,
DataBufferFactory bufferFactory, int bufferSize) throws IOException {
super(response, asyncContext, bufferFactory, bufferSize);
public JettyServerHttpResponse(HttpServletResponse response, AsyncContext context,
DataBufferFactory factory, int bufferSize) throws IOException {
super(response, context, factory, bufferSize);
}
@Override
protected int writeDataBuffer(DataBuffer dataBuffer) throws IOException {
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = getServletResponse().getOutputStream();
ByteBuffer input = dataBuffer.asByteBuffer();
int len = input.remaining();

23
spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java

@ -98,26 +98,23 @@ public class ServletHttpHandlerAdapter extends HttpHandlerAdapterSupport impleme @@ -98,26 +98,23 @@ public class ServletHttpHandlerAdapter extends HttpHandlerAdapterSupport impleme
// Start async before Read/WriteListener registration
AsyncContext asyncContext = request.startAsync();
ServerHttpRequest httpRequest = createServletServerHttpRequest(
((HttpServletRequest) request), asyncContext);
ServerHttpResponse httpResponse = createServletServerHttpResponse(
((HttpServletResponse) response), asyncContext);
ServerHttpRequest httpRequest = createRequest(((HttpServletRequest) request), asyncContext);
ServerHttpResponse httpResponse = createResponse(((HttpServletResponse) response), asyncContext);
HandlerResultSubscriber subscriber = new HandlerResultSubscriber(asyncContext);
getHttpHandler().handle(httpRequest, httpResponse).subscribe(subscriber);
}
protected ServerHttpRequest createServletServerHttpRequest(HttpServletRequest request,
AsyncContext asyncContext) throws IOException {
return new ServletServerHttpRequest(
request, asyncContext, getDataBufferFactory(), getBufferSize());
protected ServerHttpRequest createRequest(HttpServletRequest request, AsyncContext context)
throws IOException {
return new ServletServerHttpRequest(request, context, getDataBufferFactory(), getBufferSize());
}
protected ServerHttpResponse createServletServerHttpResponse(HttpServletResponse response,
AsyncContext asyncContext) throws IOException {
return new ServletServerHttpResponse(
response, asyncContext, getDataBufferFactory(), getBufferSize());
protected ServerHttpResponse createResponse(HttpServletResponse response, AsyncContext context)
throws IOException {
return new ServletServerHttpResponse(response, context, getDataBufferFactory(), getBufferSize());
}
// Other Servlet methods...

9
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java

@ -54,6 +54,9 @@ import org.springframework.util.StringUtils; @@ -54,6 +54,9 @@ import org.springframework.util.StringUtils;
*/
public class ServletServerHttpRequest extends AbstractServerHttpRequest {
protected final Log logger = LogFactory.getLog(getClass());
private final HttpServletRequest request;
private final RequestBodyPublisher bodyPublisher;
@ -64,8 +67,6 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest { @@ -64,8 +67,6 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest {
private final byte[] buffer;
protected final Log logger = LogFactory.getLog(getClass());
public ServletServerHttpRequest(HttpServletRequest request, AsyncContext asyncContext,
DataBufferFactory bufferFactory, int bufferSize) throws IOException {
@ -179,7 +180,7 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest { @@ -179,7 +180,7 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest {
return Flux.from(this.bodyPublisher);
}
protected DataBuffer readDataBuffer() throws IOException {
protected DataBuffer readFromInputStream() throws IOException {
int read = this.request.getInputStream().read(this.buffer);
if (logger.isTraceEnabled()) {
logger.trace("read:" + read);
@ -242,7 +243,7 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest { @@ -242,7 +243,7 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest {
@Override
protected DataBuffer read() throws IOException {
if (this.inputStream.isReady()) {
return readDataBuffer();
return readFromInputStream();
}
return null;
}

6
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java

@ -132,12 +132,12 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons @@ -132,12 +132,12 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
return processor;
}
protected int writeDataBuffer(DataBuffer dataBuffer) throws IOException {
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = response.getOutputStream();
InputStream input = dataBuffer.asInputStream();
int bytesWritten = 0;
byte[] buffer = new byte[this.bufferSize];
int bytesRead = -1;
int bytesRead;
while (outputStream.isReady() && (bytesRead = input.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
bytesWritten += bytesRead;
@ -287,7 +287,7 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons @@ -287,7 +287,7 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
}
if (ready) {
int total = dataBuffer.readableByteCount();
int written = writeDataBuffer(dataBuffer);
int written = writeToOutputStream(dataBuffer);
if (this.logger.isTraceEnabled()) {
this.logger.trace("written: " + written + " total: " + total);

44
spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java

@ -19,30 +19,29 @@ package org.springframework.http.server.reactive; @@ -19,30 +19,29 @@ package org.springframework.http.server.reactive;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Map;
import javax.servlet.AsyncContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.connector.CoyoteInputStream;
import org.apache.catalina.connector.CoyoteOutputStream;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
/**
* Adapt {@link HttpHandler} to an {@link HttpServlet} using Servlet Async
* support and Servlet 3.1 non-blocking I/O. Use Tomcat API for
* reading/writing with ByteBuffer.
*
* {@link ServletHttpHandlerAdapter} extension that uses Jetty APIs for reading
* from the request and writing to the response with {@link ByteBuffer}.
*
* @author Violeta Georgieva
* @since 5.0
*/
@WebServlet(asyncSupported = true)
public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
public TomcatHttpHandlerAdapter(HttpHandler httpHandler) {
super(httpHandler);
}
@ -53,35 +52,31 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter { @@ -53,35 +52,31 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected ServerHttpRequest createServletServerHttpRequest(
HttpServletRequest request, AsyncContext asyncContext) throws IOException {
return new TomcatServerHttpRequest(
request, asyncContext, getDataBufferFactory(), getBufferSize());
protected ServerHttpRequest createRequest(HttpServletRequest request, AsyncContext cxt) throws IOException {
return new TomcatServerHttpRequest(request, cxt, getDataBufferFactory(), getBufferSize());
}
@Override
protected ServerHttpResponse createServletServerHttpResponse(
HttpServletResponse response, AsyncContext asyncContext) throws IOException {
return new TomcatServerHttpResponse(
response, asyncContext, getDataBufferFactory(), getBufferSize());
protected ServerHttpResponse createResponse(HttpServletResponse response, AsyncContext cxt) throws IOException {
return new TomcatServerHttpResponse(response, cxt, getDataBufferFactory(), getBufferSize());
}
private final class TomcatServerHttpRequest extends ServletServerHttpRequest {
public TomcatServerHttpRequest(HttpServletRequest request, AsyncContext asyncContext,
DataBufferFactory bufferFactory, int bufferSize) throws IOException {
super(request, asyncContext, bufferFactory, bufferSize);
public TomcatServerHttpRequest(HttpServletRequest request, AsyncContext context,
DataBufferFactory factory, int bufferSize) throws IOException {
super(request, context, factory, bufferSize);
}
@Override
protected DataBuffer readDataBuffer() throws IOException {
protected DataBuffer readFromInputStream() throws IOException {
DataBuffer buffer = getDataBufferFactory().allocateBuffer(getBufferSize());
ByteBuffer byteBuffer = buffer.asByteBuffer();
byteBuffer.limit(byteBuffer.capacity());
int read = ((CoyoteInputStream) getServletRequest().getInputStream()).read(
byteBuffer);
int read = ((CoyoteInputStream) getServletRequest().getInputStream()).read(byteBuffer);
if (logger.isTraceEnabled()) {
logger.trace("read:" + read);
}
@ -97,13 +92,14 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter { @@ -97,13 +92,14 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
private static final class TomcatServerHttpResponse extends ServletServerHttpResponse {
public TomcatServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext,
DataBufferFactory bufferFactory, int bufferSize) throws IOException {
super(response, asyncContext, bufferFactory, bufferSize);
public TomcatServerHttpResponse(HttpServletResponse response, AsyncContext context,
DataBufferFactory factory, int bufferSize) throws IOException {
super(response, context, factory, bufferSize);
}
@Override
protected int writeDataBuffer(DataBuffer dataBuffer) throws IOException {
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = getServletResponse().getOutputStream();
ByteBuffer input = dataBuffer.asByteBuffer();
int len = input.remaining();

Loading…
Cancel
Save