Closed
Bug 303572
Opened 20 years ago
Closed 20 years ago
Need access to underlying RhinoException in rethrown error objects
Categories
(Rhino Graveyard :: Core, enhancement)
Rhino Graveyard
Core
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: szegedia, Assigned: szegedia)
Details
Attachments
(1 file)
1.28 KB,
patch
|
Details | Diff | Splinter Review |
User-Agent: Opera/8.01 (Windows NT 5.0; U; en)
Build Identifier:
There's a situation where scripts catch and then selectively rethrow exceptions:
try
{
...
}
catch(e)
{
if(e instanceof JavaException && e.javaException.class.name == "com.foo.
ValidationException")
{
...
}
else
{
throw e;
}
}
Now, when the thrown exception is some internal Rhino exception, i.e. TypeError,
its stack trace will be lost after the throw -- the Java code invoking the
script will ultimately get a JavaScriptException with the error object
constructed in the catch clause. I'd suggest that similar to the nonstandard
"javaException" field, the error object should also have an also nonstandard
"rhinoException" field for these exceptions. Then the Java code invoking the
script could do the following to ensure it logs the root cause exception
regardless of how many times it is caught and rethrown in the script:
Throwable terminationCause;
try
{
script.exec(...);
terminationCause = null;
}
catch(JavaScriptException e)
{
terminationCause = e;
Object val = e.getValue();
if(val instanceof Scriptable)
{
Object njo = ScriptableObject.getProperty(((Scriptable)val),
"rhinoException");
if(njo instanceof NativeJavaObject)
{
val = njo;
}
else
{
njo = ScriptableObject.getProperty(((Scriptable)val),
"javaException");
if(njo instanceof NativeJavaObject)
{
val = njo;
}
}
}
if(val instanceof NativeJavaObject)
{
Object t = ((NativeJavaObject)val).unwrap();
while(t instanceof InvocationTargetException)
{
t = ((InvocationTargetException)t).getCause();
}
if(t instanceof Throwable)
{
terminationCause = (Throwable)t;
}
}
}
catch(Throwable t)
{
terminationCause = t;
}
if(terminationCause != null)
{
logger.error("Script failed", terminationCause);
}
I'll attach a patch
Reproducible: Always
Steps to Reproduce:
Assignee | ||
Comment 1•20 years ago
|
||
I've attached the patch that implements the feature. If nobody objects until
Monday, I'll commit it then.
Assignee | ||
Updated•20 years ago
|
Assignee: igor → szegedia
Assignee | ||
Comment 2•20 years ago
|
||
Committed the patch.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•