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 :

Problème Encodage XML Java


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut Problème Encodage XML Java
    Bonjour,

    Je me prête actuellement à l'exercice consistant à encoder en xml un objet en Java.

    Après avoir fait une classe permettant l'encodage et l'avoir appelée dans ma fonction principale, le fichier se génère à l’exécution mais Eclipse m'écrit plusieurs fois à la suite ce message dans la console :

    java.lang.reflect.InvocationTargetException
    Continuing ...

    D'où ceci peut-il provenir sachant qu’apparemment ça marche ?

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par kichnifou Voir le message
    D'où ceci peut-il provenir sachant qu’apparemment ça marche ?
    Exactement ce que dit la JavaDoc de cette Exception. Elle ne ment tout simplement pas.
    Tu appelles des méthodes par réflexion (je m'attendrais à ce que ce soit des getter de tes objets) et certains d'entre eux lancent des exceptions (ce qui est étonnant pour des getter,) ce qui est reflété par l'envoi d'une InvocationTargetException dont la cause est l'exception de départ. Nous n'allons pas deviner quelles sont ces exceptions de départ si tu ne nous montres pas ce que tu fais.

    Nous n'allons pas non plus deviner pourquoi ça "marche" quand même, mais j'imagine que ces InvocationTargetException sont catchées et n'arrêtent pas le traitement, ce qui permet donc de continuer jusqu'à la fin, gérant correctement toutes les méthodes qui, elles, n'ont pas généré d'exception. Ce qui permet d'obtenir quelque chose, mais possiblement pas tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Histoire de voir à quoi ça ressemble voici la classe qui me permet de sérialiser :

    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
    package fr.iut2.sil1.Game_Of_Troll.client.services;
     
    import java.beans.PersistenceDelegate;
    import java.beans.XMLEncoder;
    import java.io.FileOutputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    public final class XMLTools {
     
        private XMLTools() {}
     
        public static void encodeToFile(Object object, String fileName) throws FileNotFoundException, IOException {
            // ouverture de l'encodeur vers le fichier
            XMLEncoder encoder = new XMLEncoder(new FileOutputStream(fileName));
            try {
                // serialisation de l'objet
                encoder.writeObject(object);
                encoder.flush();
            } finally {
                // fermeture de l'encodeur
                encoder.close();
            }
        }
    }
    Ma class qui définit mon futur objet que je voudrais sérialiser :
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    package fr.iut2.sil1.Game_Of_Troll.client.vues;
     
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.uibinder.client.UiBinder;
    import com.google.gwt.user.client.rpc.IsSerializable;
    import com.google.gwt.user.client.ui.Composite;
    import com.google.gwt.user.client.ui.Widget;
     
    public class Troll extends Composite implements IsSerializable {
     
    	private static TrollUiBinder uiBinder = GWT.create(TrollUiBinder.class);
     
    	private String nom;
    	private String race;
    	private String competence1;
    	private String competence2;
    	private int attaque;
    	private int degats;
    	private int esquive;
    	private int regeneration;
    	private int point_de_vie;
     
    	interface TrollUiBinder extends UiBinder<Widget, Troll> {
    	}
     
    	public Troll(){
    	}
     
    	public Troll(String nom, String race, String competence1, String competence2, int attaque, int degats, int esquive, int regeneration, int point_de_vie){
    		this.nom = nom;
    		this.race = race;
    		this.competence1 = competence1;
    		this.competence2 = competence2;
    		this.attaque = attaque;
    		this.degats = degats;
    		this.esquive = esquive;
    		this.regeneration = regeneration;
    		this.point_de_vie = point_de_vie;
     
    		initWidget(uiBinder.createAndBindUi(this));
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getRace() {
    		return race;
    	}
     
    	public void setRace(String race) {
    		this.race = race;
    	}
     
    	public String getCompetence1() {
    		return competence1;
    	}
     
    	public void setCompetence1(String competence1) {
    		this.competence1 = competence1;
    	}
     
    	public String getCompetence2() {
    		return competence2;
    	}
     
    	public void setCompetence2(String competence2) {
    		this.competence2 = competence2;
    	}
     
    	public int getAttaque() {
    		return attaque;
    	}
     
    	public void setAttaque(int attaque) {
    		this.attaque = attaque;
    	}
     
    	public int getDegats() {
    		return degats;
    	}
     
    	public void setDegats(int degats) {
    		this.degats = degats;
    	}
     
    	public int getEsquive() {
    		return esquive;
    	}
     
    	public void setEsquive(int esquive) {
    		this.esquive = esquive;
    	}
     
    	public int getRegeneration() {
    		return regeneration;
    	}
     
    	public void setRegeneration(int regeneration) {
    		this.regeneration = regeneration;
    	}
     
    	public int getPoint_de_vie() {
    		return point_de_vie;
    	}
     
    	public void setPoint_de_vie(int point_de_vie) {
    		this.point_de_vie = point_de_vie;
    	}
     
     
    }
    Et enfin ma classe qui va faire l'appel nécessaire à la sérialisation :
    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
    77
    78
    79
    80
    81
    package fr.iut2.sil1.Game_Of_Troll.client.vues;
     
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.event.shared.HandlerManager;
    import com.google.gwt.uibinder.client.UiBinder;
    import com.google.gwt.uibinder.client.UiField;
    import com.google.gwt.user.client.ui.Composite;
    import com.google.gwt.user.client.ui.DeckPanel;
    import com.google.gwt.user.client.ui.HasWidgets;
    import com.google.gwt.user.client.ui.RootLayoutPanel;
    import com.google.gwt.user.client.ui.Widget;
     
    import fr.iut2.sil1.Game_Of_Troll.client.services.XMLTools;
     
    public class Racine extends Composite {
     
    	private static RacineUiBinder uiBinder = GWT.create(RacineUiBinder.class);
     
    	interface RacineUiBinder extends UiBinder<Widget, Racine> {
    	}
     
    	private static Racine SINGLETON;
     
    	@UiField
    	DeckPanel deckPanel;
     
    	@UiField
    	Edit_Troll Edit;
     
    	@UiField
    	Image_Troll Image;
     
    	@UiField
    	Liste_Troll Liste;
     
    	@UiField(provided=true)
    	ActionPanel actionPanel;
     
    	public Racine(HandlerManager eventBus) {
     
    		deckPanel = new DeckPanel();
    		actionPanel = new ActionPanel(eventBus);
     
    		Edit = new Edit_Troll();
    		Image = new Image_Troll();
    		Liste = new Liste_Troll();
     
    		deckPanel.add(Edit);
    		deckPanel.add(Image);
    		deckPanel.add(Liste);
     
    		initWidget(uiBinder.createAndBindUi(this));
     
    		deckPanel.showWidget(0);
     
    		try {
                Troll troll = new Troll("Kichnifou", "d", "e", "f", 8, 9, 10, 78, 1422);
                XMLTools.encodeToFile(troll, "troll.xml");
            } catch(Exception e) {
                e.printStackTrace();
            }
     
    		SINGLETON = this;
     
    		RootLayoutPanel.get().add(this);
    	}
     
    	public static Racine get(){
    		return SINGLETON;
    	}
     
    	public DeckPanel getDeckPanel() {
    		return deckPanel;
    	}
     
    	public void go(HasWidgets container){
    		container.clear();
    		container.add(this);
    	}
     
    }
    Tout n'est pas ici car j'utilise le model MVC et code en UiBinder. (Je suis en train d'apprendre).

    Ah oui et en plus du message suivant dans la console :
    java.lang.reflect.InvocationTargetException
    Continuing ...
    J'ai celui-ci aussi dans l'onglet development mode :
    15:44:45.618 [ERROR] [game_of_troll] Line 13: No source code is available for type java.io.FileNotFoundException; did you forget to inherit a required module?
    Au cas où je préfère préciser que c'est une Web Application.

  4. #4
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut
    Je n'aime pas faire de double post, mais sincèrement personne ne peut m'aider ?

    En fait mes problèmes actuelles sont :
    - Génération d'un fichier xml avec caractéristiques d'un objet, mais seulement UN seul objet (si je tente d'en créer plusieurs, je n'en n'ai qu'un seul dans mon fichier) + affichage des messages précédents sous Eclipse.
    - Impossibilité de Décoder mon fichier xml

    J'aurai réellement besoin d'une réponse, c'est pour un projet qui est vraiment sympa en plus mais que je ne peux du coup pas avancer.
    Merci.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Tu tentes de sauvegarder un objet graphique, qui plus est spécifique à GWT (et donc ce n'est pas du Java "pure" mais du code destiné à être transformé en JavaScript).
    Je pense qu'il y a dans le lot des méthodes "native" implémenté seulement en JavaScript (ce qui ne pourra pas marcher en Java standard).

    XMLEncoder va appeler chaque getter de la classe afin de récupérer la valeur associé... et ça doit merder grave !

    En règle général on évites de sérialisé des objets graphiques, mais uniquement des objets POJO contenant uniquement les valeurs.



    Au passage tu tentes de faire cela où ? Coté serveur ou coté client ?
    Parce que je doute que tu puisses utiliser cela coté client...


    a++

  6. #6
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut
    Tu tentes de sauvegarder un objet graphique, qui plus est spécifique à GWT (et donc ce n'est pas du Java "pure" mais du code destiné à être transformé en JavaScript).
    Notre professeur nous a dit de faire comme cela, et que GWT se chargeait lui-même de retranscrire le code en Javascript.

    En règle général on évites de sérialisé des objets graphiques, mais uniquement des objets POJO contenant uniquement les valeurs.
    L'un des + pour le projet est de sérialiser nos objets en xml, donc je veux le faire.

    Au passage tu tentes de faire cela où ? Coté serveur ou coté client ?
    Parce que je doute que tu puisses utiliser cela coté client...
    Ah, je ne savais pas que le faire coté client pouvais le faire buguer, du coup je vais le faire coté serveur !
    Par contre attend toi surement à avoir des questions, je n'ai découvert que cette année la relation client-serveur en java, et je n'ai pas encore bien tout assimilé.

    Je vais donc déjà tenter de faire ça coté serveur, merci !
    Si tu as des précisions à m'apporter, elles sont les bienvenues.

Discussions similaires

  1. Problème Encodage xml
    Par napoleon59 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/05/2014, 19h20
  2. [XSLT] Problème Oracle XML Java Parser
    Par pjmorce dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 04/06/2010, 07h33
  3. SQL Server : Problème encodage XML
    Par alex_vino dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/03/2010, 09h31
  4. Problème Encodage XML
    Par HaPouu dans le forum Silverlight
    Réponses: 2
    Dernier message: 20/10/2009, 16h47
  5. [XML] Gros problème encodage XML
    Par k2006 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/07/2008, 18h23

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