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 :

Lire un fichier de conf de type xml, contenu dans un aar.


Sujet :

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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut Lire un fichier de conf de type xml, contenu dans un aar.
    Bonjour,

    Je build mon projet dans un .aar (=.jar) avant de le déployer avec axis2.
    L'architecture de mon .aar est la suivante :

    - mon
    - package
    maClasse.class
    - conf
    maConf.xml

    Le fichier "maConf.xml" contient des données de configuration de mon programme "maClasse.class".
    J'essaye donc de lire le xml depuis mon programme, mais ça ne fonctionne pas.

    Voici mon code pour lire le xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    InputSource sourceConf = new InputSource(new InputStreamReader(getClass().getResourceAsStream("/conf/maConf.xml")));
    XPathFactory fabrique = XPathFactory.newInstance();
     XPath xpath = fabrique.newXPath();
    XPathExpression exp = xpath.compile("<expression XPATH>");
    String param = (String)exp.evaluate(sourceConf,XPathConstants.STRING);
    Quand j'essai de lire j'obtient l'erreur : "java.io.IOException: Stream closed"

    Pouvez-vous me dire quelle est mon erreur ?

    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Points : 459
    Points
    459
    Par défaut
    Ajoute ce bout de code intermediaire pour t'assurer que le fichier est accessible dans le classpath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String CONFIG_FILE = "/conf/maConf.xml";
    InputStream in = getClass().getResourceAsStream(CONFIG_FILE);
    if(in==null) {
      throw new IllegalStateException("Cannot find "+CONFIG_FILE);
    }
    InputSource sourceConf = new InputSource(in);
    ...

  3. #3
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Je crois que le probleme vient du fait que tu utilise getClass. Vu que le fichier est contenu dans un autre dossier, tu dois plutot utiliser getClassLoader().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    InputSource sourceConf = new InputSource(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("/conf/maConf.xml")));
    XPathFactory fabrique = XPathFactory.newInstance();
     XPath xpath = fabrique.newXPath();
    XPathExpression exp = xpath.compile("<expression XPATH>");
    String param = (String)exp.evaluate(sourceConf,XPathConstants.STRING);

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Avec la solution de darrylsite, je n'ai aucun retour : pas d'exception, et ça ne fonctionne pas.
    Avec la solution de bugsan, j'ai l'exception "java.io.EOFException: Unexpected end of ZLIB input stream".

    Qu'est ce que cela signifie ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Comme je vous le disais, mon projet se trouve dans une archive .aar.
    J'ai découvert que c'est en fait une archive Jar basée sur le stardard ZIP.

    Donc je pense que pour lire mon fichier XML, il faut que je fasse comme si je lisais un fichier contenu dans un zip.
    C'est possible ? vous avez du code sous la main ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Ok, j'ai avancé un petit peu, voilà mon code :

    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
    String CONFIG_FILE = "/conf/maConf.xml";
    InputStream in = getClass().getResourceAsStream(CONFIG_FILE);
    if(in==null) {
      throw new IllegalStateException("Cannot find "+CONFIG_FILE);
    }
     
    ZipInputStream zip = new ZipInputStream(in);
    if(zip==null) {
      throw new IllegalStateException("Cannot find ZIP "+CONFIG_FILE);
    }
     
    InputSource sourceConf = new InputSource(zip);
    if(sourceConf==null) {
      throw new IllegalStateException("Cannot find InpurSource "+CONFIG_FILE);
    }
     
    System.out.println("1");
    XPathFactory fabrique = XPathFactory.newInstance();
    System.out.println("2");
    XPath xpath = fabrique.newXPath();
    System.out.println("3");
     
    XPathExpression exp = xpath.compile("<expression XPATH>");
    String param = (String)exp.evaluate(sourceConf,XPathConstants.STRING);
    System.out.println("4");
    Sur la sortie standard j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1
    2
    3
    [Fatal Error] :-1:-1: Premature end of file.
    Donc j'en déduis que maintenant le programme me trouve mon fichier xml.
    Et le problème se situe sur mon avant dernière ligne de code, au moment de faire le "exp.evaluate();"

    L'exception levée est la suivante : "org.xml.sax.SAXParseException: Premature end of file."

    Vous savez où peut se situer le problème ?

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Moi, j'ai cette erreur quand le fichier xml est vide ou mal formé.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Voilà mon XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <conf>
        <compte name="default">
            <login>monLogin</login>
            <password>monPass</password>
            <addrServerSmtp>smtp.gmail.com</addrServerSmtp>
            <portServerSmtp>465</portServerSmtp>
            <authentication>true</authentication>
            <sslConnect>true</sslConnect>
        </compte>
    </conf>
    Y'a rien de bien compliqué... aurais-je oublié qque chose ?

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Et si tu print le InputSource sourceConf, c'est bien ce xml qui sort?
    Sinon c'est quoi le chemin xpath utilisé? (c'est sûr que "<expression XPATH>" il oit pas aimer).

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    le xpath est : "//compte[@name='default']/login"
    Comment je fais pour print l'InputSource ?

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/07/2008, 14h29
  2. Réponses: 7
    Dernier message: 04/07/2008, 17h25
  3. Réponses: 3
    Dernier message: 07/02/2008, 13h34
  4. Lire un fichier quelque soit son type en php
    Par sonia5 dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2007, 09h27
  5. Réponses: 14
    Dernier message: 28/07/2006, 10h20

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