Issue2666

classification
Title: Imports in python from java do not work if there is a package the same name as class
Type: Severity: normal
Components: Core Versions: Jython 2.7
Milestone:
process
Status: closed Resolution: invalid
Dependencies: Superseder:
Assigned To: Nosy List: EhWhoAmI, adamburke, jeff.allen
Priority: Keywords:

Created on 2018-04-10.22:21:55 by EhWhoAmI, last changed 2019-05-02.06:13:16 by jeff.allen.

Messages
msg11887 (view) Author: (EhWhoAmI) Date: 2018-04-10.22:21:53
If I import a java class into jython, then import a class within a package that is the same name of the class, it comes up with a java.lang.NoClassDefFoundError. Only happens in a situation like that. If I don't import that, it does not fail.

Here's an example
Output:

jythonbug.test.testing()
Exception in thread "main" Traceback (most recent call last):
  File "<string>", line 1, in <module>
java.lang.NoClassDefFoundError: jythonbug/test (wrong name: jythonbug/Test)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:340)
	at org.python.core.Py.loadAndInitClass(Py.java:991)
	at org.python.core.Py.findClassInternal(Py.java:926)
	at org.python.core.Py.findClassEx(Py.java:977)
	at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:133)
	at org.python.core.packagecache.PackageManager.findClass(PackageManager.java:33)
	at org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:122)
	at org.python.core.PyJavaPackage.__findattr_ex__(PyJavaPackage.java:134)
	at org.python.core.PyObject.__findattr__(PyObject.java:946)
	at org.python.core.PyObject.impAttr(PyObject.java:1084)
	at org.python.core.imp.import_next(imp.java:842)
	at org.python.core.imp.import_logic(imp.java:904)
	at org.python.core.imp.import_module_level(imp.java:978)
	at org.python.core.imp.importName(imp.java:1062)
	at org.python.core.ImportFunction.__call__(__builtin__.java:1280)
	at org.python.core.PyObject.__call__(PyObject.java:431)
	at org.python.core.__builtin__.__import__(__builtin__.java:1232)
	at org.python.core.imp.importOne(imp.java:1081)
	at org.python.pycode._pyx2.f$0(<string>:1)
	at org.python.pycode._pyx2.call_function(<string>)
	at org.python.core.PyTableCode.call(PyTableCode.java:167)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1386)
	at org.python.core.Py.exec(Py.java:1430)
	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:267)
	at jythonbug.Jythonbug.main(Jythonbug.java:17)

java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: jythonbug/test (wrong name: jythonbug/Test)

However, when you comment lines 13 and 14 in JythonBug.java, the import passes.
msg12392 (view) Author: Adam Burke (adamburke) Date: 2019-03-23.23:44:49
Hi, this may well be an issue, but unfortunately the example code didn't attach.
msg12482 (view) Author: Jeff Allen (jeff.allen) Date: 2019-05-02.06:13:16
We made a change to the way import picks its way amongst Java and Python packages, in aid of #2654, that may be relevant: https://hg.python.org/jython/rev/22c19e5a77ad, it's hard to say without the example. The associated test explores the limits of what is possible at present.

There appear to be some behaviours engrained in import that don't make best sense. In the end, a given name will have to designate just one thing.
History
Date User Action Args
2019-05-02 06:13:16jeff.allensetstatus: open -> closed
resolution: invalid
messages: + msg12482
nosy: + jeff.allen
2019-03-23 23:44:50adamburkesetnosy: + adamburke
messages: + msg12392
2018-04-10 22:21:55EhWhoAmIcreate