You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Kenji Nakamura <na...@gmail.com> on 2006/12/08 19:29:08 UTC
Double URLEncoding in RMIClassLoaderSpiImpl?
Hi,
I wrote a GBean that uses RMI via Spring remote. It works fine if I install
Geronimo-1.0 RELEASE in the path without whitespace, but got the following
error when I install it under the path with whitespace (e.g. c:\Documents
and Settings\...) on Windows.
Caused by: java.lang.ClassNotFoundException:
org.springframework.remoting.rmi.Rm
iInvocationWrapper_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
at sun.rmi.server.LoaderHandler.loadClass (LoaderHandler.java:430)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java
:631)
at org.apache.geronimo.system.rmi.RMIClassLoaderSpiImpl.loadClass(RMICla
ssLoaderSpiImpl.java:48)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:257)
at sun.rmi.server.MarshalInputStream.resolveClass(
MarshalInputStream.jav
a:200)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java
:151
3)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java
:1435)
at java.io.ObjectInputStream.readOrdinaryObject(
ObjectInputStream.java :1
626)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java
:1274)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:322)
... 9 more
I noticed org.apache.geronimo.system.rmi.RMIClassLoaderSpiImpl#normalizeURL()
espaces against already escaped URL.
First, normalizeCodebase() returns the encoded (e.g. whitespace -> %20) URL.
Then, normalizeURL() take the URL and encodes again (e.g. %20 -> %2520)
Here is the test program and the result.
------------------------------------- code
---------------------------------------
package org.apache.geronimo.system.rmi;
import java.net.*;
public class RMIClassLoaderSpiImplTest {
public static void main(String[] args) throws Exception {
String result =
RMIClassLoaderSpiImpl.normalizeCodebase("file:/c:/Documents
and Settings/Administrator/classes/ file:/c:/Foo bar");
System.out.println("Normalized codebase: " + ((result == null) ?
"null" : result));
RMIClassLoaderSpiImpl spi = new RMIClassLoaderSpiImpl();
URL normalized = spi.normalizeURL(new URL(result));
System.out.println("Normalized URL: " + normalized.toString());
}
}
------------------------------------- output
----------------------------------------
Normalized codebase:
file:/c:/Documents%20and%20Settings/Administrator/classes f
ile:/c:/Foo%20bar
Normalized URL:
file:/c:/Documents%2520and%2520Settings/Administrator/classes%20
file:/c:/Foo%2520bar
I haven't tested on Geronimo-1.1.1, but as far as I read the code, the logic
hasn't changed so this may be applicable.
Is this intended behavior, or a bug?
Thanks,
--
Kenji Nakamura