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 :

Conversion xml en objet, erreur "No such field"


Sujet :

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

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Conversion xml en objet, erreur "No such field"
    Bonjour,

    Je cherche à faire un système d'IA pour un jeu. Ce dernier marche très bien mais je cherche à éditer mes différentes stratégies de façons simple. J'ai donc choisi de créer un fichier xml contenant (pour commencer) une stratégie.

    Stratégie est la classe mère. Les classes actions et condition héritent de cette dernière. Il y a d'autres classes plus spécifique qui héritent sois d'Action, soient de Condition (respectivement, comme Avancer et PeutAvancer).

    J'ai fais des recherches et Xstream m'a l'air d'être très bien pour faire ce que je veux faire : parser le fichier xml est créer des stratégies en fonction de.

    Voici un exemple de mon fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="UTF-8"?>
    <AssezEnergie>
    	<seuil>25</seuil>
    	<PeutAvancer>
    		<Avancer></Avancer>
    		<RotationDroite></RotationDroite>
    	</PeutAvancer>
    	<NeRienFaire></NeRienFaire>
    </AssezEnergie>
    Ma classe XmlParser :

    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
     
    package modele;
     
    import java.io.FileReader;
    import java.util.concurrent.locks.Condition;
    import java.io.FileNotFoundException;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
     
    import strategie.Strategie;
    import strategie.action.Avancer;
    import strategie.action.NeRienFaire;
    import strategie.action.RotationDroite;
    import strategie.condition.AssezEnergie;
    import strategie.condition.PeutAvancer;
     
    public class XmlParser {
     
      public static void main(String[] args) throws FileNotFoundException {
     
       	FileReader reader = new FileReader("C:/Users/tomhoo/Documents/S5/genie_logiciel/projet/ambroise-gouedard-jeanbaptiste-perais/xml/simple.xml");  
    	XStream xstream = new XStream();   
     
    	xstream.alias("Strategie", Strategie.class);
    	xstream.alias("AssezEnergie", AssezEnergie.class);
    	xstream.alias("PeutAvancer", PeutAvancer.class);
    	xstream.alias("Avancer", Avancer.class);
    	xstream.alias("RotationDroite", RotationDroite.class);
    	xstream.alias("NeRienFaire", NeRienFaire.class);
     
     
    	Strategie test = (Strategie) xstream.fromXML(reader);
     
     
      }
     
    }
    A l’exécution j'ai l'erreur suivante :
    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
     
    Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field strategie.condition.AssezEnergie.PeutAvancer
    ---- Debugging information ----
    field               : PeutAvancer
    class               : strategie.condition.AssezEnergie
    required-type       : strategie.condition.AssezEnergie
    converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
    path                : /AssezEnergie/PeutAvancer
    line number         : 4
    version             : 1.4.8
    -------------------------------
    	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.handleUnknownField(AbstractReflectionConverter.java:501)
    	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:357)
    	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:263)
    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
    	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
    	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1206)
    	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1190)
    	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1061)
    	at modele.XmlParser.main(XmlParser.java:31)
    Quelqu'un saurait-il ce qui cloche ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Voici le constructeur de PeutAvancer : (Strategie vrai, Strategie faux) et celui de AssezEnergie(int seuil, Strategie vrai, Strategie faux)

    Comment faire comprendre à Xstream que PeutAvancer est la Strategie vrai de AssezEnergie ?
    Pensez-vous que Xstream est le plus adapté pour ça ?

  3. #3
    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 736
    Points
    2 736
    Par défaut
    Je peux supposer les classes du domaine se compilent bien, sans erreurs. Et puis, je peux visuelizer que la classes AssezEnergie s'écrit un peu comme ça.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package strategie.condition;
    // etc
    import strategie.Strategie;
    import strategie.action.NeRienFaire;
    //etc
    public class AssezEnergie extends Strategie {
        //etc...
        PeutAvancer peutAvancer;
        NeRienFaire neRienFaire;
        //etc...
        //le constructeur, les getters et setters...
        //etc...
    }
    Avec ceci sous-entendu, il vous faut rajouter encore quelques mappings pour qu'il fonctionne. Voici ce qu'il faut rajouter avant la ligne de constructeur d'AssezEnergie.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	//...etc
    	xstream.alias("NeRienFaire", NeRienFaire.class);
     
    	xstream.aliasField("PeutAvancer", AssezEnergie.class, "peutAvancer");
    	xstream.aliasField("NeRienFaire", AssezEnergie.class, "neRienFaire");
     
    	Strategie test = (Strategie) xstream.fromXML(reader);
    Comme ça, l'erreur soulevée devrait résolue. Mais éventuellement, vous devrez faire le même pour Avancer et RotationDroite ... pour que les erreurs réapparaître plus tard pour la même raison.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	xstream.aliasField("Avancer", PeutAvancer.class, "avancer");
    	xstream.aliasField("RotationDroite", PeutAvancer.class, "rotationDroite");
    Voilà !

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2015, 09h59
  2. Réponses: 6
    Dernier message: 21/07/2006, 09h18
  3. un problème avec un tableau d'objet, erreur bete ?
    Par Heero_2040 dans le forum C++
    Réponses: 12
    Dernier message: 13/07/2006, 13h20
  4. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 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