Hallo
ich probiere mich seit ein paar Tagen an RMI. Aber ich bekomme (am Client) die folgende Fehlermeldung, sobald ich auf den Server zugreife:
Exception occured: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.InvalidClassException: de.rmiserver.classes.MyRMIImpl_Stub; local class incompatible: stream classdesc serialVersionUID = 7414297561264089241, local class serialVersionUID = -3774921611068175672
BUILD SUCCESSFUL (total time: 0 seconds)
Der Server läuft in Eclipse und ist auch gestartet. Wenn ich dann in Eclipse den Client starte, funktioniert alles. Starte ich den Client aber z.B. von Netbeans aus (auch auf dem selben Rechner) oder direkt auf der Konsole, kommt die obige Fehlermeldung.
Hier mein Server-Code:
Das Interface:
Die Methoden am Server:
Die Stubs-Datei:
Hier der Client:
Am Client ist auch noch das Interface und die selbe STUBS-Datei, wie am Server, eingebunden.
Folgende security.policy ist noch am Server eingebunden:
grant {
permission java.net.SocketPermission "192.168.0.7:1099", "connect, resolve";
permission java.net.SocketPermission "192.168.0.7:1024-", "connect, resolve";
permission java.net.SocketPermission "192.168.0.7:1024-", "accept, resolve";
permission java.net.SocketPermission "localhost:1099", "connect, resolve";
permission java.net.SocketPermission "localhost:1024-", "connect, resolve";
permission java.net.SocketPermission "localhost:1024-", "accept, resolve";
permission java.security.AllPermission;
//permission java.net.SocketPermission "localhost:1099", "connect, resolve";
//permission java.net.SocketPermission "localhost:1024-", "connect, resolve";
//permission java.net.SocketPermission "localhost:1024-", "accept, resolve";
};
An was könnte das liegen? Bei Google und hier im Forum habe ich leider auch nichts dazu gefunden?
Vielen Dank
cu
Heidi
ich probiere mich seit ein paar Tagen an RMI. Aber ich bekomme (am Client) die folgende Fehlermeldung, sobald ich auf den Server zugreife:
Exception occured: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.InvalidClassException: de.rmiserver.classes.MyRMIImpl_Stub; local class incompatible: stream classdesc serialVersionUID = 7414297561264089241, local class serialVersionUID = -3774921611068175672
BUILD SUCCESSFUL (total time: 0 seconds)
Der Server läuft in Eclipse und ist auch gestartet. Wenn ich dann in Eclipse den Client starte, funktioniert alles. Starte ich den Client aber z.B. von Netbeans aus (auch auf dem selben Rechner) oder direkt auf der Konsole, kommt die obige Fehlermeldung.
Hier mein Server-Code:
Code:
public class MyRMIServer
{
/*** Hier wird der Server gestartet ***/
public static void main(String[] argv)
{
System.setSecurityManager(new RMISecurityManager());
try
{
MyRMIImpl implementation = new MyRMIImpl("MyRMIImplInstance");
}
catch (Exception e)
{
System.out.println("Exception occurred: " + e);
}
}
}
Das Interface:
Code:
public interface RMIInterface extends java.rmi.Remote
{
public java.util.Date getDate() throws RemoteException;
public java.util.Date getName() throws RemoteException;
public String getHelloMessage(String name) throws RemoteException;
}
Die Methoden am Server:
Code:
public class MyRMIImpl extends UnicastRemoteObject implements RMIInterface
{
public MyRMIImpl(String name) throws RemoteException
{
super();
try
{
Naming.rebind(name, this);
System.out.println("Server gestartet.");
}
catch(Exception e)
{
System.out.println("Exception occurred: " + e);
}
}
public java.util.Date getDate()
{
return new java.util.Date();
}
public java.util.Date getName()
{
return new java.util.Date();
}
public String getHelloMessage(String name)
{
return "Hallo " + name;
}
}
Die Stubs-Datei:
Code:
public class MyRMIImpl_Stub extends RemoteStub implements de.rmiserver.service.RMIInterface {
private static Object ops[] = null;
private static Class remoteClass = null;
static {
try {
remoteClass = Class.forName("de.rmiserver.classes.MyRMIImpl");
} catch (ClassNotFoundException ex) {
}
try {
ops = new Method[]{
Class.forName("de.rmiserver.service.RMIInterface").getMethod("getDate", new Class[]{}),
Class.forName("de.rmiserver.service.RMIInterface").getMethod("getHelloMessage", new Class[]{java.lang.String.class}),
Class.forName("de.rmiserver.service.RMIInterface").getMethod("getName", new Class[]{})
};
} catch (NoSuchMethodException ex) {
throw new RuntimeException("Stub is out of date");
} catch (ClassNotFoundException ex2) {
throw new RuntimeException("Unexpected ClassNotFoundException");
}
}
public MyRMIImpl_Stub(RemoteRef ref) throws java.rmi.RemoteException {
super(ref);
}
public MyRMIImpl_Stub() throws java.rmi.RemoteException {
super();
}
public java.util.Date getDate() throws java.rmi.RemoteException{
try {
return (java.util.Date)ref.invoke(
this,(Method)ops[0], new Object[]{}, -1017285815713287420L);
} catch (java.rmi.RemoteException ex) {
throw ex;
} catch (Exception ex) {
throw new UnexpectedException("Exception invoking method getDate",ex);
}
}
public java.lang.String getHelloMessage(java.lang.String p0) throws java.rmi.RemoteException{
try {
return (java.lang.String)ref.invoke(
this,(Method)ops[1], new Object[]{p0}, 6857304438814468432L);
} catch (java.rmi.RemoteException ex) {
throw ex;
} catch (Exception ex) {
throw new UnexpectedException("Exception invoking method getHelloMessage",ex);
}
}
public java.util.Date getName() throws java.rmi.RemoteException{
try {
return (java.util.Date)ref.invoke(
this,(Method)ops[2], new Object[]{}, -6849492820806235926L);
} catch (java.rmi.RemoteException ex) {
throw ex;
} catch (Exception ex) {
throw new UnexpectedException("Exception invoking method getName",ex);
}
}
}
Hier der Client:
Code:
public class RMIClient {
public static void main(String[] argv)
{
String serverName = "192.168.0.2";
try
{
//bind server object to object in client
RMIInterface myServerObject = (RMIInterface) Naming.lookup("rmi://"+serverName+"/MyRMIImplInstance");
//invoke method on server object
Date d = myServerObject.getDate();
System.out.println("Date on server is " + d);
}
catch(Exception e)
{
System.out.println("Exception occured: " + e);
System.exit(0);
}
System.out.println("RMI connection successful");
}
}
Am Client ist auch noch das Interface und die selbe STUBS-Datei, wie am Server, eingebunden.
Folgende security.policy ist noch am Server eingebunden:
grant {
permission java.net.SocketPermission "192.168.0.7:1099", "connect, resolve";
permission java.net.SocketPermission "192.168.0.7:1024-", "connect, resolve";
permission java.net.SocketPermission "192.168.0.7:1024-", "accept, resolve";
permission java.net.SocketPermission "localhost:1099", "connect, resolve";
permission java.net.SocketPermission "localhost:1024-", "connect, resolve";
permission java.net.SocketPermission "localhost:1024-", "accept, resolve";
permission java.security.AllPermission;
//permission java.net.SocketPermission "localhost:1099", "connect, resolve";
//permission java.net.SocketPermission "localhost:1024-", "connect, resolve";
//permission java.net.SocketPermission "localhost:1024-", "accept, resolve";
};
An was könnte das liegen? Bei Google und hier im Forum habe ich leider auch nichts dazu gefunden?
Vielen Dank
cu
Heidi