users@jersey.java.net

[Jersey] NullPointerException in AbstractWadlGeneratorGrammarGenerator.java when using ant-wadl-task

From: <yun.qin_at_emc.com>
Date: Sun, 17 Feb 2013 09:15:35 +0000 (GMT)

Hi all,

I was trying to generate the application.wadl file at build time, i.e.
without a running Jersey webapp.
And since our project explicitly requested Ant rather than Maven, I
figured that ant-wadl-task should be the only choice.

So I've added the following to my build.xml file:
  <target name="compile.sdkcontrol.wadl"
          depends="compile.apisvc.main">
    <taskdef name="generatewadl"
classname="com.sun.jersey.api.wadl.WadlGeneratorTask">
      <classpath>
        <!-- this contains all the jersey-*-1.17.jar's and
ant-wadl-task-1.17.jar -->
        <path refid="library.jersey-1.17.classpath"/>
      </classpath>
    </taskdef>
    <generatewadl
destfile="${sdkcontrol.basedir}/src/main/resources/wadl.xml"
baseUri="https://localhost/">
      <classpath>
        <!-- this points to the .jar file we are interested in -->
        <path refid="apisvc.module.classpath"/>
        <!-- other dependencies -->
      </classpath>
    </generatewadl>
  </target>

Upon executing the target, I was bitten by a NPE from
AbstractWadlGeneratorGrammarGenerator.java:
BUILD FAILED
/home/qiny/shared-sdk-audit/tools/sdk/control/module_sdkcontrol.xml:119
: java.lang.NullPointerException
        at
com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGener
ator.createRequestRepresentation(AbstractWadlGeneratorGrammarGenerator.
java:288)
        at
com.sun.jersey.server.wadl.WadlBuilder.setRepresentationForMediaType(Wa
dlBuilder.java:306)
        at
com.sun.jersey.server.wadl.WadlBuilder.generateRequest(WadlBuilder.java
:227)
        at
com.sun.jersey.server.wadl.WadlBuilder.generateMethod(WadlBuilder.java:
204)
        at
com.sun.jersey.server.wadl.WadlBuilder.generateResource(WadlBuilder.jav
a:368)
        at
com.sun.jersey.server.wadl.WadlBuilder.generateResource(WadlBuilder.jav
a:331)
        at
com.sun.jersey.server.wadl.WadlBuilder.generate(WadlBuilder.java:110)
        at
com.sun.jersey.api.wadl.WadlGeneratorTask.createApplication(WadlGenerat
orTask.java:201)
        at
com.sun.jersey.api.wadl.WadlGeneratorTask.execute(WadlGeneratorTask.jav
a:143)
        at
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso
rImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:
106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:390)
        at org.apache.tools.ant.Target.performTasks(Target.java:411)
        at
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
        at
org.apache.tools.ant.Project.executeTarget(Project.java:1368)
        at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecu
tor.java:41)
        at
org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        at org.apache.tools.ant.Main.runBuild(Main.java:809)
        at org.apache.tools.ant.Main.startAnt(Main.java:217)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Looked into the AbstractWadlGeneratorGrammarGenerator.java source code
at line 288, it seems that field _hasTypeWantsName was not initialized.
Since WadlGeneratorTask no longer exposes setter for wadlGenerators,
seems that I can't just pass in a custom wadlGenerator implementation
as described in
http://jersey.576304.n2.nabble.com/WADL-Ant-td2240710.html.
However, the following hack on WadlBuilder seems to be working for me:
Index: src/main/java/com/sun/jersey/server/wadl/WadlBuilder.java
===================================================================
--- src/main/java/com/sun/jersey/server/wadl/WadlBuilder.java
(revision 5829)
+++ src/main/java/com/sun/jersey/server/wadl/WadlBuilder.java
(working copy)
@@ -93,6 +93,11 @@

     public WadlBuilder(WadlGenerator wadlGenerator) {
         _wadlGenerator = wadlGenerator;
+ try{
+ _wadlGenerator.init();
+ }
+ catch(Exception e)
+ {}
     }

     /**

Now I'm pretty sure that I must be missing something in my build.xml
and I shouldn't count on the ugly hack.
I'm quite new to both Jersey and Java so please do forgive me if I were
asking a stupid question.
Any help is more than appreciated.

Best regards,
Yun