-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
26 lines (24 loc) · 1.06 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class JavaException(Exception):
'''Represents a Java exception thrown inside the JVM'''
def __init__(self, throwable):
'''Initialize by calling exception_occurred'''
env = get_env()
env.exception_describe()
self.throwable = throwable
try:
if self.throwable is None:
raise ValueError("Tried to create a JavaException but there was no current exception")
#
# The following has to be done by hand because the exception can't be
# cleared at this point
#
klass = env.get_object_class(self.throwable)
method_id = env.get_method_id(klass, 'getMessage',
'()Ljava/lang/String;')
if method_id is not None:
message = env.call_method(self.throwable, method_id)
if message is not None:
message = env.get_string_utf(message)
super(JavaException, self).__init__(message)
finally:
env.exception_clear()