2015-12-17 2 views
-1

Я создал простое приложение 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

+0

Этот класс реализует интерфейс Serializable. – duffymo

+0

RMI требует Serializable, чтобы превратить ваш объект Java в строку, чтобы отправить по проводам от клиента к серверу. – duffymo

+3

Действительно. Сообщение об исключении вряд ли может быть более четким. – EJP

ответ

0

Во-первых, если вы пытаетесь отправить через пользовательский объект, вы должны реализовать Interface Serializable.

Очевидно, что от NotSerializableException Docs вы получаете это исключение, когда ваш класс должен реализовать этот интерфейс, а вы этого не сделали.

Во-вторых, MarshallException имеет четкое объяснение в Документах по возможным причинам. Убедитесь, что ваш RMI работает как минимум с примитивными типами.

+0

В этом нет «вероятно». Он этого не сделал. Точно так же и не «пытайтесь» об этом. – EJP

Смежные вопросы