|
|
|
@ -14,7 +14,7 @@ |
|
|
|
* limitations under the License. |
|
|
|
* limitations under the License. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
package org.springframework.web.reactive.server.servlet; |
|
|
|
package org.springframework.http.server.servlet31; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
import javax.servlet.AsyncContext; |
|
|
|
import javax.servlet.AsyncContext; |
|
|
|
@ -30,24 +30,24 @@ import org.reactivestreams.Subscriber; |
|
|
|
import org.reactivestreams.Subscription; |
|
|
|
import org.reactivestreams.Subscription; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.http.HttpStatus; |
|
|
|
import org.springframework.http.HttpStatus; |
|
|
|
import org.springframework.web.reactive.HttpHandler; |
|
|
|
import org.springframework.http.server.ReactiveHttpHandler; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* @author Arjen Poutsma |
|
|
|
* @author Arjen Poutsma |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@WebServlet(asyncSupported = true) |
|
|
|
@WebServlet(asyncSupported = true) |
|
|
|
public class HttpHandlerServlet extends HttpServlet { |
|
|
|
public class Servlet31HttpHandlerAdapter extends HttpServlet { |
|
|
|
|
|
|
|
|
|
|
|
private static final int BUFFER_SIZE = 8192; |
|
|
|
private static final int BUFFER_SIZE = 8192; |
|
|
|
|
|
|
|
|
|
|
|
private static Log logger = LogFactory.getLog(HttpHandlerServlet.class); |
|
|
|
private static Log logger = LogFactory.getLog(Servlet31HttpHandlerAdapter.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HttpHandler handler; |
|
|
|
private ReactiveHttpHandler handler; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void setHandler(HttpHandler handler) { |
|
|
|
public void setHandler(ReactiveHttpHandler handler) { |
|
|
|
this.handler = handler; |
|
|
|
this.handler = handler; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -61,11 +61,11 @@ public class HttpHandlerServlet extends HttpServlet { |
|
|
|
|
|
|
|
|
|
|
|
RequestBodyPublisher requestPublisher = new RequestBodyPublisher(synchronizer, BUFFER_SIZE); |
|
|
|
RequestBodyPublisher requestPublisher = new RequestBodyPublisher(synchronizer, BUFFER_SIZE); |
|
|
|
request.getInputStream().setReadListener(requestPublisher); |
|
|
|
request.getInputStream().setReadListener(requestPublisher); |
|
|
|
ServletServerHttpRequest httpRequest = new ServletServerHttpRequest(request, requestPublisher); |
|
|
|
Servlet31ServerHttpRequest httpRequest = new Servlet31ServerHttpRequest(request, requestPublisher); |
|
|
|
|
|
|
|
|
|
|
|
ResponseBodySubscriber responseSubscriber = new ResponseBodySubscriber(synchronizer); |
|
|
|
ResponseBodySubscriber responseSubscriber = new ResponseBodySubscriber(synchronizer); |
|
|
|
response.getOutputStream().setWriteListener(responseSubscriber); |
|
|
|
response.getOutputStream().setWriteListener(responseSubscriber); |
|
|
|
ServletServerHttpResponse httpResponse = new ServletServerHttpResponse(response, responseSubscriber); |
|
|
|
Servlet31ServerHttpResponse httpResponse = new Servlet31ServerHttpResponse(response, responseSubscriber); |
|
|
|
|
|
|
|
|
|
|
|
HandlerResultSubscriber resultSubscriber = new HandlerResultSubscriber(synchronizer, httpResponse); |
|
|
|
HandlerResultSubscriber resultSubscriber = new HandlerResultSubscriber(synchronizer, httpResponse); |
|
|
|
this.handler.handle(httpRequest, httpResponse).subscribe(resultSubscriber); |
|
|
|
this.handler.handle(httpRequest, httpResponse).subscribe(resultSubscriber); |
|
|
|
@ -76,11 +76,11 @@ public class HttpHandlerServlet extends HttpServlet { |
|
|
|
|
|
|
|
|
|
|
|
private final AsyncContextSynchronizer synchronizer; |
|
|
|
private final AsyncContextSynchronizer synchronizer; |
|
|
|
|
|
|
|
|
|
|
|
private final ServletServerHttpResponse response; |
|
|
|
private final Servlet31ServerHttpResponse response; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public HandlerResultSubscriber(AsyncContextSynchronizer synchronizer, |
|
|
|
public HandlerResultSubscriber(AsyncContextSynchronizer synchronizer, |
|
|
|
ServletServerHttpResponse response) { |
|
|
|
Servlet31ServerHttpResponse response) { |
|
|
|
|
|
|
|
|
|
|
|
this.synchronizer = synchronizer; |
|
|
|
this.synchronizer = synchronizer; |
|
|
|
this.response = response; |
|
|
|
this.response = response; |