-
Bug
-
Resolution: Fixed
-
P2
-
1.4.2_13
As part of the fix for 4845728 that went into 1.4.2_13, 4979820 was backported from the 1.5 code base. 4979820 changed the way excluded and reserved characters (see RFC 2396) are handled by URLClassLoader and AppletClassLoader.
This is an incompatible change for an update release, for example, a resource that previously had a ' ' (space) in its name or location needed that character to be percent encoded, %20. With this change this is nolonger the case, the space will be encoded by the implementation, but anyone using 1.4.2_xx pre _13 will know this and there code will already have the percent coding where necessary. Now with this change the characters will be doubly encoded %20 -> %2520.
Example program that demonstractes the problem.
Note: you need to create a resource file and put it on a http server, then update the following code to point to the appropriate location.
---- begin code ----
public class TestURLClassLoader
{
// replace with own http server url
static String pwd = "http://oldsunweb.ireland/~ch122065/j2se/JarRegression/";
// percent encode any chars that require to be encoded, e.g. space, percent
static String resStr = "space/test-dir/a%20b%20c/";
static String resource = "resource.txt";
public static void main(String[] args) {
try {
URL[] urls = new URL[] { new URL(pwd) };
URLClassLoader ucl = new URLClassLoader(urls);
String resourceStr = resStr + resource;
URL resURL = ucl.getResource(resourceStr);
if (resURL != null) {
System.out.println("Resource URL = " + resURL);
byte[] ba = new byte[1024];
InputStream is = ucl.getResourceAsStream(resourceStr);
is.read(ba);
System.out.println(new String(ba));
}
else
System.out.println("Could not find resource");
} catch (IOException e) {
e.printStackTrace();
}
}
}
---- end code ----
Results:
Works with 1.4.2_12 and fails with 1.4.2_13.
Testing results:
irejano : ./binaries/jdk1.4.2_12/bin/javac TestURLClassLoader.java
irejano : ./binaries/jdk1.4.2_12/bin/java TestURLClassLoader
Resource URL = http://oldsunweb.ireland/~ch122065/j2se/JarRegression/
percent/test-dir/a%20b%20c/resource.txt
This is from the space resource file!!!
irejano : ./binaries/jdk1.4.2_13/bin/java TestURLClassLoader
Could not find resource
This is an incompatible change for an update release, for example, a resource that previously had a ' ' (space) in its name or location needed that character to be percent encoded, %20. With this change this is nolonger the case, the space will be encoded by the implementation, but anyone using 1.4.2_xx pre _13 will know this and there code will already have the percent coding where necessary. Now with this change the characters will be doubly encoded %20 -> %2520.
Example program that demonstractes the problem.
Note: you need to create a resource file and put it on a http server, then update the following code to point to the appropriate location.
---- begin code ----
public class TestURLClassLoader
{
// replace with own http server url
static String pwd = "http://oldsunweb.ireland/~ch122065/j2se/JarRegression/";
// percent encode any chars that require to be encoded, e.g. space, percent
static String resStr = "space/test-dir/a%20b%20c/";
static String resource = "resource.txt";
public static void main(String[] args) {
try {
URL[] urls = new URL[] { new URL(pwd) };
URLClassLoader ucl = new URLClassLoader(urls);
String resourceStr = resStr + resource;
URL resURL = ucl.getResource(resourceStr);
if (resURL != null) {
System.out.println("Resource URL = " + resURL);
byte[] ba = new byte[1024];
InputStream is = ucl.getResourceAsStream(resourceStr);
is.read(ba);
System.out.println(new String(ba));
}
else
System.out.println("Could not find resource");
} catch (IOException e) {
e.printStackTrace();
}
}
}
---- end code ----
Results:
Works with 1.4.2_12 and fails with 1.4.2_13.
Testing results:
irejano : ./binaries/jdk1.4.2_12/bin/javac TestURLClassLoader.java
irejano : ./binaries/jdk1.4.2_12/bin/java TestURLClassLoader
Resource URL = http://oldsunweb.ireland/~ch122065/j2se/JarRegression/
percent/test-dir/a%20b%20c/resource.txt
This is from the space resource file!!!
irejano : ./binaries/jdk1.4.2_13/bin/java TestURLClassLoader
Could not find resource
- relates to
-
JDK-4845728 Turning on Jar Caching causes a DownloadException and the applet jar fails load
- Resolved
-
JDK-4979820 cannot load class names containing some JSR 202 characters
- Resolved