Author: fmeschbe
Date: Wed Jan 28 09:13:50 2009
New Revision: 738410

URL: http://svn.apache.org/viewvc?rev=738410&view=rev
Log:
SLING-844 Try to set the cause of the ScriptException

Modified:
    
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java

Modified: 
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java?rev=738410&r1=738409&r2=738410&view=diff
==============================================================================
--- 
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
 (original)
+++ 
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
 Wed Jan 28 09:13:50 2009
@@ -37,6 +37,7 @@
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.ScriptableObject;
 import org.mozilla.javascript.WrapFactory;
+import org.mozilla.javascript.Wrapper;
 import org.slf4j.Logger;
 
 /**
@@ -116,8 +117,25 @@
             final ScriptException se = new ScriptException(t.details(),
                 t.sourceName(), t.lineNumber());
 
+            // log the script stack trace
             ((Logger) 
bindings.get(SlingBindings.LOG)).error(t.getScriptStackTrace());
-            se.setStackTrace(t.getStackTrace());
+            
+            // set the exception cause
+            Object value = t.getValue();
+            if (value != null) {
+                if (value instanceof Wrapper) {
+                    value = ((Wrapper) value).unwrap();
+                }
+                if (value instanceof Throwable) {
+                    se.initCause((Throwable) value);
+                }
+            }
+            
+            // if the cause could not be set, overwrite the stack trace
+            if (se.getCause() == null) {
+                se.setStackTrace(t.getStackTrace());
+            }
+            
             throw se;
 
         } catch (Throwable t) {


Reply via email to