-
Bug
-
Resolution: Fixed
-
P4
-
1.4.0
-
hopper
-
x86
-
linux
-
Verified
Name: nt126004 Date: 01/03/2002
FULL PRODUCT VERSION :
java version "1.4.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta3-b84)
Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed mode)
Also observed in 1.3.1_01.
glibc-2.1.3-21
Linux jesse_laptop.netbeans.com 2.2.12-20 #1 Mon Sep 27
10:40:35 EDT 1999 i686 unknown
Red Hat Linux release 6.1 (Cartman)
A DESCRIPTION OF THE PROBLEM :
The error message from System.loadLibrary (via
ClassLoader.loadLibrary) is misleading: it is
ClassLoader.findLibrary that may fail to return an absolute
path, rather than ClassLoader.findClass. The following lines
in ClassLoader.loadLibrary should be changed:
if (!libfile.isAbsolute()) {
throw new UnsatisfiedLinkError(
"ClassLoader.findClass failed to return an absolute path: " + libfilename);
}
to:
if (!libfile.isAbsolute()) {
throw new UnsatisfiedLinkError(
"ClassLoader.findLibrary failed to return an absolute path: " + libfilename);
}
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the attached class.
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected results:
---%<---
Exception in thread "main" java.lang.UnsatisfiedLinkError:
ClassLoader.findLibrary failed to return an absolute path:
i/am/not/absolute.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1388)
at java.lang.Runtime.loadLibrary0(Runtime.java:775)
at java.lang.System.loadLibrary(System.java:835)
at ClassLoaderErrorMessageTest$Inner.run(ClassLoaderErrorMessageTest.java:25)
at ClassLoaderErrorMessageTest.main(ClassLoaderErrorMessageTest.java:21)
---%<---
Actual results:
---%<---
Exception in thread "main" java.lang.UnsatisfiedLinkError:
ClassLoader.findClass failed to return an absolute path:
i/am/not/absolute.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1388)
at java.lang.Runtime.loadLibrary0(Runtime.java:775)
at java.lang.System.loadLibrary(System.java:835)
at ClassLoaderErrorMessageTest$Inner.run(ClassLoaderErrorMessageTest.java:25)
at ClassLoaderErrorMessageTest.main(ClassLoaderErrorMessageTest.java:21)
---%<---
ERROR MESSAGES/STACK TRACES THAT OCCUR :
The error given in the results section is expected, only the
message is wrong.
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.net.URL;
import java.net.URLClassLoader;
public class ClassLoaderErrorMessageTest extends
URLClassLoader {
public ClassLoaderErrorMessageTest() {
super(new URL[]
{ClassLoaderErrorMessageTest.class.getProtectionDomain().getCodeSource().getLocation()});
}
protected Class loadClass(String name, boolean resolve)
throws ClassNotFoundException {
if
(name.equals("ClassLoaderErrorMessageTest$Inner")) {
Class c = findClass(name);
if (resolve) resolveClass(c);
return c;
} else {
return super.loadClass(name, resolve);
}
}
protected String findLibrary(String libname) {
return "i/am/not/absolute.so";
}
public static void main (String[] x) throws Exception {
ClassLoader l = new ClassLoaderErrorMessageTest();
((Runnable)Class.forName("ClassLoaderErrorMessageTest$Inner",
true, l).newInstance()).run();
}
public static class Inner implements Runnable {
public void run() {
System.loadLibrary("irrelevant");
}
}
}
---------- END SOURCE ----------
(Review ID: 137646)
======================================================================