Issue1684

classification
Title: PyException wrapper for a Java exception raised directly from Python code doesn't have cause set
Type: Severity: normal
Components: Core Versions: Jython 2.7, Jython 2.5
Milestone:
process
Status: open Resolution: accepted
Dependencies: Superseder:
Assigned To: Nosy List: doublep, fwierzbicki, jeff.allen
Priority: normal Keywords:

Created on 2010-12-08.13:05:04 by doublep, last changed 2018-03-17.20:03:33 by jeff.allen.

Files
File name Uploaded Description Edit Remove
test.java doublep, 2010-12-08.13:05:03 short example demonstrating the problem
test2.java doublep, 2010-12-09.14:28:18 propagating exception thrown in Java code: here cause is correctly set
Test.java jeff.allen, 2018-03-17.20:03:33 Demonstration that getCause returns null
Messages
msg6274 (view) Author: (doublep) Date: 2010-12-08.13:05:03
The attached example demonstrates the problem.  I have code that walks exception chain to "the real cause" to find out whether that cause should be reported as a user-level error (real_cause instanceof UserLevelException) or internal application bug.  With exceptions raised from Jython code I cannot do this at the moment.
msg6275 (view) Author: (doublep) Date: 2010-12-09.14:28:18
Actually, when exception is thrown by Java code and is wrapped by PyException for propagation, cause is set correctly.  It seems the problem is there only when a Java exception is raised _directly_ from Python code, as in original example.
msg11830 (view) Author: Jeff Allen (jeff.allen) Date: 2018-03-17.20:03:33
I explored this on 2.7.2a1 with a small adaptation of the provided test.java, attached, and the embedded cause is still null. Reproduce like this:

PS bugs> javac -cp ".;C:\Jython\2.7.2a1\jython.jar;C:\Jython\2.7.2a1\javalib\*" .\iss1684\Test.java
PS bugs> java -cp ".;C:\Jython\2.7.2a1\jython.jar;C:\Jython\2.7.2a1\javalib\*" iss1684.Test
Traceback (most recent call last):
  File "<string>", line 2, in <module>
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.python.core.PyReflectedConstructor.constructProxy(PyReflectedConstructor.java:211)
java.lang.RuntimeException: java.lang.RuntimeException: Thrown from Python code

Cause: null

So we get the cause in the stack dump, but it isn't the cause in the Java sense, which seems a reasonable expectation.
History
Date User Action Args
2018-03-17 20:03:33jeff.allensetfiles: + Test.java
resolution: accepted
messages: + msg11830
nosy: + jeff.allen
versions: + Jython 2.7
2013-02-26 17:39:39fwierzbickisetpriority: normal
nosy: + fwierzbicki
2013-02-19 23:28:05fwierzbickisetversions: + Jython 2.5, - 2.5.1
2010-12-09 14:28:18doublepsetfiles: + test2.java
messages: + msg6275
title: PyException raised from a Java exception doesn't have cause set -> PyException wrapper for a Java exception raised directly from Python code doesn't have cause set
2010-12-08 13:05:04doublepcreate