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 :

Binding avec JAXB


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut Binding avec JAXB
    salut,

    je suis nouveau dans le domaine du maping en java, et je voudrai unmarshaler un fichier XML vers des objets mémoire, et à chaque fois le compilateur me génère une erreur au niveau de la ligne "ServerModel serveur = (ServerModel) unmarshaller.unmarshal(fileIn)".

    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
    package com.web;
     
    import com.model.*;
     
    import javax.xml.bind.*;
    import java.io.*;
    import java.util.*;
     
    public class LireXML {
    	<div style="margin-left:40px">public static void main(String[] args) {
    	    <div style="margin-left:40px">try{
    	    	JAXBContext jc = JAXBContext.newInstance(ServerModel.class,QueueModel.class);
    	    	Unmarshaller unmarshaller = jc.createUnmarshaller();
     
    	    	File fileIn = new File("localhost5.xml");
    	    	ServerModel serveur = (ServerModel) unmarshaller.unmarshal(fileIn);
     
    	    	String nomServeur = serveur.getServerName();
    		    System.out.println(nomServeur);
    	    } catch (Exception e){
    	    	e.printStackTrace();
    	    }	</div>    }</div>}
    mon fichier xml :

    Code XML : 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
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <serveur>
        <div style="margin-left:40px"><listeConsommateurs>
            <div style="margin-left:40px"><nbConsommateurs>0</nbConsommateurs>
            <nbMessagesDelivres>0</nbMessagesDelivres>
            <nbMessagesEnAttente>0</nbMessagesEnAttente>
            <nbMessagesRecus>0</nbMessagesRecus>
            <nbProducteurs>0</nbProducteurs>
            <nomFile>file 1</nomFile>
            <pourcentageMemoireUtilisee>0</pourcentageMemoireUtilisee>
            <tailleMaxMemoire>1048576</tailleMaxMemoire>
            <tempsMoyenTraitement>0.0</tempsMoyenTraitement></div>    </listeConsommateurs>
        <listeConsommateurs>
            <div style="margin-left:40px"><nbConsommateurs>1</nbConsommateurs>
            <nbMessagesDelivres>0</nbMessagesDelivres>
            <nbMessagesEnAttente>0</nbMessagesEnAttente>
            <nbMessagesRecus>0</nbMessagesRecus>
            <nbProducteurs>0</nbProducteurs>
            <nomFile>example.A</nomFile>
            <pourcentageMemoireUtilisee>0</pourcentageMemoireUtilisee>
            <tailleMaxMemoire>1048576</tailleMaxMemoire>
            <tempsMoyenTraitement>0.0</tempsMoyenTraitement></div>    </listeConsommateurs>
        <nbConsommateurs>2</nbConsommateurs>
        <nbMessagesDelivres>0</nbMessagesDelivres>
        <nbMessagesEnAttente>0</nbMessagesEnAttente>
        <nbMessagesRecus>10</nbMessagesRecus>
        <nomServeur>localhost</nomServeur>
        <pourcentageMemoireUtilisee>0</pourcentageMemoireUtilisee>
        <tailleMaxMemoire>67108864</tailleMaxMemoire></div></serveur>

    merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Bonjour,
    c'est une erreur à la compilation ou bien à l'exécution ?
    Car au vu du code, cela semble cohérent.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    Ah oui désolé, j'ai oublié de mentionner l'erreur, en fait c'est une erreur de compilation au niveau de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServerModel serveur = (ServerModel) unmarshaller.unmarshal(fileIn);
    voici le codes des objets que je voudrai unmarsheler :
    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
    package com.model;
    import javax.xml.bind.annotation.XmlRootElement;
     
    @XmlRootElement
    public class QueueModel {
    		private String queueName;
    		private double averageProcessingTime;
    		private long maximumMemorySize;
    		private int memoryUsedPercentage;
    		private long nbConsumers;
    		private long nbProducers;
    		private long nbReceivedMessages;
    		private long nbSentMessages;
    		private long nbWaitingMessages;
     
    		public QueueModel(){}
     
    		 ...
    }
    }
    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
    package com.model;
     
    import java.util.ArrayList;
    import javax.xml.bind.annotation.XmlRootElement;
     
    @XmlRootElement
    public class ServerModel {  
    		private String serverName; 	
    		private long maximumMemorySize;
    		private int memoryUsedPercentage;
    		private long nbConsumers;
    		private long nbReceivedMessages;
    		private long nbSentMessages;
    		private long nbWaitingMessages;
     
    		private ArrayList<QueueModel> ConsumersList;
     
    		public ServerModel(){}
     
    		....
    }
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Alors là, je ne vois pas pourquoi il y aurait une erreur de compilation à cette ligne. Que dit l'éditeur ?

    Cela ne marche pas non plus en essayant de faire un import par type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Unmarshaller;
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import javax.xml.bind.*;
    Dans ton package com.model, n'aurais-tu pas défini une classe qui s'appellerait Unmarshaller et qui se substituerait à celle de javax.xml.bind.Unmarshaller étant donné que l'import de ce package se fait en premier ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    non, j'ai pas redéfini la classe Unmarshaller, j'essayerai juste d'appeler celle du package "import javax.xml.bind.Unmarshaller;" alors que le compilateur me dit :
    javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"serveur"). Expected elements are <{}queueModel>,<{}serverModel>

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Je n'ai jamais rencontré ce problème avec JAXB, vous utilisez quelle version ?

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    j'utilise la version "JAXB 2.1.10 in JDK 6"

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Non, désolé, je ne vois pas d'où peut venir le problème.
    QueueModel et ServerModel sont bien des classes et non pas des sous-classes statiques d'une autre classe ?

    Je vois que votre erreur dit :
    Expected elements are <{}queueModel>,<{}serverModel>

    Ne serait-ce pas un problème de casse dans le code ?

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    j'ai vérifié la casse et tout apparaît bien, en tout cas merci bien pour ton aide, je vais fouiller un peu sur internet sur un exemple qui marche, et se contenter de le modifier et l'adapter à mes besoins , je te tiens au courant si je repère l'erreur

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    ok, je viens de comprendre ton erreur. C'est à l'exécution que ça ne passe pas. Ce n'est pas un problème de compilation de classe.
    Je n'avais pas lu ton fichier xml :
    il n'est tout simplement pas conforme aux classes de mapping.
    Par exemple si tu modifies ton fichier d'exemple avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <serverModel>
    	<serverName>monserver</serverName>
    	<maximumMemorySize>64</maximumMemorySize>
    	<consumersList>
    		<queueModel>
    			<queueName>toto</queueName>
    		</queueModel>
    		<queueModel>
    			<queueName>tata</queueName>
    		</queueModel>
    	</consumersList>
    </serverModel>
    Il n'y a pas d'erreur et le mapping se fait bien.

Discussions similaires

  1. problème de binding de any avec jaxb de netbeans
    Par totomimi dans le forum NetBeans
    Réponses: 0
    Dernier message: 21/07/2009, 17h14
  2. Problème avec JAXB
    Par vince79 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 14/12/2006, 11h22
  3. [Débutant(e)] Problème avec JaxB !
    Par garulfo2 dans le forum Persistance des données
    Réponses: 6
    Dernier message: 08/02/2005, 09h28
  4. [Ant]problème avec JAXB et XJC
    Par lili2704 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/12/2004, 12h00

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