Maven WADL plugin not creating useful WADL

I am trying to create a WADL using the maven plugin. The project is under construction and the service is working. Here is the POM part of the plugin:

<plugin> <groupId>com.sun.jersey.contribs</groupId> <artifactId>maven-wadl-plugin</artifactId> <version>1.19.2</version> <executions> <execution> <id>generate</id> <goals> <goal>generate</goal> </goals> <phase>package</phase> </execution> </executions> <configuration> <wadlFile>${basedir}/src/main/docs/ThingREST.wadl</wadlFile> <formatWadlFile>true</formatWadlFile> <baseUri>http://localhost:8080/ThingREST</baseUri> <packagesResourceConfig> <param>samp.rest.ws.controller</param> </packagesResourceConfig> <wadlGenerators> <wadlGeneratorDescription> <className>com.sun.jersey.server.wadl.generators.WadlGeneratorApplicationDoc </className> <properties> <property> <name>applicationDocsFile</name> <value>${basedir}/src/main/docs/xml/app-wadl-doc.xml</value> </property> </properties> </wadlGeneratorDescription> <wadlGeneratorDescription> <className>com.sun.jersey.server.wadl.generators.WadlGeneratorGrammarsSupport </className> <properties> <property> <name>grammarsFile</name> <value>${basedir}/src/main/docs/xml/app-wadl-grammar.xml</value> </property> </properties> </wadlGeneratorDescription> </wadlGenerators> </configuration> </plugin> 

There are applicationDocFile and grammarFile files, but they do not contain reliable information. I'm not sure what to enable.

Here is the controller:

 package samp.rest.ws.controller; import java.util.List; import samp.rest.ws.ThingDB; import samp.rest.ws.vo.Thing; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** * * @author Grayson */ @RestController public class ThingController { @RequestMapping(value = "/things", method = RequestMethod.GET, headers = "Accept=application/json") //produces = "application/json") public List<Thing> getThings() { return ThingDB.getThings(); } @RequestMapping(value = "/thing/{id}", method = RequestMethod.GET, headers = "Accept=application/json") public Thing getThingById(@PathVariable int id) { return ThingDB.getThing(id); } @RequestMapping(value = "/thingy/{id}", method = RequestMethod.GET) public String getThingy(@PathVariable int id) { return ThingDB.getThing(id).toString(); } @RequestMapping(value = "/addthing", method = RequestMethod.PUT) //, headers = "Accept=application/json") public void addThing(@RequestBody Thing thing) { ThingDB.addThing(thing); List<Thing> lt = ThingDB.getThings(); for (Thing t : lt) { System.out.println(" Post add: " + t.toString()); } } } 

Finally, WADL is created here:

 <?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://wadl.dev.java.net/2009/02"> <doc jersey:generatedBy="Jersey: 1.19.2 08/25/2016 12:00 AM" xmlns:jersey="http://jersey.java.net/"/> <doc title="Maven Spring REST Sample WADL" xml:lang="en"><![CDATA[ This is the Web Application Description Language (WADL) for a Maven Spring REST Service. This service is intended to serve as a workign model/sample. ]]></doc> <grammars/> <resources base="http://localhost:8080/ThingREST"/> </application> 

I expect WADL to include available service calls, as well as detect input types. Obviously, I do not understand this.

I searched high and low for examples and documentation for using this plugin. Any help would be greatly appreciated. Unfortunately, what documentation / examples that exist look outdated.

Thanks in advance.

+5
source share
1 answer

Unfortunately, this plugin does not support Spring REST controllers. It will handle classes annotated with @Path and other JAX-RS annotations. There is no other plugin that does what you need. You have two options:

1) Rewrite your controller to use JAX-RS. For example, I changed your controller to the following:

 package samp.rest.ws.controller; import java.util.List; import samp.rest.ws.ThingDB; import samp.rest.ws.vo.Thing; import javax.ws.rs.*; @Path("/thing") public class ThingController { @GET @Path(value = "/things") @Produces("application/json") public List<Thing> getThings() { return ThingDB.getThings(); } @GET @Path(value = "/thing/{id}") @Produces("application/json") public Thing getThingById(@PathParam("id") int id) { return ThingDB.getThing(id); } @GET @Path(value = "/thingy/{id}") public String getThingy(@PathParam("id") int id) { return ThingDB.getThing(id).toString(); } @PUT @Path(value = "/addthing") @Produces("application/json") public void addThing(Thing thing) { ThingDB.addThing(thing); List<Thing> lt = ThingDB.getThings(); for (Thing t : lt) { System.out.println(" Post add: " + t.toString()); } } } 

The plugin then creates this WADL file:

 <?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://wadl.dev.java.net/2009/02"> <doc jersey:generatedBy="Jersey: 1.19.2 08/25/2016 12:00 AM" xmlns:jersey="http://jersey.java.net/"/> <doc title="A message in the WADL" xml:lang="en"><![CDATA[This is the Web Application Description Language (WADL) for a Maven Spring REST Service. This service is intended to serve as a workign model/sample.]]></doc> <grammars> <include href="xsd0.xsd"> <doc/> </include> </grammars> <resources base="http://localhost:8080/ThingREST"> <resource path="/thing"> <resource path="/things"> <method id="getThings" name="GET"> <response> <representation mediaType="application/json"/> </response> </method> </resource> <resource path="/addthing"> <method id="addThing" name="PUT"> <request> <representation mediaType="*/*"/> </request> </method> </resource> <resource path="/thing/{id}"> <param name="id" style="template" type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema"/> <method id="getThingById" name="GET"> <response> <representation mediaType="application/json"/> </response> </method> </resource> <resource path="/thingy/{id}"> <param name="id" style="template" type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema"/> <method id="getThingy" name="GET"> <response> <representation mediaType="*/*"/> </response> </method> </resource> </resource> </resources> </application> 

2) Create your own Maven WADL plugin that supports Spring REST controllers. For reference, you can look at this generator as a web service:

https://javattitude.com/2014/05/26/wadl-generator-for-spring-rest/

And the source code for the Maven WADL plugin:

https://github.com/jersey/jersey-1.x/tree/master/contribs/maven-wadl-plugin

+3
source

Source: https://habr.com/ru/post/1257694/


All Articles