JDK-5012884 : (cl) classloading failed due to "NoClassDefFoundError: IllegalName:"
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang:class_loading
  • Affected Version: 5.0
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux
  • CPU: x86
  • Submitted: 2004-03-12
  • Updated: 2012-10-08
  • Resolved: 2004-03-15
Related Reports
Duplicate :  
Description

Name: rmT116609			Date: 03/12/2004


FULL PRODUCT VERSION :
java version "1.5.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta-b32c)
Java HotSpot(TM) Client VM (build 1.5.0-beta-b32c, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Gentoo Linux - Kernel 2.6.3

EXTRA RELEVANT SYSTEM CONFIGURATION :
not important

A DESCRIPTION OF THE PROBLEM :
I cannot use the JInput linux plugins with JDK1.5.0 (beta) due to the following exception:
Examining file : net/java/games/input/LinuxEnvironmentPlugin.class
Found candidate class: net/java/games/input/LinuxEnvironmentPlugin.class
Exception in thread "main" java.lang.NoClassDefFoundError: IllegalName: net/java/games/input/LinuxEnvironmentPlugin
   at java.lang.ClassLoader.preDefineClass(ClassLoader.java:459)
 
With 1.4.2.03 and same classpath, file layout whatever it works without problems.

I reported this problem here http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi?board=jinput;action=display;num=1064924636


STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Install JInput & JUtils (from javagaming.org)
2. Install linux controller plugin for jinput (~/controller/* or .../lib/controller/*)
3. Invoke ControllerEnvironment.getDefaultEnvironment().getControllers();


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Class LinuxEnvironmentPlugin should be loaded successfully.
ACTUAL -
 java.lang.NoClassDefFoundError is thrown.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NoClassDefFoundError: IllegalName: net/java/games/input/LinuxEnvironmentPlugin
        at java.lang.ClassLoader.preDefineClass(ClassLoader.java:459)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:598)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access+100(URLClassLoader.java:56)
        at java.net.URLClassLoader+1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at net.java.games.util.plugins.Plugins.processJar(Plugins.java:115)
        at net.java.games.util.plugins.Plugins.scanPlugins(Plugins.java:88)
        at net.java.games.util.plugins.Plugins.<init>(Plugins.java:76)
        at net.java.games.input.DefaultControllerEnvironment.scanControllersAt(DefaultControllerEnvironment.java:199)
        at net.java.games.input.DefaultControllerEnvironment.scanControllers(DefaultControllerEnvironment.java:189)
        at net.java.games.input.DefaultControllerEnvironment.access$000(DefaultControllerEnvironment.java:58)
        at net.java.games.input.DefaultControllerEnvironment$1.run(DefaultControllerEnvironment.java:109)
        at java.security.AccessController.doPrivileged(Native Method)
        at net.java.games.input.DefaultControllerEnvironment.getControllers(DefaultControllerEnvironment.java:107)
        at robs.jinput.JInputTester.<init>(JInputTester.java:25)
        at robs.jinput.JInputTester.main(JInputTester.java:52)

Last two lines are user code:  JInputTester.java:25 is
controllers = ControllerEnvironment.getDefaultEnvironment().getControllers();

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
// JInput & JUtils should have been installed => accessible via classpath
// Linux-Plugin files should have been copied to ~/controller or .../jre/lib/controller

import net.java.games.input.*;

public class JInputBug{
public static void main(String... args){
            controllers = ControllerEnvironment.getDefaultEnvironment().getControllers();

             for(Controller c : controllers){
                 System.out.printf("controller found: %s\n", c.getName());
              }
}
}

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
No workaround available.

Release Regression From : 1.4.2_03
The above release value was the last known release where this 
bug was known to work. Since then there has been a regression.

(Incident Review ID: 242438) 
======================================================================

Comments
EVALUATION Duplicate of 4986512. The provided class name does not conform to the specification for ClassLoader.defineClass(). Based on the provided stacktrace, it appears that the code which calls ClassLoader.loadClass needs to be modified. -- iag@sfbay 2004-03-15
15-03-2004