Author: yoavs
Date: Mon Dec 25 06:06:34 2006
New Revision: 490149

URL: http://svn.apache.org/viewvc?view=rev&rev=490149
Log:
Bugzilla 40241: catch Exceptions instead of Throwables in Default and SSI 
servlets, and log them better.

Modified:
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java?view=diff&rev=490149&r1=490148&r2=490149
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
 Mon Dec 25 06:06:34 2006
@@ -220,46 +220,65 @@
         String value = null;
         try {
             value = getServletConfig().getInitParameter("debug");
-            debug = Integer.parseInt(value);
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                debug = Integer.parseInt(value);
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read debug from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("input");
-            input = Integer.parseInt(value);
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                input = Integer.parseInt(value);
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read input from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("listings");
-            listings = (new Boolean(value)).booleanValue();
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                listings = (new Boolean(value)).booleanValue();
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read listings from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("readonly");
-            if (value != null)
+            if (value != null) {
                 readOnly = (new Boolean(value)).booleanValue();
-        } catch (Throwable t) {
-            ;
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read readonly from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("output");
-            output = Integer.parseInt(value);
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                output = Integer.parseInt(value);
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read output from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("sendfileSize");
-            sendfileSize = Integer.parseInt(value) * 1024;
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                sendfileSize = Integer.parseInt(value) * 1024;
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read sendfileSize from " + 
value);
         }
+
         try {
             value = getServletConfig().getInitParameter("fileEncoding");
-            fileEncoding = value;
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                fileEncoding = value;
+            }
+        } catch (Exception e) {
+            log("DefaultServlet.init: couldn't read fileEncoding from " + 
value);
         }
 
         globalXsltFile = getServletConfig().getInitParameter("globalXsltFile");
@@ -284,6 +303,7 @@
         } catch(ClassCastException e) {
             // Failed : Not the right type
         }
+
         if (resources == null) {
             try {
                 resources =
@@ -1464,10 +1484,10 @@
 
                     return buffer.toString();
                  }
-             } catch(Throwable e) {
-                 ; /* Should only be IOException or NamingException
-                    * can be ignored
-                    */
+             } catch(IOException ioe) {
+                 log("DefaultServlet.getReadme: IO exception: " + 
ioe.getMessage());
+             } catch (NamingException ne) {
+                 log("DefaultServlet.getReadme: Naming exception: " + 
ne.getMessage());
              }
         }
 
@@ -1488,10 +1508,10 @@
                     if (is!=null)
                         return is;
                 }
-             } catch(Throwable e) {
-                 ; /* Should only be IOException or NamingException
-                    * can be ignored
-                    */
+            } catch(IOException ioe) {
+                log("DefaultServlet.findXsltInputStream: IO exception: " + 
ioe.getMessage());
+            } catch (NamingException ne) {
+                log("DefaultServlet.findXsltInputStream: Naming exception: " + 
ne.getMessage());
              }
         }
 
@@ -1509,15 +1529,17 @@
                     fis.read(b);
                     return new ByteArrayInputStream(b);
                 }
-            } catch(Throwable e) {
-                log("This shouldn't happen (?)...", e);
+            } catch(Exception e) {
+                log("DefaultServlet.findXsltInputStream: can't read "
+                    + globalXsltFile);
                 return null;
             } finally {
                 try {
                     if (fis!=null)
                         fis.close();
-                } catch(Throwable e){
-                    ;
+                } catch(Exception e) {
+                    log("DefaultServlet.findXsltInputStream: "
+                        + " exception closing input stream: " + 
e.getMessage());
                 }
             }
         }
@@ -1772,14 +1794,15 @@
         // Clean up the input stream
         try {
             istream.close();
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("DefaultServlet.copy: exception closing input stream: "
+                + e.getMessage());
         }
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 
@@ -1819,14 +1842,15 @@
         // Clean up the reader
         try {
             reader.close();
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("DefaultServlet.copy: exception closing reader: "
+                + e.getMessage());
         }
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 
@@ -1854,14 +1878,15 @@
         // Clean up the input stream
         try {
             istream.close();
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("DefaultServlet.copy: exception closing input stream: "
+                + e.getMessage());
         }
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 
@@ -1896,14 +1921,15 @@
         // Clean up the input stream
         try {
             reader.close();
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("DefaultServlet.copy: exception closing reader: "
+                + e.getMessage());
         }
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 
@@ -1948,8 +1974,9 @@
 
             try {
                 istream.close();
-            } catch (Throwable t) {
-                ;
+            } catch (Exception e) {
+                log("DefaultServlet.copy: exception closing input stream: "
+                    + e.getMessage());
             }
 
         }
