J'ai écrit un code RMI simple pour apprendre comment cela fonctionne. Alors que tout fonctionne bien compiler le code java, le rmic et exécuter rmiregistry et exécuter le code client de la console fonctionne bien, mais quand je choisis de "courir en tant qu'application Java" sur le code client d'Eclipse, il lève MarshallException.Le code client RMI exécuté sur Eclipse déclenche MarshalException tandis que l'exécution à partir de la console fonctionne correctement
Ma conjecture est un peu Eclipse compile avec la version différente selon:
J'ai vérifié le réglage du compilateur Eclipse et il dit 1.6
. (clic droit sur l'Explorateur de projet et choisissez « facettes du projet », vous verrez quelle version l'Eclipse compile les fichiers java)
Mon Java est 1.6
donc indépendamment de la compilation du code de la console et Eclipse devrait aboutir à 1.6
la version fichiers de classe conformes. (javap -verbose | grep -i version
apporte la version 50
qui est équivalent à 1.6
)
Quelqu'un a-t-il rencontré le même problème et a-t-il des explications à ce sujet?
Probablement pas nécessaire mais le code de travail est ci-dessous.
code client
package com.masatosan.remote.client;
import java.rmi.Naming;
import java.rmi.RemoteException;
import com.masatosan.remote.server.MyRemoteServer;
public class MyRemoteClient {
public static void main(String[] args) {
new MyRemoteClient().go();
}
public void go() {
try {
MyRemoteServer service = (MyRemoteServer) Naming.lookup("rmi://127.0.0.1/MyFirstRemoteService");
String s = service.sayHello();
System.out.println(s);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
Code Serveur
package com.masatosan.remote.server;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteServerImp extends UnicastRemoteObject implements MyRemoteServer {
public static void main(String[] args) {
try {
MyRemoteServer service = new MyRemoteServerImp();
Naming.rebind("MyFirstRemoteService", service);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public MyRemoteServerImp() throws RemoteException {}
@Override
public String sayHello() throws RemoteException {
return "Hi I'm server!";
}
}//
interface code serveur pour stub
package com.masatosan.remote.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemoteServer extends Remote {
public String sayHello() throws RemoteException;
}