Solved

Help with thrown exception when using RMI.

Posted on 2004-09-28
37
422 Views
Last Modified: 2008-02-01
I'm getting this RMI related exception thrown and I don't know why:

"C:\Archivos de programa\Java\jdk1.5.0\bin\javaw" -classpath (...)  officechat.core.Servidor
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
      java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
      java.lang.ClassNotFoundException: officechat.common.InterfazRemota
      at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
      at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
      at sun.rmi.transport.Transport$1.run(Transport.java:153)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
      at java.lang.Thread.run(Thread.java:595)
      at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
      at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
      at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343)
      at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
      at officechat.core.Servidor.inicializarRMI(Servidor.java:52)
      at officechat.core.Servidor.<init>(Servidor.java:58)
      at officechat.core.Servidor.main(Servidor.java:72)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
      java.lang.ClassNotFoundException: officechat.common.InterfazRemota
      at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
      at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
      at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
      at sun.rmi.transport.Transport$1.run(Transport.java:153)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
      at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: officechat.common.InterfazRemota
      at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:290)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:236)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:303)
      at java.lang.Class.forName0(Native Method)
      at java.lang.Class.forName(Class.java:242)
      at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707)
      at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651)
      at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588)
      at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:626)
      at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:293)
      at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
      at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1491)
      at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1454)
      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1690)
      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
      at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
      ... 9 more


It is thrown by this piece of code:

            MetodosRemotos mr = new MetodosRemotos();
            Registry registry = LocateRegistry.getRegistry();
            registry.bind("InterfazRemota", mr); // <-- it is thrown here

And this is the MetodosRemotos class, which has nothing special:

public class MetodosRemotos extends UnicastRemoteObject implements InterfazRemota
{
      public MetodosRemotos() throws RemoteException
      {

      }
      (methods of InterfazRemota here)
}

And finally this is the remote interface:

public interface InterfazRemota extends Remote
{
      public boolean logon( byte [] password) throws RemoteException;
      public Settings getSettings() throws RemoteException;
}

Tell me if you need more info. I'm using JDK 1.5 Beta2, and rmiregistry is running.
JBuilder tells me this warning, but I have no idea of what it means: "serializable class MetodosRemotos has no definition of serialVersionUID".
I'm not using rmic anymore, because in JDK 1.5 you are not supposed to.
Please help.
0
Comment
Question by:pulupul
  • 19
  • 15
37 Comments
 
LVL 14

Accepted Solution

by:
sudhakar_koundinya earned 500 total points
ID: 12171897
officechat.common.InterfazRemota is not existing in ur classpath.

How you are setting the classpath for this interface??
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12171925
Your API should be somethinglike this

package  officechat.common;
public interface InterfazRemota extends Remote
{
     public boolean logon( byte [] password) throws RemoteException;
     public Settings getSettings() throws RemoteException;
}
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12171961
because
Basically u are getting following exception
java.lang.ClassNotFoundException: officechat.common.InterfazRemota

So try as suggested above.

If you are already doing that. Check your classpath. That  class should be added to ur classpath
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
LVL 3

Author Comment

by:pulupul
ID: 12171971
It is, I have checked it and it does exist. The classpath is "C:\Documents and Settings\k\jbproject\Servidor\classes", and InterfazRemota.class exists in "C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common". I'm using JBuilder so all the classpath stuff is automated.
0
 
LVL 3

Author Comment

by:pulupul
ID: 12171987
That's the way I have it:

package officechat.common;

import java.rmi.*;

public interface InterfazRemota extends Remote
{
    public boolean logon( byte [] password) throws RemoteException;
    public Settings getSettings() throws RemoteException;
}
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172008
if ur classes are in Jar file

check whether classes from this folder( officechat/common) are added or not

if ur classes are in folder directly

Assuming u r doing at  c:\

set classpath=%classpath%; c:\officechat\common; c:\officechat\core;

Regards
Sudhakar
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172095
Hmmm,

did u try from dos, instead of executing from JBuilder
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172156
I've tried from DOS, and now I get a different exception:

Exception in thread "main" java.rmi.StubNotFoundException: Stub class not found: officechat.core.MetodosRemotos_Stub; nested exception is:
        java.lang.ClassNotFoundException: officechat.core.MetodosRemotos_Stub
        at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:98)
        at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:55)
        at sun.rmi.server.UnicastServerRef.setSkeleton(UnicastServerRef.java:179)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:142)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:129)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:275)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:178)
        at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:75)
        at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:61)
        at officechat.core.MetodosRemotos.<init>(MetodosRemotos.java:11)
        at officechat.core.Servidor.inicializarRMI(Servidor.java:50)
        at officechat.core.Servidor.<init>(Servidor.java:58)
        at officechat.core.Servidor.main(Servidor.java:72)
Caused by: java.lang.ClassNotFoundException: officechat.core.MetodosRemotos_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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
        at sun.rmi.server.RemoteProxy.loadClassFromClass(RemoteProxy.java:191)
        at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:93)
        ... 12 more


Isn't JDK 1.5 supposed to automatically generate stubs?
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172198
Generated stubs and skeletons also should be in classpath

