Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
5.0M13
-
None
-
None
-
ia32/linux
Description
It seems -Djava.rmi.server.codebase property not to work. Below are Si.java, S.java. and C.java to reproduce problem.
---------Si.java-------
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Si extends Remote {
public String s_print() throws RemoteException;
}
---------S.java--------
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class S implements Si {
public String s_print() throws RemoteException
public static void main(String[] args) throws Exception
{ String s1 = "S_Print"; S s = new S(); Si stub = (Si) UnicastRemoteObject.exportObject(s, 0); Registry registry = LocateRegistry.getRegistry(); registry.rebind(s1, stub); }}
---------C.java--------
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class C {
public static void main(String[] args) throws Exception
}
1. Create stub.jar which contains Si.class and put it to /tmp/.
2. Run following commands.
(terminal 1)$ drlvm/deploy/jdk/jre/bin/java org.apache.harmony.rmi.registry.RegistryImpl
(terminal 2)$ drlvm/deploy/jdk/jre/bin/java -Djava.rmi.server.codebase=file:/tmp/stub.jar S
(terminal 3)$ drlvm/deploy/jdk/jre/bin/java C
From terminal 1, following exception will be thrown.
Uncaught exception in Call from [204.247.208.90:43022]:
java.lang.ClassCastException
at
org.apache.harmony.rmi.transport.RMIObjectInputStream.resolveClass(RMIObjectInputStream.java:114)
at
java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1843)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:799)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:806)
at
java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2061)
at
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:902)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2273)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2230)
at
org.apache.harmony.rmi.transport.RMIObjectInputStream.readRMIObject(RMIObjectInputStream.java:196)
at
org.apache.harmony.rmi.remoteref.UnicastServerRef.readParams(UnicastServerRef.java:544)
at
org.apache.harmony.rmi.remoteref.UnicastServerRef.processCall(UnicastServerRef.java:427)
at
org.apache.harmony.rmi.server.ServerConnection$1.run(ServerConnection.java:171)
at
java.security.AccessController.doPrivilegedImpl(AccessController.java:112)
at
java.security.AccessController.doPrivileged(AccessController.java:86)
at
org.apache.harmony.rmi.server.ServerConnection.run(ServerConnection.java:174)
at java.lang.Thread.run(Thread.java:669)
From terminal 2, following exception will be thrown.
Uncaught exception in main:
java.rmi.UnmarshalException: Unable to read call return header: ; nested
exception is:
java.io.EOFException
at
org.apache.harmony.rmi.client.ClientRemoteCall.executeCall(ClientRemoteCall.java:179)
at
org.apache.harmony.rmi.remoteref.UnicastRef.invoke(UnicastRef.java:260)
at
org.apache.harmony.rmi.remoteref.UnicastRef.invoke(UnicastRef.java:150)
at
org.apache.harmony.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:181)
at S.main(S.java:17)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:129)
at
org.apache.harmony.rmi.client.ClientRemoteCall.executeCall(ClientRemoteCall.java:165)
at
org.apache.harmony.rmi.remoteref.UnicastRef.invoke(UnicastRef.java:260)
... 3 more
Running the same test with IBM or SUN jdk 1.5 prints expected output as below.
(terminal 1)$ rmiregistry
(terminal 2)$ java -Djava.rmi.server.codebase=file:/tmp/stub.jar S
(terminal 3)$ java C
string_s_print