2016-10-04 46 views
5

Staram się produkować WADL za pomocą wtyczki maven. Projekt się buduje, a usługa działa. Oto część POM z wtyczką:Maven WADL plugin nie produkuje użytecznej WADL

   <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> 

applicationDocFile i grammarFile istnieje, ale nie zawierają żadnych istotnych informacji. Nie jestem pewien, co uwzględnić.

Oto kontroler:

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()); 
     } 
    } 
} 

Wreszcie, tutaj jest WADL produkowane:

<?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> 

spodziewam się WADL zawierać dostępnych zgłoszeń serwisowych, a także zidentyfikować typy wejściowych. Oczywiście, nie dostaję tego.

Szukałem wysokich i niskich dla przykładów i dokumentacji do wykorzystania tej wtyczki. Każda pomoc będzie bardzo ceniona. Niestety, jakie dokumenty/przykłady istnieją wydają się przestarzałe.

Z góry dziękuję.

+0

nie wygląda jak wiosna REST moduł obsługujący generowanie WADL, patrz [SPR-8705] (https://jira.spring.io/browse/SPR-8705). – Tunaki

+0

@Tunaki - Dzięki. – Grayson

Odpowiedz

3

Niestety ten plugin nie obsługuje kontrolery Wiosna resztę. Będzie przetwarzać tylko klasy opisane adnotacjami @Path i innymi adnotacjami JAX-RS. Nie ma innej wtyczki, która spełnia to, czego potrzebujesz. Masz dwie opcje:

1) Przepisz swój kontroler, aby używać JAX-RS. Na przykład ja zmieniłem kontroler do następujących:

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()); 
     } 
    } 
} 

Następnie plugin produkuje ten plik WADL:

<?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) napisać własny Maven WADL wtyczkę, która obsługuje kontrolery Wiosna resztę. Dla porównania, można spojrzeć na tego generatora w postaci serwisu WWW:

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

a kod źródłowy wtyczki Maven WADL:

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

+0

Dzięki za wejście. Mogę to zrobić w późniejszym terminie. Ponieważ nikt nie włożył w to żadnego wysiłku, a ty całkiem sporo, dostajesz nagrodę. Gratulacje. – Grayson