如何使用 POST/PUT 方法具有参数的 wadl2java 生成 REST 服务模板?
How do you generate REST service template with wadl2java where POST/PUT methods have parameters?
我读到过 wadl2java 代码生成器和 cxf-wadl2java-plugin Maven 插件“可用于生成服务器和客户端 JAX-RS 代码……”但是,除了 GET 请求之外,生成的代码似乎毫无用处.
例如,如果我使用以下 WADL 文件:
<?xml version="1.0" encoding="UTF-8"?>
<application
xmlns="http://wadl.dev.java.net/2009/02"
xmlns:ns="http://superbooks">
<grammars>
<include
href="book.xsd"/>
</grammars>
<resources
base="http://localhost:8080/">
<resource
path="/bookstore/put"
id="poster">
<method
name="POST"
id="postBook">
<request>
<representation
mediaType="application/xml"
element="ns:Book"/>
</request>
<response>
<representation
mediaType="*/*"/>
</response>
</method>
</resource>
</resources>
</application>
这是一个模式:
<?xml version="1.0"?>
<xs:schema
id="bookschema"
targetNamespace="bookschema"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns="bookschema"
>
<xs:complexType name="Book">
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Book" type="ns:Book"/>
</xs:schema>
生成的代码如下所示:
/**
* Created by Apache CXF WadlToJava code generator
**/
package com.cxf.test;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Path("/bookstore/put")
public interface Poster {
@POST
@Consumes("application/xml")
@Produces("*/*")
Response postBook();
}
我本来希望该方法看起来更像这样:
@POST
@Consumes("application/xml")
@Produces("*/*")
Response postBook(Book book);
POST 方法不带参数有什么用?
最终,我想接收 JSON 而不是 XML,但我认为我首先应该接收 XML,这是 CXF 的正常用例。
我怀疑这与绑定文件有关,但我找不到具体的方法。
WADL 正在为 Book 元素使用 XML 命名空间 http://superbooks
,而 XML 架构正在使用 bookschema
。我认为这是一个错误。因此,请确保它们匹配,以便生成工作。
我读到过 wadl2java 代码生成器和 cxf-wadl2java-plugin Maven 插件“可用于生成服务器和客户端 JAX-RS 代码……”但是,除了 GET 请求之外,生成的代码似乎毫无用处.
例如,如果我使用以下 WADL 文件:
<?xml version="1.0" encoding="UTF-8"?>
<application
xmlns="http://wadl.dev.java.net/2009/02"
xmlns:ns="http://superbooks">
<grammars>
<include
href="book.xsd"/>
</grammars>
<resources
base="http://localhost:8080/">
<resource
path="/bookstore/put"
id="poster">
<method
name="POST"
id="postBook">
<request>
<representation
mediaType="application/xml"
element="ns:Book"/>
</request>
<response>
<representation
mediaType="*/*"/>
</response>
</method>
</resource>
</resources>
</application>
这是一个模式:
<?xml version="1.0"?>
<xs:schema
id="bookschema"
targetNamespace="bookschema"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns="bookschema"
>
<xs:complexType name="Book">
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Book" type="ns:Book"/>
</xs:schema>
生成的代码如下所示:
/**
* Created by Apache CXF WadlToJava code generator
**/
package com.cxf.test;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Path("/bookstore/put")
public interface Poster {
@POST
@Consumes("application/xml")
@Produces("*/*")
Response postBook();
}
我本来希望该方法看起来更像这样:
@POST
@Consumes("application/xml")
@Produces("*/*")
Response postBook(Book book);
POST 方法不带参数有什么用?
最终,我想接收 JSON 而不是 XML,但我认为我首先应该接收 XML,这是 CXF 的正常用例。
我怀疑这与绑定文件有关,但我找不到具体的方法。
WADL 正在为 Book 元素使用 XML 命名空间 http://superbooks
,而 XML 架构正在使用 bookschema
。我认为这是一个错误。因此,请确保它们匹配,以便生成工作。