|
16 | 16 |
|
17 | 17 | package org.springframework.web.servlet.mvc.method.annotation;
|
18 | 18 |
|
| 19 | +import java.lang.reflect.Constructor; |
19 | 20 | import java.lang.reflect.Method;
|
20 | 21 | import java.util.ArrayList;
|
21 | 22 | import java.util.List;
|
|
29 | 30 | import javax.servlet.http.HttpSession;
|
30 | 31 | import javax.xml.transform.Source;
|
31 | 32 |
|
| 33 | +import org.springframework.beans.BeanUtils; |
32 | 34 | import org.springframework.beans.factory.BeanFactory;
|
33 | 35 | import org.springframework.beans.factory.BeanFactoryAware;
|
34 | 36 | import org.springframework.beans.factory.InitializingBean;
|
@@ -665,15 +667,26 @@ private ModelAndView invokeHandleMethod(HttpServletRequest request,
|
665 | 667 | }
|
666 | 668 |
|
667 | 669 | private AsyncWebRequest createAsyncWebRequest(HttpServletRequest request, HttpServletResponse response) {
|
668 |
| - AsyncWebRequest asyncRequest; |
669 | 670 | if (ClassUtils.hasMethod(ServletRequest.class, "startAsync")) {
|
670 |
| - asyncRequest = new org.springframework.web.context.request.async.StandardServletAsyncWebRequest(request, response); |
| 671 | + AsyncWebRequest asyncRequest = instantiateStandardServletAsyncWebRequest(request, response); |
671 | 672 | asyncRequest.setTimeout(this.asyncRequestTimeout);
|
| 673 | + return asyncRequest; |
672 | 674 | }
|
673 | 675 | else {
|
674 |
| - asyncRequest = new NoOpAsyncWebRequest(request, response); |
| 676 | + return new NoOpAsyncWebRequest(request, response); |
| 677 | + } |
| 678 | + } |
| 679 | + |
| 680 | + private AsyncWebRequest instantiateStandardServletAsyncWebRequest(HttpServletRequest request, HttpServletResponse response) { |
| 681 | + String className = "org.springframework.web.context.request.async.StandardServletAsyncWebRequest"; |
| 682 | + try { |
| 683 | + Class<?> clazz = ClassUtils.forName(className, this.getClass().getClassLoader()); |
| 684 | + Constructor<?> constructor = clazz.getConstructor(HttpServletRequest.class, HttpServletResponse.class); |
| 685 | + return (AsyncWebRequest) BeanUtils.instantiateClass(constructor , request, response); |
| 686 | + } |
| 687 | + catch (Throwable t) { |
| 688 | + throw new IllegalStateException("Failed to instantiate StandardServletAsyncWebRequest", t); |
675 | 689 | }
|
676 |
| - return asyncRequest; |
677 | 690 | }
|
678 | 691 |
|
679 | 692 | private ServletInvocableHandlerMethod createRequestMappingMethod(HandlerMethod handlerMethod,
|
|
0 commit comments