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

Persistance des données Java Discussion :

JGraph et sérialisation en XML


Sujet :

Persistance des données Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 22
    Points
    22
    Par défaut JGraph et sérialisation en XML
    bonjour,

    JGraph respectant l'architecture MVC, je dois pouvoir sérialiser mon JGraph de sortes que la présentation et les données soient sauvegardées.

    j essaie d'utiliser XMLEncoder ;
    j'ai étendu la classe JGraph ; ma classe possède un constructeur par défaut ;
    tous les champs de l'API JGraph possèdent des accesseurs et mutateurs ;
    à priori les conditions sont remplient, mais je ne suis pas sûr que l'encodage fonctionne bien, encore moins pour le décodage...

    je ne sais pas trop si cela ne fonctionne pas à cause d'une mauvaise utilisation du JGraph ou du XMLEncoder
    en tout cas je n'arrive pas à retracer le dessin.

    je n ai pas de lever d'exception !

    pouvez vous m'aider SVP ?


    NB :
    OS : windows
    jdk : 1.6
    JGraph : latest

  2. #2
    Membre éclairé 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
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par fouxy
    j'ai étendu la classe JGraph ; ma classe possède un constructeur par défaut ;
    tous les champs de l'API JGraph possèdent des accesseurs et mutateurs ;
    Peut-être que la classe parente de JGraph possède des attributs privés (non-hérités donc inaccessibles) que tu ne peux pas exposer vi des getters/setters ?!...


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    bien,
    a priori, JGraph ne possède pas de champs privé
    elle hérite de JComponent...

    j ai essayé avec l'API XStream, et :
    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
    Exception in thread "AWT-EventQueue-0" com.thoughtworks.xstream.converters.ConversionException: Could not call org.jgraph.graph.GraphLayoutCache.readObject()
    ---- Debugging information ----
    message             : Could not call org.jgraph.graph.GraphLayoutCache.readObject() 
    path                : /org.jgraph.graph.GraphLayoutCache/org.jgraph.graph.GraphLayoutCache/default/listenerList/javax.swing.event.EventListenerList/org.jgraph.plaf.basic.BasicGraphUI$GraphLayoutCacheHandler/outer-class/graph/java.awt.Component/default/font/attributes/values/defined 
    cause-message       : Could not call javax.swing.event.EventListenerList.readObject()
    ---- Debugging information ----
    message             : Could not call javax.swing.event.EventListenerList.readObject() 
    path                : /org.jgraph.graph.GraphLayoutCache/org.jgraph.graph.GraphLayoutCache/default/listenerList/javax.swing.event.EventListenerList/org.jgraph.plaf.basic.BasicGraphUI$GraphLayoutCacheHandler/outer-class/graph/java.awt.Component/default/font/attributes/values/defined 
    cause-message       : Could not call Drawing.readObject()
    ---- Debugging information ----
    message             : Could not call Drawing.readObject() 
    path                : /org.jgraph.graph.GraphLayoutCache/org.jgraph.graph.GraphLayoutCache/default/listenerList/javax.swing.event.EventListenerList/org.jgraph.plaf.basic.BasicGraphUI$GraphLayoutCacheHandler/outer-class/graph/java.awt.Component/default/font/attributes/values/defined 
    cause-message       : defined : defined
    ---- Debugging information ----
    message             : defined : defined 
    path                : /org.jgraph.graph.GraphLayoutCache/org.jgraph.graph.GraphLayoutCache/default/listenerList/javax.swing.event.EventListenerList/org.jgraph.plaf.basic.BasicGraphUI$GraphLayoutCacheHandler/outer-class/graph/java.awt.Component/default/font/attributes/values/defined 
    cause-message       : defined : defined 
    class               : javax.swing.plaf.FontUIResource 
    cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException 
    required-type       : java.util.HashMap 
    ------------------------------- 
    class               : org.jgraph.plaf.basic.BasicGraphUI$GraphLayoutCacheHandler 
    cause-exception     : com.thoughtworks.xstream.converters.ConversionException 
    required-type       : java.util.HashMap

    et y en a plein d'autre ...

    je vais tenter la sérialisation binaire !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    mon probleme est résolu.

    le déclenchement s'est fait grâce à http://www.jgraph.com/forum/viewtopic.php?t=2222

    la solution était :

    garder la même instance de JGraph (ici drawing) ;
    sérialiser juste le GraphModel en faisant attention à la persistence :
    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
    	public static void saveJGraph(Drawing drawing, String path) {
    		XMLEncoder encoder;
    		try {
    			encoder = new XMLEncoder(new BufferedOutputStream(
    					new FileOutputStream(path)));
    			// Better debugging output, in case you need it
    			encoder.setExceptionListener(new ExceptionListener() {
    				public void exceptionThrown(Exception e) {
    					e.printStackTrace();
    				}
    			});
    			encoder.setPersistenceDelegate(DefaultGraphModel.class,
    					new DefaultPersistenceDelegate(new String[] { "roots",
    							"attributes" }));
    			encoder.writeObject(drawing.getModel());
    			encoder.close();
    		} catch (Exception e) {
    			JOptionPane.showMessageDialog(drawing, e.getMessage(), "Error",
    					JOptionPane.ERROR_MESSAGE);
    		}
    	}
    desérialiser et récupérer le GraphModel pour l'insérer dans mon ancienne instance de JGraph :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public static GraphModel loadJGraph(String path) {
    		XMLDecoder d = null;
    		try {
    			d = new XMLDecoder(new BufferedInputStream(
    					new FileInputStream(path)));
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		d.close();
    		return (GraphModel)d.readObject();
    	}
    pas besoin de faire de MyJGraph.repaint()

    ==> ce code fonctionne avec exemple HelloWorld fourni par JGraph

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

Discussions similaires

  1. [XStream] Sérialisation en xml
    Par Lolitaaa dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/11/2008, 18h06
  2. La sérialisation en XML d'un Objet partiellement chargé (JPA)
    Par mesios dans le forum Persistance des données
    Réponses: 2
    Dernier message: 22/05/2008, 11h45
  3. Sérialisation / déserialisation XML
    Par soumamort dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/04/2008, 17h57
  4. Convertir un objet non sérialisable en XML
    Par netdoor.fr dans le forum Persistance des données
    Réponses: 10
    Dernier message: 14/03/2007, 14h08
  5. Sérialisation Desérialisation Xml
    Par sunatva dans le forum VB.NET
    Réponses: 4
    Dernier message: 25/01/2007, 00h06

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