[英]Maven WADL plugin not producing a usable WADL
我正在嘗試使用maven插件生成WADL。 項目構建和服務工作。 以下是POM插件的一部分:
<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和grammarFile存在,但它們不包含任何重要信息。 我不知道該包括什么。
這是控制器:
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());
}
}
}
最后,這是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="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>
我期望WADL包含可用的服務調用並識別輸入類型。 顯然,我沒有得到這個。
我已經搜索了高低版本的示例和文檔來使用這個插件。 任何和所有的幫助將不勝感激。 遺憾的是,存在哪些文檔/示例似乎已經過時了。
提前致謝。
不幸的是,這個插件不支持Spring REST控制器。 它只會處理用@Path和其他JAX-RS注釋注釋的類。 沒有其他插件可以滿足您的需求。 您有兩種選擇:
1)重寫您的控制器以使用JAX-RS。 例如,我將您的控制器更改為以下內容:
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());
}
}
}
然后插件生成此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)編寫自己的Maven WADL插件,支持Spring REST控制器。 作為參考,您可以以Web服務的形式查看此生成器:
https://javattitude.com/2014/05/26/wadl-generator-for-spring-rest/
以及Maven WADL插件的源代碼:
https://github.com/jersey/jersey-1.x/tree/master/contribs/maven-wadl-plugin
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.