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
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 2020-05-27.09:10:28 by doublep.

File name Uploaded Description Edit Remove doublep, 2010-12-08.13:05:03 short example demonstrating the problem doublep, 2010-12-09.14:28:18 propagating exception thrown in Java code: here cause is correctly set jeff.allen, 2018-03-17.20:03:33 Demonstration that getCause returns null
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, 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\
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(
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(
        at java.lang.reflect.Constructor.newInstance(
        at org.python.core.PyReflectedConstructor.constructProxy(
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.
msg13068 (view) Author: (doublep) Date: 2020-05-27.09:10:28
Bump. Reproducible with 2.7.2.
Date User Action Args
2020-05-27 09:10:28doublepsetmessages: + msg13068
2018-03-17 20:03:33jeff.allensetfiles: +
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: +
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