|
20 | 20 | import org.mvcspec.ozark.event.AfterProcessViewEventImpl;
|
21 | 21 | import org.mvcspec.ozark.event.BeforeProcessViewEventImpl;
|
22 | 22 | import org.mvcspec.ozark.cdi.OzarkCdiExtension;
|
23 |
| -import org.mvcspec.ozark.util.PathUtils; |
24 | 23 |
|
25 | 24 | import javax.enterprise.event.Event;
|
26 | 25 | import javax.enterprise.inject.Instance;
|
|
33 | 32 | import javax.mvc.event.AfterProcessViewEvent;
|
34 | 33 | import javax.mvc.event.BeforeProcessViewEvent;
|
35 | 34 | import javax.mvc.event.MvcEvent;
|
36 |
| -import javax.servlet.RequestDispatcher; |
37 |
| -import javax.servlet.ServletException; |
38 | 35 | import javax.servlet.ServletOutputStream;
|
39 | 36 | import javax.servlet.WriteListener;
|
40 | 37 | import javax.servlet.http.HttpServletRequest;
|
41 |
| -import javax.servlet.http.HttpServletRequestWrapper; |
42 | 38 | import javax.servlet.http.HttpServletResponse;
|
43 | 39 | import javax.servlet.http.HttpServletResponseWrapper;
|
44 | 40 | import javax.ws.rs.Produces;
|
@@ -137,35 +133,9 @@ public void writeTo(Viewable viewable, Class<?> aClass, Type type, Annotation[]
|
137 | 133 | }
|
138 | 134 |
|
139 | 135 | // Create wrapper for response
|
140 |
| - final ServletOutputStream responseStream = new ServletOutputStream() { |
141 |
| - @Override |
142 |
| - public void write(final int b) throws IOException { |
143 |
| - out.write(b); |
144 |
| - } |
145 |
| - |
146 |
| - @Override |
147 |
| - public boolean isReady() { |
148 |
| - return false; |
149 |
| - } |
150 |
| - |
151 |
| - @Override |
152 |
| - public void setWriteListener(WriteListener writeListener) { |
153 |
| - throw new UnsupportedOperationException("Not supported"); |
154 |
| - } |
155 |
| - }; |
| 136 | + final ServletOutputStream responseStream = new DelegatingServletOutputStream(out); |
156 | 137 | final PrintWriter responseWriter = new PrintWriter(new OutputStreamWriter(responseStream, getCharset(headers)));
|
157 |
| - final HttpServletResponse responseWrapper = new HttpServletResponseWrapper(response) { |
158 |
| - |
159 |
| - @Override |
160 |
| - public ServletOutputStream getOutputStream() throws IOException { |
161 |
| - return responseStream; |
162 |
| - } |
163 |
| - |
164 |
| - @Override |
165 |
| - public PrintWriter getWriter() throws IOException { |
166 |
| - return responseWriter; |
167 |
| - } |
168 |
| - }; |
| 138 | + final HttpServletResponse responseWrapper = new MvcHttpServletResponse(response, responseStream, responseWriter); |
169 | 139 |
|
170 | 140 | // Pass request to view engine
|
171 | 141 | try {
|
@@ -238,4 +208,57 @@ private MediaType getMediaTypeFromHeaders(MultivaluedMap<String, Object> headers
|
238 | 208 |
|
239 | 209 | }
|
240 | 210 |
|
| 211 | + /** |
| 212 | + * Implementation of {@link ServletOutputStream} which delegate all write operations |
| 213 | + * to an underlying {@link OutputStream} provided by JAX-RS. |
| 214 | + */ |
| 215 | + private static class DelegatingServletOutputStream extends ServletOutputStream { |
| 216 | + |
| 217 | + private final OutputStream out; |
| 218 | + |
| 219 | + public DelegatingServletOutputStream(OutputStream out) { |
| 220 | + this.out = out; |
| 221 | + } |
| 222 | + |
| 223 | + @Override |
| 224 | + public void write(final int b) throws IOException { |
| 225 | + out.write(b); |
| 226 | + } |
| 227 | + |
| 228 | + @Override |
| 229 | + public boolean isReady() { |
| 230 | + return false; |
| 231 | + } |
| 232 | + |
| 233 | + @Override |
| 234 | + public void setWriteListener(WriteListener writeListener) { |
| 235 | + throw new UnsupportedOperationException("Not supported"); |
| 236 | + } |
| 237 | + } |
| 238 | + |
| 239 | + /** |
| 240 | + * Implementation of {@link HttpServletResponseWrapper} which returns custom |
| 241 | + * output streams and writers. |
| 242 | + */ |
| 243 | + private static class MvcHttpServletResponse extends HttpServletResponseWrapper { |
| 244 | + |
| 245 | + private final ServletOutputStream responseStream; |
| 246 | + private final PrintWriter responseWriter; |
| 247 | + |
| 248 | + public MvcHttpServletResponse(HttpServletResponse response, ServletOutputStream responseStream, PrintWriter responseWriter) { |
| 249 | + super(response); |
| 250 | + this.responseStream = responseStream; |
| 251 | + this.responseWriter = responseWriter; |
| 252 | + } |
| 253 | + |
| 254 | + @Override |
| 255 | + public ServletOutputStream getOutputStream() throws IOException { |
| 256 | + return responseStream; |
| 257 | + } |
| 258 | + |
| 259 | + @Override |
| 260 | + public PrintWriter getWriter() throws IOException { |
| 261 | + return responseWriter; |
| 262 | + } |
| 263 | + } |
241 | 264 | }
|
0 commit comments