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 �clair�
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    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 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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 �clair�
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    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 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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