@Test public void testAsyncSupportOptions() throws Exception { loadBeanDefinitions("mvc-config-async-support.xml", 15); RequestMappingHandlerAdapter adapter = appContext.getBean(RequestMappingHandlerAdapter.class); assertNotNull(adapter); DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(adapter); assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass()); assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout")); CallableProcessingInterceptor[] callableInterceptors = (CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors"); assertEquals(1, callableInterceptors.length); DeferredResultProcessingInterceptor[] deferredResultInterceptors = (DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors"); assertEquals(1, deferredResultInterceptors.length); }
@Test public void testAsyncSupportOptions() throws Exception { loadBeanDefinitions("mvc-config-async-support.xml", 13); RequestMappingHandlerAdapter adapter = appContext.getBean(RequestMappingHandlerAdapter.class); assertNotNull(adapter); DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(adapter); assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass()); assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout")); CallableProcessingInterceptor[] callableInterceptors = (CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors"); assertEquals(1, callableInterceptors.length); DeferredResultProcessingInterceptor[] deferredResultInterceptors = (DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors"); assertEquals(1, deferredResultInterceptors.length); }
@SuppressWarnings("unchecked") @Test public void requestMappingHandlerAdapter() throws Exception { RequestMappingHandlerAdapter adapter = webConfig.requestMappingHandlerAdapter(); // ConversionService String actual = webConfig.mvcConversionService().convert(new TestBean(), String.class); assertEquals("converted", actual); // Message converters assertEquals(1, adapter.getMessageConverters().size()); DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(adapter); // Custom argument resolvers and return value handlers List<HandlerMethodArgumentResolver> argResolvers = (List<HandlerMethodArgumentResolver>) fieldAccessor.getPropertyValue("customArgumentResolvers"); assertEquals(1, argResolvers.size()); List<HandlerMethodReturnValueHandler> handlers = (List<HandlerMethodReturnValueHandler>) fieldAccessor.getPropertyValue("customReturnValueHandlers"); assertEquals(1, handlers.size()); // Async support options assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass()); assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout")); CallableProcessingInterceptor[] callableInterceptors = (CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors"); assertEquals(1, callableInterceptors.length); DeferredResultProcessingInterceptor[] deferredResultInterceptors = (DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors"); assertEquals(1, deferredResultInterceptors.length); assertEquals(false, fieldAccessor.getPropertyValue("ignoreDefaultModelOnRedirect")); }
@Override public <T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception { final HttpServletResponse servletResponse = request.getNativeResponse(HttpServletResponse.class); if (!servletResponse.isCommitted()) { servletResponse.sendError(HttpStatus.SERVICE_UNAVAILABLE.value()); } return CallableProcessingInterceptor.RESPONSE_HANDLED; }
/** * Configure {@code CallableProcessingInterceptor}'s to register on async requests. * @param interceptors the interceptors to register */ public void setCallableInterceptors(List<CallableProcessingInterceptor> interceptors) { Assert.notNull(interceptors); this.callableInterceptors = interceptors.toArray(new CallableProcessingInterceptor[interceptors.size()]); }
protected List<CallableProcessingInterceptor> getCallableInterceptors() { return this.callableInterceptors; }
@SuppressWarnings("unchecked") @Test public void requestMappingHandlerAdapter() throws Exception { RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter(); // ConversionService String actual = this.config.mvcConversionService().convert(new TestBean(), String.class); assertEquals("converted", actual); // Message converters assertEquals(2, adapter.getMessageConverters().size()); assertEquals(StringHttpMessageConverter.class, adapter.getMessageConverters().get(0).getClass()); assertEquals(MappingJackson2HttpMessageConverter.class, adapter.getMessageConverters().get(1).getClass()); ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter)adapter.getMessageConverters().get(1)).getObjectMapper(); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(adapter); // Custom argument resolvers and return value handlers List<HandlerMethodArgumentResolver> argResolvers = (List<HandlerMethodArgumentResolver>) fieldAccessor.getPropertyValue("customArgumentResolvers"); assertEquals(1, argResolvers.size()); List<HandlerMethodReturnValueHandler> handlers = (List<HandlerMethodReturnValueHandler>) fieldAccessor.getPropertyValue("customReturnValueHandlers"); assertEquals(1, handlers.size()); // Async support options assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass()); assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout")); CallableProcessingInterceptor[] callableInterceptors = (CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors"); assertEquals(1, callableInterceptors.length); DeferredResultProcessingInterceptor[] deferredResultInterceptors = (DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors"); assertEquals(1, deferredResultInterceptors.length); assertEquals(false, fieldAccessor.getPropertyValue("ignoreDefaultModelOnRedirect")); }
@Bean public CallableProcessingInterceptor callableInterceptor() { return Mockito.mock(CallableProcessingInterceptor.class); }
/** * Configure lifecycle interceptors with callbacks around concurrent request * execution that starts when a controller returns a * {@link java.util.concurrent.Callable}. * * @param interceptors the interceptors to register */ public AsyncSupportConfigurer registerCallableInterceptors(CallableProcessingInterceptor... interceptors) { Assert.notNull(interceptors, "Interceptors are required"); this.callableInterceptors.addAll(Arrays.asList(interceptors)); return this; }