You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/08/13 14:30:26 UTC

svn commit: r685528 - in /incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp: JspScriptEngineFactory.java jasper/compiler/ErrorDispatcher.java jasper/servlet/JspServletWrapper.java

Author: cziegeler
Date: Wed Aug 13 05:30:25 2008
New Revision: 685528

URL: http://svn.apache.org/viewvc?rev=685528&view=rev
Log:
SLING-571 ; Apply patch from Alexander Klimetschek

Modified:
    incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
    incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ErrorDispatcher.java
    incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java

Modified: incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java?rev=685528&r1=685527&r2=685528&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java (original)
+++ incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java Wed Aug 13 05:30:25 2008
@@ -280,11 +280,31 @@
                 try {
                     callJsp(props, scriptHelper);
                 } catch (Exception e) {
-                    throw new ScriptException(e);
+                    throw new BetterScriptException(e.getMessage(), e);
                 }
             }
             return null;
         }
     }
 
+    /**
+     * Fixes {@link ScriptException} that overwrites the
+     * {@link ScriptException#getMessage()} method to display its own
+     * <code>message</code> instead of the <code>detailMessage</code>
+     * defined in {@link Throwable}. Unfortunately using the constructor
+     * {@link ScriptException#ScriptException(Exception)} does not set the
+     * <code>message</code> member of {@link ScriptException}, which leads to
+     * a message of <code>"null"</code>, effectively supressing the detailed
+     * information of the cause. This class provides a way to do that explicitly
+     * with a new constructor accepting both a message and a causing exception.
+     * 
+     */
+    private static class BetterScriptException extends ScriptException {
+        
+        public BetterScriptException(String message, Exception cause) {
+            super(cause);
+            this.message = message;
+        }
+        
+    }
 }

Modified: incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ErrorDispatcher.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ErrorDispatcher.java?rev=685528&r1=685527&r2=685528&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ErrorDispatcher.java (original)
+++ incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/compiler/ErrorDispatcher.java Wed Aug 13 05:30:25 2008
@@ -521,20 +521,25 @@
     public static JavacErrorDetail createJavacError(String fname,
             Node.Nodes page, StringBuffer errMsgBuf, int lineNum,
             JspCompilationContext ctxt) throws JasperException {
-        JavacErrorDetail javacError;
-        // Attempt to map javac error line number to line in JSP page
-        ErrorVisitor errVisitor = new ErrorVisitor(lineNum);
-        page.visit(errVisitor);
-        Node errNode = errVisitor.getJspSourceNode();
-        if ((errNode != null) && (errNode.getStart() != null)) {
-            javacError = new JavacErrorDetail(
-                    fname,
-                    lineNum,
-                    errNode.getStart().getFile(),
-                    errNode.getStart().getLineNumber(),
-                    errMsgBuf,
-                    ctxt);
-        } else {
+        JavacErrorDetail javacError = null;
+        
+        if (page != null) {
+            // Attempt to map javac error line number to line in JSP page
+            ErrorVisitor errVisitor = new ErrorVisitor(lineNum);
+            page.visit(errVisitor);
+            Node errNode = errVisitor.getJspSourceNode();
+            if ((errNode != null) && (errNode.getStart() != null)) {
+                javacError = new JavacErrorDetail(
+                        fname,
+                        lineNum,
+                        errNode.getStart().getFile(),
+                        errNode.getStart().getLineNumber(),
+                        errMsgBuf,
+                        ctxt);
+            }
+        }
+        
+        if (javacError == null) {
             /*
              * javac error line number cannot be mapped to JSP page
              * line number. For example, this is the case if a 

Modified: incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java?rev=685528&r1=685527&r2=685528&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java (original)
+++ incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/jasper/servlet/JspServletWrapper.java Wed Aug 13 05:30:25 2008
@@ -486,6 +486,10 @@
             Throwable realException = ex;
             if (ex instanceof ServletException) {
                 realException = ((ServletException) ex).getRootCause();
+                // root cause might be null (eg. for a JasperException ex)
+                if (realException == null) {
+                    realException = ex;
+                }
             }
 
             // First identify the stack frame in the trace that represents the JSP