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

Servlets/JSP Java Discussion :

Applet - servlet : InvalidClassException


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut Applet - servlet : InvalidClassException
    Bonjour,
    je dois pour mes cours, créer un site web html/applet/servlet/jsp.

    J'ai un soucis lors d'une communication entre mon applet et une servlet qui récupère des données sur un serveur. J'envoie un objet sérialisé sur le stream ouvert entre l'applet et la servlet.
    En debug (lancement applet sur netbeans) pas de soucis tout se passe correctement.
    En réel, avec déploiement sur Tomcat, la web application lancement l'applet ne fonctionne pas et me lance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListFilmsApplet: iOException [java.io.InvalidClassException: BTMPPkg.Data.Films; incompatible types for field duree]
    Voici le code de Films:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    static final long serialVersionUID = 6236897322967564425L;
        private int id;
        private String Nom;
        private Date date_de_sortie;
        private double duree;
        private String couleur;
        private String mpaa;
        private String genre;
        private String acteur;
        private String producteur;
        private String maisonProduction;
        private String qualite;
     
        ...
    voici le code de mon applet
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    String linkServlet = "http://localhost:8084/Authentification/servletBTPM";
            try
            {
                URL URLServlet = new URL(linkServlet);
                URLConnection connect = URLServlet.openConnection();
                connect.setUseCaches(false);
                connect.setDefaultUseCaches(false);
                connect.setRequestProperty("Content-Type", "application/octet-stream");
                connect.setDoOutput(true);
                connect.setDoInput(true);
     
                OutputStream os = connect.getOutputStream();
     
                ObjectOutputStream oos = new ObjectOutputStream(os);
                oos.writeObject("listingFilms");
                oos.flush();
     
                InputStream is = connect.getInputStream();
                ObjectInputStream ois = new ObjectInputStream(is);
                System.out.println("Je suis ici");
                Object ret = ois.readObject();
                System.out.println("Je suis ici2");
                if(ret.getClass().getSimpleName().equals("ListFilms"))
                {
                    ListFilms lfilms = (ListFilms)ret;
     
                    Vector<Vector<String>> films = lfilms.getFilms();
     
                    Films film = lfilms.getFilm(0);
                    String s = String.valueOf(film.getDuree());
                    LabTitre.setText(film.getNom());
                    LabDateSortie.setText(film.getDate_de_sortie().toString());
                    LabDuree.setText(s);
                    LabCouleur.setText(film.getCouleur());
                    LabMPAA.setText(film.getMpaa());
                    LabGenre.setText(film.getGenre());
                    LabActeur.setText(film.getActeur());
                    LabProducteur.setText(film.getProducteur());
                    LabMaisonProd.setText(film.getMaisonProduction());
                    LabQualite.setText(film.getQualite());
     
                    /*for(int i=0;i<films.size();i++)
                    {
                        F
                    }*/
     
                    return;
                }
                if(ret.getClass().getSimpleName().equals("ACK"))
                {
                    ACK ack = (ACK)ret;
                    System.out.println("ack: "+ack.getCode()+" - "+ack.getMessage());
                    return;
                }
     
            }
    voici le code de ma servlet:
    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
    39
    40
    response.setContentType("text/html");
            String filename = "/Config/config.cfg";
            ServletContext context = getServletContext();
            URL pathConfig = context.getResource(filename);
            String pathConfigString = pathConfig.toString();
            InputStream inp = context.getResourceAsStream(filename);
     
     
            OutputStream os = response.getOutputStream();
            response.setContentType("application/octet-stream");
            ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
            ObjectOutputStream oos = new ObjectOutputStream(os);
     
             try
            {
                Object received = ois.readObject();
     
                if(received.getClass().getSimpleName().equals("String"))
                {
                    if(((String)received).equals("listingFilms"))
                    {
                        BTMPClient btmp = new BTMPClient(inp);
                        ListFilms films = new ListFilms();
                        films = btmp.recupFilm(films);
                        oos.writeObject(films);
                        oos.flush();
                        btmp.quit();
                    }
                }
            }
            catch (IOException iOException) {
                System.out.println("ServletBTMP IOException ["+iOException+"]");
                iOException.printStackTrace(System.out);
                oos.writeObject(new ACK(9,"ServletBTMP IOException ["+iOException+"]"));
                oos.flush();
            }
            catch (ClassNotFoundException classNotFoundException) {
                oos.writeObject(new ACK(9,"ServletBTMP ClassNotFoundException ["+classNotFoundException+"]"));
                oos.flush();
            }
    Je redis bien qu'en debug netbeans ca marche sans probleme, mais pas en local tomcat...

    Je ne comprends vraiment pas....

    Merci d'avance

    Julien Garcia Gonzalez

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peut avoir le stacktrace complet de l'exception?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    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
    ListFilmsApplet: iOException [java.io.InvalidClassException: BTMPPkg.Data.Films; incompatible types for field duree]
    java.io.InvalidClassException: BTMPPkg.Data.Films; incompatible types for field duree
    	at java.io.ObjectStreamClass.matchFields(ObjectStreamClass.java:2203)
    	at java.io.ObjectStreamClass.getReflector(ObjectStreamClass.java:2098)
    	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    	at AppletFilms.ListFilmsApplet.InitRecupFilm(ListFilmsApplet.java:70)
    	at AppletFilms.ListFilmsApplet.access$100(ListFilmsApplet.java:31)
    	at AppletFilms.ListFilmsApplet$1.run(ListFilmsApplet.java:40)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:633)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il semblerait que ton serveur et ton client n'utilisent pas la même classe Film, le champ "duree" n'est pas du meme type coté lecture que coté écriture.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Oui j'avais bien compris çà le probleme est que j'utilise un package avec toutes mes classes data dedans et c'est le meme package pour tout les projets (applet - servlet - serveur)

    Merci de m'aider un tout cas, je galère grave le dessus !

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    t'as peut etre une vieille version du pacakge sur l'un des deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [APPLET-SERVLET] download oui mais upload non ...
    Par meufeu dans le forum Applets
    Réponses: 7
    Dernier message: 09/08/2004, 14h36
  2. [COM APPLET-SERVLET] url connexion
    Par meufeu dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 09/08/2004, 13h03
  3. [Communication APPLET-SERVLET] string -> fichier
    Par meufeu dans le forum Applets
    Réponses: 10
    Dernier message: 06/08/2004, 14h45
  4. [Applet][Servlet]
    Par meusha25 dans le forum Applets
    Réponses: 3
    Dernier message: 11/05/2004, 11h53
  5. [Applet - Servlet] Communication : quoi choisir ?
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 14
    Dernier message: 28/04/2004, 15h43

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