Как вы генерируете шаблон службы REST с wadl2java, где методы POST / PUT имеют параметры? - PullRequest
0 голосов
/ 04 мая 2018

Я читал, что генератор кода 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.

Я подозреваю, что это как-то связано с файлом привязки, но я не могу найти ничего конкретного о том, как.

1 Ответ

0 голосов
/ 10 мая 2018

WADL использует пространство имен XML http://superbooks для элемента Book, тогда как схема XML использует bookschema. Я предполагаю, что это ошибка. Поэтому убедитесь, что они совпадают, чтобы поколение работало.

...