Akber Choudhry wrote: > > Here are some mods done specifically for Websphere, but may be used > elsewhere. I also have my home-grown version of the IBM WAS StoredResponse > in case we agree to use some of this. > > Itch: JSP generator should really be a servlet generator as JSP's are > handled by the JSP servlet, which invokes different compilers in various > implementations. Cocoon should not be implementation specific and not > call the compiler directly, honouring the Container and J2EE spec.
I agree with this, only that, so far, nobody proposed anything better than what we have today. > Also, > we should only take the buffered output of the response and, and ignore most > headers (until response headers from external input can participate in > complex pipeline handling -- future) > Scratch: In this way, the servlet can be the PHP servlet, SSI, CGI or any > other existing business servlet, and the web application URI map is > honoured. Makes cocoon co-exist and enhance web applications. Ok, let's see. > Just the relevant portions -- > > public class ServletEngineImplRequestDispatcherInclude extends > AbstractLoggable > implements ServletEngine, ThreadSafe { > > public byte[] executeURI(String url, HttpServletRequest httpRequest, > HttpServletResponse httpResponse, ServletContext context) > throws IOException, ServletException, Exception { > > byte[] bytes = null; > > // get ServletEngine Dispatcher. > javax.servlet.RequestDispatcher rd = context.getRequestDispatcher( > url ); > StoredResponse storedresponse = new StoredResponse(); > storedresponse.setLocale(httpRequest.getLocale()); > if (rd != null) { > rd.include( httpRequest, storedresponse ); > bytes = storedresponse.getOutputBuffer(); > } else { > getLogger().error( "Error getting " + url + "from ServletEngine > Dispatcher" ); > } > return bytes; > } > } > > ---------------------- > > Itch: Cocoon servlets attempts to write the content type when sending an > error to the container. Changed -- moved sendError after the bean > creation and put the bean into the session. Invalidate the session in the > web application error page. Container handles gracefully. > > SimpleNotifyingBean n = new SimpleNotifyingBean(this); > n.setType("error"); > n.setTitle("Resource not found"); > n.setSource("Cocoon servlet"); > n.setMessage("The requested resource not found."); > n.setDescription("The requested URI \"" > + request.getRequestURI() > + "\" was not found."); > n.addExtraDescription("request-uri", > request.getRequestURI()); > n.addExtraDescription("path-info", uri); > // send the notification but don't include it in the > output stream > // as the status SC_NOT_FOUND is enough > req.getSession(true).setAttribute("cocoon_error", n); > > res.sendError(res.SC_NOT_FOUND); > // webapp error > res.setContentType(Notifier.notify(n, (OutputStream)null)); > > ----------- sample webapp error page --- > > <%@ page isErrorPage="true" %> > <jsp:useBean id="cocoon_error" scope="session" > class="org.apache.cocoon.components.notification.SimpleNotifyingBean"/> > <html> > <head> > <title>Error: <%=exception.getMessage() > %></title> > </head> > <body> > <h2> Cocoon Error </h2> > <font face="Verdana" color="red" size="3"> > <b><em><%= exception.getMessage() %> </em></b> > </font> > <% if (cocoon_error != null) { %> > <br/><b> Error Type: </b><%= cocoon_error.getType() %> > <br/><b> Error Title: </b><%= cocoon_error.getTitle() %> > <br/><b> Error Source: </b><%= cocoon_error.getSource() %> > <br/><b> Error Sender: </b><%= cocoon_error.getSender() %> > <br/><b> Error Message: </b><%= cocoon_error.getMessage() %> > <br/><b> Error Description: </b><%= cocoon_error.getDescription() %> > <br/><b> Extra Description(s): </b><%= > cocoon_error.getExtraDescriptions() %> > <br/><b> Stack Trace: </b><br/> > <% } %> > <pre> > <% exception.printStackTrace(new PrintWriter(out)); %> > </pre> > <% session.invalidate(); %> > </body> > </html> Ah, you are re-inverting the control... hmmmm, I fail to see how this is going to make Cocoon more container compliant. Care to elaborate more on this? -- Stefano Mazzocchi One must still have chaos in oneself to be able to give birth to a dancing star. <[EMAIL PROTECTED]> Friedrich Nietzsche -------------------------------------------------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]