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 17:49:09 UTC
svn commit: r685590 - in
/incubator/sling/trunk/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp:
JspScriptEngineFactory.java jasper/servlet/JspServletWrapper.java
Author: cziegeler
Date: Wed Aug 13 08:49:07 2008
New Revision: 685590
URL: http://svn.apache.org/viewvc?rev=685590&view=rev
Log:
SLING-571 ; Apply another 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/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=685590&r1=685589&r2=685590&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 08:49:07 2008
@@ -27,6 +27,7 @@
import javax.script.ScriptException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingIOException;
@@ -279,6 +280,25 @@
if (scriptHelper != null) {
try {
callJsp(props, scriptHelper);
+ } catch (SlingServletException e) {
+ // ServletExceptions use getRootCause() instead of getCause(),
+ // so we have to extract the actual root cause and pass it as
+ // cause in our new ScriptException
+ if (e.getCause() != null) {
+ // SlingServletException always wraps ServletExceptions
+ ServletException se = (ServletException) e.getCause();
+ if (se.getRootCause() != null) {
+ // the ScriptException unfortunately does not accept a Throwable as cause,
+ // but only a Exception, so we have to wrap it with a dummy Exception in Throwable cases
+ if (se.getRootCause() instanceof Exception) {
+ throw new BetterScriptException(se.getRootCause().getMessage(), (Exception) se.getRootCause());
+ } else {
+ throw new BetterScriptException(se.getRootCause().getMessage(), new Exception("Wrapping Throwable: " + se.getRootCause().toString(), se.getRootCause()));
+ }
+ }
+ }
+ // fallback to standard behaviour
+ throw new BetterScriptException(e.getMessage(), e);
} catch (Exception e) {
throw new BetterScriptException(e.getMessage(), e);
}
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=685590&r1=685589&r2=685590&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 08:49:07 2008
@@ -482,16 +482,16 @@
* @return a JasperException with more detailed information
*/
protected JasperException handleJspException(Exception ex) {
- try {
- 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;
- }
+ 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;
}
+ }
+ try {
// First identify the stack frame in the trace that represents the JSP
StackTraceElement[] frames = realException.getStackTrace();
StackTraceElement jspFrame = null;
@@ -506,7 +506,7 @@
if (jspFrame == null) {
// If we couldn't find a frame in the stack trace corresponding
// to the generated servlet class, we can't really add anything
- return new JasperException(ex);
+ return new JasperException(realException);
}
else {
int javaLineNumber = jspFrame.getLineNumber();
@@ -521,7 +521,7 @@
// where in the JSP things went wrong
int jspLineNumber = detail.getJspBeginLineNumber();
if (jspLineNumber < 1) {
- throw new JasperException(ex);
+ throw new JasperException(realException);
}
if (options.getDisplaySourceFragment()) {
@@ -529,20 +529,20 @@
("jsp.exception", detail.getJspFileName(),
"" + jspLineNumber) +
"\n\n" + detail.getJspExtract() +
- "\n\nStacktrace:", ex);
+ "\n\nStacktrace:", realException);
} else {
return new JasperException(Localizer.getMessage
("jsp.exception", detail.getJspFileName(),
- "" + jspLineNumber), ex);
+ "" + jspLineNumber), realException);
}
}
} catch (Exception je) {
// If anything goes wrong, just revert to the original behaviour
- if (ex instanceof JasperException) {
- return (JasperException) ex;
+ if (realException instanceof JasperException) {
+ return (JasperException) realException;
} else {
- return new JasperException(ex);
+ return new JasperException(realException);
}
}
}