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 :

[JAXB] Class has two properties of the same name "data"


Sujet :

Persistance des données Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut [JAXB] Class has two properties of the same name "data"
    bonjour,

    Je suis nouvelle dans la technologie JAXB. Et je n'arrive pas a saisir comment résoudre l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
    Class has two properties of the same name "data"
    Si j'enlève l'annotatoin "@XMlElement(required = true)" au dessu de mon variable data je n'ai pas le problème mais j'aimerai la garder pour visibilité du code.
    Voici mes classes :

    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
     
    public class Main {
        public static void main(String[] args) {
            final RootElement rootElement = new RootElement();
            rootElement.getElement().getSubElements().add(new SubElement("Coucou"));
            rootElement.getElement().getSubElements().add(new SubElement("tout le monde"));
            Writer writer = null;
            try {
                final JAXBContext context = JAXBContext.newInstance(RootElement.class);
                final Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
                // Console view
                marshaller.marshal(rootElement, System.out);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
     
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class RootElement {
        @XmlElement(required = true)
        private Element e;
     
        public RootElement() {
            e = new Element();
        }
     
        public Element getElement() {
            return e;
        }
     
        public void setElement(final Element e) {
            this.e = e;
        }
    }
     
    public class Element {
        @XmlElement(required = true)
        private List<SubElement> subElements;
     
        public Element() {
            subElements = new ArrayList<SubElement>();
        }
     
        public List<SubElement> getSubElements() {
            return subElements;
        }
     
        public void setSubElements(final List<SubElement> e) {
            this.subelements = e;
        }
    }
     
    public class SubElement {
     
        @XmlElement(required = true)
        private String data;
     
        public SubElement() {
            this.data = "";
        }
     
        public SubElements(final String data) {
            this.data = data;
        }
     
        public String getData() {
            return data;
        }
     
        public void setData(final String data) {
            this.data = data;
        }
    }
    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    On peut voir le schéma?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Je n'ai pas écrit de schema. J'écris moi même les classes java (a partyir d'un diagramme UML).

    Mais voici se que je souhaite obtenir en XML
    <rootElement>
    <element>
    <subElement>
    <data>coucou</data
    </subElement>
    <subElement>
    <data>tout le monde</data
    </subElement>
    </element>
    <AutreTypeElement> ......
    </rootElement>

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Perso j'essaierai de faire un petit xsd vite fait puis de générer le code et comparer les résultats.
    C'est obscure pour beaucoup de monde les bindings de JaxB.

    Je sais que c'est pas génial comme conseil mais je me suis cassé la tête violent avec cette librairie y'a quelques temps.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 90
    Points : 80
    Points
    80
    Par défaut
    essaye ça
    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
     
    public class SubElement {
     
     
        private String data;
     
        public SubElement() {
            this.data = "";
        }
     
        public SubElements(final String data) {
            this.data = data;
        }
     
         @XmlElement(required = true)
        public String getData() {
            return data;
        }
     
        public void setData(final String data) {
            this.data = data;
        }
    }

    je pense qu'il faut mettre l'annotation @XmlElement avant le getter sinon tu aura une belle IllegalAnnotationExceptions

    PS: pour des fichiers XML simple comme le tien je te conseille d'utiliser une DTD au lieux de XSD. Tu peux utiliser un générateur de DTD pour générer une DTD (tu peux toujours modifier la DTD générée)
    puis à partir de la DTD tu peux générer les classes souches avec l'exécutable fourni par sun

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Points : 78
    Points
    78
    Par défaut
    Merci pour le conseille mais j'ai trouvé la solution.

    Mon schema est bien plus compliqué que si dessus. Cette partie est juste un sous type de sous type enfin bref la solution est de rajouter la ligne suivante dans la classe SubElement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @XmlAccessorType(XmlAccessType.FIELD)

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

Discussions similaires

  1. [Débutant] Integers can only be combined with integers of the same class
    Par slaima15 dans le forum Images
    Réponses: 24
    Dernier message: 06/10/2011, 09h49
  2. Réponses: 0
    Dernier message: 16/09/2011, 14h21
  3. Réponses: 2
    Dernier message: 17/02/2011, 20h23
  4. Réponses: 3
    Dernier message: 10/05/2010, 11h08

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