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

Langage Java Discussion :

[XDoclet] Impossible de générer des classes


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut [XDoclet] Impossible de générer des classes
    Bonjour,

    J'essaie de reproduire exactement la même logique (qui fonctionne) d'un projet à un autre. Il s'agit de générer des classes Java à partir d'autres classes, via XDoclet.
    J'ai dans mon arborescence un script ANT, simplifié au maximum, qui lance XDcolet, 3 sous-répertoires src, target, tpl.

    build-mappers.xml
    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
    <project default="generate">
    	<property file="../paths.properties" />
    	<path id="xdoclet.path">
    		<fileset dir="${path.project.home}/lib/xdoclet-1.2.3" includes="*.jar" />
    	</path>
    	<target name="generate">
    		<taskdef name="xdoclet" classname="xdoclet.DocletTask" classpathref="xdoclet.path" />
    		<xdoclet destdir="./target">
    			<fileset dir="./src">
    				<include name="**/*.java" />
    			</fileset>
    			<template templateFile="./tpl/test.xdt" destinationfile="{0}Mapper.java">
    			 </template>
    		</xdoclet>
    	</target>
    </project>
    J'ai dans src une classe Toto toute simple, un attribut, des accesseurs.
    J'ai dans tpl un fichier dont le contenu est : TEST <XDtClass:className/>
    J'ai augmenté le niveau de log du jar XDoclet.

    Tel quel, le build s'arrête là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [xdoclet] (XDocletMain.start                   47  ) Running <template/>
    (...)
    [xdoclet] (TemplateSubTask.startProcessPerClass 650 ) Per class.
    Le code de XDoclet donne à penser que la liste des classes sources est vide.
    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
        protected void startProcessPerClass() throws XDocletException {
            Log log = LogUtil.getLog(TemplateSubTask.class, "startProcessPerClass");
            if (log.isDebugEnabled()) {
                log.debug("Per class.");
            }
            Collection classes;
            XJavaDoc xjavadoc = getXJavaDoc();
            xjavadoc.setUseNodeParser(false);
            if (processInnerClasses()) {
                classes = xjavadoc.getSourceClasses();
            } else {
                classes = xjavadoc.getSourceClasses(new XJavaDoc.NoInnerClassesPredicate());
            }
     
            for (Iterator i = classes.iterator(); i.hasNext();) {
                XClass clazz = (XClass) i.next();
                setCurrentClass(clazz);
                if (matchesGenerationRules(clazz)) {
                    if (log.isDebugEnabled()) {
                        log.debug("Working on " + clazz);
                    }
                    generateForClass(clazz);
                }
            }
        }

    Si j'enlève le {0} dans "{0}Mapper.java", le log indique (normal) "Not per class" et l'itération sur les sources se fait, mais j'obtiens une NPE lorsque le programme tente de lire <XDtClass:className/>.

    Si je ne laisse que TEST dans le template, j'obtiens bien un seul (normal) fichier tout bête avec TEST dedans, mais bon...

    Je vois pas la différence avec le projet d'où j'ai importé le build, je pige vraiment pas...
    Si quelqu'un connait bien XDoclet et a une piste, merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Bon, je l'avoue, j'ai donné ma langue au chat et suis passé à Freemarker pour réécrire cette fonctionnalité.

    Au lieu d'avoir une passe via une classe java qui écrit (à coups de strings) un ensemble de classes taguées, puis une seconde passe qui se repose sur ces classes et un template XDoclet verbeux, j'ai une seule passe qui se base sur des templates Freemarker bien plus lisibles... Ouf.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2011, 04h53
  2. API pour générer des classes Java avec prise en compte des contraintes du XSD
    Par Dagnir dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/07/2011, 16h03
  3. Réponses: 0
    Dernier message: 20/03/2011, 16h50
  4. Réponses: 1
    Dernier message: 03/07/2008, 11h25
  5. Générer des classes à partir d'une BDD
    Par christo.pop dans le forum Persistance des données
    Réponses: 2
    Dernier message: 27/03/2007, 09h11

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