Я читал, что генератор кода 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.
Я подозреваю, что это как-то связано с файлом привязки, но я не могу найти ничего конкретного о том, как.