nicolaken 2002/05/31 12:00:00
Modified: . changes.xml
src/java/org/apache/cocoon/servlet CocoonServlet.java
src/java/org/apache/cocoon/components/notification
Notifier.java
src/java/org/apache/cocoon/components/treeprocessor/sitemap
PipelineNode.java
Log:
<action dev="NKB" type="fix">
Changed the Notifier notify() methods to accept a mimetype instead of returning
it.
There is no way in which this method could understand what mime/type to use from
the
notification info and the stream.
It was added to the method using a ContentHandler, since it could output svg for
example.
The old methods were deprecated.
</action>
<action dev="NKB" type="fix" due-to="Stephan Michels"
due-to-email="[EMAIL PROTECTED]">
Fixed error reporting in CocoonServlet: stream is now closed at the end of the
service method,
the content-type is sent before sending the error and the notification messages
are now more
descriptive.
</action>
Revision Changes Path
1.180 +13 -1 xml-cocoon2/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/changes.xml,v
retrieving revision 1.179
retrieving revision 1.180
diff -u -r1.179 -r1.180
--- changes.xml 31 May 2002 14:25:15 -0000 1.179
+++ changes.xml 31 May 2002 18:59:59 -0000 1.180
@@ -4,7 +4,7 @@
<!--
History of Cocoon changes
- $Id: changes.xml,v 1.179 2002/05/31 14:25:15 vgritsenko Exp $
+ $Id: changes.xml,v 1.180 2002/05/31 18:59:59 nicolaken Exp $
-->
<changes title="History of Changes">
@@ -38,6 +38,18 @@
</devs>
<release version="@version@" date="@date@">
+ <action dev="NKB" type="fix">
+ Changed the Notifier notify() methods to accept a mimetype instead of returning
it.
+ There is no way in which this method could understand what mime/type to use
from the
+ notification info and the stream.
+ It was added to the method using a ContentHandler, since it could output svg
for example.
+ The old methods were deprecated.
+ </action>
+ <action dev="NKB" type="fix" due-to="Stephan Michels"
due-to-email="[EMAIL PROTECTED]">
+ Fixed error reporting in CocoonServlet: stream is now closed at the end of the
service method,
+ the content-type is sent before sending the error and the notification messages
are now more
+ descriptive.
+ </action>
<action dev="VG" type="fix" fixes-bug="8639">
Support Parameterizable URLFactories.
</action>
1.24 +29 -37
xml-cocoon2/src/java/org/apache/cocoon/servlet/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/servlet/CocoonServlet.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- CocoonServlet.java 22 May 2002 15:07:17 -0000 1.23
+++ CocoonServlet.java 31 May 2002 18:59:59 -0000 1.24
@@ -113,11 +113,11 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Leo Sutic</a>
- * @version CVS $Id: CocoonServlet.java,v 1.23 2002/05/22 15:07:17 vgritsenko Exp $
+ * @version CVS $Id: CocoonServlet.java,v 1.24 2002/05/31 18:59:59 nicolaken Exp $
*/
public class CocoonServlet extends HttpServlet {
@@ -1009,31 +1009,27 @@
if (this.cocoon.process(env)) {
contentType = env.getContentType();
} else {
- // Should not get here!
- // means SC_NOT_FOUND
- res.sendError(res.SC_NOT_FOUND);
-
+ //NKB Should not get here?
+ log.fatalError("The Cocoon engine said it failed to process the
request for an unknown reason.");
+
SimpleNotifyingBean n = new SimpleNotifyingBean(this);
n.setType("error");
- n.setTitle("Resource not found");
+ n.setTitle("Cocoon confusion");
n.setSource("Cocoon servlet");
- n.setMessage("The requested resource not found.");
- n.setDescription("The requested URI \""
- + request.getRequestURI()
- + "\" was not found.");
+ n.setMessage("Cocoon engine failed in process.");
+ n.setDescription("The Cocoon engine said it failed to process
the request for an unknown reason.");
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
- res.setContentType(Notifier.notify(n, (OutputStream)null));
+
+ res.setContentType("text/html");
+ res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ Notifier.notify(n, res.getOutputStream(), "text/html");
}
} catch (ResourceNotFoundException rse) {
if (log.isWarnEnabled()) {
log.warn("The resource was not found", rse);
}
- res.sendError(res.SC_NOT_FOUND);
-
SimpleNotifyingBean n = new SimpleNotifyingBean(this);
n.setType("resource-not-found");
n.setTitle("Resource not found");
@@ -1047,33 +1043,20 @@
StringWriter writer = new StringWriter();
rse.printStackTrace(new PrintWriter(writer));
n.addExtraDescription("stack-trace",writer.toString());
- // send the notification but don't include it in the output stream
- // as the status SC_NOT_FOUND is enough
- res.setContentType(Notifier.notify(n, (OutputStream)null));
+
+ res.setContentType("text/html");
+ res.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ Notifier.notify(n, res.getOutputStream(), "text/html");
} catch (ConnectionResetException cre) {
if (log.isWarnEnabled()) {
log.warn("The connection was reset", cre);
}
- SimpleNotifyingBean n = new SimpleNotifyingBean(this);
- n.setType("error");
- n.setTitle("Resource not found");
- n.setSource("Cocoon servlet");
- n.setMessage("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 connection was reset anyway
- res.setContentType(Notifier.notify(n, (OutputStream)null));
} catch (Exception e) {
if (log.isErrorEnabled()) {
- log.error("Problem with servlet", e);
+ log.error("Problem with Cocoon servlet", e);
}
- //res.setStatus(res.SC_INTERNAL_SERVER_ERROR);
HashMap extraDescriptions = new HashMap(3);
extraDescriptions.put("request-uri", request.getRequestURI());
@@ -1085,7 +1068,9 @@
Notifying n=new DefaultNotifyingBuilder().build(
this, e, "fatal","Internal server error","Cocoon
servlet",null,null,extraDescriptions);
- res.setContentType(contentType = Notifier.notify(n,
res.getOutputStream()));
+ res.setContentType("text/html");
+ res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ Notifier.notify(n, res.getOutputStream(), "text/html");
}
long end = System.currentTimeMillis();
@@ -1109,12 +1094,19 @@
out.print((hide) ? "<!-- " : "<p>");
out.print(timeString);
out.println((hide) ? " -->" : "</p>");
- out.flush();
- out.close();
}
}
} finally {
if (ctxMap != null) ctxMap.clear();
+ try{
+ ServletOutputStream out = res.getOutputStream();
+ out.flush();
+ out.close();
+ }
+ catch(Exception e){
+ log.error("Cocoon servlet threw an Exception while trying to close
stream.", e);
+ }
+
}
}
1.8 +28 -8
xml-cocoon2/src/java/org/apache/cocoon/components/notification/Notifier.java
Index: Notifier.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/notification/Notifier.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Notifier.java 17 May 2002 09:28:35 -0000 1.7
+++ Notifier.java 31 May 2002 19:00:00 -0000 1.8
@@ -66,7 +66,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Id: Notifier.java,v 1.7 2002/05/17 09:28:35 morrijr Exp $
+ * @version CVS $Id: Notifier.java,v 1.8 2002/05/31 19:00:00 nicolaken Exp $
*/
public class Notifier {
@@ -77,11 +77,22 @@
* @param n The <code>Notifying</code> object
* @param outputStream The output stream the notification is written to
* This could be <code>null</code>.
- * @return The content type for this notification
- * (currently always text/html)
+ * @deprecated There is no way in which this method could understand what
mime/type to use. Instead use void notify(Notifying n, OutputStream outputStream,
String mimetype), where the mime/type is requested.
+ * @see notify(Notifying n, OutputStream outputStream, String mimetype)
*/
- public static String notify(Notifying n,
- OutputStream outputStream) throws IOException {
+ public static String notify(Notifying n, OutputStream outputStream) throws
IOException {
+ notify(n, outputStream, "text/html") ;
+ return "text/html";
+ }
+
+ /**
+ * Generate notification information as a response.
+ * The notification is directly written to the OutputStream.
+ * @param n The <code>Notifying</code> object
+ * @param outputStream The output stream the notification is written to
+ * This could be <code>null</code>.
+ */
+ public static void notify(Notifying n, OutputStream outputStream, String
mimetype) throws IOException {
StringBuffer sb = new StringBuffer();
@@ -115,15 +126,21 @@
if (outputStream != null)
outputStream.write(sb.toString().getBytes());
- // FIXME (SM) how can we send the error with the proper content type?
-
- return "text/html";
}
/**
* Generate notification information in XML format.
+ * @deprecated Using a ContentHandler doesn't mean that a mimetype cannot be
specified; it could be svg or
+ * @see notify(Notifying n, ContentHandler ch, String mimetype)
*/
public static void notify(Notifying n, ContentHandler ch) throws SAXException {
+ notify(n, ch, "text/xml");
+ }
+
+ /**
+ * Generate notification information in XML format.
+ */
+ public static void notify(Notifying n, ContentHandler ch, String mimetype) throws
SAXException {
final String PREFIX = Constants.ERROR_NAMESPACE_PREFIX;
final String URI = Constants.ERROR_NAMESPACE_URI;
@@ -179,4 +196,7 @@
ch.endDocument();
}
}
+
+
+
1.9 +4 -3
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java
Index: PipelineNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- PipelineNode.java 29 May 2002 12:02:15 -0000 1.8
+++ PipelineNode.java 31 May 2002 19:00:00 -0000 1.9
@@ -77,7 +77,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Gianugo Rabellino</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: PipelineNode.java,v 1.8 2002/05/29 12:02:15 cziegeler Exp $
+ * @version CVS $Id: PipelineNode.java,v 1.9 2002/05/31 19:00:00 nicolaken Exp $
*/
public class PipelineNode
extends AbstractParentProcessingNode
@@ -219,7 +219,7 @@
// notifying-generator is added in HandleErrorsNode
return node.invoke(env, errorContext);
} catch (Exception subEx) {
- getLogger().error("error notifier barfs", subEx);
+ getLogger().error("Error notifier is unable to notify the problem.
Please check the logs. In the default webapp, look in the WEB-INF/logs dir.", subEx);
return false;
} finally {
if (errorContext != null) {
@@ -228,4 +228,5 @@
}
}
-}
\ No newline at end of file
+}
+
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]