# RMI "HalloServer" UnmarshalException



## boxi (6. Sep 2006)

Ich hab da mal das übliche Hello World in RMI geschrieben. Nur dass ich da einLaufzeitfehler bekomme. in der Linie reg.rebind("hallo", stub);


```
package HalloRMI;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;

public class HalloServer implements Hallo {
	
	private static final long serialVersionUID = 1L;

	private String serverHalloString = "";
	
	public HalloServer(){
		serverHalloString = "Hello World!";
	}
	
	public HalloServer(String srvStr){
		serverHalloString = srvStr;
	}
	
	public String getServerHallo() throws RemoteException {
		return serverHalloString;
	}

	public void setClientHallo(String cHallo) throws RemoteException {
		System.out.println("Client says: " + cHallo);
	}
	
	public static void main(String[] args){
		try{
			HalloServer srv = new HalloServer("Welcome to Neptun");
			Hallo stub = (Hallo) UnicastRemoteObject.exportObject(srv, 0);
			Registry reg = LocateRegistry.getRegistry();
			reg.rebind("hallo", stub);
			System.err.println("Halloserver online and bounded");
		}
		catch(Exception e){
			System.err.println("ServerErr: ");
			e.printStackTrace();
		}
	}

}
```

bekomme ich volgende Fehlermeldung:

ServerErr: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassCastException: java.ibjectStreamClass cannot be cast to java.lang.String
	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.rebind(Unknown Source)
	at HalloRMI.HalloServer.main(HalloServer.java:31)
Caused by: java.lang.ClassCastException: java.ibjectStreamClass cannot be cast to java.lang.String

Ich verstehe diese Meldung nicht ganz... wo liegt das problem?[/code]


----------



## Pulvertoastman (11. Sep 2006)

hmm...muss die Server Klasse nicht UNicastRemoteObject erweitern?

zudem würde ich nicht das Registry Onjekt zum rebind  nehmen sondern java.rmi.Naming.rebin()

hth


----------



## Gast (23. Nov 2006)

Welche Implementierung der rmiregistry verwendest Du? Ich hatte gerade das selbe Problem mit der GNU Version auf meinem Debian System
> rmiregistry --version
rmiregistry (GNU libgcj) 4.1.2 20061020 (prerelease) (Debian 4.1.1-17)

Wenn ich die Implementierung in Sun's JDK (version 5.0.8) verwende, dann tritt der Fehler nicht auf.

Alex


----------

