【问题标题】:How do you generate REST service template with wadl2java where POST/PUT methods have parameters?在 POST/PUT 方法有参数的情况下,如何使用 wadl2java 生成 REST 服务模板?
【发布时间】:2018-05-04 01:39:57
【问题描述】:

我读过 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 使用 XML 命名空间 http://superbooks 作为 Book 元素,而 XML 模式使用 bookschema。他们不应该匹配吗?我认为这是一个错误。如果修复后仍然无法正常工作,请向我们展示与插件调用相关的 POM 和 maven 日志(我假设是 maven generate-sources 阶段),尤其是。看看 cxf-wadl2java-plugin 是如何被调用的,带有哪些参数。确保使用-verbose 标志获取最大信息。
  • 是的,我的错。我不明白 WADL 上的命名空间必须与 XSD 上的命名空间相匹配。
  • 好的,我做了相应的回答,以防你没问题:-)

标签: java rest jax-rs cxf wadl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多