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

Applets Java Discussion :

[IO][Sérialisation]Exception bizarre depuis applet


Sujet :

Applets Java

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut [IO][Sérialisation]Exception bizarre depuis applet
    Bonsoir,

    j'ai un petit problème avec la sérialisation. Savez-vous à quoi peut être du ce problème ?

    voici un bout de la stack
    java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2502)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1267)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    at depouilleuroli.ServletLisFichier.doPost(ServletLisFichier.java:99)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    En fait, mon applet crée un fichier, et je voudrais ensuite le renvoyer vers une servlet qui s'occuperait de le copier dans un répertoire adéquat sur le disque de mon serveur.

    Voici le code qui envoie le fichier depuis l'applet vers la 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
     
    private boolean serializeToServlet(File xml) {
        boolean pass = false;
     
        try {
          URL url = new URL(getDocumentBase(), "ServletLisFichier");
          URLConnection connexion = url.openConnection();
     
          connexion.setDoOutput(true);
     
          ObjectOutputStream oos = new  ObjectOutputStream(connexion.getOutputStream());      
          oos.writeObject(xml);
     
          BufferedReader br = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
          String answer = br.readLine();
          pass = "OK".equals(answer);
        } catch (Exception e) {
          pass = false;
          e.printStackTrace();
        }
     
        return pass;
      }
    et ici le code de la servlet qui doit récupérer le fichier
    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
     
    protected void doPost(HttpServletRequest request,
          HttpServletResponse response) throws IOException {
          ObjectInputStream ois = new  ObjectInputStream(request.getInputStream());
     
          Object o = null;
     
          try {
            o = ois.readObject();  // <<---- EOFException ici
          } catch (ClassNotFoundException e) {
            e.printStackTrace();
          }
     
          PrintWriter pw = new PrintWriter(response.getOutputStream());
          pw.println("OK");
          pw.close();
          ois.close();
     
          // ...
        }
    le problème ne vient apparament pas de ma config Tomcat ou quoi que ce soit d'autre. Il semble vraiment que cela soit lié à la sérialisation

    est-ce que quelqu'un sait ce qui se passe et pourrait me l'expliquer ?

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    up !

    je suis perdu, cette erreur n'est même pas documentée dans la JavaDoc !
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    Si, elle l'est :

    Citation Envoyé par javadoc de la méthode writeObject
    Throws:
    IOException - if there are I/O errors while writing to the underlying stream
    Et EOFFileException hérite de IOException.

    Sinon, javadoc pour EOFFileException :
    Signals that an end of file or end of stream has been reached unexpectedly during input.
    Je pense que dans ton cas c'est plutôt un problème de flux qui peut être à la source du problème...

    Ce que je ne comprend pas, c'est que tu veux écrire l'objet File sur le serveur... C'est pas plutôt le contenu que tu voudrais copier ?

    Alors, je ferais comme ceci :
    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
     
    private boolean serializeToServlet(File xml) {
        boolean pass = false;
     
        try {
          URL url = new URL(getDocumentBase(), "ServletLisFichier");
          URLConnection connexion = url.openConnection();
     
          connexion.setDoOutput(true);
     
          FileInputStream fis = new FileInputStream(xml);
          ObjectInputStream ois = new ObjectInputStream(fis);
     
          ObjectOutputStream oos = new  ObjectOutputStream(connexion.getOutputStream());     
          oos.writeObject(ois.readOjbect());
     
          BufferedReader br = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
          String answer = br.readLine();
          pass = "OK".equals(answer);
        } catch (Exception e) {
          pass = false;
          e.printStackTrace();
        }
     
        return pass;
      }
    Pas testé -> Je ne sais pas si ça fonctionne

    So, j'espère que ça va t'aider...

    @+

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par ptitjack
    Et EOFFileException hérite de IOException.
    ah oki, donc voilà pourquoi je l'ai pas vu...

    Ce que je ne comprend pas, c'est que tu veux écrire l'objet File sur le serveur... C'est pas plutôt le contenu que tu voudrais copier ?
    bon je vais essayer de t'expliquer le but du prog:

    j'ai une applet qui génère un fichier xml. Et je voudrais renvoyer ce fichier vers mon serveur (avec une servlet), qui s'occuperait de le copier dans le répertoire adéquats du serveur. Je me suis donc dit "hop, avec mon applet je sérialise le fichier dans le flux (un bête oos.writeObject() ), et je désérialise dans la servlet (avec ois.readObject())" -> et j'ai donc mis en place le code ci-dessus.

    Cela te parait-il juste ?

    sinon je vais essayer ta technique, en utilisant un FileInputStream dans l'applet et FileOutputStream dans ma servlet, peut-être que ça va marcher mieux

    au pire je pourrais me contenter d'envoyer le contenu du xml sous forme de String, mais bon c'est pas génial... je voudrais vraiment envoyer le fichier sous forme de 'File'
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    Pourquoi ce n'est pas directement l'objet xml en mémoire que tu écris dans le flux plutôt que un fichier ? ça éviterais d'écrire sur le disque du client (avec les éventuels problèmes de droits d'accès que cela peut impliquer)...

    Sinon, ça me paraît possible... Mais je ne l'ai jamais implémenté.

    @+

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Tu n'as pas le choix .. Un objet File est juste un pointeur sur un fichier local, tu peux le serialiser, mais sur la machine distante, ce pointeur ne pointe plus sur rien d'ou l'exception ..

    Il va falloir balancer ton XML en string..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    Sinon utillise DOM et serialise directement le noeud racine
    ( qui hérite de Object )
    que tu récupère ensuite sur la servlet et que tu désérialise

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    je crois que tu as raison bulbo

    lorsque j'essaie de sérialiser le contenu du fichier (ie avec FileInputStream/ObjectInputStream) je me retrouve avec une StreamCorruptedException

    mais j'ai trouvé une autre idée: je passe directement mon document (objet org.jdom.Document) et c'est la servlet qui crée le fichier, ça fonctionne nickel

    Et le soleil brille à nouveau sur Toon's ville... !
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ps: j'avais pas vu ton mess, raj, mais effectivement c'est ce que j'ai fini par mettre en place
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

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

Discussions similaires

  1. Nouvelle fenetre depuis applet
    Par fumiste972 dans le forum Applets
    Réponses: 3
    Dernier message: 10/07/2006, 16h01
  2. [Struts][file upload] Exception Bizarre
    Par pmartin8 dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/05/2006, 17h55
  3. Réponses: 9
    Dernier message: 20/01/2006, 12h04
  4. [Hibernate] Exception bizarre NoSuchElementException
    Par lilou77 dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/01/2006, 15h44
  5. [SWING] Exception bizarre avec Thread
    Par Gob4 dans le forum Débuter
    Réponses: 2
    Dernier message: 13/09/2005, 21h55

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