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 :

[Digester] XML et parsin to objet [JDOM]


Sujet :

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

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut [Digester] XML et parsin to objet
    Bonjour.

    je suis nouveau sur ce mailing list.

    je travail sur un ensemble de services qui vont etre appelés par des application metier.

    l'echage se fais grace a des flux XML. je trouve des probleme a parser ce flux en objets (j'ai utilisé JDOM puis le Digester) .

    voici un exemple de flux

    Code xml : 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
    <?xml version="1.0"?>
    <L T=".">
    	<L T="V">2.0.0</L>
    	<L T=".H" N="MOM">
    		<L N="ORI">MIDW</L>
    		<L N="SFO">DEM</L>
    		<L N="SFD">GEST_SASDEM_PLGS</L>
    		<L N="SEC">1110+NPROJ4I +CCD479FE72119DB48325E7170EF2FC35+</L>
    		<L N="WO1">PF52-D4E+0A60F868+30087+++</L>
    		<L N="EM1">20071115173541886AONNN+30+</L>
    		<L N="81022E0A0000">000000NOL+NIUP0ADL+0001D39B+</L>
    	</L>
    	<L T="." N="SASE21">
    		<L T="S" N="STE">NI</L>
    		<L T="S" N="ACT_STD">N</L>
    		<L T="S" N="COD_PAY">FR</L>
    		<L T="S" N="COD_LNG">FR</L>
    		<L T="I" N="NBR_RSS">14</L>
     
    		<L T="." N="TAB_RSS_TAB">
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL001G</L>
    			</L>
     
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL001V</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL002G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL002P</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL002V</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL003G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL004G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL005V</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL006V</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL007G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL008W</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL009G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL010G</L>
    			</L>
    			<L T="." N="LTAB_RSS_TAB">
    				<L T="S" N="RSS_NOM">PFTL011V</L>
    			</L>
    </L>
    </L>
    </L>

    si je passe par digester je doit creer une classe L avec des attribus T et N et une collections d'objet de type L pour construire l'arborescence d'objet,

    Merci de me proposer ou de m'eclaircir.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Et quels problèmes as-tu exactement ??

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut XML et parsin to object
    Citation Envoyé par natha Voir le message
    Et quels problèmes as-tu exactement ??
    a vrai dire je ne sai pas comment utiliser le Digester puisque

    log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" java.lang.NullPointerException
    at org.apache.commons.digester.Digester.createSAXException(Digester.java:2540)
    at org.apache.commons.digester.Digester.createSAXException(Digester.java:2566)
    at org.apache.commons.digester.Digester.endElement(Digester.java:1061)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:559)
    at org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:646)
    at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2978)
    at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:918)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleEndElement(XMLDocumentFragmentScannerImpl.java:1145)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:988)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1446)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
    at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
    at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
    at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
    at org.apache.commons.digester.Digester.parse(Digester.java:1605)
    at com.eai.sibea.sas.sasgapel.TestL.main(TestL.java:49)

    la classe coresspondante est :

    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
    public class L {
     
    	private String T;
    	private String N;
    	private Set<L> L;
     
     
     
    	public L() {
    	  this.N= N;
    	  this.T=T;
    	    this.L = new HashSet<L>();
    	  }
     
    	public void addL(L l ) {
    	     L.add(l);
     
    	  }
     
     
    	public Set<L> getL() {
    		return L;
    	}
    	public void setL(L l) {
    		L = (Set<L>) l;
    	}
    	public String getN() {
    		return N;
    	}
    	public void setN(String n) {
    		N = n;
    	}
    	public String getT() {
    		return T;
    	}
    	public void setT(String t) {
    		T = t;
    	}
     
    }

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Maï maï, ton code est pas très cool à lire avec les majuscules minuscules mélangées pour les instances et nom de classe...
    Par convention les noms de classes commencent avec une majuscule, les instances par une minuscule.

    Sinon ta méthode setL(...) a une signature incorrecte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public void setL(Set<L> l) {
    		L = l;
    	}

  5. #5
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut XML et parsin to object
    Citation Envoyé par natha Voir le message
    Maï maï, ton code est pas très cool à lire avec les majuscules minuscules mélangées pour les instances et nom de classe...
    Par convention les noms de classes commencent avec une majuscule, les instances par une minuscule.

    Sinon ta méthode setL(...) a une signature incorrecte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public void setL(Set<L> l) {
    		L = l;
    	}


    j'ai changé le class
    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
    package com.eai.sibea.sas.sasgapel;
     
    import java.util.HashSet;
    import java.util.Set;
     
    public class L {
     
    	private String t;
    	private String n;
    	private Set<L> list;
     
     
     
    	public L() {
    	  this.n= n;
    	  this.t=t;
    	    this.list = new HashSet<L>();
    	  }
     
    	public void addL(Set<L> li ) {
    	     list.add((L) li);
     
    	  }
     
    	public Set<L> getList() {
    		return list;
    	}
     
    	public void setList(Set<L> list) {
    		this.list = list;
    	}
     
    	public String getN() {
    		return n;
    	}
     
    	public void setN(String n) {
    		this.n = n;
    	}
     
    	public String getT() {
    		return t;
    	}
     
    	public void setT(String t) {
    		this.t = t;
    	}
     
     
     
    }
    ainsi la classe de test
    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
    73
    74
    75
    76
    77
    package com.eai.sibea.sas.sasgapel;
     
     
    import java.io.File;
    import java.io.IOException;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
     
    import org.apache.commons.digester.Digester;
    import org.apache.commons.digester.ExtendedBaseRules;
    import org.jdom.Document;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.xml.sax.SAXException;
     
    public class TestL {
     
     
    	@SuppressWarnings("unchecked")
    	public static void main(String args[]) throws JDOMException, IOException, SAXException
    	{
     
    		Digester digester = new Digester();
    		digester.setValidating( false );
     
     
     
     
    		digester.addObjectCreate("L", L.class);
     
     
    		//digester.addBeanPropertySetter( "L", "L" );
    		//digester.addBeanPropertySetter( "L/L", "L" );
    		//digester.addBeanPropertySetter( "L/L/L", "L" );
     
     
     
     
     
    		digester.addSetProperties( "L", "T", "N" );
     
    		digester.addSetNext("L/L", "setList");
     
    		//digester.addSetNext("L/L/L", "addL");
     
     
    		L l =  (L) digester.parse( "C:/aaa.xml" );
    		//  Collection c = l.getL();
     
            /*
            for (Iterator it = l.iterator(); it.hasNext();)
            {
            	L a =(L)it.next();
            	*/
     
    		Collection k=l.getList();
     
    		for (Iterator it = k.iterator();it.hasNext();)
    		{
    			L p =(L) it.next();
    			System.out.println("ttttttttttttttttt "+ p.getN());
    			System.out.println("nnnnnnnnnnnnnnnnn"+p.getT());
    		}
     
     
           // }
     
     
    	}
     
     
     
     
     
    }
    et le message d'erreur eest le meme
    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
    log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" java.lang.NullPointerException
    	at org.apache.commons.digester.Digester.createSAXException(Digester.java:2540)
    	at org.apache.commons.digester.Digester.createSAXException(Digester.java:2566)
    	at org.apache.commons.digester.Digester.endElement(Digester.java:1061)
    	at org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:559)
    	at org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:646)
    	at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2978)
    	at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:918)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleEndElement(XMLDocumentFragmentScannerImpl.java:1145)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:988)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1446)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
    	at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
    	at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
    	at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
    	at org.apache.commons.digester.Digester.parse(Digester.java:1605)
    	at com.eai.sibea.sas.sasgapel.TestL.main(TestL.java:49)

  6. #6
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    J'avais pas vu mais le addL est faux aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public void addL(L li ) {
    	     list.add(li);
    	  }
    défini ton setNextRule sur cette méthode.

  7. #7
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut
    Voila addL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void addL(Set<L> li ) {
    	     list.add((L) li);
     
    	  }
    le message d'erreur est :
    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
    log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" java.lang.NoSuchMethodException: No such accessible method: addL() on object: com.eai.sibea.sas.sasgapel.L
    	at org.apache.commons.digester.Digester.createSAXException(Digester.java:2540)
    	at org.apache.commons.digester.Digester.createSAXException(Digester.java:2566)
    	at org.apache.commons.digester.Digester.endElement(Digester.java:1061)
    	at org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:559)
    	at org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:646)
    	at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2978)
    	at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:918)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleEndElement(XMLDocumentFragmentScannerImpl.java:1145)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:988)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1446)
    	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
    	at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
    	at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
    	at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
    	at org.apache.commons.digester.Digester.parse(Digester.java:1605)
    	at com.eai.sibea.sas.sasgapel.TestL.main(TestL.java:51)

  8. #8
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut
    Desolé mais la méthodes addL doit recevoir en parametre une instance de type L

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void addL(L li ) {
    		if (null == this.list) {
                this.list = new HashSet<L>();
            }
            this.list.add(li);
     
     
    	  }

  9. #9
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut
    c'est resolu le probleme résidai dans l'instanciation de l'objet Set .

    Merci.

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

Discussions similaires

  1. [XSD] [XML Schemas] Valider un Objet sur base du schéma
    Par Invité dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/03/2009, 14h10
  2. [XML] XML et tableau d'objets
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 30/01/2007, 14h44
  3. [XML] transport d'un objet entre C++ et JAVA
    Par jobigoud dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/08/2006, 11h02
  4. parsing XML et création d'objet : Organisation
    Par chris_wafer_2001 dans le forum Bibliothèques
    Réponses: 14
    Dernier message: 27/03/2006, 01h14
  5. [C#] Créer un fichier Xml à partir d'un objet
    Par Troopers dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/09/2004, 13h23

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