如何构造WADL文件以获得以下Java接口
我对REST服务很陌生。。我想创建一个WADL,将其转换为Java接口,以创建和公开Rest web服务。。所以我需要创建一个WADL来获得以下java接口:-如何构造WADL文件以获得以下Java接口,java,rest,interface,wadl,Java,Rest,Interface,Wadl,我对REST服务很陌生。。我想创建一个WADL,将其转换为Java接口,以创建和公开Rest web服务。。所以我需要创建一个WADL来获得以下java接口:- @Path("/getData") public interface MainData { @GET @Produces("application/json") @Path("/retrieve/") public DataResponse retrieveDataOperation(@QueryPa
@Path("/getData")
public interface MainData {
@GET
@Produces("application/json")
@Path("/retrieve/")
public DataResponse retrieveDataOperation(@QueryParam("id") int id);
@POST
@Produces("application/json")
@Path("/insert/")
public DataResponse insertDataOperation(String message);
@PUT
@Produces("application/json")
@Path("/update/")
public DataResponse updateDataOperation(String message);
@DELETE
@Produces("application/json")
@Path("/delete/")
public DataResponse deleteDataOperation(@QueryParam("id") int id);
}
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://wadl.dev.java.net/2009/02 wadl.xsd"
xmlns:ns1="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://wadl.dev.java.net/2009/02">
<grammars>
<include href="MainData.xsd" />
</grammars>
<resources base="http://localhost:8082">
<resource path="getData" id="com.test.services.schema.maindata.v1.MainData">
<resource path="/retrieve/" >
<method name="GET" id="retrieveDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/delete/" >
<method name="DELETE" id="deleteDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/insert/" >
<method name="POST" id="insertDataOperation">
<request>
<param name="message" type="xs:string" />
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/update/" >
<method name="PUT" id="updateDataOperation">
<request>
<param name="message" type="xs:string" />
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
到目前为止,我尝试创建以下WADL以获得上述接口:-
@Path("/getData")
public interface MainData {
@GET
@Produces("application/json")
@Path("/retrieve/")
public DataResponse retrieveDataOperation(@QueryParam("id") int id);
@POST
@Produces("application/json")
@Path("/insert/")
public DataResponse insertDataOperation(String message);
@PUT
@Produces("application/json")
@Path("/update/")
public DataResponse updateDataOperation(String message);
@DELETE
@Produces("application/json")
@Path("/delete/")
public DataResponse deleteDataOperation(@QueryParam("id") int id);
}
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://wadl.dev.java.net/2009/02 wadl.xsd"
xmlns:ns1="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://wadl.dev.java.net/2009/02">
<grammars>
<include href="MainData.xsd" />
</grammars>
<resources base="http://localhost:8082">
<resource path="getData" id="com.test.services.schema.maindata.v1.MainData">
<resource path="/retrieve/" >
<method name="GET" id="retrieveDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/delete/" >
<method name="DELETE" id="deleteDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/insert/" >
<method name="POST" id="insertDataOperation">
<request>
<param name="message" type="xs:string" />
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
<resource path="/update/" >
<method name="PUT" id="updateDataOperation">
<request>
<param name="message" type="xs:string" />
</request>
<response>
<representation mediaType="application/json" element="ns1:DataResponse"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
但是在将WADL转换成Java之后,我无法获得上面的Java接口。。在Apache CXF中转换时,它还显示以下异常:-WADLToJava错误:java.lang.NullPointerException
请帮助我修改WADL以获得上面的java接口。。我做得对吗。。请帮忙。我刚刚检查了您的WADL,它看起来还不错,有几个小错误,但没有指出您的错误。此外,我还使用了命令行工具wadl2java
wadl2java -d /output/dir -interface /input/wadl/application.wadl
这里是修正的WADL
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:ns1="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators">
<grammars>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators">
<xs:element name="dataResponse" type="ns1:dataResponse"/>
<xs:complexType name="dataResponse">
<xs:sequence>
<xs:element name="param1" type="xs:int"/>
<xs:element name="param2" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</grammars>
<resources base="http://localhost:8082">
<resource path="getData" id="com.test.services.schema.maindata.v1.MainData">
<resource path="/retrieve/" >
<method name="GET" id="retrieveDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/delete/" >
<method name="DELETE" id="deleteDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/insert/" >
<method name="POST" id="insertDataOperation">
<request>
<representation mediaType="*/*">
<param name="message" style="plain" type="xs:string" />
</representation>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/update/" >
<method name="PUT" id="updateDataOperation">
<request>
<representation mediaType="*/*">
<param name="message" style="plain" type="xs:string" />
</representation>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
有了这个,
<param name="message" style="query" type="xs:string" />
希望有帮助。太好了。。但有一个主要问题。。从WADL转换为java文件后。。。我得到以下结果:-
DataResponse insertDataOperation(String)代码>。。其中实际上应该是DataResponse insertDataOperation(字符串消息)代码>。。。我正在获取insert和UPDATE,我尝试了
,并且获得了数据响应INSERTDATATABOLATION(@QueryParam(“message”)字符串消息)代码>。。但是我想要的是简单的(字符串消息)
,而不是其中的@QueryParam(“消息”)。。没有办法避免吗?正如我所说,您可以更新org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator,以返回“name”param,而不是param类型的小写字母。这就是它的实现方式,在cxf jira上报告它。一切都很好。那就最后一个问题。看,我对WADL知之甚少。。听起来可能有点傻。。但无论如何,问题是:-我得到的是DataResponse insertDataOperation(@QueryParam(“message”)字符串消息)代码>。。但我想要的是它应该像publicdataresponse insertDataOperation(@QueryParam(“message”)字符串message)代码>。。所以无论如何,在所有这些方法之前添加public。。请检查我的问题。预期输出在所有方法之前包含public。是否有任何方法可以修改WADL以获得它??这是我不确定的最后一件事,因为公共修饰符在java接口中是多余的。所以你的两个案例实际上是一样的。如果你真的需要,我会调查的。