diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index fd2847bf462..dbd9ac1d888 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -73,6 +73,8 @@ import org.springframework.web.util.UriUtils; */ public class MockHttpServletRequestBuilder implements RequestBuilder, Mergeable { + static final boolean servlet3Present = ClassUtils.hasMethod(ServletRequest.class, "startAsync"); + private final UriComponents uriComponents; private final HttpMethod method; @@ -647,8 +649,7 @@ public class MockHttpServletRequestBuilder implements RequestBuilder, Mergeable * {@link ServletContext}. Can be overridden in sub-classes. */ protected MockHttpServletRequest createServletRequest(ServletContext servletContext) { - return ClassUtils.hasMethod(ServletRequest.class, "startAsync") ? - createServlet3Request(servletContext) : new MockHttpServletRequest(servletContext); + return servlet3Present ? createServlet3Request(servletContext) : new MockHttpServletRequest(servletContext); } private MockHttpServletRequest createServlet3Request(ServletContext servletContext) { diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java index ec9c7f5dbb8..8be3cf86ea4 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; import org.springframework.beans.BeanUtils; import org.springframework.http.HttpMethod; @@ -99,9 +98,8 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque @Override protected final MockHttpServletRequest createServletRequest(ServletContext servletContext) { - MockMultipartHttpServletRequest request = ClassUtils.hasMethod(ServletRequest.class, "startAsync") ? + MockMultipartHttpServletRequest request = servlet3Present ? createServlet3Request() : new MockMultipartHttpServletRequest(); - for (MockMultipartFile file : this.files) { request.addFile(file); } diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java index 4177db8c7b5..1a5f07f6e9d 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java @@ -48,6 +48,8 @@ import org.springframework.web.servlet.support.RequestContextUtils; */ public class PrintingResultHandler implements ResultHandler { + private static final boolean servlet3Present = ClassUtils.hasMethod(ServletRequest.class, "startAsync"); + private final ResultValuePrinter printer; @@ -77,7 +79,7 @@ public class PrintingResultHandler implements ResultHandler { this.printer.printHeading("Handler"); printHandler(result.getHandler(), result.getInterceptors()); - if (ClassUtils.hasMethod(ServletRequest.class, "startAsync")) { + if (servlet3Present) { this.printer.printHeading("Async"); printAsyncResult(result); } @@ -130,9 +132,11 @@ public class PrintingResultHandler implements ResultHandler { } protected void printAsyncResult(MvcResult result) throws Exception { - HttpServletRequest request = result.getRequest(); - this.printer.printValue("Was async started", request.isAsyncStarted()); - this.printer.printValue("Async result", result.getAsyncResult(0)); + if (servlet3Present) { + HttpServletRequest request = result.getRequest(); + this.printer.printValue("Was async started", request.isAsyncStarted()); + this.printer.printValue("Async result", result.getAsyncResult(0)); + } } /** Print the handler */ diff --git a/spring-test-mvc/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java b/spring-test-mvc/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java index 393d7491b7f..0eea8533762 100644 --- a/spring-test-mvc/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java +++ b/spring-test-mvc/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java @@ -34,6 +34,8 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.web.servlet.StubMvcResult; import org.springframework.test.web.servlet.result.PrintingResultHandler; import org.springframework.util.Assert; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.web.method.HandlerMethod; @@ -60,7 +62,11 @@ public class PrintingResultHandlerTests { @Before public void setup() { this.handler = new TestPrintingResultHandler(); - this.request = new MockHttpServletRequest("GET", "/"); + this.request = new MockHttpServletRequest("GET", "/") { + public boolean isAsyncStarted() { + return false; + } + }; this.response = new MockHttpServletResponse(); this.mvcResult = new StubMvcResult(this.request, null, null, null, null, null, this.response); } @@ -75,9 +81,12 @@ public class PrintingResultHandlerTests { HttpHeaders headers = new HttpHeaders(); headers.set("header", "headerValue"); + MultiValueMap params = new LinkedMultiValueMap(); + params.add("param", "paramValue"); + assertValue("MockHttpServletRequest", "HTTP Method", this.request.getMethod()); assertValue("MockHttpServletRequest", "Request URI", this.request.getRequestURI()); - assertValue("MockHttpServletRequest", "Parameters", this.request.getParameterMap()); + assertValue("MockHttpServletRequest", "Parameters", params); assertValue("MockHttpServletRequest", "Headers", headers); }