You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by ni...@apache.org on 2002/06/01 16:44:42 UTC

cvs commit: xml-cocoon2/src/webapp/WEB-INF web.xml

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:bloritsch@apache.org">Berin Loritsch</a>
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
    * @author <a href="mailto:leo.sutic@inspireinfrastructure.com">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:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org