nicolaken    2002/06/01 07:44:42

  Modified:    .        changes.xml
               src/java/org/apache/cocoon/servlet CocoonServlet.java
               src/webapp/WEB-INF web.xml
  Log:
    <action dev="NKB" type="add">
      Added a "handle-exceptions" init argument in web.xml, used by CocoonServlet for 
the exceptions
      that the core Cocoon class throws.
      If true or not set, this class will try to catch and handle all Cocoon 
exceptions.
      If false, it will rethrow them to the servlet container.
    </action>
  
  Revision  Changes    Path
  1.181     +7 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.180
  retrieving revision 1.181
  diff -u -r1.180 -r1.181
  --- changes.xml       31 May 2002 18:59:59 -0000      1.180
  +++ changes.xml       1 Jun 2002 14:44:41 -0000       1.181
  @@ -4,7 +4,7 @@
   
   <!--
     History of Cocoon changes
  -  $Id: changes.xml,v 1.180 2002/05/31 18:59:59 nicolaken Exp $
  +  $Id: changes.xml,v 1.181 2002/06/01 14:44:41 nicolaken Exp $
   -->
   
   <changes title="History of Changes">
  @@ -38,6 +38,12 @@
    </devs>
   
    <release version="@version@" date="@date@">
  +  <action dev="NKB" type="add">
  +    Added a "handle-exceptions" init argument in web.xml, used by CocoonServlet for 
the exceptions
  +    that the core Cocoon class throws.
  +    If true or not set, this class will try to catch and handle all Cocoon 
