[JaxRS-CXF][bug #4330] support containers in return types (#4339)

* [JaxRS-CXF][bug #4330] support containers in return types

before this commit if a method returned a container (List or Map) of
THING (i.e. List<THING> or Map<String, THING>) the generated return type would
drop the container and only leave THING.
this commit fixes this issue such that the container type is properly
generated.

* regenerate jaxrs-cxf petstore sample
This commit is contained in:
Matan Rubin 2016-12-14 07:58:56 +02:00 committed by wing328
parent 90cf1cab53
commit 5867728724
10 changed files with 50 additions and 55 deletions

View File

@ -37,7 +37,7 @@ public interface {{classname}} {
@Produces({ {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} })
{{/hasProduces}}
@ApiOperation(value = "{{summary}}", tags={ {{#vendorExtensions.x-tags}}"{{tag}}"{{#hasMore}}, {{/hasMore}}{{/vendorExtensions.x-tags}} })
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
public {{>returnTypes}} {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
{{/operation}}
}
{{/operations}}

View File

@ -28,7 +28,7 @@ import org.springframework.stereotype.Service;
public class {{classname}}ServiceImpl implements {{classname}} {
{{#operations}}
{{#operation}}
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} {{nickname}}({{#allParams}}{{>queryParamsImpl}}{{>pathParamsImpl}}{{>headerParamsImpl}}{{>bodyParams}}{{>formParamsImpl}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
public {{>returnTypes}} {{nickname}}({{#allParams}}{{>queryParamsImpl}}{{>pathParamsImpl}}{{>headerParamsImpl}}{{>bodyParams}}{{>formParamsImpl}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
// TODO: Implement...
{{^vendorExtensions.x-java-is-response-void}}return null;{{/vendorExtensions.x-java-is-response-void}}

View File

@ -103,7 +103,7 @@ public class {{classname}}Test {
{{#allParams}}
{{^isFile}}{{{dataType}}} {{paramName}} = null;{{/isFile}}{{#isFile}}org.apache.cxf.jaxrs.ext.multipart.Attachment {{paramName}} = null;{{/isFile}}
{{/allParams}}
//{{^vendorExtensions.x-java-is-response-void}}{{{returnType}}} response = {{/vendorExtensions.x-java-is-response-void}}api.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
//{{^vendorExtensions.x-java-is-response-void}}{{>returnTypes}} response = {{/vendorExtensions.x-java-is-response-void}}api.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
{{^vendorExtensions.x-java-is-response-void}}//assertNotNull(response);{{/vendorExtensions.x-java-is-response-void}}
// TODO: test validations

View File

@ -0,0 +1 @@
{{#returnContainer}}{{#isMapContainer}}Map<String, {{{returnType}}}>{{/isMapContainer}}{{#isListContainer}}List<{{{returnType}}}>{{/isListContainer}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}}

View File

@ -1,8 +1,8 @@
package io.swagger.api;
import io.swagger.model.Pet;
import io.swagger.model.ModelApiResponse;
import java.io.File;
import io.swagger.model.ModelApiResponse;
import io.swagger.model.Pet;
import java.io.InputStream;
import java.io.OutputStream;
@ -18,8 +18,6 @@ import io.swagger.annotations.ApiOperation;
@Path("/")
@Api(value = "/", description = "")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface PetApi {
@POST
@ -27,51 +25,51 @@ public interface PetApi {
@Consumes({ "application/json", "application/xml" })
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Add a new pet to the store", tags={ "pet", })
public void addPet(Pet body);
public void addPet(Pet body);
@DELETE
@Path("/pet/{petId}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Deletes a pet", tags={ "pet", })
public void deletePet(@PathParam("petId") Long petId, @HeaderParam("api_key") String apiKey);
public void deletePet(@PathParam("petId") Long petId, @HeaderParam("api_key") String apiKey);
@GET
@Path("/pet/findByStatus")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Finds Pets by status", tags={ "pet", })
public Pet findPetsByStatus(@QueryParam("status")List<String> status);
public List<Pet> findPetsByStatus(@QueryParam("status")List<String> status);
@GET
@Path("/pet/findByTags")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Finds Pets by tags", tags={ "pet", })
public Pet findPetsByTags(@QueryParam("tags")List<String> tags);
public List<Pet> findPetsByTags(@QueryParam("tags")List<String> tags);
@GET
@Path("/pet/{petId}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Find pet by ID", tags={ "pet", })
public Pet getPetById(@PathParam("petId") Long petId);
public Pet getPetById(@PathParam("petId") Long petId);
@PUT
@Path("/pet")
@Consumes({ "application/json", "application/xml" })
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Update an existing pet", tags={ "pet", })
public void updatePet(Pet body);
public void updatePet(Pet body);
@POST
@Path("/pet/{petId}")
@Consumes({ "application/x-www-form-urlencoded" })
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Updates a pet in the store with form data", tags={ "pet", })
public void updatePetWithForm(@PathParam("petId") Long petId, @Multipart(value = "name", required = false) String name, @Multipart(value = "status", required = false) String status);
public void updatePetWithForm(@PathParam("petId") Long petId, @Multipart(value = "name", required = false) String name, @Multipart(value = "status", required = false) String status);
@POST
@Path("/pet/{petId}/uploadImage")
@Consumes({ "multipart/form-data" })
@Produces({ "application/json" })
@ApiOperation(value = "uploads an image", tags={ "pet" })
public ModelApiResponse uploadFile(@PathParam("petId") Long petId, @Multipart(value = "additionalMetadata", required = false) String additionalMetadata, @Multipart(value = "file" , required = false) Attachment fileDetail);
public ModelApiResponse uploadFile(@PathParam("petId") Long petId, @Multipart(value = "additionalMetadata", required = false) String additionalMetadata, @Multipart(value = "file" , required = false) Attachment fileDetail);
}

View File

@ -17,32 +17,30 @@ import io.swagger.annotations.ApiOperation;
@Path("/")
@Api(value = "/", description = "")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface StoreApi {
@DELETE
@Path("/store/order/{orderId}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Delete purchase order by ID", tags={ "store", })
public void deleteOrder(@PathParam("orderId") String orderId);
public void deleteOrder(@PathParam("orderId") String orderId);
@GET
@Path("/store/inventory")
@Produces({ "application/json" })
@ApiOperation(value = "Returns pet inventories by status", tags={ "store", })
public Integer getInventory();
public Map<String, Integer> getInventory();
@GET
@Path("/store/order/{orderId}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Find purchase order by ID", tags={ "store", })
public Order getOrderById(@PathParam("orderId") Long orderId);
public Order getOrderById(@PathParam("orderId") Long orderId);
@POST
@Path("/store/order")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Place an order for a pet", tags={ "store" })
public Order placeOrder(Order body);
public Order placeOrder(Order body);
}

View File

@ -1,7 +1,7 @@
package io.swagger.api;
import io.swagger.model.User;
import java.util.List;
import io.swagger.model.User;
import java.io.InputStream;
import java.io.OutputStream;
@ -17,56 +17,54 @@ import io.swagger.annotations.ApiOperation;
@Path("/")
@Api(value = "/", description = "")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface UserApi {
@POST
@Path("/user")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Create user", tags={ "user", })
public void createUser(User body);
public void createUser(User body);
@POST
@Path("/user/createWithArray")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Creates list of users with given input array", tags={ "user", })
public void createUsersWithArrayInput(List<User> body);
public void createUsersWithArrayInput(List<User> body);
@POST
@Path("/user/createWithList")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Creates list of users with given input array", tags={ "user", })
public void createUsersWithListInput(List<User> body);
public void createUsersWithListInput(List<User> body);
@DELETE
@Path("/user/{username}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Delete user", tags={ "user", })
public void deleteUser(@PathParam("username") String username);
public void deleteUser(@PathParam("username") String username);
@GET
@Path("/user/{username}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Get user by user name", tags={ "user", })
public User getUserByName(@PathParam("username") String username);
public User getUserByName(@PathParam("username") String username);
@GET
@Path("/user/login")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Logs user into the system", tags={ "user", })
public String loginUser(@QueryParam("username")String username, @QueryParam("password")String password);
public String loginUser(@QueryParam("username")String username, @QueryParam("password")String password);
@GET
@Path("/user/logout")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Logs out current logged in user session", tags={ "user", })
public void logoutUser();
public void logoutUser();
@PUT
@Path("/user/{username}")
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Updated user", tags={ "user" })
public void updateUser(@PathParam("username") String username, User body);
public void updateUser(@PathParam("username") String username, User body);
}

View File

@ -1,9 +1,9 @@
package io.swagger.api.impl;
import io.swagger.api.*;
import io.swagger.model.Pet;
import io.swagger.model.ModelApiResponse;
import java.io.File;
import io.swagger.model.ModelApiResponse;
import io.swagger.model.Pet;
import java.io.InputStream;
import java.io.OutputStream;
@ -19,49 +19,49 @@ import org.apache.cxf.jaxrs.ext.multipart.*;
import io.swagger.annotations.Api;
public class PetApiServiceImpl implements PetApi {
public void addPet(Pet body) {
public void addPet(Pet body) {
// TODO: Implement...
}
public void deletePet(Long petId, String apiKey) {
public void deletePet(Long petId, String apiKey) {
// TODO: Implement...
}
public Pet findPetsByStatus(List<String> status) {
public List<Pet> findPetsByStatus(List<String> status) {
// TODO: Implement...
return null;
}
public Pet findPetsByTags(List<String> tags) {
public List<Pet> findPetsByTags(List<String> tags) {
// TODO: Implement...
return null;
}
public Pet getPetById(Long petId) {
public Pet getPetById(Long petId) {
// TODO: Implement...
return null;
}
public void updatePet(Pet body) {
public void updatePet(Pet body) {
// TODO: Implement...
}
public void updatePetWithForm(Long petId, String name, String status) {
public void updatePetWithForm(Long petId, String name, String status) {
// TODO: Implement...
}
public ModelApiResponse uploadFile(Long petId, String additionalMetadata, Attachment fileDetail) {
public ModelApiResponse uploadFile(Long petId, String additionalMetadata, Attachment fileDetail) {
// TODO: Implement...
return null;

View File

@ -18,25 +18,25 @@ import org.apache.cxf.jaxrs.ext.multipart.*;
import io.swagger.annotations.Api;
public class StoreApiServiceImpl implements StoreApi {
public void deleteOrder(String orderId) {
public void deleteOrder(String orderId) {
// TODO: Implement...
}
public Integer getInventory() {
public Map<String, Integer> getInventory() {
// TODO: Implement...
return null;
}
public Order getOrderById(Long orderId) {
public Order getOrderById(Long orderId) {
// TODO: Implement...
return null;
}
public Order placeOrder(Order body) {
public Order placeOrder(Order body) {
// TODO: Implement...
return null;

View File

@ -1,8 +1,8 @@
package io.swagger.api.impl;
import io.swagger.api.*;
import io.swagger.model.User;
import java.util.List;
import io.swagger.model.User;
import java.io.InputStream;
import java.io.OutputStream;
@ -18,49 +18,49 @@ import org.apache.cxf.jaxrs.ext.multipart.*;
import io.swagger.annotations.Api;
public class UserApiServiceImpl implements UserApi {
public void createUser(User body) {
public void createUser(User body) {
// TODO: Implement...
}
public void createUsersWithArrayInput(List<User> body) {
public void createUsersWithArrayInput(List<User> body) {
// TODO: Implement...
}
public void createUsersWithListInput(List<User> body) {
public void createUsersWithListInput(List<User> body) {
// TODO: Implement...
}
public void deleteUser(String username) {
public void deleteUser(String username) {
// TODO: Implement...
}
public User getUserByName(String username) {
public User getUserByName(String username) {
// TODO: Implement...
return null;
}
public String loginUser(String username, String password) {
public String loginUser(String username, String password) {
// TODO: Implement...
return null;
}
public void logoutUser() {
public void logoutUser() {
// TODO: Implement...
}
public void updateUser(String username, User body) {
public void updateUser(String username, User body) {
// TODO: Implement...