如何构造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

我对REST服务很陌生。。我想创建一个WADL,将其转换为Java接口,以创建和公开Rest web服务。。所以我需要创建一个WADL来获得以下java接口:-

@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接口中是多余的。所以你的两个案例实际上是一样的。如果你真的需要,我会调查的。