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 :

sauvegarder un objet java avec XML


Sujet :

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

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut sauvegarder un objet java avec XML
    Bonjour à tous !

    J'ai une question à propos de la sauvegarde d'objet Java avec XML.
    J'ai un document xml de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <BALISE 1>
             <BALISE 2  objet="monobjet" />
    </BALISE 1>
    Et je voudrais savegarder l'objet java monobjet en le mettant dans l'attribut objet de BALISE2.
    La classe monobjet implemente serializable. Je ne sais pas s'il faut que j'utilise des ObjectInputStream et des ObjectOutputStream
    Le but bien sur est de pouvoir lire le fichier xml et de charger l'objet monobjet.

    Merci d'avance.

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Utilise JDOM (voir les tutos) pour lire/écrire au bon endroit dans le fichier XML, et ObjectInputStream ou ObjectOutputStream pour lire/écrire la sérialisation de ton objet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    oui ok je suis d'accord avec ca.
    Mais comment dire "je veux ecrire ca, la" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // ajout de l'attribut objet
    Attribute obj = new Attribute("objet", monobjet);
    racine.setAttribute(obj);
    Avec ce morceau de code je sais que je suis bien placé mais je ne sais pas comment utilisé ObjectOutputStream et ObjectInputStream pour que ca ecrive a cet endroit.

  4. #4
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Un petit tour du côté de la !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    ok mais je ne connais pas le fichier de sortie dans la classe ou je veux ecrire mon objet.
    Y'a t'il donc un moyen de dire. Je veux ecrire mon objet ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try {
    	FileOutputStream fos = new FileOutputStream("C:/toto.xml");
    	ObjectOutputStream oos = new ObjectOutputStream(fos);
    	// ajout de l'attribut objet
    	Attribute obj = new Attribute("objet", oos.writeObject(element));
    	racine.setAttribute(obj);
    	oos.close();
    } catch (IOException e) {
    	e.printStackTrace();
    }
    Mais cela n'est pas possible, n'est ce pas ?

  6. #6
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try {
    	ByteArrayOutputStream tmp = new ByteArrayOutputStream();
    	ObjectOutputStream oos = new ObjectOutputStream(tmp);
            oos.writeObject(element);
    	// ajout de l'attribut objet
    	Attribute obj = new Attribute("objet", oos.toString("UTF-8"));
    	racine.setAttribute(obj);
    	oos.close();
    } catch (IOException e) {
    	e.printStackTrace();
    }
    Bon résumé à garder en mémoire (article developpez.com en plus).


  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    g_rare, lerci pour le temps que tu prends a m'expliquer mais je ne comprends toujours pas le code qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Attribute obj = new Attribute("objet", oos.toString("UTF-8"));
    La methode toString() me donne la reference de l'objet ObjectOutputStream.
    Lorsque j'ecris dans mon fichier, je trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ELEMENT objet="java.io.ObjectOutputStream@18aaa1e" />
    Ce qui je pense ne va pas lors de la lecture de ce fichier pour recuperer l'objet.
    Merci d'avance

  8. #8
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Autant pour moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Attribute obj = new Attribute("objet", tmp.toString("UTF-8"));
    http://java.sun.com/j2se/1.4.2/docs/...a.lang.String)
    Converts the buffer's contents into a string, translating bytes into characters according to the specified character encoding.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    ok merci beaucoup, tu m'as été d'une aide précieuse.
    Cependant, allez derniere chose c'est que le string serialisable n'est pas accepté par XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" org.jdom.IllegalDataException:
    0x0 is not a legal XML character.
    Cela veut dire que je dois prendre un autre encodage ?


    [EDIT] j'ai des petits carrés qui apparaissent dans la chaine.

  10. #10
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // serialisation sous forme binaire
    byte[] octets = tmp.toByteArray();
    // representation hexadecimale
    // utilisant l'API Jakarta Commons Codec (http://jakarta.apache.org/commons/codec/userguide.html) par exemple
    char[] hexadecimal = org.apache.commons.codec.binary.Hex.encodeHex(octets);
    // la serialisation de ton objet est formatee en notation hexadecimale
    Attribute obj = new Attribute("objet", new String(hexadecimal) );
    // aucune probleme dans ton xml car la notation hexadecimal n'utilise que des caracteres alphanumeriques

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    ok je vais regarder merci beaucoup pour ton aide.

  12. #12
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Pense à mettre un sur la discussion dès que ça marche....

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    ok merci bcp c'est nikel ca marche super.
    Merci beaucoup g_rare
    voici le code pour les autres :
    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
     
    ByteArrayOutputStream tmp = new ByteArrayOutputStream();
    ObjectOutputStream oos = null;
    try {
    	oos = new ObjectOutputStream(tmp);
    	oos.writeObject(element);
    } catch (IOException e) {
    	e.printStackTrace();
    }
    // serialisation sous forme binaire
    byte[] octets = tmp.toByteArray();
    // representation hexadecimale
    char[] hexadecimal = org.apache.commons.codec.binary.Hex
    				.encodeHex(octets);
    // la serialisation de ton objet est formatee en notation hexadecimale
    Attribute obj = new Attribute("objet", new String(hexadecimal));
    // aucune probleme dans ton xml car la notation hexadecimal n'utilise
    // que des caracteres alphanumeriques
    racine.setAttribute(obj);
    try {
    	oos.close();
    } catch (IOException e) {
            e.printStackTrace();
    }

  14. #14
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    Si le format de sauvegrade n'est pas important pour toi, c'est à dire que tu veux juste faire de la sauvegarde et du load de tes objects sans te soucier de la façon dont c'est fait tu peux jetter un coup d'oeil à: XMLEncoder et XMLDecoder présent depuis la 1.4


    Un exemple:
    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
     
    public static void main(String[] args)
          throws FileNotFoundException
      {
        List myObj = new ArrayList();
        myObj.add("obj1");
        myObj.add("obj2");
     
        System.out.println("before serialization:" + myObj);
     
        XMLEncoder encoder = new XMLEncoder(new FileOutputStream("myObj.xml"));
        encoder.writeObject(myObj);
        encoder.close();
     
        XMLDecoder decoder = new XMLDecoder(new FileInputStream("myObj.xml"));
        myObj = (List) decoder.readObject();
        decoder.close();
     
        System.out.println("after deserialization:" + myObj);
      }

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

Discussions similaires

  1. [XStream] Sérialiser un conteneur d'objet java en xml
    Par nitikhor dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 19/03/2012, 18h00
  2. sauvegarder un objet java dans un attribut xml
    Par younder dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 06/01/2009, 11h15
  3. Réponses: 1
    Dernier message: 12/09/2008, 21h17
  4. [AJAX] Comment recuperer la propriété d'un objet Java avec XmlHttpRequest ?
    Par framus.class dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/02/2008, 09h58
  5. comment utiliser des objets java avec ireport
    Par Invité dans le forum iReport
    Réponses: 0
    Dernier message: 28/07/2007, 23h18

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