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] javax.xml.bind.JAXBElement cannot be cast to io.jaxb.GpxType


Sujet :

Persistance des données Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut [JAXB] javax.xml.bind.JAXBElement cannot be cast to io.jaxb.GpxType
    Bonjour à tous.
    J'ai créé des classes à partir du schéma xml suivant avec xjc:
    http://monique.damichel.perso.sfr.fr/provisoire/gpx.xml
    J'ai obtenu cette liste de classes:

    Mais quand je compile le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JAXBContext jc = JAXBContext.newInstance("io.jaxb"); 
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    GpxType gpx = (GpxType) unmarshaller.unmarshal(new FileInputStream("ressources/BorneSN.gpx"));
    j'ai le message d'erreur:
    javax.xml.bind.JAXBElement cannot be cast to io.jaxb.GpxType
    Je ne sais pas comment caster unmarshaller avec les classes produites par xjc et j'ai l'impression qu'il en manque...
    Que faut-il faire? Merci.

  2. #2
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    exemple qui fonctionne correctement chez moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JAXBContext ctx = JAXBContext.newInstance(DOCUMENT.class);	
    		Unmarshaller uu = ctx.createUnmarshaller();
    		ObjectFactory factory = new ObjectFactory();
    		DOCUMENT doc = factory.createDOCUMENT();
    		doc = (DOCUMENT)uu.unmarshal(input);
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Bonjour anisj1m. Par quoi je dois remplacer DOCUMENT dans mon cas?
    J'ai essayé par GpxType mais ça ne marche pas.
    En lisant la doc de JAXB2.0, j'avais compris que ObjectFactory sert à créer un document XML à partir de classes Java (marshaller) alors que moi je veux faire le contraire (unmarshaller): j'ai déjà le document XML et je veux obtenir les objets java.
    Je me trompe?

  4. #4
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    bonjour,
    d'abord tu dois mettre la classe qui contient l'élément root a la place de Document pour moi .

    et pour ton besoin, oui tu as besoin de unmarshall qui est le cas de mon exemple
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Je crois que dans mon cas, la classe qui contient l'élément root est GpxType (voir le schéma). Mais quand je remplace DOCUMENT par GpxType, j'obtiens toujours le même message d'erreur:
    javax.xml.bind.JAXBElement cannot be cast to io.jaxb.GpxType

  6. #6
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    donner nous un exemple de code et ou exactement tu as l'erreur.
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Voici le code de ma classe principale: (les classes générées par xjc ont été mises dans le package io.jaxb)

    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
    import java.io.FileInputStream;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Unmarshaller;
    import io.jaxb.*; 
     
     
     
    public class ApprentissageJAXB {
     
    	public static void main(String[] args) {
    		try {    	JAXBContext ctx = JAXBContext.newInstance(GpxType.class);	
    			Unmarshaller uu = ctx.createUnmarshaller();
    			ObjectFactory factory = new ObjectFactory();
    			GpxType doc = factory.createGpxType();
    			doc = (GpxType)uu.unmarshal(new FileInputStream("ressources/BorneSN.gpx"));
    							} 
    		 catch (Exception e) {   
    			e.printStackTrace(); 
    		} 
     
    	}
     
    }
    la ligne qui ne passe pas, c'est doc=... avec le message d'erreur:
    javax.xml.bind.JAXBElement cannot be cast to io.jaxb.GpxType
    Est-ce que ça peut venir du fichier BorneSN.gpx qui ne respecte pas le schéma?

  8. #8
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    non je ne pense pas que ca peux venir du fichier ".gpx"
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  9. #9
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    vraiment etrange comme erreur:

    ok
    essaie ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ByteArrayInputStream input = new ByteArrayInputStream (dossierconsultation.getContenu());
    			JAXBContext ctx = JAXBContext.newInstance(Envelopetype.class);	
    			Unmarshaller uu = ctx.createUnmarshaller();
    			ObjectFactory factory = new ObjectFactory();
    			Envelopetype envelopeType = factory.createEnvelopetype();
     
    			JAXBElement<Envelopetype> element =  factory.createEnvelope(envelopeType);
     
     
    			element = (JAXBElement<Envelopetype>)uu.unmarshal(input); 
     
     
    			Envelopetype envelopetype2 = element.getValue();
    			String a = envelopetype2.getBody().getDOCUMENT().getBENEFICIAIRE().getNOMPRENOMRS();
    avec
    le Envelopetype est ton GpxType
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Finalement, en adaptant un peu, ton code fonctionne.
    Merci beaucoup de m'avoir aidé. Au fait, tu as eu ta documentation sur jaxb où?

  11. #11
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    juste j'ai eu un bout de code, comme toi maintenant, d'un ami et ensuite j'ai adapté le code pour mon besoin.

    de rien.

    penser au tag pour que ce sujet aiderait autres personnes.
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

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

Discussions similaires

  1. javax.xml.bind.UnmarshalException: ? bizzard
    Par mehdikwa dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 15/04/2014, 09h30
  2. Exception : "javax.xml.bind.UnmarshalException"
    Par steackfrite dans le forum NetBeans
    Réponses: 1
    Dernier message: 20/08/2013, 14h44
  3. Web Service - "javax.xml.bind.JAXBElement@"
    Par arsenik360 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/05/2013, 19h29
  4. JAXB - parseur XML
    Par be_tnt dans le forum Persistance des données
    Réponses: 1
    Dernier message: 12/07/2006, 11h49

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