diff --git a/circle.yml b/circle.yml index 89ea6bc22ce7..a4e71cc09d18 100644 --- a/circle.yml +++ b/circle.yml @@ -7,6 +7,9 @@ machine: # Override /etc/hosts hosts: petstore.swagger.io: 127.0.0.1 + environment: + DOCKER_GENERATOR_IMAGE_NAME: swaggerapi/swagger-generator + DOCKER_CODEGEN_CLI_IMAGE_NAME: swaggerapi/swagger-codegen-cli dependencies: cache_directories: @@ -37,6 +40,6 @@ test: - java -version - mvn -q clean verify -Psamples # docker: build generator image and push to Docker Hub - - if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/swagger-generator && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_GENERATOR_IMAGE_NAME; fi; fi + - if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build --rm=false -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/swagger-generator && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_GENERATOR_IMAGE_NAME; fi; fi # docker: build cli image and push to Docker Hub - - if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/swagger-codegen-cli && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME; fi; fi + - if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build --rm=false -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/swagger-codegen-cli && if [ ! -z "$CIRCLE_TAG" ]; then docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$CIRCLE_TAG; fi && if [ ! -z "$CIRCLE_TAG" ] || [ "$CIRCLE_BRANCH" = "master" ]; then docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME; fi; fi diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java index 3c2dac1dca33..6053939fa4e2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CppRestClientCodegen.java @@ -1,7 +1,10 @@ package io.swagger.codegen.languages; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import io.swagger.codegen.*; import io.swagger.codegen.examples.ExampleGenerator; +import io.swagger.codegen.utils.ModelUtils; import io.swagger.models.Model; import io.swagger.models.Operation; import io.swagger.models.Response; @@ -11,6 +14,8 @@ import io.swagger.models.properties.*; import java.util.*; import java.io.File; +import static com.google.common.base.Strings.isNullOrEmpty; + public class CppRestClientCodegen extends DefaultCodegen implements CodegenConfig { public static final String DECLSPEC = "declspec"; @@ -20,6 +25,9 @@ public class CppRestClientCodegen extends DefaultCodegen implements CodegenConfi protected String declspec = ""; protected String defaultInclude = ""; + private final Set parentModels = new HashSet<>(); + private final Multimap childrenByParent = ArrayListMultimap.create(); + /** * Configures the type of generator. * @@ -236,6 +244,13 @@ public class CppRestClientCodegen extends DefaultCodegen implements CodegenConfi if (isFileProperty(property)) { property.vendorExtensions.put("x-codegen-file", true); } + + if (!isNullOrEmpty(model.parent)) { + parentModels.add(model.parent); + if (!childrenByParent.containsEntry(model.parent, model)) { + childrenByParent.put(model.parent, model); + } + } } protected boolean isFileProperty(CodegenProperty property) { @@ -397,4 +412,38 @@ public class CppRestClientCodegen extends DefaultCodegen implements CodegenConfi return input.replace("*/", "*_/").replace("/*", "/_*"); } + @Override + public Map postProcessAllModels(final Map models) { + + final Map processed = super.postProcessAllModels(models); + postProcessParentModels(models); + return processed; + } + + private void postProcessParentModels(final Map models) { + for (final String parent : parentModels) { + final CodegenModel parentModel = ModelUtils.getModelByName(parent, models); + final Collection childrenModels = childrenByParent.get(parent); + for (final CodegenModel child : childrenModels) { + processParentPropertiesInChildModel(parentModel, child); + } + } + } + + /** + * Sets the child property's isInherited flag to true if it is an inherited property + */ + private void processParentPropertiesInChildModel(final CodegenModel parent, final CodegenModel child) { + final Map childPropertiesByName = new HashMap<>(child.vars.size()); + for (final CodegenProperty childProperty : child.vars) { + childPropertiesByName.put(childProperty.name, childProperty); + } + for (final CodegenProperty parentProperty : parent.vars) { + final CodegenProperty duplicatedByParent = childPropertiesByName.get(parentProperty.name); + if (duplicatedByParent != null) { + duplicatedByParent.isInherited = true; + } + } + } + } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java index 6e63dbbedf60..3d21bed182a9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java @@ -12,6 +12,7 @@ import io.swagger.codegen.CodegenOperation; import io.swagger.codegen.CodegenProperty; import io.swagger.codegen.CodegenType; import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.utils.ModelUtils; import io.swagger.models.Swagger; import io.swagger.models.properties.Property; import io.swagger.models.properties.StringProperty; @@ -228,7 +229,7 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { private void postProcessParentModels(final Map models) { log.debug("Processing parents: " + parentModels); for (final String parent : parentModels) { - final CodegenModel parentModel = modelByName(parent, models); + final CodegenModel parentModel = ModelUtils.getModelByName(parent, models); parentModel.hasChildren = true; final Collection childrenModels = childrenByParent.get(parent); for (final CodegenModel child : childrenModels) { @@ -237,27 +238,6 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { } } - private CodegenModel modelByName(final String name, final Map models) { - final Object data = models.get(name); - if (data instanceof Map) { - final Map dataMap = (Map) data; - final Object dataModels = dataMap.get("models"); - if (dataModels instanceof List) { - final List dataModelsList = (List) dataModels; - for (final Object entry : dataModelsList) { - if (entry instanceof Map) { - final Map entryMap = (Map) entry; - final Object model = entryMap.get("model"); - if (model instanceof CodegenModel) { - return (CodegenModel) model; - } - } - } - } - } - return null; - } - private void processParentPropertiesInChildModel(final CodegenModel parent, final CodegenModel child) { final Map childPropertiesByName = new HashMap<>(child.vars.size()); for (final CodegenProperty property : child.vars) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtml2Generator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtml2Generator.java index 4f8ea21c8357..4ee92bd32460 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtml2Generator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtml2Generator.java @@ -10,6 +10,8 @@ import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; import io.swagger.models.Info; +import org.yaml.snakeyaml.error.Mark; +import io.swagger.codegen.utils.Markdown; import io.swagger.models.Model; import io.swagger.models.Operation; import io.swagger.models.Swagger; @@ -153,6 +155,8 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi additionalProperties.put("jsProjectName", jsProjectName); additionalProperties.put("jsModuleName", jsModuleName); + + preparHtmlForGlobalDescription(swagger); } @Override @@ -195,6 +199,21 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi return op; } + /** + * Parse Markdown to HTML for the main "Description" attribute + * + * @param swagger The base object containing the global description through "Info" class + * @return Void + */ + private void preparHtmlForGlobalDescription(Swagger swagger) { + String currentDescription = swagger.getInfo().getDescription(); + if (currentDescription != null && !currentDescription.isEmpty()) { + Markdown markInstance = new Markdown(); + swagger.getInfo().setDescription( markInstance.toHtml(currentDescription) ); + } else { + LOGGER.error("Swagger object description is empty [" + swagger.getInfo().getTitle() + "]"); + } + } private String sanitizePath(String p) { //prefer replace a ', instead of a fuLL URL encode for readability diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Swift3Codegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Swift3Codegen.java index 65297b999776..1002b2e14c5f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Swift3Codegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Swift3Codegen.java @@ -39,11 +39,13 @@ public class Swift3Codegen extends DefaultCodegen implements CodegenConfig { public static final String POD_DOCUMENTATION_URL = "podDocumentationURL"; public static final String SWIFT_USE_API_NAMESPACE = "swiftUseApiNamespace"; public static final String DEFAULT_POD_AUTHORS = "Swagger Codegen"; + public static final String LENIENT_TYPE_CAST = "lenientTypeCast"; protected static final String LIBRARY_PROMISE_KIT = "PromiseKit"; protected static final String LIBRARY_RX_SWIFT = "RxSwift"; protected static final String[] RESPONSE_LIBRARIES = {LIBRARY_PROMISE_KIT, LIBRARY_RX_SWIFT}; protected String projectName = "SwaggerClient"; protected boolean unwrapRequired; + protected boolean lenientTypeCast = false; protected boolean swiftUseApiNamespace; protected String[] responseAs = new String[0]; protected String sourceFolder = "Classes" + File.separator + "Swaggers"; @@ -170,12 +172,14 @@ public class Swift3Codegen extends DefaultCodegen implements CodegenConfig { cliOptions.add(new CliOption(SWIFT_USE_API_NAMESPACE, "Flag to make all the API classes inner-class of {{projectName}}API")); cliOptions.add(new CliOption(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "hides the timestamp when files were generated") .defaultValue(Boolean.TRUE.toString())); - + cliOptions.add(new CliOption(LENIENT_TYPE_CAST, "Accept and cast values for simple types (string->bool, string->int, int->string)") + .defaultValue(Boolean.FALSE.toString())); } @Override public void processOpts() { super.processOpts(); + // default HIDE_GENERATION_TIMESTAMP to true if (!additionalProperties.containsKey(CodegenConstants.HIDE_GENERATION_TIMESTAMP)) { additionalProperties.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, Boolean.TRUE.toString()); @@ -224,6 +228,8 @@ public class Swift3Codegen extends DefaultCodegen implements CodegenConfig { additionalProperties.put(POD_AUTHORS, DEFAULT_POD_AUTHORS); } + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); + supportingFiles.add(new SupportingFile("Podspec.mustache", "", projectName + ".podspec")); supportingFiles.add(new SupportingFile("Cartfile.mustache", "", "Cartfile")); supportingFiles.add(new SupportingFile("APIHelper.mustache", sourceFolder, "APIHelper.swift")); @@ -472,6 +478,10 @@ public class Swift3Codegen extends DefaultCodegen implements CodegenConfig { this.unwrapRequired = unwrapRequired; } + public void setLenientTypeCast(boolean lenientTypeCast) { + this.lenientTypeCast = lenientTypeCast; + } + public void setResponseAs(String[] responseAs) { this.responseAs = responseAs; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/utils/ModelUtils.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/utils/ModelUtils.java new file mode 100644 index 000000000000..49e40effbff4 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/utils/ModelUtils.java @@ -0,0 +1,36 @@ +package io.swagger.codegen.utils; + +import io.swagger.codegen.CodegenModel; + +import java.util.List; +import java.util.Map; + +public class ModelUtils { + /** + * Searches for the model by name in the map of models and returns it + * + * @param name Name of the model + * @param models Map of models + * @return model + */ + public static CodegenModel getModelByName(final String name, final Map models) { + final Object data = models.get(name); + if (data instanceof Map) { + final Map dataMap = (Map) data; + final Object dataModels = dataMap.get("models"); + if (dataModels instanceof List) { + final List dataModelsList = (List) dataModels; + for (final Object entry : dataModelsList) { + if (entry instanceof Map) { + final Map entryMap = (Map) entry; + final Object model = entryMap.get("model"); + if (model instanceof CodegenModel) { + return (CodegenModel) model; + } + } + } + } + } + return null; + } +} diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ProgressRequestBody.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ProgressRequestBody.mustache index d6570bd0d3ba..0f15c1f415d2 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ProgressRequestBody.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ProgressRequestBody.mustache @@ -23,8 +23,6 @@ public class ProgressRequestBody extends RequestBody { private final ProgressRequestListener progressListener; - private BufferedSink bufferedSink; - public ProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) { this.requestBody = requestBody; this.progressListener = progressListener; @@ -42,13 +40,9 @@ public class ProgressRequestBody extends RequestBody { @Override public void writeTo(BufferedSink sink) throws IOException { - if (bufferedSink == null) { - bufferedSink = Okio.buffer(sink(sink)); - } - + BufferedSink bufferedSink = Okio.buffer(sink(sink)); requestBody.writeTo(bufferedSink); bufferedSink.flush(); - } private Sink sink(Sink sink) { diff --git a/modules/swagger-codegen/src/main/resources/JavaPlayFramework/newApiController.mustache b/modules/swagger-codegen/src/main/resources/JavaPlayFramework/newApiController.mustache index 8dd279077a3e..a778e8ba0d4c 100644 --- a/modules/swagger-codegen/src/main/resources/JavaPlayFramework/newApiController.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaPlayFramework/newApiController.mustache @@ -41,9 +41,6 @@ public class {{classname}}Controller extends Controller { {{#wrapCalls}}@ApiAction{{/wrapCalls}} public Result {{operationId}}({{#pathParams}}{{>pathParams}}{{#hasMore}},{{/hasMore}}{{/pathParams}}) {{^handleExceptions}}{{#bodyParams}}throws IOException{{/bodyParams}}{{/handleExceptions}}{{#handleExceptions}}throws Exception{{/handleExceptions}} { {{#bodyParams}} - {{#collectionFormat}} - //TODO: Support this later - {{/collectionFormat}} {{^collectionFormat}} JsonNode node{{paramName}} = request().body().asJson(); {{{dataType}}} {{paramName}}; @@ -59,12 +56,12 @@ public class {{classname}}Controller extends Controller { {{/bodyParams}} {{#queryParams}} {{#collectionFormat}} - //TODO: Support this later - //List {{paramName}}Pair = SwaggerUtils.parameterToPairs("{{collectionFormat}}", "{{paramName}}", request().getQueryString("{{baseName}}")); + List {{paramName}}List = SwaggerUtils.parametersToList("{{collectionFormat}}", "{{paramName}}", request().getQueryString("{{baseName}}")); {{{dataType}}} {{paramName}} = new Array{{{dataType}}}(); - //for (Pair pair : {{paramName}}Pair) { - // {{paramName}}.add({{>conversionBegin}}pair.getValue(){{>conversionEnd}}); - //} + for (String curParam : {{paramName}}List) { + //noinspection UseBulkOperation + {{paramName}}.add({{>conversionBegin}}curParam{{>conversionEnd}}); + } {{/collectionFormat}} {{^collectionFormat}} String value{{paramName}} = request().getQueryString("{{paramName}}"); @@ -89,15 +86,15 @@ public class {{classname}}Controller extends Controller { {{/notFile}} {{#notFile}} {{#collectionFormat}} - //TODO: Support this later - //List {{paramName}}Pair = SwaggerUtils.parameterToPairs("{{collectionFormat}}", "{{paramName}}", ((String[]) request().body().asMultipartFormData().asFormUrlEncoded().get("{{baseName}}"))[0]); + List {{paramName}}List = SwaggerUtils.parametersToList("{{collectionFormat}}", "{{paramName}}", (request().body().asMultipartFormData().asFormUrlEncoded().get("{{baseName}}"))[0]); {{{dataType}}} {{paramName}} = new Array{{{dataType}}}(); - //for (Pair pair : {{paramName}}Pair) { - // {{paramName}}.add({{>conversionBegin}}pair.getValue(){{>conversionEnd}}); - //} + for (String curParam : {{paramName}}List) { + //noinspection UseBulkOperation + {{paramName}}.add({{>conversionBegin}}curParam{{>conversionEnd}}); + } {{/collectionFormat}} {{^collectionFormat}} - String value{{paramName}} = ((String[]) request().body().asMultipartFormData().asFormUrlEncoded().get("{{baseName}}"))[0]; + String value{{paramName}} = (request().body().asMultipartFormData().asFormUrlEncoded().get("{{baseName}}"))[0]; {{{dataType}}} {{paramName}}; {{^required}} if (value{{paramName}} != null) { @@ -112,12 +109,12 @@ public class {{classname}}Controller extends Controller { {{/formParams}} {{#headerParams}} {{#collectionFormat}} - //TODO: Support this later - //List {{paramName}}Pair = SwaggerUtils.parameterToPairs("{{collectionFormat}}", "{{paramName}}", request().getHeader("{{baseName}}")); - //{{{dataType}}} {{paramName}} = new Array{{{dataType}}}(); - //for (Pair pair : {{paramName}}Pair) { - // {{paramName}}.add({{>conversionBegin}}pair.getValue(){{>conversionEnd}}); - //} + List {{paramName}}List = SwaggerUtils.parametersToList("{{collectionFormat}}", "{{paramName}}", request().getHeader("{{baseName}}")); + {{{dataType}}} {{paramName}} = new Array{{{dataType}}}(); + for (String curParam : {{paramName}}List) { + //noinspection UseBulkOperation + {{paramName}}.add({{>conversionBegin}}curParam{{>conversionEnd}}); + } {{/collectionFormat}} {{^collectionFormat}} String value{{paramName}} = request().getHeader("{{baseName}}"); diff --git a/modules/swagger-codegen/src/main/resources/JavaPlayFramework/swaggerUtils.mustache b/modules/swagger-codegen/src/main/resources/JavaPlayFramework/swaggerUtils.mustache index 9a732b2933f2..bb380418fe41 100644 --- a/modules/swagger-codegen/src/main/resources/JavaPlayFramework/swaggerUtils.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaPlayFramework/swaggerUtils.mustache @@ -7,10 +7,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class SwaggerUtils { @@ -22,8 +19,8 @@ public class SwaggerUtils { } {{/handleExceptions}} - public static Map parameterToPairs(String collectionFormat, String name, Object value){ - Map params = new HashMap<>(); + public static List parametersToList(String collectionFormat, String name, Object value){ + List params = new ArrayList<>(); // preconditions if (name == null || name.isEmpty() || value == null) return params; @@ -32,7 +29,7 @@ public class SwaggerUtils { if (value instanceof Collection) { valueCollection = (Collection) value; } else { - params.put(name, parameterToString(value)); + params.add(parameterToString(value)); return params; } @@ -46,7 +43,7 @@ public class SwaggerUtils { // create the params based on the collection format if (collectionFormat.equals("multi")) { for (Object item : valueCollection) { - params.put(name, parameterToString(item)); + params.add(parameterToString(item)); } return params; @@ -70,7 +67,7 @@ public class SwaggerUtils { sb.append(parameterToString(item)); } - params.put(name, sb.substring(1)); + params.add(sb.substring(1)); return params; } diff --git a/modules/swagger-codegen/src/main/resources/Javascript-es6/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript-es6/ApiClient.mustache index 03ad8290070c..785945752b56 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript-es6/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript-es6/ApiClient.mustache @@ -160,9 +160,15 @@ export default class ApiClient { */ {{/emitJSDoc}} isFileParam(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && typeof require === 'function' && require('fs') && param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + let fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index 195668fb5d5c..bea074dfe6d4 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -168,12 +168,15 @@ * @returns {Boolean} true if param represents a file. */ {{/emitJSDoc}} exports.prototype.isFileParam = function(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && - typeof require === 'function' && - require('fs') && - param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + var fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js if (typeof Buffer === 'function' && param instanceof Buffer) { diff --git a/modules/swagger-codegen/src/main/resources/cpprest/api-source.mustache b/modules/swagger-codegen/src/main/resources/cpprest/api-source.mustache index 9899a86b6e55..343a26978176 100644 --- a/modules/swagger-codegen/src/main/resources/cpprest/api-source.mustache +++ b/modules/swagger-codegen/src/main/resources/cpprest/api-source.mustache @@ -325,7 +325,7 @@ pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/r {{#vendorExtensions.x-codegen-response.items.isPrimitiveType}}result[item.first] = ModelBase::{{vendorExtensions.x-codegen-response.items.datatype}}FromJson(item.second); {{/vendorExtensions.x-codegen-response.items.isPrimitiveType}}{{^vendorExtensions.x-codegen-response.items.isPrimitiveType}}{{#vendorExtensions.x-codegen-response.items.isString}}result[item.first] = ModelBase::stringFromJson(item.second); {{/vendorExtensions.x-codegen-response.items.isString}}{{^vendorExtensions.x-codegen-response.items.isString}}{{{vendorExtensions.x-codegen-response.items.datatype}}} itemObj({{{vendorExtensions.x-codegen-response.items.defaultValue}}}); - itemObj->fromJson(item); + itemObj->fromJson(item.second); result[item.first] = itemObj; {{/vendorExtensions.x-codegen-response.items.isString}}{{/vendorExtensions.x-codegen-response.items.isPrimitiveType}} } diff --git a/modules/swagger-codegen/src/main/resources/cpprest/apiclient-source.mustache b/modules/swagger-codegen/src/main/resources/cpprest/apiclient-source.mustache index dc2bddb8db30..59ca1c180f80 100644 --- a/modules/swagger-codegen/src/main/resources/cpprest/apiclient-source.mustache +++ b/modules/swagger-codegen/src/main/resources/cpprest/apiclient-source.mustache @@ -122,7 +122,7 @@ pplx::task ApiClient::callApi( web::json::value body_data = web::json::value::object(); for (auto& kvp : formParams) { - body_data[U(kvp.first)] = ModelBase::toJson(kvp.second); + body_data[kvp.first] = ModelBase::toJson(kvp.second); } request.set_body(body_data); } diff --git a/modules/swagger-codegen/src/main/resources/cpprest/model-header.mustache b/modules/swagger-codegen/src/main/resources/cpprest/model-header.mustache index 4dc426e76ca7..c32084eebc2b 100644 --- a/modules/swagger-codegen/src/main/resources/cpprest/model-header.mustache +++ b/modules/swagger-codegen/src/main/resources/cpprest/model-header.mustache @@ -8,8 +8,10 @@ #ifndef {{classname}}_H_ #define {{classname}}_H_ +{{^parent}} {{{defaultInclude}}} #include "ModelBase.h" +{{/parent}} {{#imports}}{{{this}}} {{/imports}} @@ -22,7 +24,7 @@ namespace {{this}} { /// {{description}} /// class {{declspec}} {{classname}} - : public ModelBase + : public {{#parent}}{{{parent}}}{{/parent}}{{^parent}}ModelBase{{/parent}} { public: {{classname}}(); @@ -43,6 +45,7 @@ public: /// {{classname}} members {{#vars}} + {{^isInherited}} /// /// {{description}} /// @@ -52,12 +55,16 @@ public: {{/isNotContainer}}{{^required}}bool {{baseName}}IsSet() const; void unset{{name}}(); {{/required}} + {{/isInherited}} {{/vars}} protected: - {{#vars}}{{{datatype}}} m_{{name}}; + {{#vars}} + {{^isInherited}} + {{{datatype}}} m_{{name}}; {{^required}}bool m_{{name}}IsSet; {{/required}} + {{/isInherited}} {{/vars}} }; diff --git a/modules/swagger-codegen/src/main/resources/cpprest/model-source.mustache b/modules/swagger-codegen/src/main/resources/cpprest/model-source.mustache index 4856a11f5ee9..33a35a908a2a 100644 --- a/modules/swagger-codegen/src/main/resources/cpprest/model-source.mustache +++ b/modules/swagger-codegen/src/main/resources/cpprest/model-source.mustache @@ -9,11 +9,11 @@ namespace {{this}} { {{classname}}::{{classname}}() { - {{#vars}}{{#isNotContainer}}{{#isPrimitiveType}}m_{{name}} = {{{defaultValue}}}; + {{#vars}}{{^isInherited}}{{#isNotContainer}}{{#isPrimitiveType}}m_{{name}} = {{{defaultValue}}}; {{/isPrimitiveType}}{{^isPrimitiveType}}{{#isString}}m_{{name}} = {{{defaultValue}}}; {{/isString}}{{#isDateTime}}m_{{name}} = {{{defaultValue}}}; {{/isDateTime}}{{/isPrimitiveType}}{{/isNotContainer}}{{^required}}m_{{name}}IsSet = false; - {{/required}}{{/vars}} + {{/required}}{{/isInherited}}{{/vars}} } {{classname}}::~{{classname}}() @@ -27,9 +27,10 @@ void {{classname}}::validate() web::json::value {{classname}}::toJson() const { - web::json::value val = web::json::value::object(); + {{#parent}}web::json::value val = this->{{{parent}}}::toJson(); {{/parent}} + {{^parent}}web::json::value val = web::json::value::object();{{/parent}} - {{#vars}}{{#isPrimitiveType}}{{^isListContainer}}{{^required}}if(m_{{name}}IsSet) + {{#vars}}{{^isInherited}}{{#isPrimitiveType}}{{^isListContainer}}{{^required}}if(m_{{name}}IsSet) { val[U("{{baseName}}")] = ModelBase::toJson(m_{{name}}); } @@ -53,14 +54,16 @@ web::json::value {{classname}}::toJson() const val[U("{{baseName}}")] = ModelBase::toJson(m_{{name}}); } {{/required}}{{#required}}val[U("{{baseName}}")] = ModelBase::toJson(m_{{name}}); - {{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/vars}} + {{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/isInherited}}{{/vars}} return val; } void {{classname}}::fromJson(web::json::value& val) { - {{#vars}}{{#isPrimitiveType}}{{^isListContainer}}{{^required}}if(val.has_field(U("{{baseName}}"))) + {{#parent}}this->{{{parent}}}::fromJson(val); {{/parent}} + + {{#vars}}{{^isInherited}}{{#isPrimitiveType}}{{^isListContainer}}{{^required}}if(val.has_field(U("{{baseName}}"))) { {{setter}}(ModelBase::{{baseType}}FromJson(val[U("{{baseName}}")])); } @@ -111,7 +114,7 @@ void {{classname}}::fromJson(web::json::value& val) {{/vendorExtensions.x-codegen-file}}{{^vendorExtensions.x-codegen-file}}{{{datatype}}} new{{name}}({{{defaultValue}}}); new{{name}}->fromJson(val[U("{{baseName}}")]); {{setter}}( new{{name}} ); - {{/vendorExtensions.x-codegen-file}}{{/isDateTime}}{{/isString}}{{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/vars}} + {{/vendorExtensions.x-codegen-file}}{{/isDateTime}}{{/isString}}{{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/isInherited}}{{/vars}} } void {{classname}}::toMultipart(std::shared_ptr multipart, const utility::string_t& prefix) const @@ -222,7 +225,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr multipart, } -{{#vars}}{{^isNotContainer}}{{{datatype}}}& {{classname}}::{{getter}}() +{{#vars}}{{^isInherited}}{{^isNotContainer}}{{{datatype}}}& {{classname}}::{{getter}}() { return m_{{name}}; } @@ -245,6 +248,7 @@ void {{classname}}::unset{{name}}() m_{{name}}IsSet = false; } {{/required}} +{{/isInherited}} {{/vars}} {{#modelNamespaceDeclarations}} diff --git a/modules/swagger-codegen/src/main/resources/cpprest/modelbase-source.mustache b/modules/swagger-codegen/src/main/resources/cpprest/modelbase-source.mustache index d578f192758f..6df224f185a9 100644 --- a/modules/swagger-codegen/src/main/resources/cpprest/modelbase-source.mustache +++ b/modules/swagger-codegen/src/main/resources/cpprest/modelbase-source.mustache @@ -273,7 +273,7 @@ int32_t ModelBase::int32_tFromJson(web::json::value& val) } float ModelBase::floatFromJson(web::json::value& val) { - return val.as_double(); + return static_cast(val.as_double()); } utility::string_t ModelBase::stringFromJson(web::json::value& val) { diff --git a/modules/swagger-codegen/src/main/resources/htmlDocs2/index.mustache b/modules/swagger-codegen/src/main/resources/htmlDocs2/index.mustache index 12fe0d3b5746..53946c402142 100644 --- a/modules/swagger-codegen/src/main/resources/htmlDocs2/index.mustache +++ b/modules/swagger-codegen/src/main/resources/htmlDocs2/index.mustache @@ -182,7 +182,7 @@
Version: {{{version}}}
{{/version}}
-

