XDoclet – support des generics pour les EJBs
Vous utilisez XDoclet pour générer vos EJBs ? Vous avez essayé d’utiliser les generics dans le prototype des méthodes des EJBs ? Dans ce cas, vous avez sûrement rencontré l’erreur suivante :
Buildfile: C:/projects/workspace-mycompany/.metadata/.plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/tempAnt.xml init: ejbdoclet: [ejbdoclet] (XDocletMain.start 47 ) Running <deploymentdescriptor/> [ejbdoclet] Generating EJB deployment descriptor (ejb-jar.xml). [ejbdoclet] Error parsing File C:/projects/workspace-mycompany/myproject-ejb/ejbModule/com/mycompany/myproject/ejb/MyServiceBean.java:Encountered "<" at line 288, column 56. [ejbdoclet] Was expecting one of: [ejbdoclet] <IDENTIFIER> ... [ejbdoclet] "[" ... [ejbdoclet] "." ... [ejbdoclet] (XDocletMain.start 47 ) Running <remoteinterface/> [ejbdoclet] Generating Remote interface for 'com.mycompany.myproject.ejb.MyServiceBean'. [ejbdoclet] (TemplateEngine.invokeMethod 547 ) Invoking method failed: xdoclet.modules.ejb.intf.InterfaceTagsHandler.extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt [ejbdoclet] java.lang.reflect.InvocationTargetException [ejbdoclet] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ejbdoclet] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [ejbdoclet] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [ejbdoclet] at java.lang.reflect.Method.invoke(Unknown Source) [ejbdoclet] at xdoclet.template.TemplateEngine.invoke(TemplateEngine.java:641) [ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:540) [ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620) [ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475) [ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348) [ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415) [ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562) [ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779) [ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679) [ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596) [ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487) [ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48) [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468) [ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105) [ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364) [ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341) [ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) [ejbdoclet] Caused by: java.lang.NullPointerException [ejbdoclet] at xdoclet.modules.ejb.EjbTagsHandler.extendsFromFor(EjbTagsHandler.java:895) [ejbdoclet] at xdoclet.modules.ejb.intf.InterfaceTagsHandler.extendsFrom(InterfaceTagsHandler.java:698) [ejbdoclet] ... 29 more [ejbdoclet] xdoclet.template.TemplateException: Invoking method in class xdoclet.modules.ejb.intf.InterfaceTagsHandler failed: extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt, exception: null [ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:548) [ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620) [ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475) [ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348) [ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415) [ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562) [ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779) [ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679) [ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596) [ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487) [ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48) [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468) [ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105) [ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364) [ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341) [ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) [ejbdoclet] (XDocletMain.start 53 ) Running XDoclet failed. [ejbdoclet] (XDocletMain.start 54 ) <<Running XDoclet failed.>> [ejbdoclet] xdoclet.template.TemplateException: Invoking method in class xdoclet.modules.ejb.intf.InterfaceTagsHandler failed: extendsFrom, line=10 of template file: jar:file:/C:/JONAS_4_7_5/addons/xdoclet-1.2.3/lib/xdoclet-ejb-module-1.2.3.jar!/xdoclet/modules/ejb/intf/resources/remote.xdt, exception: null [ejbdoclet] at xdoclet.template.TemplateEngine.invokeMethod(TemplateEngine.java:548) [ejbdoclet] at xdoclet.template.TemplateEngine.invokeContentMethod(TemplateEngine.java:620) [ejbdoclet] at xdoclet.template.TemplateEngine.handleTag(TemplateEngine.java:475) [ejbdoclet] at xdoclet.template.TemplateEngine.generate(TemplateEngine.java:348) [ejbdoclet] at xdoclet.template.TemplateEngine.start(TemplateEngine.java:415) [ejbdoclet] at xdoclet.TemplateSubTask.startEngine(TemplateSubTask.java:562) [ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:779) [ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679) [ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596) [ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487) [ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48) [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468) [ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105) [ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364) [ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341) [ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) [ejbdoclet] C:projectsworkspace-mycompany.metadata.pluginsorg.eclipse.jst.j2ee.ejb.annotations.xdoclettempAnt.xml:69: XDoclet failed. [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:471) [ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105) [ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364) [ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341) [ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) [ejbdoclet] Caused by: xdoclet.XDocletException: Running XDoclet failed. [ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:788) [ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679) [ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596) [ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487) [ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48) [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468) [ejbdoclet] ... 12 more [ejbdoclet] - - - Nested Exception - - - [ejbdoclet] xdoclet.XDocletException: Running XDoclet failed. [ejbdoclet] at xdoclet.TemplateSubTask.generateForClass(TemplateSubTask.java:788) [ejbdoclet] at xdoclet.TemplateSubTask.startProcessPerClass(TemplateSubTask.java:679) [ejbdoclet] at xdoclet.TemplateSubTask.startProcess(TemplateSubTask.java:596) [ejbdoclet] at xdoclet.TemplateSubTask.execute(TemplateSubTask.java:487) [ejbdoclet] at xdoclet.XDocletMain.start(XDocletMain.java:48) [ejbdoclet] at xdoclet.DocletTask.start(DocletTask.java:468) ejbdoclet] at xjavadoc.ant.XJavadocTask.execute(XJavadocTask.java:105) [ejbdoclet] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [ejbdoclet] at org.apache.tools.ant.Task.perform(Task.java:364) [ejbdoclet] at org.apache.tools.ant.Target.execute(Target.java:341) [ejbdoclet] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ejbdoclet] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [ejbdoclet] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ejbdoclet] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [ejbdoclet] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [ejbdoclet] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) BUILD FAILED C:projectsworkspace-mycompany.metadata.pluginsorg.eclipse.jst.j2ee.ejb.annotations.xdoclettempAnt.xml:69: Unexpected error Total time: 6 seconds
Comme l’équipe de XDoclet ne semble pas travailler sur le sujet[1], Nicolas Leroux s’est penché sur le problème et propose une version modifiée de XDoclet 1.2 et 1.3 supportant les generics.
D’après l’auteur, cette version fonctionne sous JBoss IDE 3.1. Personnellement, je l’ai intégré dans Eclipse 3.2 avec WTP 1.5. Pour celà, il faut remplacer[2] les fichiers présents dans le répertoire lib
de XDoclet xdoclet-1.2.3.jar
, xdoclet-ejb-module-1.2.3.jar
et xjavadoc-1.1.jar
par xdoclet-1.3-08012006-lunatech.jar et xdoclet-ejb-module-1.3-08012006-lunatech.jar et xjavadoc-1.5-29012006-lunatech.jar. Il faut également ajouter le JAR de Dom4j 1.6.1 dans le répertoire lib
de XDoclet.
Attention, Eclipse n’indique plus qu’il trouve les bibliothèques de XDoclet comme ci-dessous :
De plus, le build automatique de XDoclet ne semble plus fonctionner. Cependant, en lancant le build XDoclet manuellement, les EJBs sont correctement générés.Mise à jour du 27/07/06 : en renommant les JAR modifiés avec leur nom original dans XDoclet, tout fonctionne correctement dans Eclipse avec WTP.
Avec cette personnalisation, vous pouvez maintenant bénéficier des avantages des generics lorsque vous développerez vos EJBs.
Notes
[1] Elle est peut-être trop occupée par XDoclet 2.
[2] Pour celà, il faut renommer la version modifiée avec les noms de la version originale.
https://blog.lecacheur.com/2006/07/25/xdoclet-support-des-generics-pour-les-ejbs/DéveloppementJava EEejb,xdocletVous utilisez XDoclet pour générer vos EJBs ? Vous avez essayé d'utiliser les generics dans le prototype des méthodes des EJBs ? Dans ce cas, vous avez sûrement rencontré l'erreur suivante : Buildfile: C:/projects/workspace-mycompany/.metadata/.plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/tempAnt.xml init: ejbdoclet: (XDocletMain.start ...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Merci! Super pratique 🙂
Super ! Ca marche du tonnerre
mais ca marche pas !!!!!!!!!!!!!!!