1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.mock.web.test;
18
19 import javax.servlet.RequestDispatcher;
20 import javax.servlet.ServletRequest;
21 import javax.servlet.ServletResponse;
22 import javax.servlet.http.HttpServletResponseWrapper;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import org.springframework.util.Assert;
28
29
30
31
32
33
34
35
36
37
38
39
40 public class MockRequestDispatcher implements RequestDispatcher {
41
42 private final Log logger = LogFactory.getLog(getClass());
43
44 private final String resource;
45
46
47
48
49
50
51
52 public MockRequestDispatcher(String resource) {
53 Assert.notNull(resource, "resource must not be null");
54 this.resource = resource;
55 }
56
57
58 @Override
59 public void forward(ServletRequest request, ServletResponse response) {
60 Assert.notNull(request, "Request must not be null");
61 Assert.notNull(response, "Response must not be null");
62 if (response.isCommitted()) {
63 throw new IllegalStateException("Cannot perform forward - response is already committed");
64 }
65 getMockHttpServletResponse(response).setForwardedUrl(this.resource);
66 if (logger.isDebugEnabled()) {
67 logger.debug("MockRequestDispatcher: forwarding to [" + this.resource + "]");
68 }
69 }
70
71 @Override
72 public void include(ServletRequest request, ServletResponse response) {
73 Assert.notNull(request, "Request must not be null");
74 Assert.notNull(response, "Response must not be null");
75 getMockHttpServletResponse(response).addIncludedUrl(this.resource);
76 if (logger.isDebugEnabled()) {
77 logger.debug("MockRequestDispatcher: including [" + this.resource + "]");
78 }
79 }
80
81
82
83
84
85 protected MockHttpServletResponse getMockHttpServletResponse(ServletResponse response) {
86 if (response instanceof MockHttpServletResponse) {
87 return (MockHttpServletResponse) response;
88 }
89 if (response instanceof HttpServletResponseWrapper) {
90 return getMockHttpServletResponse(((HttpServletResponseWrapper) response).getResponse());
91 }
92 throw new IllegalArgumentException("MockRequestDispatcher requires MockHttpServletResponse");
93 }
94
95 }