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 :

[Servlet]Raw Post Data tronqué


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut [Servlet]Raw Post Data tronqué
    Bonjour à tous,

    Je met en place une servlet qui doit récupérer un flux xml passé en "Raw post data" dans une requête HTTP.

    Le problème, c'est que lorsque ce flux est très grand, je n'arrive pas à le récupérer dans son intégralité.

    Voici le code que j'utilise pour récupérer le flux (l'objet request fait référence à un HttpServletRequest):
    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
     
    BufferedReader reader = null;
    			try{
                                    xml = "";
    				reader = new BufferedReader(request.getReader());
    				String line = null;
     
    				while((line = reader.readLine()) != null){
    					xml += line;
    				}
     
    			}
    			finally{
    				if(reader != null){
    					reader.close();
    				}
    			}
     
    			logger.info("XML: ***"+xml+"***");
    Lors de l'affichage, on voit clairement que le flux xml n'est pas complet, l'affichage s'arretant en plein milieu d'une balise.

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour


    1° J'ajouterais la clause catch et je loguerais l'erreur

    2° J'utiliserais la classe StringBuilder ou StringBuffer dépendant que la version de java pour mémoriser le flux XML.

    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
     
    StringBuilder xml= new StringBuilder;
    BufferedReader reader = null;
    			try{
    				reader = new BufferedReader(request.getReader());
    				String line = null;
     
    				while((line = reader.readLine()) != null){
    					xml.append(line);
    				}
     
    			}
                            catch(Exception e) {
                               logger.error("XML READER: " + e);
                            }
    			finally{
    				if(reader != null){
    					reader.close();
    				}
    			}
     
    			logger.info("XML: ***"+xml.toString()+"***");
    Bien le bonjour chez vous
    Jowo

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Merci Jowo pour ta réponse.

    Alors:

    1° J'ai effectivement un catch, qui n'apparait pas dans le bout de code car l'erreur est géré à un autre endroit.
    L'erreur est de type: JDOMParseException (normal puisque le xml est incomplet).

    2° J'ai essayé avec le StringBuilder, mais aucun changement.


    Bref, je rame je rame

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Bon, j'ai trouvé la solution... mais je ne sais pas pourquoi ça marche comme ça et pas avec l'ancienne solution.

    Voici le fox:
    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
     
    xml = "";
    			InputStream reader = null;
    			try{
    				reader = this.request.getInputStream();
    				byte[] resultat = new byte[this.request.getContentLength()];
    				int i=0;
    				while(reader.read(resultat, i, 1) != -1){
    					i++;
    				}
     
    				xml = new String(resultat);				
    			}
    			finally{
    				if(reader != null){
    					reader.close();
    				}
    			}
     
    			logger.info("XML: ***"+xml+"***");

    En fait il faut utiliser getInputStream au lieu de getReader.
    Si quelqu'un est capable d'expliquer pourquoi, je suis preneur.

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

Discussions similaires

  1. [SERVLET & JSP] post file and data
    Par micouz dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/01/2012, 11h34
  2. Réponses: 2
    Dernier message: 27/08/2011, 16h37
  3. [Debutant] Données nulles de JSP vers Servlet method Post
    Par tck-lt dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/12/2006, 12h53
  4. Petit cours pour éviter l'envoi POST data d'un formulaire apres un rafraîchissement
    Par maximenet dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 8
    Dernier message: 07/10/2006, 01h03
  5. Comment supprimer les post data
    Par jeff_! dans le forum Langage
    Réponses: 4
    Dernier message: 03/08/2006, 11h55

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