Async boundary for Spring MVC reactive type streaming
Issue: SPR-15365
This commit is contained in:
@@ -34,6 +34,7 @@ import rx.SingleEmitter;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
import org.springframework.core.ResolvableType;
|
||||
import org.springframework.core.task.SyncTaskExecutor;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.codec.ServerSentEvent;
|
||||
import org.springframework.http.server.ServletServerHttpResponse;
|
||||
@@ -75,7 +76,7 @@ public class ReactiveTypeHandlerTests {
|
||||
ContentNegotiationManagerFactoryBean factoryBean = new ContentNegotiationManagerFactoryBean();
|
||||
factoryBean.afterPropertiesSet();
|
||||
ContentNegotiationManager manager = factoryBean.getObject();
|
||||
this.handler = new ReactiveTypeHandler(new ReactiveAdapterRegistry(), manager);
|
||||
this.handler = new ReactiveTypeHandler(new ReactiveAdapterRegistry(), new SyncTaskExecutor(), manager);
|
||||
resetRequest();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
import org.springframework.core.task.SyncTaskExecutor;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
@@ -66,8 +68,9 @@ public class ResponseBodyEmitterReturnValueHandlerTests {
|
||||
new StringHttpMessageConverter(), new MappingJackson2HttpMessageConverter());
|
||||
|
||||
ReactiveAdapterRegistry registry = new ReactiveAdapterRegistry();
|
||||
TaskExecutor executor = new SyncTaskExecutor();
|
||||
ContentNegotiationManager manager = new ContentNegotiationManager();
|
||||
this.handler = new ResponseBodyEmitterReturnValueHandler(converters, registry, manager);
|
||||
this.handler = new ResponseBodyEmitterReturnValueHandler(converters, registry, executor, manager);
|
||||
this.request = new MockHttpServletRequest();
|
||||
this.response = new MockHttpServletResponse();
|
||||
this.webRequest = new ServletWebRequest(this.request, this.response);
|
||||
|
||||
@@ -30,6 +30,7 @@ import reactor.core.publisher.Flux;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
import org.springframework.core.task.SyncTaskExecutor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
@@ -254,9 +255,11 @@ public class ServletInvocableHandlerMethodTests {
|
||||
|
||||
@Test
|
||||
public void wrapConcurrentResult_ResponseBodyEmitter() throws Exception {
|
||||
ReactiveAdapterRegistry registry = new ReactiveAdapterRegistry();
|
||||
ContentNegotiationManager manager = new ContentNegotiationManager();
|
||||
this.returnValueHandlers.addHandler(new ResponseBodyEmitterReturnValueHandler(this.converters, registry, manager));
|
||||
|
||||
this.returnValueHandlers.addHandler(
|
||||
new ResponseBodyEmitterReturnValueHandler(this.converters,
|
||||
new ReactiveAdapterRegistry(), new SyncTaskExecutor(), new ContentNegotiationManager()));
|
||||
|
||||
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new StreamingHandler(), "handleEmitter");
|
||||
handlerMethod = handlerMethod.wrapConcurrentResult(null);
|
||||
handlerMethod.invokeAndHandle(this.webRequest, this.mavContainer);
|
||||
|
||||
Reference in New Issue
Block a user