exceptions.
  +    If false, it will rethrow them to the servlet container.
  +  </action> 
     <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
  
  
  
  1.25      +105 -50   
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.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- CocoonServlet.java        31 May 2002 18:59:59 -0000      1.24
  +++ CocoonServlet.java        1 Jun 2002 14:44:42 -0000       1.25
  @@ -117,7 +117,7 @@
    * @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.24 2002/05/31 18:59:59 nicolaken Exp $
  + * @version CVS $Id: CocoonServlet.java,v 1.25 2002/06/01 14:44:42 nicolaken Exp $
    */
   public class CocoonServlet extends HttpServlet {
   
  @@ -171,6 +171,12 @@
       private boolean addClassDirs;
   
       /**
  +     * If true or not set, this class will try to catch and handle all Cocoon 
exceptions.
  +     * If false, it will rethrow them to the servlet container.
  +     */
  +    private boolean manageExceptions;
  +
  +    /**
        * This is the path to the servlet context (or the result
        * of calling getRealPath('/') on the ServletContext.
        * Note, that this can be null.
  @@ -418,7 +424,15 @@
                   log.debug("form-encoding was not set - defaulting to null.");
               }
           }
  -
  +        
  +        value = conf.getInitParameter("manage-exceptions");        
  +        this.manageExceptions = (value == null || value.equalsIgnoreCase("yes") || 
value.equalsIgnoreCase("true"));
  +        if (value == null) {
  +            if (log.isDebugEnabled()) {
  +                log.debug("Parameter manageExceptions was not set - defaulting to 
true.");
  +            }
  +        }
  +        
           this.createCocoon();
       }
   
  @@ -939,18 +953,29 @@
   
           // Check if cocoon was initialized
           if (this.cocoon == null) {
  -            res.setStatus(res.SC_INTERNAL_SERVER_ERROR);
  -
  -            SimpleNotifyingBean n= new SimpleNotifyingBean(this);
  +          if(manageExceptions){         
  +            res.reset();
  +            
  +            SimpleNotifyingBean n = new SimpleNotifyingBean(this);
               n.setType("fatal");
               n.setTitle("Internal servlet error");
               n.setSource("Cocoon servlet");
               n.setMessage("Cocoon was not initialized.");
               n.setDescription("Cocoon was not initialized. Cannot process request.");
               n.addExtraDescription("request-uri", request.getRequestURI());
  -            res.setContentType(Notifier.notify(n, res.getOutputStream()));
  -
  +                    
  +            res.setContentType("text/html");
  +            res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  +            Notifier.notify(n, res.getOutputStream(), "text/html");
  +         }
  +         else{
  +           res.sendError
  +            (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
  +             "The Cocoon engine said it failed to process the request for an 
unknown reason." );
  +            res.flushBuffer();
               return;
  +         }
  +
           }
   
           // We got it... Process the request
  @@ -1012,42 +1037,61 @@
                       //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("Cocoon confusion");
  -                    n.setSource("Cocoon servlet");
  -                    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);
  +                    if(manageExceptions){    
  +                      res.reset();      
  +                      
  +                      SimpleNotifyingBean n = new SimpleNotifyingBean(this);
  +                      n.setType("error");
  +                      n.setTitle("Cocoon confusion");
  +                      n.setSource("Cocoon servlet");
  +                      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);
  +                    
  +                      res.setContentType("text/html");
  +                      res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  +                      Notifier.notify(n, res.getOutputStream(), "text/html");
  +                    }
  +                    else{
  +                      res.sendError
  +                       (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
  +                        "The Cocoon engine said it failed to process the request 
for an unknown reason." );
  +                      res.flushBuffer();
  +                      return;                        
  +                    }
                       
  -                    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);
                   }
  -
  -                SimpleNotifyingBean n = new SimpleNotifyingBean(this);
  -                n.setType("resource-not-found");
  -                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);
  -                StringWriter writer = new StringWriter();
  -                rse.printStackTrace(new PrintWriter(writer));
  -                n.addExtraDescription("stack-trace",writer.toString());
  +                
  +                if(manageExceptions){     
  +                  res.reset();    
  +                  
  +                  SimpleNotifyingBean n = new SimpleNotifyingBean(this);
  +                  n.setType("resource-not-found");
  +                  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);
                      
  -                res.setContentType("text/html");
  -                res.setStatus(HttpServletResponse.SC_NOT_FOUND);
  -                Notifier.notify(n, res.getOutputStream(), "text/html");
  -
  +                  res.setContentType("text/html");
  +                  res.setStatus(HttpServletResponse.SC_NOT_FOUND);
  +                  Notifier.notify(n, res.getOutputStream(), "text/html");
  +                  }
  +                  else{
  +                    res.sendError
  +                     (HttpServletResponse.SC_NOT_FOUND, "Resource not found." );
  +                    res.flushBuffer();
  +                    return;                     
  +                  }
  +                    
               } catch (ConnectionResetException cre) {
                   if (log.isWarnEnabled()) {
                       log.warn("The connection was reset", cre);
  @@ -1057,20 +1101,31 @@
                   if (log.isErrorEnabled()) {
                       log.error("Problem with Cocoon servlet", e);
                   }
  -
  -                HashMap extraDescriptions = new HashMap(3);
  -                extraDescriptions.put("request-uri", request.getRequestURI());
  -                extraDescriptions.put("path-info", uri);
  -                StringWriter writer = new StringWriter();
  -                e.printStackTrace(new PrintWriter(writer));
  -                extraDescriptions.put("stack-trace",writer.toString());
  -
  -                Notifying n=new DefaultNotifyingBuilder().build(
  -                 this, e, "fatal","Internal server error","Cocoon 
servlet",null,null,extraDescriptions);
  -
  -                res.setContentType("text/html");
  -                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  -                Notifier.notify(n, res.getOutputStream(), "text/html");
  +                
  +                if(manageExceptions){     
  +                  res.reset(); 
  +                  
  +                  HashMap extraDescriptions = new HashMap(3);
  +                  extraDescriptions.put("request-uri", request.getRequestURI());
  +                  extraDescriptions.put("path-info", uri);
  +                  StringWriter writer = new StringWriter();
  +                  e.printStackTrace(new PrintWriter(writer));
  +                  extraDescriptions.put("stack-trace",writer.toString());
  +
  +                  Notifying n=new DefaultNotifyingBuilder().build(
  +                   this, e, "fatal","Internal server error","Cocoon 
servlet",null,null,extraDescriptions);
  +
  +                  res.setContentType("text/html");
  +                  res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  +                  Notifier.notify(n, res.getOutputStream(), "text/html");
  +                  }
  +                  else{
  +                    res.sendError
  +                     (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
  +                      "Internal server error.");
  +                    res.flushBuffer();
  +                    return;                      
  +                  }                  
               }
   
               long end = System.currentTimeMillis();
  
  
  
  1.12      +10 -0     xml-cocoon2/src/webapp/WEB-INF/web.xml
  
  Index: web.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/WEB-INF/web.xml,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- web.xml   22 May 2002 15:27:27 -0000      1.11
  +++ web.xml   1 Jun 2002 14:44:42 -0000       1.12
  @@ -215,6 +215,16 @@
       -->
   
       <!--
  +       If true or not set, this class will try to catch and handle all Cocoon 
exceptions.
  +       If false, it will rethrow them to the servlet container.
  +    -->
  +    <init-param>
  +      <param-name>manage-exceptions</param-name>
  +      <param-value>true</param-value>
  +    </init-param>
  +    
  +    
  +    <!--
         This parameter allows you to startup Cocoon2 immediately after startup
         of your servlet engine.
       -->
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to