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 :

Lecture d'un fichier pom.xml


Sujet :

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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut Lecture d'un fichier pom.xml
    Bonjour tout le monde,

    J'ai un fichier "pom.xml" que je souhaite lire et récupérer la valeur de version.
    voici le contenue du fichier pom:
    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
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
     
    	<groupId>fr.societe.rh.ejb</groupId>
    	<artifactId>rhserver</artifactId>
    	<version>1.0.0-SNAPSHOT</version>
    	<packaging>ejb</packaging>
    	<name>RH Server</name>
     
    	<dependencies>
    		<!-- External APIs -->
    		<dependency>
    			<groupId>javax.ws.rs</groupId>
    			<artifactId>javax.ws.rs-api</artifactId>
    			<version>2.0.1</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax</groupId>
    			<artifactId>javaee-api</artifactId>
    			<version>${javaee-version}</version>
    			<scope>provided</scope>
    		</dependency>
     
    	</dependencies>.....
    </project>
    Alors comme j'ai dis, moi je souhaite récupérer la valeur de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <version>1.0.0-SNAPSHOT</version>
    ,j'ai utilisé le jdom, voici la classe que j'ai implémenté :

    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
    package utilitaire;
     
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    public class Launcher {
     
    	public static void main(String[] args) {
     
    		  SAXBuilder builder = new SAXBuilder();
    		  File xmlFile = new File("C:\\Users\\Rachid\\Desktop\\pom.xml");
     
    		  try {
                if(xmlFile.exists()){
                	Document document = (Document) builder.build(xmlFile);
        			Element rootNode = document.getRootElement();
        			List list = rootNode.getChildren("version");
     
        			for (int i = 0; i < list.size(); i++) {
     
        			   Element node = (Element) list.get(i);
     
        			}
     
                }
     
    		  } catch (IOException io) {
    			System.out.println(io.getMessage());
    		  } catch (JDOMException jdomex) {
    			System.out.println(jdomex.getMessage());
    		  }
    		}
     
    }
    Le problème que j'ai c'est que l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List list = rootNode.getChildren("version");
    me renvoie la liste vide.
    J'ai essaiyé plusieurs example mais ça pas marché.

    SVP avez-vous une piste ou un example qui marche?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    JDOM est sensible au namespace, le xmlns="http://maven.apache.org/POM/4.0.0" que tu vois au début.
    Le namespace fait partie du nom d'un élément, on ne peut donc pas juste demander l'élément "version" sans namespace, il faut demander l'élément "version" de namespace "http://maven.apache.org/POM/4.0.0"

    Ça peut se faire ainsi, dans ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final Namespace POM_NS = Namespace.getNamespace("http://maven.apache.org/POM/4.0.0");
    Et là où tu en as besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rootNode.getChildren("version", POM_NS);
    Avec ton fichier, ça va marcher.


    ... Maintenant le problème. JDOM est sensible aux namespaces, oui, conformément aux recommandations XML. Mais Maven, lui, ne l'est pas. Du coup, certains outils génèrent des POM sans namespace, ou même avec le mauvais namespace, et comme ça ne cause pas de problème, personne ne se plaint. En plus, va savoir si Maven ne définira pas une prochaine version de POM qui marche à peu près pareil mais avec un autre namespace...

    Il est possible, que tu aies besoin d'ignorer les namespaces toi aussi. Dans ce cas, tu peux faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
     * Récupère un élément enfant de l'élément donné, en fonction de son nom.
     * Ignore les namespaces, ce qui est intéressant pour les POM aux namespaces peu fiables. Le nom vérifié est le local name, pas le qualified name.
     */
    private static Element getPOMChild(Element parent, String childName) {
      return parent.getChildren().stream()
        .filter(child -> child.getName().equals(childName))
        .findFirst().get();
    }
    Et ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element version = getPOMChild(rootNode, "version");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    ca marche très bien, sauf il y' a pas un moyen de rendre la la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Namespace.getNamespace("http://maven.apache.org/POM/4.0.0")
    dynamique? par exemple si on change la le namespace en "http://maven.apache.org/POM/4.0.1" ça va pas marcher.

    Merci d'avance pour votre aide.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bah euh... C'est un peu le problème. Si le namespace est pas le même, ça veut dire que le POM est pas le même, et donc que tu peux pas faire la même chose que si c'était le même.
    Genre l'élément <version> n'existerait plus ou ne serait pas au même endroit ou aurait un autre nom.
    Du coup il n'y a pas de gestion dynamique qui tienne.


    ... Du moins c'est le principe en XML. Mais il est vrai que Maven ne gérant pas les namespaces, on peut tomber sur des POM avec un namespace farfelu.
    Auquel cas, l'idée ne serait pas de gérer dynamiquement le namespace (ça ne veut rien dire, comme dit plus haut) mais de simplement ignorer les namespaces.
    Et je t'ai déjà indiqué comment ignorer les namespaces.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème à la compilation avec un fichier .gwt.xml
    Par M€lK!oR dans le forum GWT et Vaadin
    Réponses: 8
    Dernier message: 10/09/2009, 19h30
  2. Problème de servlet dans mon fichier web.xml
    Par bel09 dans le forum Spring
    Réponses: 4
    Dernier message: 07/05/2009, 17h26
  3. Problème déploiement et disparition du fichier web.xml
    Par Notre-Dame dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 04/03/2009, 17h43
  4. [ARCHIVA]fichier pom.xml , dependencies et redirection
    Par DanielW33 dans le forum Maven
    Réponses: 1
    Dernier message: 03/08/2007, 06h55
  5. probleme fichier pom.xml
    Par marcxa44 dans le forum Maven
    Réponses: 2
    Dernier message: 19/05/2007, 23h10

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