Author: kris
Date: Tue Jan 23 13:57:09 2007
New Revision: 499150

URL: http://svn.apache.org/viewvc?view=rev&rev=499150
Log:
Fix for 17388

Modified:
    
jakarta/taglibs/proper/standard/trunk/src/org/apache/taglibs/standard/tag/common/sql/QueryTagSupport.java

Modified: 
jakarta/taglibs/proper/standard/trunk/src/org/apache/taglibs/standard/tag/common/sql/QueryTagSupport.java
URL: 
http://svn.apache.org/viewvc/jakarta/taglibs/proper/standard/trunk/src/org/apache/taglibs/standard/tag/common/sql/QueryTagSupport.java?view=diff&rev=499150&r1=499149&r2=499150
==============================================================================
--- 
jakarta/taglibs/proper/standard/trunk/src/org/apache/taglibs/standard/tag/common/sql/QueryTagSupport.java
 (original)
+++ 
jakarta/taglibs/proper/standard/trunk/src/org/apache/taglibs/standard/tag/common/sql/QueryTagSupport.java
 Tue Jan 23 13:57:09 2007
@@ -211,21 +211,48 @@
          * if it was from the ResultSet.
          */
         PreparedStatement ps = null;
+        ResultSet rs = null;
+        Throwable queryError = null;
         try {
             ps = conn.prepareStatement(sqlStatement);
             setParameters(ps, parameters);
-            ResultSet rs = ps.executeQuery();
+            rs = ps.executeQuery();
             result = new ResultImpl(rs, startRow, maxRows);
-        }
-        catch (Throwable e) {
-            throw new JspException(sqlStatement + ": " + e.getMessage(), e);
+        } catch (Throwable e) {
+            queryError = e;
         } finally {
+            // don't blindly throw wrapped rsCloseExc or psCloseExc from
+            // this block since both close methods must be called and they
+            // may also "hide" queryError
+            // it's still possible that some random Throwable (Error or 
RuntimeException)
+            // could "escape" and hide queryError
+            SQLException rsCloseExc = null;
+            SQLException psCloseExc = null;
+            if (rs != null) {
+                try {
+                    rs.close();
+                } catch (SQLException sqe) {
+                    rsCloseExc = sqe;
+                }
+            }
             if (ps != null) {
                 try {
                     ps.close();
                 } catch (SQLException sqe) {
-                    throw new JspException(sqe.getMessage(), sqe);
+                    psCloseExc = sqe;
                 }
+            }
+
+            // need to capture info about the possible exceptions
+            // all exceptions have been saved, so this logic can be easily 
changed
+            if (queryError != null) {
+                // ignore rsCloseExc and psCloseExc
+                throw new JspException(sqlStatement + ": " + 
queryError.getMessage(), queryError);
+            } else if (rsCloseExc != null) {
+                // ignore psCloseExc (could add psCloseExec to end of "chain")
+                throw new JspException(rsCloseExc.getMessage(), rsCloseExc);
+            } else if (psCloseExc != null) {
+                throw new JspException(psCloseExc.getMessage(), psCloseExc);
             }
         }
         pageContext.setAttribute(var, result, scope);



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

Reply via email to