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

Services Web Java Discussion :

Problème avec un Parser RSS


Sujet :

Services Web Java

Vue hybride

Hamtoto Problème avec un Parser RSS 16/06/2009, 09h59
dinobogan Il semble bloqué car il est... 16/06/2009, 10h33
Hamtoto Merci, Effectivement le... 16/06/2009, 10h57
dinobogan Tout dépend de ce qu'il... 16/06/2009, 11h25
Hamtoto J'ai trouver la solution a... 16/06/2009, 16h19
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut Problème avec un Parser RSS
    Bonjour,

    Je suis en train de réaliser une application web qui ira chercher auprès d'autres site des information divers et variés.
    Le problème survient dans mon application météo, celle-ci utilise un saxBuilder pour allez parser un flux RSS.
    Le code pour parser le document est le suivant:

    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
    @SuppressWarnings("unchecked")
    	public Meteo load(URL url,int jour) {
    		List<Meteo> _meteoDays = new LinkedList<Meteo>();
            SAXBuilder parser = new SAXBuilder();
    		Document document;
    		try {
    			document = parser.build(url);
    			System.out.println("C'etait mieux avant!");
    			Element oRacine = document.getRootElement();
    			for (Element element : (List<Element>) oRacine.getChild("Channel").getChild("item").getChildren("meteo:weather")) {
    				Meteo data = new Meteo();
    				data.setDate(element.getAttributeValue("date"));
    				data.setLink(element.getAttributeValue("link"));
    				data.setTemperatureMatin(element.getAttributeValue("tempe_matin"));
    				data.setTempsMatin(element.getAttributeValue("namepictos_matin"));
    				data.setTemperatureMidi(element.getAttributeValue("tempe_midi"));
    				data.setTempsMidi(element.getAttributeValue("namepictos_midi"));
    				data.setTemperatureApMidi(element.getAttributeValue("tempe_apmidi"));
    				data.setTempsApMidi(element.getAttributeValue("namepictos_apmidi"));
    				data.setTemperatureSoir(element.getAttributeValue("tempe_soir"));
    				data.setTempsSoir(element.getAttributeValue("namepictos_soir"));
    				_meteoDays.add(data);
    			}
    			return _meteoDays.get(0);
    		}
    		catch (JDOMException e) {
    			e.printStackTrace();
    			return null;
    		}
    		catch (IOException e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    Mais il semble rester bloquer lors du: document = parser.build(url);
    Puis me lance cette erreur:

    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
    java.io.EOFException: no more input
    	at com.icl.saxon.aelfred.XmlParser.popInput(XmlParser.java:4083)
    	at com.icl.saxon.aelfred.XmlParser.pushURL(XmlParser.java:3620)
    	at com.icl.saxon.aelfred.XmlParser.doParse(XmlParser.java:159)
    	at com.icl.saxon.aelfred.SAXDriver.parse(SAXDriver.java:320)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:453)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:810)
    	at com.teamlog.nakamaize.modele.meteo.LecteurMeteo.load(LecteurMeteo.java:25)
    	at com.teamlog.nakamaize.service.ServiceMeteo.getDonneeMeteo(ServiceMeteo.java:18)
    	at com.teamlog.nakamaize.facade.Facade.getDonneeMeteo(Facade.java:72)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421)
    	at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
    	at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503)
    	at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:884)
    	at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
    	at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
    	at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
    	at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
    	at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
    	at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:278)
    	at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:322)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    	at java.lang.Thread.run(Unknown Source)
    La librairie JDOM est correctement installer dans le repertoire lib de la webapp alors je ne voit pas d'ou peut venir le problème.
    Si vous avez des idées je suis preneur.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Hamtoto Voir le message
    Mais il semble rester bloquer lors du: document = parser.build(url);
    Puis me lance cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.EOFException: no more input
    Il semble bloqué car il est en attente de lecture. Puis, une fois le timeout dépassé, il sort en erreur car il lui manque des informations.
    Tu devrais faire un test : récupère le flux et enregistre-le dans un fichier sans faire aucune analyse. Puis analyse le contenu. Il n'est certainement pas valide.
    Ou alors augmente le timeout, peut-être que le serveur distant est long à répondre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    Merci,

    Effectivement le XML n'etait pas valide.
    Saurait tu quels sont mes options? Y a t'il moyen de parser tout de même le fichier? ou dois je trouver un autres site pour les données météorologiques?

    Et pour ma culture perso comment augmente t on le timeout?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Hamtoto Voir le message
    Effectivement le XML n'etait pas valide.
    Saurait tu quels sont mes options? Y a t'il moyen de parser tout de même le fichier?
    Tout dépend de ce qu'il manque dans le flux XML. Si c'est facile à corriger, tu peux te faire ton propre proxy, qui va corriger les erreur : ton proxy va se connecter au serveur, lire les données et les corriger à la volée. En même temps il va écrire dans un flux ou un fichier. SaxBuilder va lire le flux généré (ou le fichier) et faire son travail. Tu vas devoir construire une classe qui étend java.io.InputStream et qui sera alimentée par ton proxy. Ce n'est pas dur, il suffit d'implémenter toutes les méthodes de l'interface.
    Mais tu dois bien réfléchir avant de te lancer dasn cette merveilleuse aventure : est-ce que le flux est facile à "patcher" pour en faire du XML valide ?

    ou dois je trouver un autres site pour les données météorologiques?
    Ce serait à la fois le plus simple, le moins marrant et le moins formatteur

    Et pour ma culture perso comment augmente t on le timeout?
    Je ne sais pas, tu dois fouiller dans l'API JDOM et voir s'il n'existe pas une propriété à modifier ou une méthode pour accéder à cette valeur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    J'ai trouver la solution a mon problème, le souci venais du proxy de la JVM qu'il etait nécéssaire de configurer.
    En rajoutant a mon code ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.getProperties().put("proxySet", "true");
    System.getProperties().put("proxyHost", "***.***.***.***");
    System.getProperties().put("proxyPort", "****");
    il arrive alors a accéder à l'url.
    Ps: Les étoiles represente l'adresse du proxy et le numero de port.

    Par contre nouveau souci.
    Mon flux RSS est structuré comme ceci : http://api.meteorologic.net/forecarss?p=22000

    Mais il ne semble pas vouloir renvoyer d'information.
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    [BlazeDS]FlexSession created with id '5B6FF169B82E261622E907D57418FA06' for an Http-based client connection.
    [BlazeDS]Channel endpoint my-amf received request.
    [BlazeDS]Deserializing AMF/HTTP request
    Version: 3
      (Message #0 targetURI=null, responseURI=/1)
        (Array #0)
          [0] = (Typed Object #0 'flex.messaging.messages.CommandMessage')
            operation = 5
            correlationId = ""
            headers = (Object #1)
              DSMessagingVersion = 1
              DSId = "nil"
            destination = ""
            messageId = "825AD48D-91EF-55E7-6830-E977C8B51DC2"
            body = (Object #2)
            clientId = null
            timestamp = 0
            timeToLive = 0
     
    [BlazeDS]Serializing AMF/HTTP response
    Version: 3
      (Message #0 targetURI=/1/onResult, responseURI=)
        (Externalizable Object #0 'DSK')
          (Object #1)
            DSMessagingVersion = 1.0
            DSId = "CAFD778F-2409-4B18-BE02-B73A423609EC"
    1.24516249074E12
    (Byte Array #2, Length 16)
    (Byte Array #3, Length 16)
    (Byte Array #4, Length 16)
     
    [BlazeDS]Channel endpoint my-amf received request.
    [BlazeDS]Deserializing AMF/HTTP request
    Version: 3
      (Message #0 targetURI=null, responseURI=/2)
        (Array #0)
          [0] = (Typed Object #0 'flex.messaging.messages.RemotingMessage')
            source = null
            operation = "getDonneeMeteo"
            headers = (Object #1)
              DSEndpoint = "my-amf"
              DSId = "CAFD778F-2409-4B18-BE02-B73A423609EC"
            destination = "ais"
            messageId = "5343218C-C8D3-3205-0975-E977C8763852"
            body = (Array #2)
              [0] = "22000"
              [1] = 0
            clientId = null
            timestamp = 0
            timeToLive = 0
     
    [Element: <rss/>]
    [BlazeDS]Serializing AMF/HTTP response
    Version: 3
      (Message #0 targetURI=/2/onStatus, responseURI=)
        (Typed Object #0 'flex.messaging.messages.ErrorMessage')
          headers = (Object #1)
          rootCause = (Typed Object #2 'java.lang.IndexOutOfBoundsException')
            message = "Index: 0, Size: 0"
            localizedMessage = "Index: 0, Size: 0"
            cause = null
          body = null
          correlationId = "5343218C-C8D3-3205-0975-E977C8763852"
          faultDetail = null
          faultString = "java.lang.IndexOutOfBoundsException : Index: 0, Size: 0"
          clientId = "CAFD78C0-510F-62A2-4CBC-24DC3AB27A99"
          timeToLive = 0.0
          destination = "ais"
          timestamp = 1.245162491552E12
          extendedData = null
          faultCode = "Server.Processing"
          messageId = "CAFD7F74-A00A-85B6-094B-0183C71E7E84"
    et ce avec ce code qui semble pourtant allez chercher les bonnes informations:
    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
    @SuppressWarnings("unchecked")
    	public Meteo load(URL url,int jour) {
    		List<Meteo> _meteoDays = new LinkedList<Meteo>();
            SAXBuilder parser = new SAXBuilder();
    		try {
                System.getProperties().put("proxySet", "true");
                System.getProperties().put("proxyHost", "***.***.***.***");
                System.getProperties().put("proxyPort", "****");
     
    			Document document = parser.build(url);
    			Element oRacine = document.getRootElement();
    			System.out.println(oRacine);
    			for (Element element : (List<Element>) oRacine.getChild("channel").getChild("item").getChildren("meteo:weather")) {
    				System.out.println(element);
    				Meteo data = new Meteo();
    				data.setDate(element.getAttributeValue("date"));
    				data.setLink(element.getAttributeValue("link"));
    				data.setTemperatureMatin(element.getAttributeValue("tempe_matin"));
    				data.setTempsMatin(element.getAttributeValue("namepictos_matin"));
    				data.setTemperatureMidi(element.getAttributeValue("tempe_midi"));
    				data.setTempsMidi(element.getAttributeValue("namepictos_midi"));
    				data.setTemperatureApMidi(element.getAttributeValue("tempe_apmidi"));
    				data.setTempsApMidi(element.getAttributeValue("namepictos_apmidi"));
    				data.setTemperatureSoir(element.getAttributeValue("tempe_soir"));
    				data.setTempsSoir(element.getAttributeValue("namepictos_soir"));
    				_meteoDays.add(data);
    			}
    			return _meteoDays.get(0);
    		}
    		catch (JDOMException e) {
    			e.printStackTrace();
    			return null;
    		}
    		catch (IOException e) {
    			e.printStackTrace();
    			return null;
    		}
    	}

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    C'est quoi cette sortie ? Le flux RSS que tu lis ? Ou alors les données déjà traitées ?
    Sinon, si le serveur ne veut pas t'envoyer d'info, c'est peut-être un problème d'entête HTTP, notamment le "User-Agent" qui permet dans la plupart des cas de connaitre le navigateur utilisé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

Discussions similaires

  1. [XML] Problème avec le parser SAX
    Par carmensam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/08/2009, 16h50
  2. [WB14] - Problème avec les flux RSS
    Par Mateuy dans le forum WebDev
    Réponses: 2
    Dernier message: 24/07/2009, 17h22
  3. problème avec XML::parser
    Par mbhfr06 dans le forum Modules
    Réponses: 4
    Dernier message: 23/08/2007, 14h15
  4. [DOM] Problème avec le tutoriel RSS
    Par Flashball dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 20/06/2007, 19h32
  5. Problème avec le parser XML
    Par sheura dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/11/2005, 18h26

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