@@ -1958,9 +1985,9 @@
         ostream.print("--" + mimeSeparation + "--");
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 
@@ -2011,8 +2038,9 @@
 
             try {
                 reader.close();
-            } catch (Throwable t) {
-                ;
+            } catch (Exception e) {
+                log("DefaultServlet.copy: exception closing reader: "
+                    + e.getMessage());
             }
 
         }
@@ -2021,9 +2049,9 @@
         writer.print("--" + mimeSeparation + "--");
 
         // Rethrow any exception that has occurred
-        if (exception != null)
+        if (exception != null) {
             throw exception;
-
+        }
     }
 
 

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java?view=diff&rev=490149&r1=490148&r2=490149
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
 Mon Dec 25 06:06:34 2006
@@ -1,16 +1,21 @@
 /*
- * Copyright 1999,2004 The Apache Software Foundation. Licensed under the
- * Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License
- * at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is
- * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.catalina.ssi;
 
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,6 +30,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.catalina.Globals;
+
 /**
  * Servlet to process SSI requests within a webpage. Mapped to a path from
  * within web.xml.
@@ -61,50 +67,64 @@
         String value = null;
         try {
             value = getServletConfig().getInitParameter("debug");
-            debug = Integer.parseInt(value);
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                debug = Integer.parseInt(value);
+            }
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading debug from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter(
                     "isVirtualWebappRelative");
-            isVirtualWebappRelative = Integer.parseInt(value) > 0?true:false;
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                isVirtualWebappRelative = Integer.parseInt(value) > 
0?true:false;
+            }
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading isVirtualWebappRelative from"
+                + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("expires");
-            expires = Long.valueOf(value);
+            if (value != null) {
+                expires = Long.valueOf(value);
+            }
         } catch (NumberFormatException e) {
             expires = null;
             log("Invalid format for expires initParam; expected integer 
(seconds)");
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading expires from " + value);
         }
+
         try {
             value = getServletConfig().getInitParameter("buffered");
-            buffered = Integer.parseInt(value) > 0?true:false;
-        } catch (Throwable t) {
-            ;
+            if (value != null) {
+                buffered = Integer.parseInt(value) > 0?true:false;
+            }
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading buffered from " + value);
         }
+
         try {
             inputEncoding = 
getServletConfig().getInitParameter("inputEncoding");
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading inputEncoding: " + 
e.getMessage());
         }
+
         try {
             value = getServletConfig().getInitParameter("outputEncoding");
             if (value != null) {
                 outputEncoding = value;
             }
-        } catch (Throwable t) {
-            ;
+        } catch (Exception e) {
+            log("SSIServlet.init: error reading outputEncoding from " + value);
         }
+
         if (debug > 0)
             log("SSIServlet.init() SSI invoker started with 'debug'=" + debug);
     }
 
-
     /**
      * Process and forward the GET request to our 
<code>requestHandler()</code>*
      * 
@@ -229,4 +249,4 @@
             res.getWriter().write(text);
         }
     }
-}
\ No newline at end of file
+}

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=490149&r1=490148&r2=490149
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Mon Dec 25 06:06:34 2006
@@ -200,6 +200,10 @@
         <bug>39402</bug>: Modify existing Vary HTTP header, rather than 
overwrite it, if it
         exists when using GZip compression.  Patch by Matthew Cooke. (yoavs)
       </fix>
+      <fix>
+        <bug>40241</bug>: Catch Exceptions instead of Throwables in Default 
and SSI servlets.
+        Also improve relevant logging while we're at it. (yoavs)
+      </fix>
     </changelog>
   </subsection> 
   <subsection name="Jasper">



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to