{{appDescription}}

+
{{{appDescription}}}
diff --git a/modules/swagger-codegen/src/main/resources/swift3/Models.mustache b/modules/swagger-codegen/src/main/resources/swift3/Models.mustache index 9aef245093cc..8c96662e3909 100644 --- a/modules/swagger-codegen/src/main/resources/swift3/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift3/Models.mustache @@ -140,6 +140,20 @@ class Decoders { if let intermediate = source as? String, let value = Data(base64Encoded: intermediate) as? T { return .success(value) } + {{#lenientTypeCast}} + if T.self is Int32.Type && source is String { + return (source as! NSString).intValue as! T + } + if T.self is Int64.Type && source is String { + return (source as! NSString).intValue as! T + } + if T.self is Bool.Type && source is String { + return (source as! NSString).boolValue as! T + } + if T.self is String.Type && source is NSNumber { + return String(describing: source) as! T + } + {{/lenientTypeCast}} let key = "\(T.self)" if let decoder = decoders[key], let value = decoder(source, instance) as? Decoded { diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Swift3OptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Swift3OptionsProvider.java index 4e4bed0f8267..0a72783a1593 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Swift3OptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/Swift3OptionsProvider.java @@ -13,6 +13,7 @@ public class Swift3OptionsProvider implements OptionsProvider { public static final String PROJECT_NAME_VALUE = "Swagger"; public static final String RESPONSE_AS_VALUE = "test"; public static final String UNWRAP_REQUIRED_VALUE = "true"; + public static final String LENIENT_TYPE_CAST_VALUE = "false"; public static final String POD_SOURCE_VALUE = "{ :git => 'git@github.com:swagger-api/swagger-mustache.git'," + " :tag => 'v1.0.0-SNAPSHOT' }"; public static final String POD_VERSION_VALUE = "v1.0.0-SNAPSHOT"; @@ -41,6 +42,7 @@ public class Swift3OptionsProvider implements OptionsProvider { .put(Swift3Codegen.PROJECT_NAME, PROJECT_NAME_VALUE) .put(Swift3Codegen.RESPONSE_AS, RESPONSE_AS_VALUE) .put(Swift3Codegen.UNWRAP_REQUIRED, UNWRAP_REQUIRED_VALUE) + .put(Swift3Codegen.LENIENT_TYPE_CAST, LENIENT_TYPE_CAST_VALUE) .put(Swift3Codegen.POD_SOURCE, POD_SOURCE_VALUE) .put(CodegenConstants.POD_VERSION, POD_VERSION_VALUE) .put(Swift3Codegen.POD_AUTHORS, POD_AUTHORS_VALUE) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift3/Swift3OptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift3/Swift3OptionsTest.java index ddfc65bc9080..7e0166926ab7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift3/Swift3OptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/swift3/Swift3OptionsTest.java @@ -33,6 +33,8 @@ public class Swift3OptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.setUnwrapRequired(Boolean.valueOf(Swift3OptionsProvider.UNWRAP_REQUIRED_VALUE)); times = 1; + clientCodegen.setLenientTypeCast(Boolean.valueOf(Swift3OptionsProvider.LENIENT_TYPE_CAST_VALUE)); + times = 1; }}; } } diff --git a/samples/client/petstore-security-test/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java b/samples/client/petstore-security-test/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java index deca0211de67..ae835fb6085a 100644 --- a/samples/client/petstore-security-test/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java +++ b/samples/client/petstore-security-test/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java @@ -34,8 +34,6 @@ public class ProgressRequestBody extends RequestBody { private final ProgressRequestListener progressListener; - private BufferedSink bufferedSink; - public ProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) { this.requestBody = requestBody; this.progressListener = progressListener; @@ -53,13 +51,9 @@ public class ProgressRequestBody extends RequestBody { @Override public void writeTo(BufferedSink sink) throws IOException { - if (bufferedSink == null) { - bufferedSink = Okio.buffer(sink(sink)); - } - + BufferedSink bufferedSink = Okio.buffer(sink(sink)); requestBody.writeTo(bufferedSink); bufferedSink.flush(); - } private Sink sink(Sink sink) { diff --git a/samples/client/petstore/cpprest/.swagger-codegen/VERSION b/samples/client/petstore/cpprest/.swagger-codegen/VERSION new file mode 100644 index 000000000000..7fea99011a6f --- /dev/null +++ b/samples/client/petstore/cpprest/.swagger-codegen/VERSION @@ -0,0 +1 @@ +2.2.3-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpprest/ApiClient.cpp b/samples/client/petstore/cpprest/ApiClient.cpp index aeed9ef42aea..69de9e34f95b 100644 --- a/samples/client/petstore/cpprest/ApiClient.cpp +++ b/samples/client/petstore/cpprest/ApiClient.cpp @@ -134,7 +134,7 @@ pplx::task ApiClient::callApi( web::json::value body_data = web::json::value::object(); for (auto& kvp : formParams) { - body_data[U(kvp.first)] = ModelBase::toJson(kvp.second); + body_data[kvp.first] = ModelBase::toJson(kvp.second); } request.set_body(body_data); } diff --git a/samples/client/petstore/cpprest/ModelBase.cpp b/samples/client/petstore/cpprest/ModelBase.cpp index 07f44a15a0ef..a311d7d17078 100644 --- a/samples/client/petstore/cpprest/ModelBase.cpp +++ b/samples/client/petstore/cpprest/ModelBase.cpp @@ -285,7 +285,7 @@ int32_t ModelBase::int32_tFromJson(web::json::value& val) } float ModelBase::floatFromJson(web::json::value& val) { - return val.as_double(); + return static_cast(val.as_double()); } utility::string_t ModelBase::stringFromJson(web::json::value& val) { diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java index a06ea04a4d09..d6d76e7de98e 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ProgressRequestBody.java @@ -34,8 +34,6 @@ public class ProgressRequestBody extends RequestBody { private final ProgressRequestListener progressListener; - private BufferedSink bufferedSink; - public ProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) { this.requestBody = requestBody; this.progressListener = progressListener; @@ -53,13 +51,9 @@ public class ProgressRequestBody extends RequestBody { @Override public void writeTo(BufferedSink sink) throws IOException { - if (bufferedSink == null) { - bufferedSink = Okio.buffer(sink(sink)); - } - + BufferedSink bufferedSink = Okio.buffer(sink(sink)); requestBody.writeTo(bufferedSink); bufferedSink.flush(); - } private Sink sink(Sink sink) { diff --git a/samples/client/petstore/javascript-es6/src/ApiClient.js b/samples/client/petstore/javascript-es6/src/ApiClient.js index 2a227cb93b59..b56bc9b4e5f1 100644 --- a/samples/client/petstore/javascript-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-es6/src/ApiClient.js @@ -174,12 +174,15 @@ * @returns {Boolean} true if param represents a file. */ exports.prototype.isFileParam = function(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && - typeof require === 'function' && - require('fs') && - param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + var fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js if (typeof Buffer === 'function' && param instanceof Buffer) { diff --git a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js index 29fe329d5900..91ef1e6b5eed 100644 --- a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js @@ -174,12 +174,15 @@ * @returns {Boolean} true if param represents a file. */ exports.prototype.isFileParam = function(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && - typeof require === 'function' && - require('fs') && - param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + var fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js if (typeof Buffer === 'function' && param instanceof Buffer) { diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js index 29fe329d5900..91ef1e6b5eed 100644 --- a/samples/client/petstore/javascript-promise/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -174,12 +174,15 @@ * @returns {Boolean} true if param represents a file. */ exports.prototype.isFileParam = function(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && - typeof require === 'function' && - require('fs') && - param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + var fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js if (typeof Buffer === 'function' && param instanceof Buffer) { diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 2a227cb93b59..b56bc9b4e5f1 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -174,12 +174,15 @@ * @returns {Boolean} true if param represents a file. */ exports.prototype.isFileParam = function(param) { - // fs.ReadStream in Node.js (but not in runtime like browserify) - if (typeof window === 'undefined' && - typeof require === 'function' && - require('fs') && - param instanceof require('fs').ReadStream) { - return true; + // fs.ReadStream in Node.js and Electron (but not in runtime like browserify) + if (typeof require === 'function') { + var fs; + try { + fs = require('fs'); + } catch (err) {} + if (fs && fs.ReadStream && param instanceof fs.ReadStream) { + return true; + } } // Buffer in Node.js if (typeof Buffer === 'function' && param instanceof Buffer) { diff --git a/samples/server/petstore/java-play-framework/app/controllers/PetApiController.java b/samples/server/petstore/java-play-framework/app/controllers/PetApiController.java index 27f3d446ff16..4ee0a2358900 100644 --- a/samples/server/petstore/java-play-framework/app/controllers/PetApiController.java +++ b/samples/server/petstore/java-play-framework/app/controllers/PetApiController.java @@ -62,12 +62,12 @@ public class PetApiController extends Controller { @ApiAction public Result findPetsByStatus() throws Exception { - //TODO: Support this later - //List statusPair = SwaggerUtils.parameterToPairs("csv", "status", request().getQueryString("status")); + List statusList = SwaggerUtils.parametersToList("csv", "status", request().getQueryString("status")); List status = new ArrayList(); - //for (Pair pair : statusPair) { - // status.add(pair.getValue()); - //} + for (String curParam : statusList) { + //noinspection UseBulkOperation + status.add(curParam); + } List obj = imp.findPetsByStatus(status); JsonNode result = mapper.valueToTree(obj); return ok(result); @@ -76,12 +76,12 @@ public class PetApiController extends Controller { @ApiAction public Result findPetsByTags() throws Exception { - //TODO: Support this later - //List tagsPair = SwaggerUtils.parameterToPairs("csv", "tags", request().getQueryString("tags")); + List tagsList = SwaggerUtils.parametersToList("csv", "tags", request().getQueryString("tags")); List tags = new ArrayList(); - //for (Pair pair : tagsPair) { - // tags.add(pair.getValue()); - //} + for (String curParam : tagsList) { + //noinspection UseBulkOperation + tags.add(curParam); + } List obj = imp.findPetsByTags(tags); JsonNode result = mapper.valueToTree(obj); return ok(result); @@ -110,7 +110,7 @@ public class PetApiController extends Controller { @ApiAction public Result updatePetWithForm(Long petId) throws Exception { - String valuename = ((String[]) request().body().asMultipartFormData().asFormUrlEncoded().get("name"))[0]; + String valuename = (request().body().asMultipartFormData().asFormUrlEncoded().get("name"))[0]; String name; if (valuename != null) { name = (String)valuename; @@ -118,7 +118,7 @@ public class PetApiController extends Controller { } else { name = ""; } - String valuestatus = ((String[]) request().body().asMultipartFormData().asFormUrlEncoded().get("status"))[0]; + String valuestatus = (request().body().asMultipartFormData().asFormUrlEncoded().get("status"))[0]; String status; if (valuestatus != null) { status = (String)valuestatus; @@ -133,7 +133,7 @@ public class PetApiController extends Controller { @ApiAction public Result uploadFile(Long petId) throws Exception { - String valueadditionalMetadata = ((String[]) request().body().asMultipartFormData().asFormUrlEncoded().get("additionalMetadata"))[0]; + String valueadditionalMetadata = (request().body().asMultipartFormData().asFormUrlEncoded().get("additionalMetadata"))[0]; String additionalMetadata; if (valueadditionalMetadata != null) { additionalMetadata = (String)valueadditionalMetadata; diff --git a/samples/server/petstore/java-play-framework/app/swagger/SwaggerUtils.java b/samples/server/petstore/java-play-framework/app/swagger/SwaggerUtils.java index 1c9660906b3e..fd9a0780e6ef 100644 --- a/samples/server/petstore/java-play-framework/app/swagger/SwaggerUtils.java +++ b/samples/server/petstore/java-play-framework/app/swagger/SwaggerUtils.java @@ -7,10 +7,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class SwaggerUtils { @@ -20,8 +17,8 @@ public class SwaggerUtils { public @interface ApiAction { } - public static Map parameterToPairs(String collectionFormat, String name, Object value){ - Map params = new HashMap<>(); + public static List parametersToList(String collectionFormat, String name, Object value){ + List params = new ArrayList<>(); // preconditions if (name == null || name.isEmpty() || value == null) return params; @@ -30,7 +27,7 @@ public class SwaggerUtils { if (value instanceof Collection) { valueCollection = (Collection) value; } else { - params.put(name, parameterToString(value)); + params.add(parameterToString(value)); return params; } @@ -44,7 +41,7 @@ public class SwaggerUtils { // create the params based on the collection format if (collectionFormat.equals("multi")) { for (Object item : valueCollection) { - params.put(name, parameterToString(item)); + params.add(parameterToString(item)); } return params; @@ -68,7 +65,7 @@ public class SwaggerUtils { sb.append(parameterToString(item)); } - params.put(name, sb.substring(1)); + params.add(sb.substring(1)); return params; }