this class officechat.core.MetodosRemotos_Stub  should be in ur classpath
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172213
>>Isn't JDK 1.5 supposed to automatically generate stubs?

Try generating them using RMIC
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172267
I know, the thing is that maybe I need to run rmic to generate that class (which at this time does not exist), although one of the improvements in Java 1.5 is that running it is not needed.
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172327
It should be there
by looking at http://www.cs.umb.edu/~wrc/java/jdk1.5/bin/
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172395
I've generated the stub (rmic -d . officechat.core.MetodosRemotos). Now MetodosRemotos_Stub.class is in officechat/core.

"C:\Archivos de programa\Java\jdk1.5.0\bin\java" -classpath "C:\Documents and Settings\k\jbproject\Servidor\classes;C:\Documents and Settings\k\jbproject\Servidor\classes\common;C:\Documents and Settings\k\jbproject\Servidor\classes\core"  officechat.core.Servidor

Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.lang.ClassNotFoundException: officechat.core.MetodosRemotos_Stub
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
        at java.lang.Thread.run(Thread.java:595)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343)
        at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
        at officechat.core.Servidor.inicializarRMI(Servidor.java:52)
        at officechat.core.Servidor.<init>(Servidor.java:58)
        at officechat.core.Servidor.main(Servidor.java:72)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.lang.ClassNotFoundException: officechat.core.MetodosRemotos_Stub
        at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: officechat.core.MetodosRemotos_Stub
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:290)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:236)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:303)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:242)
        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:618)
        at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:246)
        at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1535)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1690)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
        ... 9 more
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172445
it should be something like this
set classpath=%classpath%;C:\Documents and Settings\k\jbproject\Servidor\classes\office\common;C:\Documents and Settings\k\jbproject\Servidor\classes\office\core;

0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172473
"C:\Archivos de programa\Java\jdk1.5.0\bin\java" -classpath "C:\Documents and Settings\k\jbproject\Servidor\classes;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\core" officechat.core.Servidor


                     or

set classpath=%classpath%;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\commob;

java officechat.core.Servidor
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172495
It's the same isn't it?
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172556
no u are missing officechat in ur classpath
C:\Documents and Settings\k\jbproject\Servidor\classes\common

should be

C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172643
Ah ok, I have put it like that :
java -classpath "C:\Documents and Settings\k\jbproject\Servidor\classes;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common;C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\core"  officechat.core.Servidor

But still get the last exception. As far a I know, it is enough to put the root path ( in this case C:\Documents and Settings\k\jbproject\Servidor\classes) in the classpath, all subfolders are not needed to be included in the cp.
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172696
did u try like this??


set classpath=%classpath%;"C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common";"C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\core";

java officechat.core.Servidor


And also check once again, if the stub classes are there in "C:\Documents and Settings\k\jbproject\Servidor\classes\officechat\common"
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172716
>>officechat.core.MetodosRemotos_Stub

I mean  ur stub classes should be in classes\officechat\core
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172780
As I said, it is there.
0
 
LVL 3

Author Comment

by:pulupul
ID: 12172786
I have tried with set classpath=... with the same result.
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12172951
try running RMIRegistry from command prompt and let me know
0
 
LVL 3

Author Comment

by:pulupul
ID: 12173038
I'm already running it, if I stop it the exception I get is:
Exception in thread "main" java.rmi.ConnectException: Connection refused to host: 192.168.0.3
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12173046
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12173110
0
 
LVL 92

Expert Comment

by:objects
ID: 12174977
It seems like its the remote vm that cannot find the class, not the local one.
May sure the classes are available to both vm's.
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12176790
Do this as objects suggested

Place all compiled classes , stubs and skeletons at both server side and client side and execute the application

Regards
0
 
LVL 3

Author Comment

by:pulupul
ID: 12180725
I found out that it works if from the console I start rmiregistry from the classpath root (C:\Documents and Settings\k\jbproject\Servidor\classes), but not if I launch it from a different location.
0
 
LVL 3

Author Comment

by:pulupul
ID: 12180805
Now I'm always launching rmiregistry with the parameters: -J-classpath -J"($Classpath)".  Where ($Classpath) is replaced by JBuilder with the project classpath. And it works great!.
Thank you everybody for your time.
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12180811
yes, that's true. I thought that you did like that only. And I was surprised when it was not working
0
 
LVL 3

Author Comment

by:pulupul
ID: 12180854
rmiregistry doesn't seem to look at classpath environment variable, it is only possible to pass the classpath to it with the -J options.
0
 
LVL 3

Author Comment

by:pulupul
ID: 12180890
I was launching it from random locations, from wherever directory I was at that time :)
0
 
LVL 3

Author Comment

by:pulupul
ID: 12181187
I'm requesting a refund, anyone has something to say?
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 12182375
why,

I have  tried to help you in all possible ways. I also asked you to execute the rmiregistry from console too. Only thing you did not mention last night is how you are executing the rmiregistry.

I assumed that you executed from the classpath itself, which you did not do last night.

Regards
Sudhakar
0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Configure a Bean in an XML file 4 42
iterator/ListIterator approach 17 39
Facing this issue for maven proxy setting 2 20
Glassfish admin console not working 1 34
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question