Hi
I have been using dynafaces for a while and it is a great project. I been using ajaxZone and it is like magic just add the tag and presto everything contained within get ajaxified.
Unfortunately I recently need to add a application wide filter to do some post processing and this filter has broken the ajaxZone. I have tried everything to try to fix this but no luck. I have verified that the ajax request is being sent and a blank ajax response is returned and it seems to be a problem with the PostProcessingStream of my PostProcessingServletResponseWrapper not being written to. I can see that my PostProcessingStream in being wrapped in a noOpPrintWriter by AsyncResponse. Any insight would be greatly appreciated. My code is below
Thanks
[code]
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
PostProcessingServletOutputStream postProcessingStream = new PostProcessingStream(servletResponse.getOutputStream());
PostProcessingServletResponseWrapper wrappedResp = new PostProcessingServletResponseWrapper(servletResponse, postProcessingStream);
try{
chain.doFilter(servletRequest, , wrappedResp);
}finally{
wrappedResp.close();
}
}
public abstract class PostProcessingServletOutputStream extends ServletOutputStream {
/** original servlet Response Stream */
protected OutputStream origResponseStream;
/** buffer stream of output */
protected ByteArrayOutputStream bufferStream;
private boolean closed = false;
public PostProcessingServletOutputStream(ServletOutputStream servletOutputStream)
throws java.io.IOException{
origResponseStream = servletOutputStream;
bufferStream = new ByteArrayOutputStream();
}
public void write(int i) throws java.io.IOException {
bufferStream.write(i);
}
public void close() throws java.io.IOException {
if (!closed) {
if (getPostProcessRequired() ){
doPostProcessStream();
}else
origResponseStream.write(bufferStream.toByteArray());
origResponseStream.flush();
origResponseStream.close();
closed = true;
}
}
public void flush() throws java.io.IOException {
if (bufferStream.size() != 0) {
if (!closed) {
if (getPostProcessRequired()){
doPostProcessStream();
}else
origResponseStream.write(bufferStream.toByteArray());
origResponseStream.flush();
bufferStream.reset();
}
}
}
/** indicates if post processing is required */
public abstract boolean getPostProcessRequired();
/** does post processing on response and write out to actual response */
public void doPostProcessStream() throws java.io.IOException{
System.out.print(bufferStream.toByteArray());//prints nothing
......
......
......
origResponseStream.write(postProcessed);
}
}
public class PostProcessingServletResponseWrapper extends HttpServletResponseWrapper {
/** Using output stream flag. */
protected boolean usingOutputStream = false;
/** Using writer flag. */
protected boolean usingWriter = false;
private PrintWriter wrappedWriter;
private PostProcessingServletOutputStream wrappedStream;
public PostProcessingServletResponseWrapper(ServletResponse response, PostProcessingServletOutputStream postProcessingServletOutputStream) throws java.io.IOException {
super((HttpServletResponse) response);
wrappedStream = postProcessingServletOutputStream;
}
public PrintWriter getWriter() throws java.io.IOException {
if (usingOutputStream)
throw new IllegalStateException("getOutputStream() was already called");
if (Globals.STRICT_SERVLET_COMPLIANCE) {
setCharacterEncoding(getCharacterEncoding());
}
if (wrappedWriter == null) {
wrappedWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(wrappedStream, getCharacterEncoding())),false);
}
usingWriter = true;
return wrappedWriter;
}
public ServletOutputStream getOutputStream() throws java.io.IOException {
if (usingWriter)
throw new IllegalStateException("getWriter() was already called");
usingOutputStream = true;
return wrappedStream;
}
/** calls close on PostProcessingServletOutputStream to run doPostProcessStream if needed */
public void close() throws java.io.IOException {
wrappedStream.close();
super.getOutputStream().close();
}
public void setContentType(String type) {
if(type!=null)
super.setContentType(contentType);
}
}[/code]
[Message sent by forum member 'nonome' (nonome)]
http://forums.java.net/jive/thread.jspa?messageID=294078