IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

java.rmi.UnmarshalException: error unmarshalling return


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 11
    Points : 6
    Points
    6
    Par défaut java.rmi.UnmarshalException: error unmarshalling return
    Bonsoir a tous!
    j'ai deux projets un projet JavaEE utilisant le framework Spring boot et un autre JavaFx

    cote serveur tous fonctionnes j'ai fait une teste avec RestController et les methodes repondent correctement. J'exporte un service avec RmiServiceExporter. dans mon projet client je recupere le service avec Naming.lookup()

    Lorsque j'appel une methode d'insertion de donnee sa fonctionne bien les donnees sont enregistres en base de donnee mais lorsque je recupere ces donnees j'obtient cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.io.WriteAbortedException: writing aborted;java.io.NotSerializableException: java.util.Optional 
    at sun.rmi.server.UnicastRef.invoke(Unknown Source) 
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source) 
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source) 
    at com.sun.proxy.$Proxy6.getUser(Unknown Source) ...
    voici mon interface rmi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface UserRemote extends Remote{
        public User saveUser(User user) throws RemoteException;
        public boolean connexion(String username, String password) throws RemoteException;
        public long countUsers(Role role) throws RemoteException;
        public boolean userExist(String username) throws RemoteException;
        public Optional<User> getUser(Long id) throws RemoteException;
    }
    la classe user service:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    @Service
    public class UserService {
     
        @Autowired
        private UserRepository userRepo;
     
        public User saveUser(User user){
            return this.userRepo.save(user);
        }
     
        public void deleteUser(Long id){
            this.userRepo.deleteById(id);
        }
        public void deleteUser(User user){
            this.userRepo.delete(user);
        }
     
        public User updateUser(User user){
            return this.userRepo.save(user);
        }
     
        public User getUser(String username,String password){
            return this.userRepo.getUserByUsernameAndPassword(username,password);
        }
     
        public Optional<User> getUser(Long id){
            return userRepo.findById(id);
        }
     
        public long countUser(Role role){
            return this.userRepo.count();
        }
     
        public boolean exist(String username){
            return (this.userRepo.getUserByUsername(username) != null);
        }
    }
    la classe d'export des services:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Configuration
    public class ServiceRMIExporter {
     
        private int port = 5400;
     
        public SimpleJaxWsServiceExporter jaxWsServiceExporter(){
            return new SimpleJaxWsServiceExporter();
        }
     
        @Bean
        @Autowired
        public RmiServiceExporter getUserRemoteService(UserRemote userService){
            RmiServiceExporter exporter = new RmiServiceExporter();
            exporter.setService(userService);
            exporter.setServiceName("userservice");
            exporter.setRegistryPort(port);
            return exporter;
        }
    }
    en fin voici le code pour l'appel du service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public class TestRmi {
     
    	public static void main(String[] args) {
    		try {
    			UserRemote stub = (UserRemote) Naming.lookup("rmi://localhost:5400/userservice");
     
    			Optional<User> usr = stub.getUser(1L);
     
    			System.out.println(usr.toString());
    		} catch (MalformedURLException | NotBoundException | RemoteException e) {
    			e.printStackTrace();
    		}		
     
    	}
     
    }
    Une aide sera la bienvenue!!! Merci

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 740
    Points
    3 740
    Billets dans le blog
    12
    Par défaut
    Salut,


    L'implémentation du type Optional n'implémente pas l'interface Serializable, de ce fait tu ne peux pas l'utiliser avec le protocole RMI. C'est dommage mais tu vas devoir t'en passer pour ce cas.


    A+
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

Discussions similaires

  1. [Framework] [RMI] java.rmi.UnmarshalException
    Par YokoSop dans le forum Spring
    Réponses: 12
    Dernier message: 08/12/2010, 16h29
  2. [EJB3 Entity] java.rmi.UnmarshalException: ClassNotFoundException
    Par matthieu86 dans le forum Java EE
    Réponses: 1
    Dernier message: 01/03/2009, 18h46
  3. [RMI] java.rmi.UnmarshalException
    Par anicaise dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 06/06/2008, 11h34
  4. Réponses: 2
    Dernier message: 17/01/2007, 00h26
  5. Problême de Socket avec un applet java (RMI/policy)
    Par Vesperal dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/04/2006, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo