Christopher Schultz schrieb am 20.11.2008 um 10:05:48 (-0500): > Micheal, > > Your comment about calling getResponse().getOutputStream() and > ignoring the result got me to thinking...
Christopher, I may actually have had a point there, although I'm not sure this is the case. I just verified that the working HttpResponseCatcher I posted some minutes ago stops working correctly when I omit the calls to the underlying ServletResponse object. In that case, the output looks like this: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Gurke: eingelegt GuFilter-Zeichen: 101 GuFilter-Oktette: 103 Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: Fri, 21 Nov 2008 20:58:00 GMT <!-- Käseküchlein --><p>Included text</p> <html><p>Before include</p> <p>After include</p></html> You can see that the included HTML snippet is in the wrong place. (The comment is inserted by the filter on the outgoing response.) > You know what? I just realized that I've been leading you down the > wrong path: you must manage the buffers separately because of the "you > can only call either getOutputStream OR getWriter" rule. > > I think you can still make it work with a unified buffer, but you have > to be more careful. Let's be less careful and more straightforward. Your argument in favour of the unified buffer sounds perfectly logical to me. In the end, it's all bytes that get written, regardless of whether or not I wrap a PrintWriter around the buffer. I have to make sure, of course, to always hand out the same buffer, so all output goes there. I possibly also have to make sure to play by the same rules as the real implementation and not allow both getWriter() and getOutputStream() on the same resonse. > Basically, you'll have to duplicate your efforts to wrap the Writer > the same way you did the OutputStream: create a WriterWrapper and > cache that information. I'd recommend using a StringWriter as a > backing class, since you don't have to worry too much about the > character encoding at that point (because Writers always use > characters, not bytes). Hmm. Do you still think this is better? And what do you mean by "caching" it? Just keeping it in an instance variable, instead of erroneously creating a new one for each call of getWriter(), as I first did? > Anyhow, you definitely /should/ call getResponse().getOutputStream() > (or getWriter(), whichever the case may be) when your getOutputStream() > method is invoked: you definitely want the state handling to be done by > the wrapped request, because you never know what has happened to the > request before your filters gets its hands on it. I agree: You never know. And who knows what stuff gets set or tweaked in Tomcat's internals for each one of getWriter() and getOutputStream(). On the other hand, I haven't found any statement to the effect that you have to pass through the calls to the underlying response object. Michael Ludwig --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]