如何使用wadl2java生成REST服务模板,其中POST / PUT方法有参数?

时间:2018-05-04 01:39:57

标签: java rest jax-rs cxf wadl

我已经读过wadl2java代码生成器和cxf-wadl2java-plugin Maven插件“可用于生成服务器和客户端JAX-RS代码......”但是,除了GET请求之外,生成的代码似乎没用。< / p>

例如,如果我使用以下WADL文件:

case SET_ARTICLE_DATA:
  return {
    ...state, // clone existing articles
    [action.id]: { // replace article with id === `action.id` with received data
      ...state[action.id], // not needed if `action.data` has everything u need
      ...action.data,
      isFetching: false, // can use object destructuring on `state[action.id]` to remove this key too
    } 
  }

这是一个架构:

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

最终,我希望接收JSON而不是XML,但我认为首先应该获得XML,这是CXF的正常用例,正在运行。

我怀疑这与绑定文件有关,但我找不到任何关于如何具体的内容。

1 个答案:

答案 0 :(得分:1)

WADL对Book元素使用XML名称空间http://superbooks,而XML模式使用bookschema。我认为这是一个错误。因此,请确保它们匹配,以便生成一代。