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 :

JAXB Unmarshal problème classe structurant le XML


Sujet :

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

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2007
    Messages : 142
    Points : 52
    Points
    52
    Par défaut JAXB Unmarshal problème classe structurant le XML
    Bonsoir,

    J'ai un fichier XML de ressemble à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    	<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
    	<categories>
    	<category id="1" xlink:href="http://localhost/prestashop/api/categories/1"/>
    	<category id="2" xlink:href="http://localhost/prestashop/api/categories/2"/>
    	<category id="3" xlink:href="http://localhost/prestashop/api/categories/3"/>
    	<category id="4" xlink:href="http://localhost/prestashop/api/categories/4"/>
    	</categories>
    </prestashop>
    J'ai crée deux classe pour la structure xml que voici:
    Class Prestashop
    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
     
     
     
    import java.util.List;
     
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
     
     
    @XmlRootElement(name = "Prestashop")
    class Prestashop{
     
    	@XmlElement(required = true)
    	private List <Categories> categories;
     
    	public List <Categories> getCategories() {
    		return categories;
    	}
     
    	public void setCategories(List <Categories> categories) {
    		this.categories = categories;
    	}
     
    }
    Class Categories
    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
     
     
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
     
     
    public class Categories {
     
    	@XmlElement(required = true)
    	public String category;
     
    	@XmlAttribute(name = "id", required = true)
    	int id;
     
    	public String getCategory() {
    		return category;
    	}
    	public void setCategory(String category) {
    		this.category = category;
    	}
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JAXBContext jaxbContext = JAXBContext.newInstance(Prestashop.class);
    			Prestashop prestashop = (Prestashop) jaxbContext.createUnmarshaller().unmarshal(new TestStreaming().cat());
    Lorsque je lance mon Main j'obtiens deux erreurs de ce type:

    com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
    Class has two properties of the same name "categories"
    this problem is related to the following location:
    at public java.util.List Prestashop.getCategories()
    at Prestashop
    this problem is related to the following location:
    at private java.util.List Prestashop.categories
    at Prestashop
    Class has two properties of the same name "category"
    this problem is related to the following location:
    at public java.lang.String Categories.getCategory()
    at Categories
    at private java.util.List Prestashop.categories
    at Prestashop
    this problem is related to the following location:
    at public java.lang.String Categories.category
    at Categories
    at private java.util.List Prestashop.categories
    at Prestashop


    at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at TestUnmarshalPrestashop.main(TestUnmarshalPrestashop.java:12)


    Je pense que j'ai mal structurer mes class. Pouvez vous m'aider à trouver l'erreur svp?

    Merci

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 558
    Points : 2 731
    Points
    2 731
    Par défaut
    Class has two properties of the same name "categories"
    Le problème local concernant uniquement à cette erreur est que le défaut pour l'annotation XmlAccessorType est XmlAccessType.PUBLIC_MEMBER. Or, vous voulez annoter les champs (fields) privés et ne voulez qu'eux. Il faut, par conséquent, le préciser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @XmlRootElement(name = "Prestashop")
    @XmlAccessorType(XmlAccessType.FIELD)
    class Prestashop{
        //etc etc...
    }
    et pareil pour les autres.

    Je pense que j'ai mal structurer mes class.
    Au premier regard, je pense qu'il y aurait de problèmes structuraux à venir. Le 'Public String category' me dérange beaucoup... Je pense la classe dit Categories doit prendre au sens de Category et le 'Public String category' ne doit être là... mais ce n'est pas mon code et ça peut peut-être jongler un peu pourqu'il marche...

Discussions similaires

  1. Problème espace dans flux XML lors de unmarshal : outils JDOM et BorlandXML
    Par alextomas dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/07/2011, 16h41
  2. Problème d'ordre sur une classe et un xml
    Par gwenhadu75 dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 10/02/2010, 16h03
  3. probléme de structuration du doc en classe article
    Par LeChatnestPasMort dans le forum Débuter
    Réponses: 2
    Dernier message: 02/08/2009, 19h19
  4. Réponses: 15
    Dernier message: 19/10/2007, 06h43
  5. [JAXB][XSD] Problème lors de la génération des classes
    Par charlot44 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/06/2005, 16h10

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