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 :

[DocumentBuilder] Problème de parsing de fichier [DOM]


Sujet :

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

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut [DocumentBuilder] Problème de parsing de fichier
    Bonjour,

    J'ai mis un fichier Xml dans une base Lotus sur un serveur dans les shared Resource Files. J'ai réussi après de nombreuses recherches à récupérer le contenu de ce fichier au moyen d'un agent écrit en Java. Cependant, avant en local, je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    			DocumentBuilderFactory create = DocumentBuilderFactory.newInstance();
     
    			DocumentBuilder constructor;
     
    			constructor = create.newDocumentBuilder();
     
    			/** reading of the XML file with DOM */
    			File xml = new File(args);					
    					Document document = constructor.parse(xml);
    args était le chemin de mon fichier xml et tout fonctionnait nickel.

    Aujourd'hui, étant que je récupère le contenu de mon fichier et non son chemin je compte faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    			DocumentBuilderFactory create = DocumentBuilderFactory.newInstance();
     
    			DocumentBuilder constructor;
     
    			constructor = create.newDocumentBuilder();
     
    			Document document = constructor.parse(args);
    args étant la chaîne de caractères contenant tout le contenu du fichier xml et voilà l'erreur que j'obtiens :


    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
    java.net.MalformedURLException: no protocol: <?XML version='1.0' standalone="yes" encoding="UTF-8"?>
     
    <!ELEMENT CONFIG ((SERVEUR|SERVEURSMTP|DESTINATAIRE|REPERTOIRE)*)>
     
    <!ELEMENT SERVEUR EMPTY>
     
    <!ATTLIST SERVEUR
    source CDATA #REQUIRED
    dest CDATA #REQUIRED
    tolerance CDATA #REQUIRED>
     
    <!ELEMENT SERVEURSMTP EMPTY>
     
    <!ATTLIST SERVEURSMTP
    nom CDATA #REQUIRED
    port CDATA #REQUIRED>
     
    <!ELEMENT DESTINATAIRE EMPTY>
     
    <!ATTLIST DESTINATAIRE
    mail CDATA #REQUIRED>
     
    <!ELEMENT REPERTOIRE EMPTY>
    <!ATTLIST REPERTOIRE
    nom CDATA #REQUIRED>
     
    <CONFIG>
    	<SERVEUR source="un" dest="deux" tolerance="20"/>	
    	<REPERTOIRE nom="mail"/>
    	<SERVEURSMTP nom="un.com" port ="25"/>
    	<DESTINATAIRE mail="tck-lt@blabla.com"/>	
    </CONFIG>
    	at java.net.URL.<init>(URL.java:565)
    	at java.net.URL.<init>(URL.java:462)
    	at java.net.URL.<init>(URL.java:411)
    	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    	at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    	at Comp_Legris1_Dolly.main(Comp_Legris1_Dolly.java:74)
    	at JavaAgent.NotesMain(JavaAgent.java:105)
    	at lotus.domino.AgentBase.runNotes(Unknown Source)
    	at lotus.domino.NotesThread.run(Unknown Source)

    J'ai essayé, à l'origine, sans tout le contenu de la DTD, ça ne marchait pas non plus. Je suis persuadé que ça vient d'un problème de ce genre. Les plus malins d'entre vous me diront que je n'ai qu'à récupérer le chemin du fichier sur le serveur mais c'est impossible, car quand j'appelle constructor.parse(xml), il va chercher le fichier en local dans c:/Program Files/lotus/notes/

    Merci d'avance pour vos réponses.


    PS:J'ai changé le sujet, le mot Lotus fait un peu peur apparemment.

  2. #2
    Membre éclairé Avatar de Vesperal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Par défaut
    Apparement ca n'est pas un problème de nom de fichier, mais de protocole. Je ne connais pas bien Lotus et DOM, mais éssaye de vérifier si tu as bien défini le protocole dans l'url, plutôt que de focaliser sur le nom de fichier.

    De là à savoir mainternant pourquoi ca marchait avec un new File(nom_fich) avant ...

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Excuses-moi mais si tu lis bien mon problème tu verras que je ne me focalise pas sur le nom du fichier mais sur son contenu. Avant ça marchait car c'était juste une appli Java (exécutée sous Eclipse) et pas un agent Notes qui lui est exécuté sur un serveur Domino d'où le problème d'accès fichier aujourd'hui résolu en partie puisque maintenant au lieu de lui passer le path je lui passe le contenu du fichier.

    Merci pour ta réponse et crois-moi ce n'est pas un problème venant de Lotus je pense.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    En fait la questin importante est : est-il possible de parser une String contenant les données d'un fichier xml. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String s = "<TOTO name="toto"><TATA name="tata"/></TOTO>
    (Avec l'en-tête et tout qui va bien)

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Mon fichier XML n'était pas bon, je l'ai donc modifié en :
    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
     
    <?XML version='1.0' encoding="UTF-8" standalone="yes"?>
    <!DOCTYPE CONFIG [
    <!ELEMENT CONFIG ((SERVEUR|SERVEURSMTP|DESTINATAIRE|REPERTOIRE)*)>
     
    <!ELEMENT SERVEUR EMPTY>
     
    <!ATTLIST SERVEUR
    source CDATA #REQUIRED
    dest CDATA #REQUIRED
    tolerance CDATA #REQUIRED>
     
    <!ELEMENT SERVEURSMTP EMPTY>
     
    <!ATTLIST SERVEURSMTP
    nom CDATA #REQUIRED
    port CDATA #REQUIRED>
     
    <!ELEMENT DESTINATAIRE EMPTY>
     
    <!ATTLIST DESTINATAIRE
    mail CDATA #REQUIRED>
     
    <!ELEMENT REPERTOIRE EMPTY>
    <!ATTLIST REPERTOIRE
    nom CDATA #REQUIRED>
    ]>
     
    <CONFIG>
    	<SERVEUR source="un" dest="deux" tolerance="20"/>	
    	<REPERTOIRE nom="mail"/>
    	<SERVEURSMTP nom="blabla.com" port ="25"/>
    	<DESTINATAIRE mail="tck-lt@blabla.com"/>	
    </CONFIG>
    et j'ai toujours l'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
     
    java.net.MalformedURLException: no protocol:
    at java.net.URL.<init>(URL.java:565)
    	at java.net.URL.<init>(URL.java:462)
    	at java.net.URL.<init>(URL.java:411)
    	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    	at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    	at Comp_Legris1_Dolly.main(Comp_Legris1_Dolly.java:74)
    	at JavaAgent.NotesMain(JavaAgent.java:113)
    	at lotus.domino.AgentBase.runNotes(Unknown Source)
    	at lotus.domino.NotesThread.run(Unknown Source)
    Je sais que ma méthode n'est pas très académique de parser une chaîne de caractères, j'ai n'ai pas d'autres solutions car aucun accès direct au fichier seulement aux Data qu'il contient.

  6. #6
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    L'erreur est tout à fait normale, puisque la méthode parse(String) attend un URI : elle interprète donc le contenu de ton fichier comme un URI.

    Il faut à partir du contenu de ton fichier créer un InputSource (si tu as mis ton fichier dans une String, tu peux l'obtenir en utilisant StringReader) et ensuite parser ton fichier avec la méthode parse(InputSource).

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    c'est bien ce qui me semblait que l'erreur était normale mais je ne savais pas comment faire après (c'est déjà un bordel pas possible de récupérer le contenu d'un fichier d'une base distante sous Lotus Domino). Merci beaucoup pour ta réponse, je vais essayer et peut-être réussir à poser une balise résolu sur mon post.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    InputSource is = new InputSource(new StringReader(args));
     
    			Document document = constructor.parse(is);
    ça compile et voilà l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [Fatal Error] :1:6: La cible de l'instruction de traitement correspondant à "[xX][mM][lL]" est interdite.
    org.xml.sax.SAXParseException: La cible de l'instruction de traitement correspondant à "[xX][mM][lL]" est interdite.
    	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    	at Comp_Legris1_Dolly.main(Comp_Legris1_Dolly.java:83)
    	at JavaAgent.NotesMain(JavaAgent.java:113)
    	at lotus.domino.AgentBase.runNotes(Unknown Source)
    	at lotus.domino.NotesThread.run(Unknown Source)
    [/code]

  9. #9
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Essaye de mettre <?xml ... plutôt que <?XML...

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Et le miracle s'accmplit !!!!!!!!! Merci une semaine pour transférer ma classe sur un agent Domino, allez à l'apéro maintenant.

    et MMMMMEEEEEERRRRRRCCCCCCIIIIIIII!!!!!

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

Discussions similaires

  1. Problème de parsing simple de fichier texte
    Par nikko49 dans le forum Langage
    Réponses: 5
    Dernier message: 14/01/2013, 08h25
  2. [JAXB] Créer Fichier XML en Java (problème de parsing)
    Par rogersdrejordan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 13/06/2012, 19h02
  3. [JDOM] Problème avec le parsing du fichier XML
    Par nounouuuuu201186 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/02/2012, 14h08
  4. [JDOM] Problème de parsing d'un fichier .xml
    Par gaet_045 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 07/07/2009, 16h38
  5. [XSL] Problème de parse d'un fichier avec Namspaces
    Par mpereg dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/02/2007, 19h24

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