Partage
  • Partager sur Facebook
  • Partager sur Twitter

JAXB sauvegarder les données dans plusieurs fichier

comment faire ?

Anonyme
    21 mai 2009 à 17:40:33

    Salut,

    j'aimerai savoir comment faire pour sauvegarder les Beans JAXBean dans plusieurs fichier ?
    import javax.xml.bind.annotation.XmlElementRef;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class Repertoire {
    	
    	private Autre autre ;
    	
    	public Repertoire() {
    		super();
    	}
    
    	@XmlElementRef(type=Autre.class,namespace="autre")
    	public Autre getAutre() {
    		return autre;
    	}
    
    	public void setAutre(Autre autre) {
    		this.autre = autre;
    	}
    	
    }
    
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(namespace="autre")
    public class Autre {
    	
    	private String other ;
    	
    	public Autre(){
    		
    	}
    
    	@XmlAttribute
    	public String getOther() {
    		return other;
    	}
    
    	public void setOther(String other) {
    		this.other = other;
    	}
    	
    }
    


    Quand je fais un marshaller sur un Repertoire j'aimerai qu'il sauvegarde celui-ci dans un fichier A.xsd et la référence Autre vers un fichier B.xsd
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2009 à 9:33:07

      salut,

      tout d'abord est ne parle pas de jaxbean mais de jaxb (java xml binding) et les xsd sont les fichiers de schéma, et non ceux de données (dans la pratique on s'en fout completement mais bon...)

      ensuite tu devrais mieux expliquer ton cas...

      Tu a utilisé jaxb pour créer un binding d'un schéma (fichier xsd), avec Repertoire qui a un élément Autre.

      Mais ton Repertoire, est-ce que tu l'a unmarshallé d'un fichier xml, ou est-ce que tu l'a instancié en java

      parce que si tu l'a unmarshallé, et que tu veux enregistrer une modification, tu peux pas changer le type Autre (passer d'un élément à une chaine indiquant l'emplacement du fichier) (si Repertoire ne garde pas la référence tu n'a pas ce problème évidemment)

      tu dois en tout cas modifier ton binding (donc modifier le schéma et puis le recompiler)
      tu peux par exemple ajouter un attribut "url" ou "src" a l'élément Autre, et après c'est à toi de voir s'il est modifié.

      Après ça, tu dois enregistrer ton élément autre dans un autre fichier, qui possède un rootElement différent (Autre et non Repertoire).

      je ne suis pas certain que ca fonctionne, mais tu peux toujours essayer d'ajouter une annotation @xmlRootElement et puis de simplement faire
      marshaller.marshal( autre, out);
      


      si ça ne fonctionne pas tu peux toujours modifier ton schéma pour qu'il puisse avoir soit Autre soit Repertoire comme root (c'est même conseillé si tu dois unmarshaller ton fichier par la suite). Utilise alors une référence pour encore avoir le même objet Autre en root que comme élément de Repertoire

      sinon je ne sais pas si c'est voulu, mais tu ne peux mettre qu'un seul Autre par Repertoire, alors il n'y a pas grande utilité a le mettre dans un autre fichier

      sur ce, bonne journée
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        22 mai 2009 à 9:42:19

        Désolé pour mes erreurs. Le problème est :
        - Quand je fais un marshalle d'un élément de type Répertoire, il me sauvegarde aussi l'élément entre dans le fichier. (l'élément autre est une node enfant de répertoire)
        - Ce que je souhaite c'est qu'il me sauvegarde les deux entitée dans deux fichiers différents... (ton histoire de src ou url, je ne le comprends pas. Je viens de regardes les annotations et aucune ne prends ce type de paramètre)
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2009 à 9:52:30

          j'ai édité mon post précédent pendent que tu répondais je crois... (fausse manœuvre, j'ai posté avant de l'avoir fini...)

          Sinon mon histoire de url ou src:
          Tu sépare Repertoire et Autre dans deux fichiers, alors si Repertoire doit quand même retenir ton fichier, tu dois spécifier le lien vers ton fichier où est stocké Autre

          alors après il te reste a faire
          autre2 = new Autre();
          autre2.setSrc(fichierB);
          
          autre = rep.getAutre();
          rep.setAutre(autre2);
          
          marshaller.marshal( rep, new fileOutputStream(fichierA));
          marshaller.marshal( autre, new FileOutputStream(fichierB));
          


          évidemment si Repertoire s'en fout de ce que devient autre, tu fais juste setAutre(null)

          EDIT : En fait j'avais pas vu mais Autre a déjà l'annotation @XmlRootElement donc tu devrais pouvoir marshaller directement comme ça...
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            22 mai 2009 à 11:38:03

            Malheureusement je n'ai pas le droit de rajouter des attibutes dans à mes objets Java. Que des annotations.
            Donc impossible de faire du src...
            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2009 à 18:30:17

              Citation : @Strato@

              Malheureusement je n'ai pas le droit de rajouter des attibutes dans à mes objets Java. Que des annotations.
              Donc impossible de faire du src...


              pas le droit ? qu'est-ce qui l'interdit ? enfin bon alors tu n'a pas la possibilité de stocker un lien vers Autre dans Repertoire...

              Et pour marshaller tu fais simplement
              // Repertoire rep = ...
              
              Autre autre = rep.getAutre();
              rep.setAutre(null);
              
              marshaller.marshal( rep, new fileOutputStream(fichierA));
              marshaller.marshal( autre, new FileOutputStream(fichierB));
              
              • Partager sur Facebook
              • Partager sur Twitter

              JAXB sauvegarder les données dans plusieurs fichier

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown