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

Format d'échange (XML, JSON...) Java Discussion :

Utiliser SAXBuilder avec un InputStream. [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Par défaut Utiliser SAXBuilder avec un InputStream.
    Bonsoir à tous.
    Je suis un étudiant en informatique ayant comme projet de fin de 2eme année de créer un jeu en ligne multijoueur.
    Pour cela j'ai choisi FLASH, PHP, and JAVA.
    En gros mon application Flash est connectée par un XML socket au serveur (implémenté en JAVA ), envoie l'url du script PHP à éxcuter au serveur, qui l'éxécute, et PHP renvoie du XML au serveur, qui le "flood", propage à tous les clients flash connectés au serveur.

    J'ai lu le très bon tutoriel sur JDOM sur le site mais j'aimerais utiliser un InputStream ou un Reader à la place d'un FIle lorsque j'execute la methode build de SAXBuilder :

    en gros mon code dans le serveur ressemble à ça :

    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
    57
    58
    59
     
    import java.lang.*;
    import java.net.Socket;
    import java.io.*;
     
    public class XMLClientHandler extends Thread{
    	private BufferedReader input;
    	private PrintWriter output;
    	private Thread tr;
     
    	public XMLClientHandler(Socket s)
    	{
    		try{
    		input = new BufferedReader( new InputStreamReader(s.getInputStream()));
    		output = new PrintWriter(s.getOutputStream());
     
    		tr = new Thread(this);
    		tr.start();
     
     
    		}catch(Exception e){ e.printStackTrace();}
    	}
     
    	public void run()
    	{
    		try{
    			//Ce que nous avons reçu jusque là...
    			String sReceived = "";
    			char [] tab = new char[1];
     
    			JDOM2.createBuilder(input2);
    			//Here -1 indicates end of file
    			while(input.read(tab, 0, 1) != -1)
    			{	
    				sReceived +=tab[0];
    				//End of XML document
    				if(tab[0] == '\u0000')
    				{
    //Code intéréssant : cette fonction appelle build en passant
    //comme argument new StringReader(sReceived);					
    JDOM2.createBuilder(new StringReader(sReceived));
    //Envoyer à tous les clients connectés au serveur					
    sendMsg(sReceived);
    					sReceived = "";
    				}
     
    			}
    			System.out.println("Connection CLOSED");
     
    		}catch(Exception e){ e.printStackTrace();}
    	}
     
    	public void sendMsg(String sMsg)
    	{
    		output.write(sMsg);
    		output.flush();
    	}
     
    }
    Malheureusement j'ai toujours une exception de type
    org.jdom.input.JDOMParseException: Error on line 1: Content is not allowed in trailing section.

    Quelqu'un pourrait-il m'aider? Je commence sérieusement à désespérer là...
    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Par défaut
    Désolé je viens de découvrir d'où vient le probleme :
    il ne faut pas que la string qui est passée en argument à StringReader se termine par le caractère '\u0000'.
    En gros le nouvel appel à JDOM2.createBuilder( StringReader a) serait :
    JDOM2.createBuilder(new StringReader(sReceived.substring(0, sReceived.length() - 1)));

    J'espère que ça en aidera d'autres

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

Discussions similaires

  1. [Kylix 3] Je n'arrive pas à utiliser MySQL
    Par usebob dans le forum EDI
    Réponses: 4
    Dernier message: 15/04/2005, 10h18
  2. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  3. Réponses: 6
    Dernier message: 24/02/2005, 09h44
  4. PB de vue utilisant UNION avec ENTERPRISE MANAGER
    Par punglas dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2004, 15h18
  5. Réponses: 12
    Dernier message: 02/02/2004, 13h41

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