Я создал простое приложение RMI, где у меня есть:java.io.NotSerializableException: Etudiant
public interface IAbsence extends Remote {
void inscrire(Etudiant e) throws RemoteException;
}
public class Absence extends UnicastRemoteObject implements IAbsence{
protected Absence() throws RemoteException {
super();
listEtudiants = new ArrayList<Etudiant>();
}
private static final long serialVersionUID = 1L;
private ArrayList<Etudiant> listEtudiants;
public void inscrire(Etudiant e) throws RemoteException {
listEtudiants.add(e);
}
}
и для сервера У меня есть следующие:
public class Serveur {
public static void main(String[] args) throws RemoteException {
Absence absence = new Absence();
try {
Registry registry = LocateRegistry.createRegistry(52356);
registry.bind("Absence_RMI", absence);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("server ON");
}
}
и для клиента у меня есть это :
public class ClientEtudiant {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost",52356);
IAbsence absence_rmi = (IAbsence)registry.lookup("Absence_RMI");
///.... some code
absence_rmi.inscrire(new Etudiant(nom, prenom, cne));
System.out.println("L'étudiant a été inscrit");
} catch (RemoteException | NotBoundException e1) {
e1.printStackTrace();
}
}
}
при запуске сервера он работает без проблем, но когда я запускаю клиент я получаю сообщение об ошибке на линии absence_rmi.inscrire...
, который гласит:
java.rmi.MarshalException: ошибки сортировки аргументов; вложенная исключение: java.io.NotSerializableException: Etudiant
Этот класс реализует интерфейс Serializable. – duffymo
RMI требует Serializable, чтобы превратить ваш объект Java в строку, чтобы отправить по проводам от клиента к серверу. – duffymo
Действительно. Сообщение об исключении вряд ли может быть более четким. – EJP