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 :

Creer et lire un fichier XML


Sujet :

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

  1. #1
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut Creer et lire un fichier XML
    Bonjour à tous,
    Je souhaite créer un fichier XML avec le contenu de mon objet (java) de mon wbeservice. Cet objet contient tout le contenu de mon web service.
    Y a t il un moyen simple pour transformer cet objet en fichier XML avec son contenu est les balises apropriées !
    J'ai vu que il existait SAX et JDOM !
    Merci pour votre reponse !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Qu'est-ce que tu utilises pour faire ton webservice?

    Si tu utilises une webapp style Axis tu peux générer un client
    qui te permettra de ne pas avoir à te farcir le parsing de la
    réponse du webservice

  3. #3
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut
    J'utilise AXIS !
    J'ai mon WSDL.....mon service java avec ma reponse java !
    J'aimerais eviter le parsing !
    Comment generer un client pour eviter cela !
    As tu un exemple ?
    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Normalement dans le package axis2 t'as des exécutables
    qui te permettent de générer les clients, wsdl2java un truc du genre.
    Tu dois lui passer en paramètre l'adresse du wsdl
    (il faut donc que ta webapp soit lancée)

    L'executable te génère un "stub", que tu dois initialiser.
    Cet objet contient plusieurs inner class qui correspondent
    au différents services de ton webservice, stubTonServiceRequest,
    stubTonServiceRespone, etc...

    tu devras à chaque fois créer les objets "request" et les passer au stub,
    puis récupérer la "response".

    j'avais un petit tuto mais je ne le retrouve plus...
    goooooooooooooogle

  5. #5
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut
    Ok merci, mais il n'y aura pas plus simple par l'intermediaire de mon objet reponse que j'ai.....pour creer directement un fichier XML !

  6. #6
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut
    Voici l'allure de mon webservice :

    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
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    <export>
             <version001>
                   <listeRessource>
                      <Ressource>
                         <NAME>fabrice</NAME>
                         <TRI>FDN</TRI>
                         <CDSX>H</CDSX>
                      </Ressource>
                 </listeRessource>
             </version001>
    </export>
    </soapenv:Body>
    </soapenv:Envelope>
    Dans ma classe java où je retourne l'objet "reponse" , j'ai ajouté du code pour creer un fichier xml et le parser :

    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
     
     
    //Pour creer un fichier xml avec le contenu de mon objet "reponse"
    String chemin = "D:/Mes Documents/";
    chemin += "export.xml";
     
    try{
    	File file = new File(chemin);
    	PrintWriter fileToWrite = new PrintWriter(new BufferedWriter(new FileWriter(file.getAbsolutePath())));
    	fileToWrite.println(reponse);
    	fileToWrite.close();
    	log.debug("ecrireFichier OK");
    	}
    catch (IOException e) 
              {
    	System.err.println("Erreur lors de l'ecriture du fichier");
    	log.debug("ecrireFichier KO");
    	}
     
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
    SAXParser parseur = fabrique.newSAXParser();
    File fichier = new File("D:/Mes Documents/export.xml");
    DefaultHandler gestionnaire = new listeRessourceHandler();
    parseur.parse(fichier, gestionnaire);
    Ensuite j'ai créé ma classe listeRessourceHandler
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    public class listeRessourceHandler extends DefaultHandler {
    	//résultats de notre parsing
    	private List<listeRessource> version001;
     
    	private listeRessource listeRessource;
     
    	//flags nous indiquant la position du parseur
    	private boolean inVersion001, inListeRessource, inRessource, inIDUTSI, inNAME, inTRI, inCDSX;
     
    	//buffer nous permettant de récupérer les données 
    	private StringBuffer buffer;
     
    	// simple constructeur
    	public listeRessourceHandler() {	 
    		super();
    	}
     
    	//détection d'ouverture de balise
    	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    		if (qName.equals("verion001")) {
    	version001 = new LinkedList<listeRessource>();
    	inVersion001 = true;
    		} else if (qName.equals("listeRessource")) {
    			listeRessource = new listeRessource();
     
    			inListeRessource = true;
    		} else {
    			buffer = new StringBuffer();
    			if (qName.equals("NAME")) {
    				inNAME = true;
    			} else if (qName.equals("TRI")) {
    				inTRI = true;
    			} else if (qName.equals("CDSX")) {
    				inCDSX = true;
    			} else {
    				//erreur, on peut lever une exception
    				throw new SAXException("Balise " + qName + " inconnue.");
    			}
    		}
    	}
     
    	//détection fin de balise
    	public void endElement(String uri, String localName, String qName) throws SAXException {
    		if (qName.equals("version001")) {
    			inVersion001 = false;
    		} else if (qName.equals("listeRessource")) {
    			version001.add(listeRessource);
    			listeRessource = null;
    			inListeRessource = false;
    		} else if (qName.equals("NAME")) {
    			listeRessource.setNAME(buffer.toString());
    			buffer = null;
    			inNAME = false;
    		} else if (qName.equals("TRI")) {
    			listeRessource.setTRI(buffer.toString());
    			buffer = null;
    			inCIPER = false;
    		} else if (qName.equals("CDSX")) {
    			listeRessource.setCDSX(buffer.toString());
    			buffer = null;
    			inCDSX = false;
    		} else {
    			//erreur, on peut lever une exception
    			throw new SAXException("Balise " + qName + " inconnue.");
    		}
    	}
     
    	//détection de caractères
    	public void characters(char[] ch, int start, int length) throws SAXException {
    		String lecture = new String(ch, start, length);
    		if (buffer != null)
    			buffer.append(lecture);
    	}
     
    	//début du parsing
    	public void startDocument() throws SAXException {
    		System.out.println("Début du parsing");
    	}
     
    	//fin du parsing
    	public void endDocument() throws SAXException {
    		System.out.println("Fin du parsing");
    		System.out.println("Resultats du parsing");
    		for (liste6RESTRessource p : version001) {
    			System.out.println(p);
    		}
    	}
    Et bien sur, j'ai ma classe listeRessource
    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
     
    public class listeRessource {
     
    	private String NAME, TRI, CDSX;
     
    	public void Ressource() {
    	}
     
    	public String getCDSX() {
    		return CDSX;
    	}
     
    	public void setCDSX(String cdsx) {
    		this.CDSX = cdsx;
    	}
     
    	public String getNAME() {
     
    		return NAME;
    	}
     
    	public void setNAME(String name) {
    		this.NAME = name;
    	}
     
    	public String getTRI() {
    		return TRI;
    	}
     
    	public void setTRI(String tri) {
    		this.TRI = tri;
    	}
     
    	public String toString() {
    		return new StringBuffer("NAME : ").append(NAME).append(", ").append("TRI: ").append(TRI).append(", ").append("CDSX : ")
    				.append(CDSX).append(", ").
    toString();
    	}
    }
    Je ne sais pas si le principe est bon, je me suis inspiré du tutorial de SAX http://java.developpez.com/faq/xml/?page=sax

    Mais en tout cas, ca ne fonctionne pas mon principe !
    Je ne sais pas si c'est la bonne methode pour recuperer le contenu de mon objet "reponse" qui contient tout le contenu du webservice !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    si tu veux parser "à la main" la réponse il faut que tu actives le mode REST
    d'axis

  8. #8
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut
    Ok, merci pour le conseil mais si je peux eviter de parser à la main je serais "happy"....j'aimerais de suite convertir mon objet "reponse" (son contenu) dans un fichier XML !
    Bien sur , je peux creer un fichier XML mais dedans j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Invalid at the top level of the document. Error processing resource 'file:///D:/Mes Documents/export.xml'. Line 1...
     
    com.outils.reponses.ReponseExport@b5521e3b
    ^
    Ce qui est normal !

    Est il possible de "récupérer uniquement la structure XML du retour de mon web Services"...et l'enregistrer directement dans un fichier XML !Ou alors recuperer ma réponse SOAP !
    Axis propose t il des classes pour cela ?
    Merci !

  9. #9
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par philmtx Voir le message
    si tu veux parser "à la main" la réponse il faut que tu actives le mode REST
    d'axis
    Ok, comment activer ce mode REST ?

    Quand je fais :
    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
     
    String chemin = "D:/Mes Documents/";
     
     
    			chemin += "export.xml";
     
    			try{
     
    				File file = new File(chemin);
     
    				PrintWriter fileToWrite = new PrintWriter(new BufferedWriter(new FileWriter(file.getAbsolutePath())));
    				fileToWrite.println(reponse);
     
    				fileToWrite.close();
    				log.debug("ecrireFichier OK");
     
    			}
    			catch (IOException e) {
     
    				System.err.println("Erreur lors de l'ecriture du fichier");		
    				log.debug("ecrireFichier KO");
    			}
     
     
    			SAXParserFactory fabrique = SAXParserFactory.newInstance();
    			System.out.println("test1 :"+fabrique);
    			SAXParser parseur = fabrique.newSAXParser();
    			System.out.println("test2 :"+parseur);
                File fichier = new File("D:/Mes Documents/export.xml");
                System.out.println("test3 :"+fichier);
                DefaultHandler gestionnaire = new listeRessourceHandler();
                System.out.println("test4 :"+gestionnaire);
                parseur.parse(fichier, gestionnaire);
                System.out.println("test5 :");
     
    return reponse;

    Les messages dans ma console sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    DEBUG 10:19:03 com.apis.service.outils.Export - ecrireFichier OK
    test1 :com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl@1bb73b0
    test2 :com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl@1a84fae
    test3 :D:\Mes Documents\export.xml
    test4 :com.apis.service.outils.sax.liste6RessourceHandler@1075056
    Début du parsing
    Il ne fais pas le parsing, pourquoi ?
    Merci pour votre aide ! J'ai du mal avec Sax!

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

Discussions similaires

  1. Créer et lire un fichier xml
    Par Bruno1905 dans le forum C++Builder
    Réponses: 14
    Dernier message: 13/06/2007, 12h11
  2. Réponses: 1
    Dernier message: 17/01/2006, 08h42
  3. [DOM XML] Lire un fichier xml
    Par axel-erator dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/12/2005, 23h36
  4. lire un fichier xml
    Par stephanie5 dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/11/2005, 17h34
  5. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 16h52

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