-
Notifications
You must be signed in to change notification settings - Fork 326
Open
Description
I have a slight problem: I'm trying to instantiate a class that is have a java.lang.Class reference to. This was provided by a ClassLoader accessing a classpath different from "boot time". Traceback attached below.
However, JNI's FindClass() only provides jclass for classes in the boot classpath, i.e. using ClassLoader.getSystemClassLoader()
.
I dont think we need FindClass(), as we already have access to the Class object. We just need to instantiate it from that Class object.
- A possible workaround is adding an optional parameter to
autoclass()
providing the Class object directly, i.e.
other_class = bla._class.getClassLoader().loadClass("my.other.Class")
other_classInstance = autoclass(None, cls=other_class)()
-
Or being able to pass a ClassLoader to autoclass? Dont think this would work in the generic case.
-
Or detecting when a Class object is being instantiated into Python, add that to
jclass_register
Traceback.
Traceback (most recent call last):
File "tests/test_rewrite.py", line 97, in test_rm3
qe = pt.rewrite.RM3(indexref)
File "/Users/craigm/git/Pyterrier/pyterrier/rewrite.py", line 139, in __init__
rm = pt.ApplicationSetup.getClass("org.terrier.querying.RM3").newInstance()
File "jnius/jnius_export_class.pxi", line 857, in jnius.JavaMethod.__call__
File "jnius/jnius_export_class.pxi", line 939, in jnius.JavaMethod.call_method
File "jnius/jnius_conversion.pxi", line 212, in jnius.convert_jobject_to_python
File "/Users/craigm/anaconda3/envs/pyterrier/lib/python3.6/site-packages/jnius/reflect.py", line 229, in autoclass
c = find_javaclass(clsname)
File "jnius/jnius_export_func.pxi", line 26, in jnius.find_javaclass
File "jnius/jnius_jvm_dlopen.pxi", line 91, in jnius.create_jnienv
jnius.JavaException: JVM exception occurred: org/terrier/querying/RM3 java.lang.NoClassDefFoundError
Metadata
Metadata
Assignees
Labels
No labels