Merge remote-tracking branch 'upstream/master'

This commit is contained in:
11356176 2016-01-13 18:14:06 +00:00
commit c2a001847f
163 changed files with 3824 additions and 1067 deletions

2
.gitignore vendored
View File

@ -55,6 +55,8 @@ samples/client/petstore/php/SwaggerClient-php/vendor/
samples/client/petstore/silex/SwaggerServer/composer.lock samples/client/petstore/silex/SwaggerServer/composer.lock
samples/client/petstore/silex/SwaggerServer/venodr/ samples/client/petstore/silex/SwaggerServer/venodr/
samples/client/petstore/perl/deep_module_test/
samples/client/petstore/python/.projectile samples/client/petstore/python/.projectile
samples/client/petstore/python/.venv/ samples/client/petstore/python/.venv/

View File

@ -2,6 +2,7 @@ sudo: required
language: java language: java
jdk: jdk:
- oraclejdk7 - oraclejdk7
- oraclejdk8
services: services:
- docker - docker
@ -11,12 +12,10 @@ before_install:
- gem install bundler - gem install bundler
install: install:
- docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD
script: script:
- mvn verify -Psamples - mvn verify -Psamples
- docker build -t $DOCKER_IMAGE_NAME ./modules/swagger-generator - if [ $DOCKER_HUB_USERNAME ]; then docker login --email=$DOCKER_HUB_EMAIL --username=$DOCKER_HUB_USERNAME --password=$DOCKER_HUB_PASSWORD && docker build -t $DOCKER_IMAGE_NAME ./modules/swagger-generator && if [ ! -z "$TRAVIS_TAG" ]; then docker tag $DOCKER_IMAGE_NAME:latest $DOCKER_IMAGE_NAME:$TRAVIS_TAG; fi && docker push $DOCKER_IMAGE_NAME; fi
- if [ ! -z "$TRAVIS_TAG" ]; then docker tag $DOCKER_IMAGE_NAME:latest $DOCKER_IMAGE_NAME:$TRAVIS_TAG; fi && docker push $DOCKER_IMAGE_NAME
env: env:
- DOCKER_IMAGE_NAME=swaggerapi/swagger-generator - DOCKER_IMAGE_NAME=swaggerapi/swagger-generator

View File

@ -1,4 +1,4 @@
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -23,6 +23,7 @@ Check out [Swagger-Spec](https://github.com/OAI/OpenAPI-Specification) for addit
- [Docker](#docker) - [Docker](#docker)
- [Build and run](#build-and-run-using-docker) - [Build and run](#build-and-run-using-docker)
- [Build a Node.js server stub](#build-a-nodejs-server-stub) - [Build a Node.js server stub](#build-a-nodejs-server-stub)
- [Public Docker image](#public-docker-image)
- [Homebrew](#homebrew) - [Homebrew](#homebrew)
- Generators - Generators
- [To generate a sample client library](#to-generate-a-sample-client-library) - [To generate a sample client library](#to-generate-a-sample-client-library)
@ -32,7 +33,7 @@ Check out [Swagger-Spec](https://github.com/OAI/OpenAPI-Specification) for addit
- [Where is Javascript???](#where-is-javascript) - [Where is Javascript???](#where-is-javascript)
- [Generating a client from local files](#generating-a-client-from-local-files) - [Generating a client from local files](#generating-a-client-from-local-files)
- [Customizing the generator](#customizing-the-generator) - [Customizing the generator](#customizing-the-generator)
- [Validating your OpenAPI Spec](#validating-your-swagger-spec) - [Validating your OpenAPI Spec](#validating-your-openapi-spec)
- [Generating dynamic html api documentation](#generating-dynamic-html-api-documentation) - [Generating dynamic html api documentation](#generating-dynamic-html-api-documentation)
- [Generating static html api documentation](#generating-static-html-api-documentation) - [Generating static html api documentation](#generating-static-html-api-documentation)
- [To build a server stub](#to-build-a-server-stub) - [To build a server stub](#to-build-a-server-stub)
@ -56,7 +57,7 @@ The OpenAPI Specification has undergone 3 revisions since initial creation in 20
Swagger Codegen Version | Release Date | OpenAPI Spec compatibility | Notes Swagger Codegen Version | Release Date | OpenAPI Spec compatibility | Notes
-------------------------- | ------------ | -------------------------- | ----- -------------------------- | ------------ | -------------------------- | -----
2.1.6-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) 2.1.6-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen)
2.1.5 (**current stable**) | 2015-01-06 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-codegen/tree/v2.1.4) 2.1.5 (**current stable**) | 2015-01-06 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-codegen/tree/v2.1.5)
2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) 2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17)
1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) 1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1)
@ -77,16 +78,16 @@ brew install swagger-codegen
To build from source, you need the following installed and available in your $PATH: To build from source, you need the following installed and available in your $PATH:
* [Java 7](http://java.oracle.com) * [Java 7 or 8](http://java.oracle.com)
* [Apache maven 3.0.3 or greater](http://maven.apache.org/) * [Apache maven 3.0.3 or greater](http://maven.apache.org/)
#### OS X Users #### OS X Users
Don't forget to install Java 7. You probably have 1.6 or 1.8. Don't forget to install Java 7 or 8. You probably have 1.6.
Export JAVA_HOME in order to use the supported Java version: Export JAVA_HOME in order to use the supported Java version:
``` ```
export JAVA_HOME=`/usr/libexec/java_home -v 1.7` export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export PATH=${JAVA_HOME}/bin:$PATH export PATH=${JAVA_HOME}/bin:$PATH
``` ```
@ -117,6 +118,10 @@ cd swagger-codegen
-o samples/server/petstore/nodejs -o samples/server/petstore/nodejs
``` ```
#### Public Docker image
https://hub.docker.com/r/swaggerapi/swagger-generator/
### Homebrew ### Homebrew
To install, run `brew install swagger-codegen` To install, run `brew install swagger-codegen`
@ -580,7 +585,7 @@ Please refer to this [page](https://github.com/swagger-api/swagger-codegen/blob/
License License
------- -------
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -26,6 +26,9 @@ fi
# if you've executed sbt assembly previously it will use that instead. # if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
# complex module name used for testing
ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l perl -o samples/client/petstore/perl" ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l perl -o samples/client/petstore/perl"
java $JAVA_OPTS -jar $executable $ags java $JAVA_OPTS -jar $executable $ags
java $JAVA_OPTS -jar $executable $ags --additional-properties moduleName=Something::Deep -o samples/client/petstore/perl/deep_module_test

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId> <artifactId>swagger-codegen-project</artifactId>
<version>2.1.5</version> <version>2.1.6-SNAPSHOT</version>
<relativePath>../..</relativePath> <relativePath>../..</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId> <artifactId>swagger-codegen-project</artifactId>
<version>2.1.5</version> <version>2.1.6-SNAPSHOT</version>
<relativePath>../..</relativePath> <relativePath>../..</relativePath>
</parent> </parent>
<artifactId>swagger-codegen-maven-plugin</artifactId> <artifactId>swagger-codegen-maven-plugin</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId> <artifactId>swagger-codegen-project</artifactId>
<version>2.1.5</version> <version>2.1.6-SNAPSHOT</version>
<relativePath>../..</relativePath> <relativePath>../..</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -46,6 +46,9 @@ public class CodegenConstants {
public static final String SORT_PARAMS_BY_REQUIRED_FLAG = "sortParamsByRequiredFlag"; public static final String SORT_PARAMS_BY_REQUIRED_FLAG = "sortParamsByRequiredFlag";
public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters."; public static final String SORT_PARAMS_BY_REQUIRED_FLAG_DESC = "Sort method arguments to place required parameters before optional parameters.";
public static final String USE_DATETIME_OFFSET = "useDateTimeOffset";
public static final String USE_DATETIME_OFFSET_DESC = "Use DateTimeOffset to model date-time properties";
public static final String ENSURE_UNIQUE_PARAMS = "ensureUniqueParams"; public static final String ENSURE_UNIQUE_PARAMS = "ensureUniqueParams";
public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not)."; public static final String ENSURE_UNIQUE_PARAMS_DESC = "Whether to ensure parameter names are unique in an operation (rename parameters that are not).";
@ -54,4 +57,9 @@ public class CodegenConstants {
public static final String POD_VERSION = "podVersion"; public static final String POD_VERSION = "podVersion";
public static final String OPTIONAL_METHOD_ARGUMENT = "optionalMethodArgument"; public static final String OPTIONAL_METHOD_ARGUMENT = "optionalMethodArgument";
public static final String OPTIONAL_METHOD_ARGUMENT_DESC = "Optional method argument, e.g. void square(int x=10) (.net 4.0+ only).";
public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo";
public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true).";
} }

View File

@ -42,6 +42,12 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
reservedWords = new HashSet<String>( reservedWords = new HashSet<String>(
Arrays.asList( Arrays.asList(
// local variable names used in API methods (endpoints)
"postBody", "path", "queryParams", "headerParams", "formParams",
"contentTypes", "contentType", "response", "builder", "httpEntity",
"authNames", "basePath", "apiInvoker",
// android reserved words
"abstract", "continue", "for", "new", "switch", "assert", "abstract", "continue", "for", "new", "switch", "assert",
"default", "if", "package", "synchronized", "boolean", "do", "goto", "private", "default", "if", "package", "synchronized", "boolean", "do", "goto", "private",
"this", "break", "double", "implements", "protected", "throw", "byte", "else", "this", "break", "double", "implements", "protected", "throw", "byte", "else",
@ -281,10 +287,6 @@ public class AndroidClientCodegen extends DefaultCodegen implements CodegenConfi
supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml"));
supportingFiles.add(new SupportingFile("apiInvoker.mustache", supportingFiles.add(new SupportingFile("apiInvoker.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "ApiInvoker.java")); (sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "ApiInvoker.java"));
supportingFiles.add(new SupportingFile("responses.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "Responses.java"));
// supportingFiles.add(new SupportingFile("httpPatch.mustache",
// (sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "HttpPatch.java"));
supportingFiles.add(new SupportingFile("jsonUtil.mustache", supportingFiles.add(new SupportingFile("jsonUtil.mustache",
(sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "JsonUtil.java")); (sourceFolder + File.separator + invokerPackage).replace(".", File.separator), "JsonUtil.java"));
supportingFiles.add(new SupportingFile("apiException.mustache", supportingFiles.add(new SupportingFile("apiException.mustache",

View File

@ -47,6 +47,11 @@ public class AsyncScalaClientCodegen extends DefaultCodegen implements CodegenCo
reservedWords = new HashSet<String>( reservedWords = new HashSet<String>(
Arrays.asList( Arrays.asList(
// local variable names used in API methods (endpoints)
"config", "path", "contentTypes", "contentType", "queryParams", "headerParams",
"formParams", "postBody", "resFuture", "client", "reader",
// scala reserved words
"abstract", "case", "catch", "class", "def", "do", "else", "extends", "abstract", "case", "catch", "class", "def", "do", "else", "extends",
"false", "final", "finally", "for", "forSome", "if", "implicit", "false", "final", "finally", "for", "forSome", "if", "implicit",
"import", "lazy", "match", "new", "null", "object", "override", "package", "import", "lazy", "match", "new", "null", "object", "override", "package",

View File

@ -23,7 +23,9 @@ import org.slf4j.LoggerFactory;
public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class);
protected boolean optionalAssemblyInfoFlag = true;
protected boolean optionalMethodArgumentFlag = true; protected boolean optionalMethodArgumentFlag = true;
protected boolean useDateTimeOffsetFlag = false;
protected String packageTitle = "Swagger Library"; protected String packageTitle = "Swagger Library";
protected String packageProductName = "SwaggerLibrary"; protected String packageProductName = "SwaggerLibrary";
protected String packageDescription = "A library generated from a Swagger doc"; protected String packageDescription = "A library generated from a Swagger doc";
@ -75,6 +77,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
"List", "List",
"Dictionary", "Dictionary",
"DateTime?", "DateTime?",
"DateTimeOffset?",
"String", "String",
"Boolean", "Boolean",
"Double", "Double",
@ -89,6 +92,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
typeMapping = new HashMap<String, String>(); typeMapping = new HashMap<String, String>();
typeMapping.put("string", "string"); typeMapping.put("string", "string");
typeMapping.put("binary", "byte[]");
typeMapping.put("boolean", "bool?"); typeMapping.put("boolean", "bool?");
typeMapping.put("integer", "int?"); typeMapping.put("integer", "int?");
typeMapping.put("float", "float?"); typeMapping.put("float", "float?");
@ -111,6 +115,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue(Boolean.TRUE.toString())); CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue(Boolean.TRUE.toString()));
cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "C# Optional method argument, " + cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "C# Optional method argument, " +
"e.g. void square(int x=10) (.net 4.0+ only).")); "e.g. void square(int x=10) (.net 4.0+ only)."));
cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_ASSEMBLY_INFO,
CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString()));
cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder));
cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC));
} }
@Override @Override
@ -123,6 +131,14 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion);
} }
if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)){
setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER));
}
else
{
additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder);
}
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
apiPackage = packageName + ".Api"; apiPackage = packageName + ".Api";
@ -132,6 +148,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName);
} }
// Use DateTimeOffset
if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET))
{
useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString()));
}
additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag);
additionalProperties.put("clientPackage", clientPackage); additionalProperties.put("clientPackage", clientPackage);
// Add properties used by AssemblyInfo.mustache // Add properties used by AssemblyInfo.mustache
@ -147,6 +170,11 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
} }
additionalProperties.put("optionalMethodArgument", optionalMethodArgumentFlag); additionalProperties.put("optionalMethodArgument", optionalMethodArgumentFlag);
if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_ASSEMBLY_INFO)) {
setOptionalAssemblyInfoFlag(Boolean.valueOf(additionalProperties
.get(CodegenConstants.OPTIONAL_ASSEMBLY_INFO).toString()));
}
supportingFiles.add(new SupportingFile("Configuration.mustache", supportingFiles.add(new SupportingFile("Configuration.mustache",
sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "Configuration.cs")); sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "Configuration.cs"));
supportingFiles.add(new SupportingFile("ApiClient.mustache", supportingFiles.add(new SupportingFile("ApiClient.mustache",
@ -158,8 +186,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll"));
supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll"));
supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat"));
supportingFiles.add(new SupportingFile("compile-mono.sh.mustache", "", "compile-mono.sh"));
supportingFiles.add(new SupportingFile("packages.config.mustache", "vendor" + java.io.File.separator, "packages.config"));
supportingFiles.add(new SupportingFile("README.md", "", "README.md")); supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
if (optionalAssemblyInfoFlag) {
supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs")); supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs"));
}
} }
@ -301,10 +334,23 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
return camelize(sanitizeName(operationId)); return camelize(sanitizeName(operationId));
} }
public void setOptionalAssemblyInfoFlag(boolean flag) {
this.optionalAssemblyInfoFlag = flag;
}
public void setOptionalMethodArgumentFlag(boolean flag) { public void setOptionalMethodArgumentFlag(boolean flag) {
this.optionalMethodArgumentFlag = flag; this.optionalMethodArgumentFlag = flag;
} }
public void useDateTimeOffset(boolean flag) {
this.useDateTimeOffsetFlag = flag;
if (flag)
typeMapping.put("datetime", "DateTimeOffset?");
else
typeMapping.put("datetime", "DateTime?");
}
public void setPackageName(String packageName) { public void setPackageName(String packageName) {
this.packageName = packageName; this.packageName = packageName;
} }
@ -313,6 +359,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
this.packageVersion = packageVersion; this.packageVersion = packageVersion;
} }
public void setSourceFolder(String sourceFolder) {
this.sourceFolder = sourceFolder;
}
@Override @Override
public Map<String, Object> postProcessModels(Map<String, Object> objs) { public Map<String, Object> postProcessModels(Map<String, Object> objs) {
List<Object> models = (List<Object>) objs.get("models"); List<Object> models = (List<Object>) objs.get("models");

View File

@ -223,12 +223,11 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig {
final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/"); final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/");
if ("feign".equals(getLibrary())) { if ("feign".equals(getLibrary())) {
supportingFiles.add(new SupportingFile("FormAwareEncoder.mustache", invokerFolder, "FormAwareEncoder.java")); supportingFiles.add(new SupportingFile("FormAwareEncoder.mustache", invokerFolder, "FormAwareEncoder.java"));
} else { }
supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java")); supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java"));
supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java")); supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java"));
supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java")); supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java"));
supportingFiles.add(new SupportingFile("auth/OAuthFlow.mustache", authFolder, "OAuthFlow.java")); supportingFiles.add(new SupportingFile("auth/OAuthFlow.mustache", authFolder, "OAuthFlow.java"));
}
if (!("feign".equals(getLibrary()) || "retrofit".equals(getLibrary()) || "retrofit2".equals(getLibrary()))) { if (!("feign".equals(getLibrary()) || "retrofit".equals(getLibrary()) || "retrofit2".equals(getLibrary()))) {
supportingFiles.add(new SupportingFile("apiException.mustache", invokerFolder, "ApiException.java")); supportingFiles.add(new SupportingFile("apiException.mustache", invokerFolder, "ApiException.java"));

View File

@ -11,6 +11,7 @@ import com.google.common.collect.Multimap;
import io.swagger.codegen.*; import io.swagger.codegen.*;
import io.swagger.models.Swagger; import io.swagger.models.Swagger;
import io.swagger.models.Info;
import io.swagger.util.Yaml; import io.swagger.util.Yaml;
import java.io.File; import java.io.File;
@ -246,9 +247,6 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
@Override @Override
public void preprocessSwagger(Swagger swagger) { public void preprocessSwagger(Swagger swagger) {
if ("/".equals(swagger.getBasePath())) {
swagger.setBasePath("");
}
String host = swagger.getHost(); String host = swagger.getHost();
String port = "8080"; String port = "8080";
@ -259,6 +257,16 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig
} }
} }
this.additionalProperties.put("serverPort", port); this.additionalProperties.put("serverPort", port);
if (swagger.getInfo() != null) {
Info info = swagger.getInfo();
if (info.getTitle() != null) {
// when info.title is defined, use it for projectName
// used in package.json
projectName = dashize(info.getTitle());
this.additionalProperties.put("projectName", projectName);
}
}
} }
@Override @Override

View File

@ -20,7 +20,8 @@ import org.apache.commons.lang.StringUtils;
public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
public static final String MODULE_NAME = "moduleName"; public static final String MODULE_NAME = "moduleName";
public static final String MODULE_VERSION = "moduleVersion"; public static final String MODULE_VERSION = "moduleVersion";
protected String moduleName = "SwaggerClient"; protected String moduleName = "WWW::SwaggerClient";
protected String modulePathPart = moduleName.replaceAll("::",String.valueOf(File.separatorChar));
protected String moduleVersion = "1.0.0"; protected String moduleVersion = "1.0.0";
public PerlClientCodegen() { public PerlClientCodegen() {
@ -72,7 +73,7 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
typeMapping.put("object", "object"); typeMapping.put("object", "object");
cliOptions.clear(); cliOptions.clear();
cliOptions.add(new CliOption(MODULE_NAME, "Perl module name (convention: CamelCase).").defaultValue("SwaggerClient")); cliOptions.add(new CliOption(MODULE_NAME, "Perl module name (convention: CamelCase or Long::Module).").defaultValue("SwaggerClient"));
cliOptions.add(new CliOption(MODULE_VERSION, "Perl module version.").defaultValue("1.0.0")); cliOptions.add(new CliOption(MODULE_VERSION, "Perl module version.").defaultValue("1.0.0"));
cliOptions.add(CliOption.newBoolean(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, cliOptions.add(CliOption.newBoolean(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG,
CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue(Boolean.TRUE.toString())); CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue(Boolean.TRUE.toString()));
@ -94,15 +95,16 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
if (additionalProperties.containsKey(MODULE_NAME)) { if (additionalProperties.containsKey(MODULE_NAME)) {
setModuleName((String) additionalProperties.get(MODULE_NAME)); setModuleName((String) additionalProperties.get(MODULE_NAME));
setModulePathPart(moduleName.replaceAll("::",String.valueOf(File.separatorChar)));
} else { } else {
additionalProperties.put(MODULE_NAME, moduleName); additionalProperties.put(MODULE_NAME, moduleName);
} }
supportingFiles.add(new SupportingFile("ApiClient.mustache", ("lib/WWW/" + moduleName).replace('/', File.separatorChar), "ApiClient.pm")); supportingFiles.add(new SupportingFile("ApiClient.mustache", ("lib/" + modulePathPart).replace('/', File.separatorChar), "ApiClient.pm"));
supportingFiles.add(new SupportingFile("Configuration.mustache", ("lib/WWW/" + moduleName).replace('/', File.separatorChar), "Configuration.pm")); supportingFiles.add(new SupportingFile("Configuration.mustache", ("lib/" + modulePathPart).replace('/', File.separatorChar), "Configuration.pm"));
supportingFiles.add(new SupportingFile("ApiFactory.mustache", ("lib/WWW/" + moduleName).replace('/', File.separatorChar), "ApiFactory.pm")); supportingFiles.add(new SupportingFile("ApiFactory.mustache", ("lib/" + modulePathPart).replace('/', File.separatorChar), "ApiFactory.pm"));
supportingFiles.add(new SupportingFile("Role.mustache", ("lib/WWW/" + moduleName).replace('/', File.separatorChar), "Role.pm")); supportingFiles.add(new SupportingFile("Role.mustache", ("lib/" + modulePathPart).replace('/', File.separatorChar), "Role.pm"));
supportingFiles.add(new SupportingFile("AutoDoc.mustache", ("lib/WWW/" + moduleName + "/Role").replace('/', File.separatorChar), "AutoDoc.pm")); supportingFiles.add(new SupportingFile("AutoDoc.mustache", ("lib/" + modulePathPart + "/Role").replace('/', File.separatorChar), "AutoDoc.pm"));
supportingFiles.add(new SupportingFile("autodoc.script.mustache", "bin", "autodoc")); supportingFiles.add(new SupportingFile("autodoc.script.mustache", "bin", "autodoc"));
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
} }
@ -129,12 +131,12 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override @Override
public String apiFileFolder() { public String apiFileFolder() {
return (outputFolder + "/lib/WWW/" + moduleName + apiPackage()).replace('/', File.separatorChar); return (outputFolder + "/lib/" + modulePathPart + apiPackage()).replace('/', File.separatorChar);
} }
@Override @Override
public String modelFileFolder() { public String modelFileFolder() {
return (outputFolder + "/lib/WWW/" + moduleName + modelPackage()).replace('/', File.separatorChar); return (outputFolder + "/lib/" + modulePathPart + modelPackage()).replace('/', File.separatorChar);
} }
@Override @Override
@ -251,6 +253,10 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig {
this.moduleName = moduleName; this.moduleName = moduleName;
} }
public void setModulePathPart(String modulePathPart) {
this.modulePathPart = modulePathPart;
}
public void setModuleVersion(String moduleVersion) { public void setModuleVersion(String moduleVersion) {
this.moduleVersion = moduleVersion; this.moduleVersion = moduleVersion;
} }

View File

@ -19,10 +19,24 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig {
public static final String GEM_NAME = "gemName"; public static final String GEM_NAME = "gemName";
public static final String MODULE_NAME = "moduleName"; public static final String MODULE_NAME = "moduleName";
public static final String GEM_VERSION = "gemVersion"; public static final String GEM_VERSION = "gemVersion";
public static final String GEM_LICENSE = "gemLicense";
public static final String GEM_HOMEPAGE = "gemHomepage";
public static final String GEM_SUMMARY = "gemSummary";
public static final String GEM_DESCRIPTION = "gemDescription";
public static final String GEM_AUTHOR = "gemAuthor";
public static final String GEM_AUTHOR_EMAIL = "gemAuthorEmail";
protected String gemName; protected String gemName;
protected String moduleName; protected String moduleName;
protected String gemVersion = "1.0.0"; protected String gemVersion = "1.0.0";
protected String libFolder = "lib"; protected String libFolder = "lib";
protected String gemLicense = "Apache-2.0";
protected String gemHomepage = "http://swagger.io";
protected String gemSummary = "A ruby wrapper for the swagger APIs";
protected String gemDescription = "This gem maps to a swagger API";
protected String gemAuthor = "";
protected String gemAuthorEmail = "";
public RubyClientCodegen() { public RubyClientCodegen() {
super(); super();
@ -87,6 +101,23 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig {
cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding" + cliOptions.add(new CliOption(MODULE_NAME, "top module name (convention: CamelCase, usually corresponding" +
" to gem name).").defaultValue("SwaggerClient")); " to gem name).").defaultValue("SwaggerClient"));
cliOptions.add(new CliOption(GEM_VERSION, "gem version.").defaultValue("1.0.0")); cliOptions.add(new CliOption(GEM_VERSION, "gem version.").defaultValue("1.0.0"));
cliOptions.add(new CliOption(GEM_LICENSE, "gem license. ").
defaultValue("Apache-2.0"));
cliOptions.add(new CliOption(GEM_HOMEPAGE, "gem homepage. ").
defaultValue("http://swagger.io"));
cliOptions.add(new CliOption(GEM_SUMMARY, "gem summary. ").
defaultValue("A ruby wrapper for the swagger APIs"));
cliOptions.add(new CliOption(GEM_DESCRIPTION, "gem description. ").
defaultValue("This gem maps to a swagger API"));
cliOptions.add(new CliOption(GEM_AUTHOR, "gem author (only one is supported)."));
cliOptions.add(new CliOption(GEM_AUTHOR_EMAIL, "gem author email (only one is supported)."));
} }
@Override @Override
@ -119,6 +150,31 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig {
additionalProperties.put(GEM_VERSION, gemVersion); additionalProperties.put(GEM_VERSION, gemVersion);
} }
if (additionalProperties.containsKey(GEM_LICENSE)) {
setGemLicense((String) additionalProperties.get(GEM_LICENSE));
}
if (additionalProperties.containsKey(GEM_HOMEPAGE)) {
setGemHomepage((String) additionalProperties.get(GEM_HOMEPAGE));
}
if (additionalProperties.containsKey(GEM_SUMMARY)) {
setGemSummary((String) additionalProperties.get(GEM_SUMMARY));
}
if (additionalProperties.containsKey(GEM_DESCRIPTION)) {
setGemDescription((String) additionalProperties.get(GEM_DESCRIPTION));
}
if (additionalProperties.containsKey(GEM_AUTHOR)) {
setGemAuthor((String) additionalProperties.get(GEM_AUTHOR));
}
if (additionalProperties.containsKey(GEM_AUTHOR_EMAIL)) {
setGemAuthorEmail((String) additionalProperties.get(GEM_AUTHOR_EMAIL));
}
// use constant model/api package (folder path) // use constant model/api package (folder path)
setModelPackage("models"); setModelPackage("models");
setApiPackage("api"); setApiPackage("api");
@ -133,6 +189,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig {
String modelFolder = gemFolder + File.separator + modelPackage.replace("/", File.separator); String modelFolder = gemFolder + File.separator + modelPackage.replace("/", File.separator);
} }
@Override @Override
public CodegenType getTag() { public CodegenType getTag() {
return CodegenType.CLIENT; return CodegenType.CLIENT;
@ -354,4 +411,28 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig {
public void setGemVersion(String gemVersion) { public void setGemVersion(String gemVersion) {
this.gemVersion = gemVersion; this.gemVersion = gemVersion;
} }
public void setGemDescription(String gemDescription) {
this.gemDescription = gemDescription;
}
public void setGemSummary(String gemSummary) {
this.gemSummary = gemSummary;
}
public void setGemLicense(String gemLicense) {
this.gemLicense = gemLicense;
}
public void setGemHomepage(String gemHomepage) {
this.gemHomepage = gemHomepage;
}
public void setGemAuthor(String gemAuthor) {
this.gemAuthor = gemAuthor;
}
public void setGemAuthorEmail(String gemAuthorEmail) {
this.gemAuthorEmail = gemAuthorEmail;
}
} }

View File

@ -49,6 +49,11 @@ public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig
reservedWords = new HashSet<String>( reservedWords = new HashSet<String>(
Arrays.asList( Arrays.asList(
// local variable names used in API methods (endpoints)
"path", "contentTypes", "contentType", "queryParams", "headerParams",
"formParams", "postBody", "mp", "basePath", "apiInvoker",
// scala reserved words
"abstract", "case", "catch", "class", "def", "do", "else", "extends", "abstract", "case", "catch", "class", "def", "do", "else", "extends",
"false", "final", "finally", "for", "forSome", "if", "implicit", "false", "final", "finally", "for", "forSome", "if", "implicit",
"import", "lazy", "match", "new", "null", "object", "override", "package", "import", "lazy", "match", "new", "null", "object", "override", "package",

View File

@ -159,6 +159,7 @@ namespace {{packageName}}.Client
/// </summary> /// </summary>
/// <param name="content">HTTP body (e.g. string, JSON).</param> /// <param name="content">HTTP body (e.g. string, JSON).</param>
/// <param name="type">Object type.</param> /// <param name="type">Object type.</param>
/// <param name="headers">HTTP headers.</param>
/// <returns>Object representation of the JSON string.</returns> /// <returns>Object representation of the JSON string.</returns>
public object Deserialize(string content, Type type, IList<Parameter> headers=null) public object Deserialize(string content, Type type, IList<Parameter> headers=null)
{ {

View File

@ -20,7 +20,6 @@ namespace {{packageName}}.Client {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ApiException"/> class. /// Initializes a new instance of the <see cref="ApiException"/> class.
/// </summary> /// </summary>
/// <param name="basePath">The base path.</param>
public ApiException() {} public ApiException() {}
/// <summary> /// <summary>

View File

@ -9,6 +9,9 @@ using {{packageName}}.Client;
namespace {{packageName}}.Api namespace {{packageName}}.Api
{ {
{{#operations}} {{#operations}}
/// <summary>
/// Represents a collection of functions to interact with the API endpoints
/// </summary>
public interface I{{classname}} public interface I{{classname}}
{ {
{{#operation}} {{#operation}}
@ -16,7 +19,7 @@ namespace {{packageName}}.Api
/// {{summary}} {{notes}} /// {{summary}} {{notes}}
/// </summary> /// </summary>
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param> {{#allParams}}/// <param name="{{paramName}}">{{description}}</param>
{{/allParams}}/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns> {{/allParams}}/// <returns>{{#returnType}}{{returnType}}{{/returnType}}</returns>
{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
{{/operation}} {{/operation}}
} }
@ -71,7 +74,7 @@ namespace {{packageName}}.Api
/// <summary> /// <summary>
/// Gets or sets the API client. /// Gets or sets the API client.
/// </summary> /// </summary>
/// <value>An instance of the ApiClient</param> /// <value>An instance of the ApiClient</value>
public ApiClient ApiClient {get; set;} public ApiClient ApiClient {get; set;}
{{#operation}} {{#operation}}
@ -79,7 +82,7 @@ namespace {{packageName}}.Api
/// {{summary}} {{notes}} /// {{summary}} {{notes}}
/// </summary> /// </summary>
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param> {{#allParams}}/// <param name="{{paramName}}">{{description}}</param>
{{/allParams}}/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns> {{/allParams}}/// <returns>{{#returnType}}{{returnType}}{{/returnType}}</returns>
public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
{ {
{{#allParams}}{{#required}} {{#allParams}}{{#required}}

View File

@ -7,6 +7,6 @@ vendor/RestSharp.Net2.1.1.11/lib/net20/RestSharp.Net2.dll,\
System.Runtime.Serialization.dll \ System.Runtime.Serialization.dll \
-target:library \ -target:library \
-out:bin/{{packageName}}.dll \ -out:bin/{{packageName}}.dll \
-recurse:src/*.cs \ -recurse:'src/*.cs' \
-doc:bin/{{packageName}}.xml \ -doc:bin/{{packageName}}.xml \
-platform:anycpu -platform:anycpu

View File

@ -43,10 +43,12 @@ import {{invokerPackage}}.auth.OAuth;
{{>generatedAnnotation}} {{>generatedAnnotation}}
public class ApiClient { public class ApiClient {
private Map<String, Client> hostMap = new HashMap<String, Client>();
private Map<String, String> defaultHeaderMap = new HashMap<String, String>(); private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
private boolean debugging = false;
private String basePath = "{{basePath}}"; private String basePath = "{{basePath}}";
private boolean debugging = false;
private int connectionTimeout = 0;
private Client httpClient;
private ObjectMapper mapper; private ObjectMapper mapper;
private Map<String, Authentication> authentications; private Map<String, Authentication> authentications;
@ -65,6 +67,8 @@ public class ApiClient {
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
mapper.registerModule(new JodaModule()); mapper.registerModule(new JodaModule());
httpClient = buildHttpClient(debugging);
// Use RFC3339 format for date and datetime. // Use RFC3339 format for date and datetime.
// See http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14 // See http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14
this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@ -224,6 +228,26 @@ public class ApiClient {
*/ */
public ApiClient setDebugging(boolean debugging) { public ApiClient setDebugging(boolean debugging) {
this.debugging = debugging; this.debugging = debugging;
// Rebuild HTTP Client according to the new "debugging" value.
this.httpClient = buildHttpClient(debugging);
return this;
}
/**
* Connect timeout (in milliseconds).
*/
public int getConnectTimeout() {
return connectionTimeout;
}
/**
* Set the connect timeout (in milliseconds).
* A value of 0 means no timeout, otherwise values must be between 1 and
* {@link Integer#MAX_VALUE}.
*/
public ApiClient setConnectTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
httpClient.setConnectTimeout(connectionTimeout);
return this; return this;
} }
@ -436,8 +460,6 @@ public class ApiClient {
updateParamsForAuth(authNames, queryParams, headerParams); updateParamsForAuth(authNames, queryParams, headerParams);
Client client = getClient();
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
b.append("?"); b.append("?");
if (queryParams != null){ if (queryParams != null){
@ -455,9 +477,9 @@ public class ApiClient {
Builder builder; Builder builder;
if (accept == null) if (accept == null)
builder = client.resource(basePath + path + querystring).getRequestBuilder(); builder = httpClient.resource(basePath + path + querystring).getRequestBuilder();
else else
builder = client.resource(basePath + path + querystring).accept(accept); builder = httpClient.resource(basePath + path + querystring).accept(accept);
for (String key : headerParams.keySet()) { for (String key : headerParams.keySet()) {
builder = builder.header(key, headerParams.get(key)); builder = builder.header(key, headerParams.get(key));
@ -571,19 +593,17 @@ public class ApiClient {
} }
/** /**
* Get an existing client or create a new client to handle HTTP request. * Build the Client used to make HTTP requests.
*/ */
private Client getClient() { private Client buildHttpClient(boolean debugging) {
if(!hostMap.containsKey(basePath)) {
// Add the JSON serialization support to Jersey // Add the JSON serialization support to Jersey
JacksonJsonProvider jsonProvider = new JacksonJsonProvider(mapper); JacksonJsonProvider jsonProvider = new JacksonJsonProvider(mapper);
DefaultClientConfig conf = new DefaultClientConfig(); DefaultClientConfig conf = new DefaultClientConfig();
conf.getSingletons().add(jsonProvider); conf.getSingletons().add(jsonProvider);
Client client = Client.create(conf); Client client = Client.create(conf);
if (debugging) if (debugging) {
client.addFilter(new LoggingFilter()); client.addFilter(new LoggingFilter());
hostMap.put(basePath, client);
} }
return hostMap.get(basePath); return client;
} }
} }

View File

@ -1,12 +1,22 @@
package {{invokerPackage}}; package {{invokerPackage}};
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import feign.Feign; import feign.Feign;
import feign.RequestInterceptor;
import feign.jackson.JacksonDecoder; import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder; import feign.jackson.JacksonEncoder;
import feign.slf4j.Slf4jLogger; import feign.slf4j.Slf4jLogger;
import {{invokerPackage}}.auth.*;
import {{invokerPackage}}.auth.OAuth.AccessTokenListener;
{{>generatedAnnotation}} {{>generatedAnnotation}}
public class ApiClient { public class ApiClient {
@ -14,9 +24,78 @@ public class ApiClient {
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
private String basePath = "{{basePath}}"; private String basePath = "{{basePath}}";
private Map<String, RequestInterceptor> apiAuthorizations;
private Feign.Builder feignBuilder;
public ApiClient() { public ApiClient() {
objectMapper = createObjectMapper(); objectMapper = createObjectMapper();
apiAuthorizations = new LinkedHashMap<String, RequestInterceptor>();
feignBuilder = Feign.builder()
.encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
.decoder(new JacksonDecoder(objectMapper))
.logger(new Slf4jLogger());
}
public ApiClient(String[] authNames) {
this();
for(String authName : authNames) { {{#hasAuthMethods}}
RequestInterceptor auth;
{{#authMethods}}if (authName == "{{name}}") { {{#isBasic}}
auth = new HttpBasicAuth();{{/isBasic}}{{#isApiKey}}
auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}");{{/isApiKey}}{{#isOAuth}}
auth = new OAuth(OAuthFlow.{{flow}}, "{{authorizationUrl}}", "{{tokenUrl}}", "{{#scopes}}{{scope}}{{#hasMore}}, {{/hasMore}}{{/scopes}}");{{/isOAuth}}
} else {{/authMethods}}{
throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");
}
addAuthorization(authName, auth);{{/hasAuthMethods}}{{^hasAuthMethods}}
throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names");{{/hasAuthMethods}}
}
}
/**
* Basic constructor for single auth name
* @param authName
*/
public ApiClient(String authName) {
this(new String[]{authName});
}
/**
* Helper constructor for single api key
* @param authName
* @param apiKey
*/
public ApiClient(String authName, String apiKey) {
this(authName);
this.setApiKey(apiKey);
}
/**
* Helper constructor for single basic auth or password oauth2
* @param authName
* @param username
* @param password
*/
public ApiClient(String authName, String username, String password) {
this(authName);
this.setCredentials(username, password);
}
/**
* Helper constructor for single password oauth2
* @param authName
* @param clientId
* @param secret
* @param username
* @param password
*/
public ApiClient(String authName, String clientId, String secret, String username, String password) {
this(authName);
this.getTokenEndPoint()
.setClientId(clientId)
.setClientSecret(secret)
.setUsername(username)
.setPassword(password);
} }
public String getBasePath() { public String getBasePath() {
@ -28,6 +107,23 @@ public class ApiClient {
return this; return this;
} }
public Map<String, RequestInterceptor> getApiAuthorizations() {
return apiAuthorizations;
}
public void setApiAuthorizations(Map<String, RequestInterceptor> apiAuthorizations) {
this.apiAuthorizations = apiAuthorizations;
}
public Feign.Builder getFeignBuilder() {
return feignBuilder;
}
public ApiClient setFeignBuilder(Feign.Builder feignBuilder) {
this.feignBuilder = feignBuilder;
return this;
}
private ObjectMapper createObjectMapper() { private ObjectMapper createObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
@ -45,13 +141,7 @@ public class ApiClient {
* XYZResponse response = api.someMethod(...); * XYZResponse response = api.someMethod(...);
*/ */
public <T extends Api> T buildClient(Class<T> clientClass) { public <T extends Api> T buildClient(Class<T> clientClass) {
return Feign.builder() return feignBuilder.target(clientClass, basePath);
.encoder(new FormAwareEncoder(new JacksonEncoder(objectMapper)))
.decoder(new JacksonDecoder(objectMapper))
// enable for basic auth:
// .requestInterceptor(new feign.auth.BasicAuthRequestInterceptor(username, password))
.logger(new Slf4jLogger())
.target(clientClass, basePath);
} }
/** /**
@ -83,4 +173,137 @@ public class ApiClient {
if (StringUtil.containsIgnoreCase(contentTypes, "application/json")) return "application/json"; if (StringUtil.containsIgnoreCase(contentTypes, "application/json")) return "application/json";
return contentTypes[0]; return contentTypes[0];
} }
/**
* Helper method to configure the first api key found
* @param apiKey
*/
public void setApiKey(String apiKey) {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof ApiKeyAuth) {
ApiKeyAuth keyAuth = (ApiKeyAuth) apiAuthorization;
keyAuth.setApiKey(apiKey);
return ;
}
}
throw new RuntimeException("No API key authentication configured!");
}
/**
* Helper method to configure the username/password for basic auth or password OAuth
* @param username
* @param password
*/
public void setCredentials(String username, String password) {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof HttpBasicAuth) {
HttpBasicAuth basicAuth = (HttpBasicAuth) apiAuthorization;
basicAuth.setCredentials(username, password);
return;
}
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
oauth.getTokenRequestBuilder().setUsername(username).setPassword(password);
return;
}
}
throw new RuntimeException("No Basic authentication or OAuth configured!");
}
/**
* Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one)
* @return
*/
public TokenRequestBuilder getTokenEndPoint() {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
return oauth.getTokenRequestBuilder();
}
}
return null;
}
/**
* Helper method to configure authorization endpoint of the first oauth found in the apiAuthorizations (there should be only one)
* @return
*/
public AuthenticationRequestBuilder getAuthorizationEndPoint() {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
return oauth.getAuthenticationRequestBuilder();
}
}
return null;
}
/**
* Helper method to pre-set the oauth access token of the first oauth found in the apiAuthorizations (there should be only one)
* @param accessToken
* @param expiresIn : validity period in seconds
*/
public void setAccessToken(String accessToken, Long expiresIn) {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
oauth.setAccessToken(accessToken, expiresIn);
return;
}
}
}
/**
* Helper method to configure the oauth accessCode/implicit flow parameters
* @param clientId
* @param clientSecret
* @param redirectURI
*/
public void configureAuthorizationFlow(String clientId, String clientSecret, String redirectURI) {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
oauth.getTokenRequestBuilder()
.setClientId(clientId)
.setClientSecret(clientSecret)
.setRedirectURI(redirectURI);
oauth.getAuthenticationRequestBuilder()
.setClientId(clientId)
.setRedirectURI(redirectURI);
return;
}
}
}
/**
* Configures a listener which is notified when a new access token is received.
* @param accessTokenListener
*/
public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
for(RequestInterceptor apiAuthorization : apiAuthorizations.values()) {
if (apiAuthorization instanceof OAuth) {
OAuth oauth = (OAuth) apiAuthorization;
oauth.registerAccessTokenListener(accessTokenListener);
return;
}
}
}
public RequestInterceptor getAuthorization(String authName) {
return apiAuthorizations.get(authName);
}
/**
* Adds an authorization to be used by the client
* @param authName
* @param authorization
*/
public void addAuthorization(String authName, RequestInterceptor authorization) {
if (apiAuthorizations.containsKey(authName)) {
throw new RuntimeException("auth name \"" + authName + "\" already in api authorizations");
}
apiAuthorizations.put(authName, authorization);
feignBuilder.requestInterceptor(authorization);
}
} }

View File

@ -19,7 +19,7 @@ public interface {{classname}} extends ApiClient.Api {
{{#allParams}} * @param {{paramName}} {{description}} {{#allParams}} * @param {{paramName}} {{description}}
{{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
*/ */
@RequestLine("{{httpMethod}} {{{path}}}{{#hasQueryParams}}?{{/hasQueryParams}}{{#queryParams}}{{paramName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}") @RequestLine("{{httpMethod}} {{{path}}}{{#hasQueryParams}}?{{/hasQueryParams}}{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}")
@Headers({ @Headers({
"Content-type: {{vendorExtensions.x-contentType}}", "Content-type: {{vendorExtensions.x-contentType}}",
"Accepts: {{vendorExtensions.x-accepts}}",{{#headerParams}} "Accepts: {{vendorExtensions.x-accepts}}",{{#headerParams}}

View File

@ -0,0 +1,41 @@
package {{invokerPackage}}.auth;
import feign.RequestInterceptor;
import feign.RequestTemplate;
public class ApiKeyAuth implements RequestInterceptor {
private final String location;
private final String paramName;
private String apiKey;
public ApiKeyAuth(String location, String paramName) {
this.location = location;
this.paramName = paramName;
}
public String getLocation() {
return location;
}
public String getParamName() {
return paramName;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
@Override
public void apply(RequestTemplate template) {
if (location == "query") {
template.query(paramName, apiKey);
} else if (location == "header") {
template.header(paramName, apiKey);
}
}
}

View File

@ -0,0 +1,41 @@
package {{invokerPackage}}.auth;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.auth.BasicAuthRequestInterceptor;
/**
* An interceptor that adds the request header needed to use HTTP basic authentication.
*/
public class HttpBasicAuth implements RequestInterceptor {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setCredentials(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public void apply(RequestTemplate template) {
RequestInterceptor requestInterceptor = new BasicAuthRequestInterceptor(username, password);
requestInterceptor.apply(template);
}
}

View File

@ -0,0 +1,203 @@
package {{invokerPackage}}.auth;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.oltu.oauth2.client.HttpClient;
import org.apache.oltu.oauth2.client.OAuthClient;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.AuthenticationRequestBuilder;
import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder;
import org.apache.oltu.oauth2.client.response.OAuthClientResponse;
import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory;
import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse;
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
import org.apache.oltu.oauth2.common.message.types.GrantType;
import org.apache.oltu.oauth2.common.token.BasicOAuthToken;
import feign.Client;
import feign.Request.Options;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.Response;
import feign.Util;
import {{invokerPackage}}.StringUtil;
public class OAuth implements RequestInterceptor {
public interface AccessTokenListener {
public void notify(BasicOAuthToken token);
}
private volatile String accessToken;
private Long expirationTimeMillis;
private OAuthClient oauthClient;
private TokenRequestBuilder tokenRequestBuilder;
private AuthenticationRequestBuilder authenticationRequestBuilder;
private AccessTokenListener accessTokenListener;
public OAuth(Client client, TokenRequestBuilder requestBuilder) {
setOauthClient(client);
this.tokenRequestBuilder = requestBuilder;
}
public OAuth(Client client, OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
this(client, OAuthClientRequest.tokenLocation(tokenUrl).setScope(scopes));
setFlow(flow);
authenticationRequestBuilder = OAuthClientRequest.authorizationLocation(authorizationUrl);
}
public OAuth(OAuthFlow flow, String authorizationUrl, String tokenUrl, String scopes) {
this(new Client.Default(null, null), flow, authorizationUrl, tokenUrl, scopes);
}
public void setFlow(OAuthFlow flow) {
switch(flow) {
case accessCode:
case implicit:
tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE);
break;
case password:
tokenRequestBuilder.setGrantType(GrantType.PASSWORD);
break;
case application:
tokenRequestBuilder.setGrantType(GrantType.CLIENT_CREDENTIALS);
break;
default:
break;
}
}
@Override
public void apply(RequestTemplate template) {
// If the request already have an authorization (eg. Basic auth), do nothing
if (template.headers().containsKey("Authorization")) {
return;
}
// If first time, get the token
if (expirationTimeMillis == null || System.currentTimeMillis() >= expirationTimeMillis) {
try {
updateAccessToken();
} catch (OAuthSystemException e) {
e.printStackTrace();
return;
} catch (OAuthProblemException e) {
e.printStackTrace();
return;
}
}
if (getAccessToken() != null) {
template.header("Authorization", "Bearer " + getAccessToken());
}
}
public synchronized void updateAccessToken() throws OAuthSystemException, OAuthProblemException {
if (getAccessToken() == null) {
OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(tokenRequestBuilder.buildBodyMessage());
if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) {
setAccessToken(accessTokenResponse.getAccessToken(), accessTokenResponse.getExpiresIn());
if (accessTokenListener != null) {
accessTokenListener.notify((BasicOAuthToken) accessTokenResponse.getOAuthToken());
}
}
}
}
public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
this.accessTokenListener = accessTokenListener;
}
public synchronized String getAccessToken() {
return accessToken;
}
public synchronized void setAccessToken(String accessToken, Long expiresIn) {
this.accessToken = accessToken;
this.expirationTimeMillis = System.currentTimeMillis() + expiresIn * 1000;
}
public TokenRequestBuilder getTokenRequestBuilder() {
return tokenRequestBuilder;
}
public void setTokenRequestBuilder(TokenRequestBuilder tokenRequestBuilder) {
this.tokenRequestBuilder = tokenRequestBuilder;
}
public AuthenticationRequestBuilder getAuthenticationRequestBuilder() {
return authenticationRequestBuilder;
}
public void setAuthenticationRequestBuilder(AuthenticationRequestBuilder authenticationRequestBuilder) {
this.authenticationRequestBuilder = authenticationRequestBuilder;
}
public OAuthClient getOauthClient() {
return oauthClient;
}
public void setOauthClient(OAuthClient oauthClient) {
this.oauthClient = oauthClient;
}
public void setOauthClient(Client client) {
this.oauthClient = new OAuthClient( new OAuthFeignClient(client));
}
public class OAuthFeignClient implements HttpClient {
private Client client;
public OAuthFeignClient() {
this.client = new Client.Default(null, null);
}
public OAuthFeignClient(Client client) {
this.client = client;
}
public <T extends OAuthClientResponse> T execute(OAuthClientRequest request, Map<String, String> headers,
String requestMethod, Class<T> responseClass)
throws OAuthSystemException, OAuthProblemException {
RequestTemplate req = new RequestTemplate()
.append(request.getLocationUri())
.method(requestMethod)
.body(request.getBody());
for (Entry<String, String> entry : headers.entrySet()) {
req.header(entry.getKey(), entry.getValue());
}
Response feignResponse;
String body = "";
try {
feignResponse = client.execute(req.request(), new Options());
body = Util.toString(feignResponse.body().asReader());
} catch (IOException e) {
throw new OAuthSystemException(e);
}
String contentType = null;
Collection<String> contentTypeHeader = feignResponse.headers().get("Content-Type");
if(contentTypeHeader != null) {
contentType = StringUtil.join(contentTypeHeader.toArray(new String[0]), ";");
}
return OAuthClientResponseFactory.createCustomResponse(
body,
contentType,
feignResponse.status(),
responseClass
);
}
public void shutdown() {
// Nothing to do here
}
}
}

View File

@ -164,6 +164,12 @@
<version>2.2</version> <version>2.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>${oltu-version}</version>
</dependency>
<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
@ -179,5 +185,6 @@
<jodatime-version>2.5</jodatime-version> <jodatime-version>2.5</jodatime-version>
<junit-version>4.12</junit-version> <junit-version>4.12</junit-version>
<maven-plugin-version>1.0.0</maven-plugin-version> <maven-plugin-version>1.0.0</maven-plugin-version>
<oltu-version>1.0.0</oltu-version>
</properties> </properties>
</project> </project>

View File

@ -12,7 +12,9 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataBodyPart;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.MultiPart; import org.glassfish.jersey.media.multipart.MultiPart;
@ -43,12 +45,13 @@ import {{invokerPackage}}.auth.OAuth;
{{>generatedAnnotation}} {{>generatedAnnotation}}
public class ApiClient { public class ApiClient {
private Client client;
private Map<String, Client> hostMap = new HashMap<String, Client>();
private Map<String, String> defaultHeaderMap = new HashMap<String, String>(); private Map<String, String> defaultHeaderMap = new HashMap<String, String>();
private boolean debugging = false;
private String basePath = "{{basePath}}"; private String basePath = "{{basePath}}";
private JSON json = new JSON(); private boolean debugging = false;
private int connectionTimeout = 0;
private Client httpClient;
private JSON json;
private Map<String, Authentication> authentications; private Map<String, Authentication> authentications;
@ -58,6 +61,9 @@ public class ApiClient {
private DateFormat dateFormat; private DateFormat dateFormat;
public ApiClient() { public ApiClient() {
json = new JSON();
httpClient = buildHttpClient(debugging);
// Use RFC3339 format for date and datetime. // Use RFC3339 format for date and datetime.
// See http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14 // See http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14
this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@ -70,8 +76,6 @@ public class ApiClient {
// Set default User-Agent. // Set default User-Agent.
setUserAgent("Java-Swagger"); setUserAgent("Java-Swagger");
buildClient();
// Setup authentications (key: authentication name, value: authentication). // Setup authentications (key: authentication name, value: authentication).
authentications = new HashMap<String, Authentication>();{{#authMethods}}{{#isBasic}} authentications = new HashMap<String, Authentication>();{{#authMethods}}{{#isBasic}}
authentications.put("{{name}}", new HttpBasicAuth());{{/isBasic}}{{#isApiKey}} authentications.put("{{name}}", new HttpBasicAuth());{{/isBasic}}{{#isApiKey}}
@ -226,7 +230,26 @@ public class ApiClient {
*/ */
public ApiClient setDebugging(boolean debugging) { public ApiClient setDebugging(boolean debugging) {
this.debugging = debugging; this.debugging = debugging;
buildClient(); // Rebuild HTTP Client according to the new "debugging" value.
this.httpClient = buildHttpClient(debugging);
return this;
}
/**
* Connect timeout (in milliseconds).
*/
public int getConnectTimeout() {
return connectionTimeout;
}
/**
* Set the connect timeout (in milliseconds).
* A value of 0 means no timeout, otherwise values must be between 1 and
* {@link Integer#MAX_VALUE}.
*/
public ApiClient setConnectTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout);
return this; return this;
} }
@ -472,7 +495,7 @@ public class ApiClient {
public <T> T invokeAPI(String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames, GenericType<T> returnType) throws ApiException { public <T> T invokeAPI(String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames, GenericType<T> returnType) throws ApiException {
updateParamsForAuth(authNames, queryParams, headerParams); updateParamsForAuth(authNames, queryParams, headerParams);
WebTarget target = client.target(this.basePath).path(path); WebTarget target = httpClient.target(this.basePath).path(path);
if (queryParams != null) { if (queryParams != null) {
for (Pair queryParam : queryParams) { for (Pair queryParam : queryParams) {
@ -545,15 +568,18 @@ public class ApiClient {
} }
} }
private void buildClient() { /**
* Build the Client used to make HTTP requests.
*/
private Client buildHttpClient(boolean debugging) {
final ClientConfig clientConfig = new ClientConfig(); final ClientConfig clientConfig = new ClientConfig();
clientConfig.register(MultiPartFeature.class); clientConfig.register(MultiPartFeature.class);
clientConfig.register(json); clientConfig.register(json);
clientConfig.register(org.glassfish.jersey.jackson.JacksonFeature.class); clientConfig.register(JacksonFeature.class);
if (debugging) { if (debugging) {
clientConfig.register(LoggingFilter.class); clientConfig.register(LoggingFilter.class);
} }
this.client = ClientBuilder.newClient(clientConfig); return ClientBuilder.newClient(clientConfig);
} }
private Map<String, List<String>> buildResponseHeaders(Response response) { private Map<String, List<String>> buildResponseHeaders(Response response) {

View File

@ -11,6 +11,8 @@ import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.MediaType; import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.Headers; import com.squareup.okhttp.Headers;
import com.squareup.okhttp.internal.http.HttpMethod; import com.squareup.okhttp.internal.http.HttpMethod;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import com.squareup.okhttp.logging.HttpLoggingInterceptor.Level;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@ -116,6 +118,8 @@ public class ApiClient {
private OkHttpClient httpClient; private OkHttpClient httpClient;
private JSON json; private JSON json;
private HttpLoggingInterceptor loggingInterceptor;
public ApiClient() { public ApiClient() {
httpClient = new OkHttpClient(); httpClient = new OkHttpClient();
@ -452,6 +456,16 @@ public class ApiClient {
* @param debugging To enable (true) or disable (false) debugging * @param debugging To enable (true) or disable (false) debugging
*/ */
public ApiClient setDebugging(boolean debugging) { public ApiClient setDebugging(boolean debugging) {
if (debugging != this.debugging) {
if (debugging) {
loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(Level.BODY);
httpClient.interceptors().add(loggingInterceptor);
} else {
httpClient.interceptors().remove(loggingInterceptor);
loggingInterceptor = null;
}
}
this.debugging = debugging; this.debugging = debugging;
return this; return this;
} }

View File

@ -117,6 +117,11 @@
<artifactId>okhttp</artifactId> <artifactId>okhttp</artifactId>
<version>${okhttp-version}</version> <version>${okhttp-version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>logging-interceptor</artifactId>
<version>${okhttp-version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
@ -133,7 +138,7 @@
</dependencies> </dependencies>
<properties> <properties>
<swagger-annotations-version>1.5.0</swagger-annotations-version> <swagger-annotations-version>1.5.0</swagger-annotations-version>
<okhttp-version>2.4.0</okhttp-version> <okhttp-version>2.7.2</okhttp-version>
<gson-version>2.3.1</gson-version> <gson-version>2.3.1</gson-version>
<maven-plugin-version>1.0.0</maven-plugin-version> <maven-plugin-version>1.0.0</maven-plugin-version>
<junit-version>4.8.1</junit-version> <junit-version>4.8.1</junit-version>

View File

@ -27,22 +27,23 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali
{{/vars}} {{/vars}}
@Override @Override
public boolean equals(Object o) { public boolean equals(java.lang.Object o) {
if (this == o) { if (this == o) {
return true; return true;
} }
if (o == null || getClass() != o.getClass()) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
{{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} {{classname}} {{classVarName}} = ({{classname}}) o;
return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} &&
{{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} return true {{#hasVars}}&& {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} &&
return true;{{/hasVars}} {{/hasMore}}{{/vars}}{{/hasVars}}
{{#parent}}&& super.equals(o){{/parent}};
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}},{{/hasVars}} super.hashCode(){{/parent}});
} }
@Override @Override
@ -59,7 +60,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali
* Convert the given object to string with each line indented by 4 spaces * Convert the given object to string with each line indented by 4 spaces
* (except the first line). * (except the first line).
*/ */
private String toIndentedString(Object o) { private String toIndentedString(java.lang.Object o) {
if (o == null) { if (o == null) {
return "null"; return "null";
} }

View File

@ -1,6 +1,5 @@
package {{package}}; package {{package}};
import {{invokerPackage}}.Responses;
import {{invokerPackage}}.ApiInvoker; import {{invokerPackage}}.ApiInvoker;
import {{invokerPackage}}.ApiException; import {{invokerPackage}}.ApiException;
import {{invokerPackage}}.Pair; import {{invokerPackage}}.Pair;
@ -50,7 +49,7 @@ public class {{classname}} {
{{#allParams}} * @param {{paramName}} {{description}} {{#allParams}} * @param {{paramName}} {{description}}
{{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
*/ */
public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final {{#returnBaseType}}Responses.{{returnBaseType}}{{#isListContainer}}List{{/isListContainer}}Response{{/returnBaseType}}{{^returnBaseType}}Responses.StringResponse{{/returnBaseType}} responseListener, final Response.ErrorListener errorListener) { public void {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}, {{/hasMore}}{{/allParams}}final Response.Listener<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}String{{/returnType}}> responseListener, final Response.ErrorListener errorListener) {
Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}};
{{#allParams}}{{#required}} {{#allParams}}{{#required}}

View File

@ -28,11 +28,11 @@ apply plugin: 'com.github.dcendents.android-maven'
{{/useAndroidMavenGradlePlugin}} {{/useAndroidMavenGradlePlugin}}
android { android {
compileSdkVersion 22 compileSdkVersion 23
buildToolsVersion '22.0.0' buildToolsVersion '23.0.2'
defaultConfig { defaultConfig {
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 22 targetSdkVersion 23
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7 sourceCompatibility JavaVersion.VERSION_1_7

View File

@ -1,24 +0,0 @@
package {{invokerPackage}};
import java.util.List;
import {{modelPackage}}.*;
public class Responses {
{{#models}}
{{#model}}
public static interface {{classname}}Response {
public void onResponse({{classname}} {{classVarName}});
}
public static interface {{classname}}ListResponse {
public void onResponse(List<{{classname}}> {{classVarName}}List);
}
{{/model}}
{{/models}}
public static interface StringResponse {
public void onResponse(String response);
}
public static interface StringListResponse {
public void onResponse(List<String> stringList);
}
}

View File

@ -77,9 +77,10 @@ namespace {{packageName}}.Client
// Creates and sets up a RestRequest prior to a call. // Creates and sets up a RestRequest prior to a call.
private RestRequest PrepareRequest( private RestRequest PrepareRequest(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = new RestRequest(path, method); var request = new RestRequest(path, method);
@ -103,8 +104,17 @@ namespace {{packageName}}.Client
foreach(var param in fileParams) foreach(var param in fileParams)
request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType);
if (postBody != null) // http body (model) parameter if (postBody != null) // http body (model or byte[]) parameter
{
if (postBody.GetType() == typeof(String))
{
request.AddParameter("application/json", postBody, ParameterType.RequestBody); request.AddParameter("application/json", postBody, ParameterType.RequestBody);
}
else if (postBody.GetType() == typeof(byte[]))
{
request.AddParameter(contentType, postBody, ParameterType.RequestBody);
}
}
return request; return request;
} }
@ -120,14 +130,18 @@ namespace {{packageName}}.Client
/// <param name="formParams">Form parameters.</param> /// <param name="formParams">Form parameters.</param>
/// <param name="fileParams">File parameters.</param> /// <param name="fileParams">File parameters.</param>
/// <param name="pathParams">Path parameters.</param> /// <param name="pathParams">Path parameters.</param>
/// <param name="contentType">Content Type of the request</param>
/// <returns>Object</returns> /// <returns>Object</returns>
public Object CallApi( public Object CallApi(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = PrepareRequest( var request = PrepareRequest(
path, method, queryParams, postBody, headerParams, formParams, fileParams, pathParams); path, method, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, contentType);
var response = RestClient.Execute(request); var response = RestClient.Execute(request);
return (Object) response; return (Object) response;
} }
@ -143,14 +157,17 @@ namespace {{packageName}}.Client
/// <param name="formParams">Form parameters.</param> /// <param name="formParams">Form parameters.</param>
/// <param name="fileParams">File parameters.</param> /// <param name="fileParams">File parameters.</param>
/// <param name="pathParams">Path parameters.</param> /// <param name="pathParams">Path parameters.</param>
/// <param name="contentType">Content type.</param>
/// <returns>The Task instance.</returns> /// <returns>The Task instance.</returns>
public async System.Threading.Tasks.Task<Object> CallApiAsync( public async System.Threading.Tasks.Task<Object> CallApiAsync(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = PrepareRequest( var request = PrepareRequest(
path, method, queryParams, postBody, headerParams, formParams, fileParams, pathParams); path, method, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, contentType);
var response = await RestClient.ExecuteTaskAsync(request); var response = await RestClient.ExecuteTaskAsync(request);
return (Object)response; return (Object)response;
} }
@ -194,6 +211,12 @@ namespace {{packageName}}.Client
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
// For example: 2009-06-15T13:45:30.0000000 // For example: 2009-06-15T13:45:30.0000000
return ((DateTime)obj).ToString (Configuration.DateTimeFormat); return ((DateTime)obj).ToString (Configuration.DateTimeFormat);
else if (obj is DateTimeOffset)
// Return a formatted date string - Can be customized with Configuration.DateTimeFormat
// Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
// For example: 2009-06-15T13:45:30.0000000
return ((DateTimeOffset)obj).ToString (Configuration.DateTimeFormat);
else if (obj is IList) else if (obj is IList)
{ {
var flattenedString = new StringBuilder(); var flattenedString = new StringBuilder();
@ -224,6 +247,10 @@ namespace {{packageName}}.Client
{ {
return content; return content;
} }
else if (type == typeof(byte[])) // return byte array
{
return data;
}
if (type == typeof(Stream)) if (type == typeof(Stream))
{ {
@ -270,11 +297,11 @@ namespace {{packageName}}.Client
} }
/// <summary> /// <summary>
/// Serialize an object into JSON string. /// Serialize an input (model) into JSON string
/// </summary> /// </summary>
/// <param name="obj">Object.</param> /// <param name="obj">Object.</param>
/// <returns>JSON string.</returns> /// <returns>JSON string.</returns>
public string Serialize(object obj) public String Serialize(object obj)
{ {
try try
{ {
@ -286,6 +313,24 @@ namespace {{packageName}}.Client
} }
} }
/// <summary>
/// Select the Content-Type header's value from the given content-type array:
/// if JSON exists in the given array, use it;
/// otherwise use the first one defined in 'consumes'
/// </summary>
/// <param name="contentTypes">The Content-Type array to select from.</param>
/// <returns>The Content-Type header to use.</returns>
public String SelectHeaderContentType(String[] contentTypes)
{
if (contentTypes.Length == 0)
return null;
if (contentTypes.Contains("application/json", StringComparer.OrdinalIgnoreCase))
return "application/json";
return contentTypes[0]; // use the first content type specified in 'consumes'
}
/// <summary> /// <summary>
/// Select the Accept header's value from the given accepts array: /// Select the Accept header's value from the given accepts array:
/// if JSON exists in the given array, use it; /// if JSON exists in the given array, use it;

View File

@ -27,10 +27,10 @@ namespace {{packageName}}.Client
public T Data { get; private set; } public T Data { get; private set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ApiResponse"/> class. /// Initializes a new instance of the <see cref="ApiResponse&lt;T&gt;" /> class.
/// </summary> /// </summary>
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="message">Error message.</param> /// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param> /// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(int statusCode, IDictionary<string, string> headers, T data) public ApiResponse(int statusCode, IDictionary<string, string> headers, T data)
{ {

View File

@ -24,6 +24,7 @@ namespace {{packageName}}.Client
/// <param name="apiKeyPrefix">Dictionary of API key prefix</param> /// <param name="apiKeyPrefix">Dictionary of API key prefix</param>
/// <param name="tempFolderPath">Temp folder path</param> /// <param name="tempFolderPath">Temp folder path</param>
/// <param name="dateTimeFormat">DateTime format string</param> /// <param name="dateTimeFormat">DateTime format string</param>
/// <param name="timeout">HTTP connection timeout (in milliseconds)</param>
public Configuration(ApiClient apiClient = null, public Configuration(ApiClient apiClient = null,
Dictionary<String, String> defaultHeader = null, Dictionary<String, String> defaultHeader = null,
string username = null, string username = null,

View File

@ -154,7 +154,8 @@ namespace {{packageName}}.Api
{ {
{{#allParams}}{{#required}} {{#allParams}}{{#required}}
// verify the required parameter '{{paramName}}' is set // verify the required parameter '{{paramName}}' is set
if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{operationId}}"); if ({{paramName}} == null)
throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{classname}}->{{operationId}}");
{{/required}}{{/allParams}} {{/required}}{{/allParams}}
var path_ = "{{path}}"; var path_ = "{{path}}";
@ -164,15 +165,21 @@ namespace {{packageName}}.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
{{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
{{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -185,11 +192,16 @@ namespace {{packageName}}.Api
{{/headerParams}} {{/headerParams}}
{{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", Configuration.ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}} {{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", Configuration.ApiClient.ParameterToFile("{{baseName}}", {{paramName}}));{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", Configuration.ApiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}}
{{/formParams}} {{/formParams}}
{{#bodyParam}}postBody = Configuration.ApiClient.Serialize({{paramName}}); // http body (model) parameter {{#bodyParam}}if ({{paramName}}.GetType() != typeof(byte[]))
{{/bodyParam}} {
postBody = Configuration.ApiClient.Serialize({{paramName}}); // http body (model) parameter
}
else
{
postBody = {{paramName}}; // byte array
}{{/bodyParam}}
{{#authMethods}} {{#authMethods}}// authentication ({{name}}) required
// authentication ({{name}}) required
{{#isApiKey}}{{#isKeyInHeader}} {{#isApiKey}}{{#isKeyInHeader}}
var apiKeyValue = Configuration.GetApiKeyWithPrefix("{{keyParamName}}"); var apiKeyValue = Configuration.GetApiKeyWithPrefix("{{keyParamName}}");
if (!String.IsNullOrEmpty(apiKeyValue)) if (!String.IsNullOrEmpty(apiKeyValue))
@ -214,7 +226,9 @@ namespace {{packageName}}.Api
{{/authMethods}} {{/authMethods}}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -261,15 +275,21 @@ namespace {{packageName}}.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
{{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
{{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -311,7 +331,9 @@ namespace {{packageName}}.Api
{{/authMethods}} {{/authMethods}}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;

View File

@ -0,0 +1,12 @@
wget -nc https://nuget.org/nuget.exe;
mozroots --import --sync
mono nuget.exe install vendor/packages.config -o vendor;
mkdir -p bin;
mcs -sdk:45 -r:vendor/Newtonsoft.Json.8.0.2/lib/net45/Newtonsoft.Json.dll,\
vendor/RestSharp.105.2.3/lib/net45/RestSharp.dll,\
System.Runtime.Serialization.dll \
-target:library \
-out:bin/{{packageName}}.dll \
-recurse:'src/*.cs' \
-doc:bin/{{packageName}}.xml \
-platform:anycpu

View File

@ -74,7 +74,7 @@ namespace {{packageName}}.Model
/// <summary> /// <summary>
/// Returns true if {{classname}} instances are equal /// Returns true if {{classname}} instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of {{classname}} to be compared</param> /// <param name="other">Instance of {{classname}} to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals({{classname}} other) public bool Equals({{classname}} other)
{ {

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="RestSharp" version="105.2.3" targetFramework="net45" developmentDependency="true" />
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" developmentDependency="true" />
</packages>

View File

@ -1,4 +1,4 @@
package WWW::{{moduleName}}::ApiClient; package {{moduleName}}::ApiClient;
use strict; use strict;
use warnings; use warnings;
@ -18,7 +18,7 @@ use Log::Any qw($log);
use Carp; use Carp;
use Module::Runtime qw(use_module); use Module::Runtime qw(use_module);
use WWW::{{moduleName}}::Configuration; use {{moduleName}}::Configuration;
use base 'Class::Singleton'; use base 'Class::Singleton';
@ -34,7 +34,7 @@ sub _new_instance
return bless \%args, $class; return bless \%args, $class;
} }
sub _cfg {'WWW::{{moduleName}}::Configuration'} sub _cfg {'{{moduleName}}::Configuration'}
# Set the user agent of the API client # Set the user agent of the API client
# #
@ -119,8 +119,8 @@ sub call_api {
else { else {
} }
$self->{ua}->timeout($self->{http_timeout} || $WWW::{{moduleName}}::Configuration::http_timeout); $self->{ua}->timeout($self->{http_timeout} || ${{moduleName}}::Configuration::http_timeout);
$self->{ua}->agent($self->{http_user_agent} || $WWW::{{moduleName}}::Configuration::http_user_agent); $self->{ua}->agent($self->{http_user_agent} || ${{moduleName}}::Configuration::http_user_agent);
$log->debugf("REQUEST: %s", $_request->as_string); $log->debugf("REQUEST: %s", $_request->as_string);
my $_response = $self->{ua}->request($_request); my $_response = $self->{ua}->request($_request);
@ -243,7 +243,7 @@ sub deserialize
} elsif (grep /^$class$/, ('string', 'int', 'float', 'bool', 'object')) { } elsif (grep /^$class$/, ('string', 'int', 'float', 'bool', 'object')) {
return $data; return $data;
} else { # model } else { # model
my $_instance = use_module("WWW::{{moduleName}}::Object::$class")->new; my $_instance = use_module("{{moduleName}}::Object::$class")->new;
if (ref $data eq "HASH") { if (ref $data eq "HASH") {
return $_instance->from_hash($data); return $_instance->from_hash($data);
} else { # string, need to json decode first } else { # string, need to json decode first
@ -294,11 +294,11 @@ sub get_api_key_with_prefix
{ {
my ($self, $key_name) = @_; my ($self, $key_name) = @_;
my $api_key = $WWW::{{moduleName}}::Configuration::api_key->{$key_name}; my $api_key = ${{moduleName}}::Configuration::api_key->{$key_name};
return unless $api_key; return unless $api_key;
my $prefix = $WWW::{{moduleName}}::Configuration::api_key_prefix->{$key_name}; my $prefix = ${{moduleName}}::Configuration::api_key_prefix->{$key_name};
return $prefix ? "$prefix $api_key" : $api_key; return $prefix ? "$prefix $api_key" : $api_key;
} }
@ -329,11 +329,11 @@ sub update_params_for_auth {
if ($api_key) { if ($api_key) {
$query_params->{'{{keyParamName}}'} = $api_key; $query_params->{'{{keyParamName}}'} = $api_key;
}{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}} }{{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}
if ($WWW::{{moduleName}}::Configuration::username || $WWW::{{moduleName}}::Configuration::password) { if (${{moduleName}}::Configuration::username || ${{moduleName}}::Configuration::password) {
$header_params->{'Authorization'} = 'Basic ' . encode_base64($WWW::{{moduleName}}::Configuration::username . ":" . $WWW::{{moduleName}}::Configuration::password); $header_params->{'Authorization'} = 'Basic ' . encode_base64(${{moduleName}}::Configuration::username . ":" . ${{moduleName}}::Configuration::password);
}{{/isBasic}}{{#isOAuth}} }{{/isBasic}}{{#isOAuth}}
if ($WWW::{{moduleName}}::Configuration::access_token) { if (${{moduleName}}::Configuration::access_token) {
$header_params->{'Authorization'} = 'Bearer ' . $WWW::{{moduleName}}::Configuration::access_token; $header_params->{'Authorization'} = 'Bearer ' . ${{moduleName}}::Configuration::access_token;
}{{/isOAuth}} }{{/isOAuth}}
} }
{{/authMethods}} {{/authMethods}}

View File

@ -1,4 +1,4 @@
package WWW::{{moduleName}}::ApiFactory; package {{moduleName}}::ApiFactory;
use strict; use strict;
use warnings; use warnings;
@ -7,26 +7,26 @@ use utf8;
use Carp; use Carp;
use Module::Find; use Module::Find;
usesub WWW::{{moduleName}}::Object; usesub {{moduleName}}::Object;
use WWW::{{moduleName}}::ApiClient; use {{moduleName}}::ApiClient;
=head1 Name =head1 Name
WWW::{{moduleName}}::ApiFactory - constructs APIs to retrieve {{moduleName}} objects {{moduleName}}::ApiFactory - constructs APIs to retrieve {{moduleName}} objects
=head1 Synopsis =head1 Synopsis
package My::Petstore::App; package My::Petstore::App;
use WWW::{{moduleName}}::ApiFactory; use {{moduleName}}::ApiFactory;
my $api_factory = WWW::{{moduleName}}::ApiFactory->new( ... ); # any args for ApiClient constructor my $api_factory = {{moduleName}}::ApiFactory->new( ... ); # any args for ApiClient constructor
# later... # later...
my $pet_api = $api_factory->get_api('Pet'); my $pet_api = $api_factory->get_api('Pet');
# $pet_api isa WWW::{{moduleName}}::PetApi # $pet_api isa {{moduleName}}::PetApi
my $pet = $pet_api->get_pet_by_id(pet_id => $pet_id); my $pet = $pet_api->get_pet_by_id(pet_id => $pet_id);
@ -39,9 +39,9 @@ use WWW::{{moduleName}}::ApiClient;
=cut =cut
# Load all the API classes and construct a lookup table at startup time # Load all the API classes and construct a lookup table at startup time
my %_apis = map { $_ =~ /^WWW::{{moduleName}}::(.*)$/; $1 => $_ } my %_apis = map { $_ =~ /^{{moduleName}}::(.*)$/; $1 => $_ }
grep {$_ =~ /Api$/} grep {$_ =~ /Api$/}
usesub 'WWW::{{moduleName}}'; usesub '{{moduleName}}';
=head1 new() =head1 new()
@ -54,7 +54,7 @@ my %_apis = map { $_ =~ /^WWW::{{moduleName}}::(.*)$/; $1 => $_ }
sub new { sub new {
my ($class, %p) = (shift, @_); my ($class, %p) = (shift, @_);
$p{api_client} = WWW::{{moduleName}}::ApiClient->instance(%p); $p{api_client} = {{moduleName}}::ApiClient->instance(%p);
return bless \%p, $class; return bless \%p, $class;
} }
@ -64,7 +64,7 @@ sub new {
$which is a nickname for the class: $which is a nickname for the class:
WWW::FooBarClient::BazApi has nickname 'Baz' FooBarClient::BazApi has nickname 'Baz'
=cut =cut

View File

@ -1,4 +1,4 @@
package WWW::{{moduleName}}::Role::AutoDoc; package {{moduleName}}::Role::AutoDoc;
use List::MoreUtils qw(uniq); use List::MoreUtils qw(uniq);
use Moose::Role; use Moose::Role;
@ -40,7 +40,7 @@ sub _printisa {
foreach my $role (@roles) { foreach my $role (@roles) {
$rolepkg = $role->{package} || next; # some are anonymous, or something $rolepkg = $role->{package} || next; # some are anonymous, or something
next if $rolepkg eq 'WWW::{{moduleName}}::Role::AutoDoc'; next if $rolepkg eq '{{moduleName}}::Role::AutoDoc';
$role_reqs = join ', ', keys %{$role->{required_methods}}; $role_reqs = join ', ', keys %{$role->{required_methods}};
$role_reqs ||= ''; $role_reqs ||= '';
$~ = $how eq 'pod' ? 'ROLES_POD' : 'ROLES'; $~ = $how eq 'pod' ? 'ROLES_POD' : 'ROLES';

View File

@ -68,7 +68,7 @@ sub _deserialize {
} elsif ( grep( /^$type$/, ('int', 'double', 'string', 'boolean'))) { } elsif ( grep( /^$type$/, ('int', 'double', 'string', 'boolean'))) {
return $data; return $data;
} else { # hash(model) } else { # hash(model)
my $_instance = eval "WWW::{{moduleName}}::Object::$type->new()"; my $_instance = eval "{{moduleName}}::Object::$type->new()";
return $_instance->from_hash($data); return $_instance->from_hash($data);
} }
} }

View File

@ -1,4 +1,4 @@
package WWW::{{moduleName}}::Configuration; package {{moduleName}}::Configuration;
use strict; use strict;
use warnings; use warnings;

View File

@ -1,6 +1,6 @@
# NAME # NAME
WWW::{{moduleName}}::Role - a Moose role for the {{appName}} {{moduleName}}::Role - a Moose role for the {{appName}}
## {{appName}} version: {{appVersion}} ## {{appName}} version: {{appVersion}}
@ -15,7 +15,7 @@ Automatically generated by the Perl Swagger Codegen project:
## A note on Moose ## A note on Moose
This role is the only component of the library that uses Moose. See This role is the only component of the library that uses Moose. See
WWW::{{moduleName}}::ApiFactory for non-Moosey usage. {{moduleName}}::ApiFactory for non-Moosey usage.
# SYNOPSIS # SYNOPSIS
@ -29,7 +29,7 @@ role.
package MyApp; package MyApp;
use Moose; use Moose;
with 'WWW::{{moduleName}}::Role'; with '{{moduleName}}::Role';
package main; package main;
@ -88,37 +88,37 @@ you are accessing. Usually `prefix` and `in` will be determined by the code gene
the spec and you will not need to set them at run time. If not, `in` will the spec and you will not need to set them at run time. If not, `in` will
default to 'head' and `prefix` to the empty string. default to 'head' and `prefix` to the empty string.
The tokens will be placed in the `WWW::{{moduleName}}::Configuration` namespace The tokens will be placed in the `{{moduleName}}::Configuration` namespace
as follows, but you don't need to know about this. as follows, but you don't need to know about this.
- `$WWW::{{moduleName}}::Configuration::username` - `${{moduleName}}::Configuration::username`
String. The username for basic auth. String. The username for basic auth.
- `$WWW::{{moduleName}}::Configuration::password` - `${{moduleName}}::Configuration::password`
String. The password for basic auth. String. The password for basic auth.
- `$WWW::{{moduleName}}::Configuration::api_key` - `${{moduleName}}::Configuration::api_key`
Hashref. Keyed on the name of each key (there can be multiple tokens). Hashref. Keyed on the name of each key (there can be multiple tokens).
$WWW::{{moduleName}}::Configuration::api_key = { ${{moduleName}}::Configuration::api_key = {
secretKey => 'aaaabbbbccccdddd', secretKey => 'aaaabbbbccccdddd',
anotherKey => '1111222233334444', anotherKey => '1111222233334444',
}; };
- `$WWW::{{moduleName}}::Configuration::api_key_prefix` - `${{moduleName}}::Configuration::api_key_prefix`
Hashref. Keyed on the name of each key (there can be multiple tokens). Note not Hashref. Keyed on the name of each key (there can be multiple tokens). Note not
all api keys require a prefix. all api keys require a prefix.
$WWW::{{moduleName}}::Configuration::api_key_prefix = { ${{moduleName}}::Configuration::api_key_prefix = {
secretKey => 'string', secretKey => 'string',
anotherKey => 'same or some other string', anotherKey => 'same or some other string',
}; };
- `$WWW::{{moduleName}}::Configuration::access_token` - `${{moduleName}}::Configuration::access_token`
String. The OAuth access token. String. The OAuth access token.
@ -134,7 +134,7 @@ created yet) the current value of `base_url`.
Returns an API factory object. You probably won't need to call this directly. Returns an API factory object. You probably won't need to call this directly.
$self->api_factory('Pet'); # returns a WWW::{{moduleName}}::PetApi instance $self->api_factory('Pet'); # returns a {{moduleName}}::PetApi instance
$self->pet_api; # the same $self->pet_api; # the same
@ -162,12 +162,12 @@ you could also call them on class names.
See the homepage `https://github.com/swagger-api/swagger-codegen` for full details. See the homepage `https://github.com/swagger-api/swagger-codegen` for full details.
But briefly, clone the git repository, build the codegen codebase, set up your build But briefly, clone the git repository, build the codegen codebase, set up your build
config file, then run the API build script. You will need git, Java 7 and Apache config file, then run the API build script. You will need git, Java 7 or 8 and Apache
maven 3.0.3 or better already installed. maven 3.0.3 or better already installed.
The config file should specify the project name for the generated library: The config file should specify the project name for the generated library:
{"moduleName":"MyProjectName"} {"moduleName":"WWW::MyProjectName"}
Your library files will be built under `WWW::MyProjectName`. Your library files will be built under `WWW::MyProjectName`.

View File

@ -1,11 +1,11 @@
package WWW::{{moduleName}}::Role; package {{moduleName}}::Role;
use utf8; use utf8;
use Moose::Role; use Moose::Role;
use namespace::autoclean; use namespace::autoclean;
use Class::Inspector; use Class::Inspector;
use Log::Any qw($log); use Log::Any qw($log);
use WWW::{{moduleName}}::ApiFactory; use {{moduleName}}::ApiFactory;
has base_url => ( is => 'ro', has base_url => ( is => 'ro',
required => 0, required => 0,
@ -14,7 +14,7 @@ has base_url => ( is => 'ro',
); );
has api_factory => ( is => 'ro', has api_factory => ( is => 'ro',
isa => 'WWW::{{moduleName}}::ApiFactory', isa => '{{moduleName}}::ApiFactory',
builder => '_build_af', builder => '_build_af',
lazy => 1, lazy => 1,
documentation => 'Builds an instance of the endpoint API class', documentation => 'Builds an instance of the endpoint API class',
@ -29,7 +29,7 @@ has tokens => ( is => 'ro',
has _cfg => ( is => 'ro', has _cfg => ( is => 'ro',
isa => 'Str', isa => 'Str',
default => 'WWW::{{moduleName}}::Configuration', default => '{{moduleName}}::Configuration',
); );
has version_info => ( is => 'ro', has version_info => ( is => 'ro',
@ -88,12 +88,12 @@ sub _build_af {
my $self = shift; my $self = shift;
my %args; my %args;
$args{base_url} = $self->base_url if $self->base_url; $args{base_url} = $self->base_url if $self->base_url;
return WWW::{{moduleName}}::ApiFactory->new(%args); return {{moduleName}}::ApiFactory->new(%args);
} }
=head1 NAME =head1 NAME
WWW::{{moduleName}}::Role - a Moose role for the {{appName}} {{moduleName}}::Role - a Moose role for the {{appName}}
=head2 {{appName}} version: {{appVersion}} =head2 {{appName}} version: {{appVersion}}
@ -114,7 +114,7 @@ Automatically generated by the Perl Swagger Codegen project:
=head2 A note on Moose =head2 A note on Moose
This role is the only component of the library that uses Moose. See This role is the only component of the library that uses Moose. See
WWW::{{moduleName}}::ApiFactory for non-Moosey usage. {{moduleName}}::ApiFactory for non-Moosey usage.
=head1 SYNOPSIS =head1 SYNOPSIS
@ -128,7 +128,7 @@ role.
package MyApp; package MyApp;
use Moose; use Moose;
with 'WWW::{{moduleName}}::Role'; with '{{moduleName}}::Role';
package main; package main;
@ -186,39 +186,39 @@ you are accessing. Usually C<prefix> and C<in> will be determined by the code ge
the spec and you will not need to set them at run time. If not, C<in> will the spec and you will not need to set them at run time. If not, C<in> will
default to 'head' and C<prefix> to the empty string. default to 'head' and C<prefix> to the empty string.
The tokens will be placed in the C<WWW::{{moduleName}}::Configuration> namespace The tokens will be placed in the C<{{moduleName}}::Configuration> namespace
as follows, but you don't need to know about this. as follows, but you don't need to know about this.
=over 4 =over 4
=item C<$WWW::{{moduleName}}::Configuration::username> =item C<${{moduleName}}::Configuration::username>
String. The username for basic auth. String. The username for basic auth.
=item C<$WWW::{{moduleName}}::Configuration::password> =item C<${{moduleName}}::Configuration::password>
String. The password for basic auth. String. The password for basic auth.
=item C<$WWW::{{moduleName}}::Configuration::api_key> =item C<${{moduleName}}::Configuration::api_key>
Hashref. Keyed on the name of each key (there can be multiple tokens). Hashref. Keyed on the name of each key (there can be multiple tokens).
$WWW::{{moduleName}}::Configuration::api_key = { ${{moduleName}}::Configuration::api_key = {
secretKey => 'aaaabbbbccccdddd', secretKey => 'aaaabbbbccccdddd',
anotherKey => '1111222233334444', anotherKey => '1111222233334444',
}; };
=item C<$WWW::{{moduleName}}::Configuration::api_key_prefix> =item C<${{moduleName}}::Configuration::api_key_prefix>
Hashref. Keyed on the name of each key (there can be multiple tokens). Note not Hashref. Keyed on the name of each key (there can be multiple tokens). Note not
all api keys require a prefix. all api keys require a prefix.
$WWW::{{moduleName}}::Configuration::api_key_prefix = { ${{moduleName}}::Configuration::api_key_prefix = {
secretKey => 'string', secretKey => 'string',
anotherKey => 'same or some other string', anotherKey => 'same or some other string',
}; };
=item C<$WWW::{{moduleName}}::Configuration::access_token> =item C<${{moduleName}}::Configuration::access_token>
String. The OAuth access token. String. The OAuth access token.
@ -236,7 +236,7 @@ created yet) the current value of C<base_url>.
Returns an API factory object. You probably won't need to call this directly. Returns an API factory object. You probably won't need to call this directly.
$self->api_factory('Pet'); # returns a WWW::{{moduleName}}::PetApi instance $self->api_factory('Pet'); # returns a {{moduleName}}::PetApi instance
$self->pet_api; # the same $self->pet_api; # the same
@ -264,12 +264,12 @@ you could also call them on class names.
See the homepage C<https://github.com/swagger-api/swagger-codegen> for full details. See the homepage C<https://github.com/swagger-api/swagger-codegen> for full details.
But briefly, clone the git repository, build the codegen codebase, set up your build But briefly, clone the git repository, build the codegen codebase, set up your build
config file, then run the API build script. You will need git, Java 7 and Apache config file, then run the API build script. You will need git, Java 7 or 8 and Apache
maven 3.0.3 or better already installed. maven 3.0.3 or better already installed.
The config file should specify the project name for the generated library: The config file should specify the project name for the generated library:
{"moduleName":"MyProjectName"} {"moduleName":"WWW::MyProjectName"}
Your library files will be built under C<WWW::MyProjectName>. Your library files will be built under C<WWW::MyProjectName>.

View File

@ -1,5 +1,5 @@
# #
# Copyright 2015 SmartBear Software # Copyright 2016 SmartBear Software
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -17,7 +17,7 @@
# NOTE: This class is auto generated by the swagger code generator program. # NOTE: This class is auto generated by the swagger code generator program.
# Do not edit the class manually. # Do not edit the class manually.
# #
package WWW::{{moduleName}}::{{classname}}; package {{moduleName}}::{{classname}};
require 5.6.0; require 5.6.0;
use strict; use strict;
@ -27,8 +27,8 @@ use Exporter;
use Carp qw( croak ); use Carp qw( croak );
use Log::Any qw($log); use Log::Any qw($log);
use WWW::{{moduleName}}::ApiClient; use {{moduleName}}::ApiClient;
use WWW::{{moduleName}}::Configuration; use {{moduleName}}::Configuration;
use base "Class::Data::Inheritable"; use base "Class::Data::Inheritable";
@ -37,7 +37,7 @@ __PACKAGE__->mk_classdata('method_documentation' => {});
sub new { sub new {
my $class = shift; my $class = shift;
my (%self) = ( my (%self) = (
'api_client' => WWW::{{moduleName}}::ApiClient->instance, 'api_client' => {{moduleName}}::ApiClient->instance,
@_ @_
); );

View File

@ -15,14 +15,14 @@ my $my_app = $options{c} || 'My::App';
if ($options{c}) { if ($options{c}) {
eval <<LOAD; eval <<LOAD;
use $my_app; use $my_app;
apply_all_roles($my_app, "WWW::{{moduleName}}::Role::AutoDoc"); apply_all_roles($my_app, "{{moduleName}}::Role::AutoDoc");
LOAD LOAD
die $@ if $@; die $@ if $@;
} }
else { else {
package My::App; package My::App;
use Moose; use Moose;
with ('WWW::{{moduleName}}::Role', 'WWW::{{moduleName}}::Role::AutoDoc'); with ('{{moduleName}}::Role', '{{moduleName}}::Role::AutoDoc');
} }
package main; package main;

View File

@ -1,6 +1,6 @@
{{#models}} {{#models}}
{{#model}} {{#model}}
package WWW::{{moduleName}}::Object::{{classname}}; package {{moduleName}}::Object::{{classname}};
require 5.6.0; require 5.6.0;
use strict; use strict;

View File

@ -11,7 +11,7 @@
* @link https://github.com/swagger-api/swagger-codegen * @link https://github.com/swagger-api/swagger-codegen
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -10,7 +10,7 @@
* @link https://github.com/swagger-api/swagger-codegen * @link https://github.com/swagger-api/swagger-codegen
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -11,7 +11,7 @@
* @link https://github.com/swagger-api/swagger-codegen * @link https://github.com/swagger-api/swagger-codegen
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -79,6 +79,23 @@ class ObjectSerializer
return $sanitized; return $sanitized;
} }
/**
* Sanitize filename by removing path.
* e.g. ../../sun.gif becomes sun.gif
*
* @param string $filename filename to be sanitized
*
* @return string the sanitized filename
*/
public function sanitizeFilename($filename)
{
if (preg_match("/.*[\/\\\\](.*)$/", $filename, $match)) {
return $match[1];
} else {
return $filename;
}
}
/** /**
* Take value and turn it into a string suitable for inclusion in * Take value and turn it into a string suitable for inclusion in
* the path, by url-encoding. * the path, by url-encoding.
@ -199,11 +216,11 @@ class ObjectSerializer
* *
* @param mixed $data object or primitive to be deserialized * @param mixed $data object or primitive to be deserialized
* @param string $class class name is passed as a string * @param string $class class name is passed as a string
* @param string $httpHeader HTTP headers * @param string $httpHeaders HTTP headers
* *
* @return object an instance of $class * @return object an instance of $class
*/ */
public function deserialize($data, $class, $httpHeader=null) public function deserialize($data, $class, $httpHeaders=null)
{ {
if (null === $data) { if (null === $data) {
$deserialized = null; $deserialized = null;
@ -231,8 +248,8 @@ class ObjectSerializer
$deserialized = $data; $deserialized = $data;
} elseif ($class === '\SplFileObject') { } elseif ($class === '\SplFileObject') {
// determine file name // determine file name
if (array_key_exists('Content-Disposition', $httpHeaders) && preg_match('/inline; filename=[\'"]?([^\'"\s]+)[\'"]?$/i', $httpHeader['Content-Disposition'], $match)) { if (array_key_exists('Content-Disposition', $httpHeaders) && preg_match('/inline; filename=[\'"]?([^\'"\s]+)[\'"]?$/i', $httpHeaders['Content-Disposition'], $match)) {
$filename = Configuration::getDefaultConfiguration()->getTempFolderPath().$match[1]; $filename = Configuration::getDefaultConfiguration()->getTempFolderPath() . sanitizeFilename($match[1]);
} else { } else {
$filename = tempnam(Configuration::getDefaultConfiguration()->getTempFolderPath(), ''); $filename = tempnam(Configuration::getDefaultConfiguration()->getTempFolderPath(), '');
} }

View File

@ -10,7 +10,7 @@
* @link https://github.com/swagger-api/swagger-codegen * @link https://github.com/swagger-api/swagger-codegen
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -126,8 +126,6 @@ use \{{invokerPackage}}\ObjectSerializer;
// parse inputs // parse inputs
$resourcePath = "{{path}}"; $resourcePath = "{{path}}";
$resourcePath = str_replace("{format}", "json", $resourcePath);
$method = "{{httpMethod}}";
$httpBody = ''; $httpBody = '';
$queryParams = array(); $queryParams = array();
$headerParams = array(); $headerParams = array();
@ -169,6 +167,9 @@ use \{{invokerPackage}}\ObjectSerializer;
$resourcePath $resourcePath
); );
}{{/pathParams}} }{{/pathParams}}
// default format to json
$resourcePath = str_replace("{format}", "json", $resourcePath);
{{#formParams}}// form params {{#formParams}}// form params
if (${{paramName}} !== null) { if (${{paramName}} !== null) {
{{#isFile}} {{#isFile}}
@ -213,7 +214,7 @@ use \{{invokerPackage}}\ObjectSerializer;
// make the API Call // make the API Call
try { try {
list($response, $statusCode, $httpHeader) = $this->apiClient->callApi( list($response, $statusCode, $httpHeader) = $this->apiClient->callApi(
$resourcePath, $method, $resourcePath, '{{httpMethod}}',
$queryParams, $httpBody, $queryParams, $httpBody,
$headerParams{{#returnType}}, '{{returnType}}'{{/returnType}} $headerParams{{#returnType}}, '{{returnType}}'{{/returnType}}
); );

View File

@ -11,7 +11,7 @@
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -13,7 +13,7 @@
* @link https://github.com/swagger-api/swagger-codegen * @link https://github.com/swagger-api/swagger-codegen
*/ */
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
""" """
{{classname}}.py {{classname}}.py
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -1,7 +1,7 @@
# coding: utf-8 # coding: utf-8
""" """
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -1,7 +1,7 @@
# coding: utf-8 # coding: utf-8
""" """
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -1,7 +1,7 @@
# coding: utf-8 # coding: utf-8
""" """
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -1,7 +1,7 @@
# coding: utf-8 # coding: utf-8
""" """
Copyright 2015 SmartBear Software Copyright 2016 SmartBear Software
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View File

@ -6,12 +6,13 @@ Gem::Specification.new do |s|
s.name = "{{gemName}}" s.name = "{{gemName}}"
s.version = {{moduleName}}::VERSION s.version = {{moduleName}}::VERSION
s.platform = Gem::Platform::RUBY s.platform = Gem::Platform::RUBY
s.authors = ["Zeke Sikelianos", "Tony Tam"] s.authors = ["{{gemAuthor}}"]
s.email = ["zeke@wordnik.com", "fehguy@gmail.com"] s.email = ["{{gemAuthorEmail}}"]
s.homepage = "http://swagger.io" s.homepage = "{{gemHomepage}}"
s.summary = %q{A ruby wrapper for the swagger APIs} s.summary = "{{gemSummary}}"
s.description = %q{This gem maps to a swagger API} s.description = "{{gemDescription}}"
s.license = "Apache-2.0" s.license = "{{gemLicense}}"
s.add_runtime_dependency 'typhoeus', '~> 0.2', '>= 0.2.1' s.add_runtime_dependency 'typhoeus', '~> 0.2', '>= 0.2.1'
s.add_runtime_dependency 'json', '~> 1.4', '>= 1.4.6' s.add_runtime_dependency 'json', '~> 1.4', '>= 1.4.6'
@ -22,7 +23,7 @@ Gem::Specification.new do |s|
s.add_development_dependency 'autotest', '~> 4.4', '>= 4.4.6' s.add_development_dependency 'autotest', '~> 4.4', '>= 4.4.6'
s.add_development_dependency 'autotest-rails-pure', '~> 4.1', '>= 4.1.2' s.add_development_dependency 'autotest-rails-pure', '~> 4.1', '>= 4.1.2'
s.add_development_dependency 'autotest-growl', '~> 0.2', '>= 0.2.16' s.add_development_dependency 'autotest-growl', '~> 0.2', '>= 0.2.16'
s.add_development_dependency 'autotest-fsevent', '~> 0.2', '>= 0.2.10' s.add_development_dependency 'autotest-fsevent', '~> 0.2', '>= 0.2.11'
s.files = `find *`.split("\n").uniq.sort.select{|f| !f.empty? } s.files = `find *`.split("\n").uniq.sort.select{|f| !f.empty? }
s.test_files = `find spec/*`.split("\n") s.test_files = `find spec/*`.split("\n")

View File

@ -31,6 +31,12 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest {
times = 1; times = 1;
clientCodegen.setPackageVersion(CSharpClientOptionsProvider.PACKAGE_VERSION_VALUE); clientCodegen.setPackageVersion(CSharpClientOptionsProvider.PACKAGE_VERSION_VALUE);
times = 1; times = 1;
clientCodegen.setOptionalAssemblyInfoFlag(true);
times = 1;
clientCodegen.setSourceFolder(CSharpClientOptionsProvider.SOURCE_FOLDER_VALUE);
times = 1;
clientCodegen.useDateTimeOffset(true);
times = 1;
}}; }};
} }
} }

View File

@ -9,6 +9,7 @@ import java.util.Map;
public class CSharpClientOptionsProvider implements OptionsProvider { public class CSharpClientOptionsProvider implements OptionsProvider {
public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp"; public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp";
public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT";
public static final String SOURCE_FOLDER_VALUE = "src_csharp";
@Override @Override
public String getLanguage() { public String getLanguage() {
@ -22,6 +23,9 @@ public class CSharpClientOptionsProvider implements OptionsProvider {
.put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE)
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true")
.put(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "true") .put(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "true")
.put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true")
.put(CodegenConstants.USE_DATETIME_OFFSET, "true")
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
.build(); .build();
} }

View File

@ -13,6 +13,12 @@ public class RubyClientOptionsProvider implements OptionsProvider {
public static final String GEM_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String GEM_VERSION_VALUE = "1.0.0-SNAPSHOT";
public static final String SORT_PARAMS_VALUE = "false"; public static final String SORT_PARAMS_VALUE = "false";
public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true";
public static final String GEM_LICENSE_VALUE = "MIT";
public static final String GEM_HOMEPAGE_VALUE = "homepage";
public static final String GEM_SUMMARY_VALUE = "summary";
public static final String GEM_DESCRIPTION_VALUE = "description";
public static final String GEM_AUTHOR_VALUE = "foo";
public static final String GEM_AUTHOR_EMAIL_VALUE = "foo";
@Override @Override
public String getLanguage() { public String getLanguage() {
@ -25,6 +31,12 @@ public class RubyClientOptionsProvider implements OptionsProvider {
return builder.put(RubyClientCodegen.GEM_NAME, GEM_NAME_VALUE) return builder.put(RubyClientCodegen.GEM_NAME, GEM_NAME_VALUE)
.put(RubyClientCodegen.MODULE_NAME, MODULE_NAME_VALUE) .put(RubyClientCodegen.MODULE_NAME, MODULE_NAME_VALUE)
.put(RubyClientCodegen.GEM_VERSION, GEM_VERSION_VALUE) .put(RubyClientCodegen.GEM_VERSION, GEM_VERSION_VALUE)
.put(RubyClientCodegen.GEM_LICENSE, GEM_LICENSE_VALUE)
.put(RubyClientCodegen.GEM_DESCRIPTION, GEM_DESCRIPTION_VALUE)
.put(RubyClientCodegen.GEM_HOMEPAGE, GEM_HOMEPAGE_VALUE)
.put(RubyClientCodegen.GEM_SUMMARY, GEM_SUMMARY_VALUE)
.put(RubyClientCodegen.GEM_AUTHOR, GEM_AUTHOR_VALUE)
.put(RubyClientCodegen.GEM_AUTHOR_EMAIL, GEM_AUTHOR_EMAIL_VALUE)
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE)
.put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE)
.build(); .build();

View File

@ -31,6 +31,19 @@ public class RubyClientOptionsTest extends AbstractOptionsTest {
times = 1; times = 1;
clientCodegen.setGemVersion(RubyClientOptionsProvider.GEM_VERSION_VALUE); clientCodegen.setGemVersion(RubyClientOptionsProvider.GEM_VERSION_VALUE);
times = 1; times = 1;
clientCodegen.setGemLicense(RubyClientOptionsProvider.GEM_LICENSE_VALUE);
times = 1;
clientCodegen.setGemHomepage(RubyClientOptionsProvider.GEM_HOMEPAGE_VALUE);
times = 1;
clientCodegen.setGemDescription(RubyClientOptionsProvider.GEM_DESCRIPTION_VALUE);
times = 1;
clientCodegen.setGemSummary(RubyClientOptionsProvider.GEM_SUMMARY_VALUE);
times = 1;
clientCodegen.setGemAuthor(RubyClientOptionsProvider.GEM_AUTHOR_VALUE);
times = 1;
clientCodegen.setGemAuthorEmail(RubyClientOptionsProvider.GEM_AUTHOR_EMAIL_VALUE);
times = 1;
}}; }};
} }
} }

View File

@ -19,6 +19,49 @@
"http" "http"
], ],
"paths": { "paths": {
"/pet?testing_byte_array=true": {
"post": {
"tags": [
"pet"
],
"summary": "Fake endpoint to test byte array in body parameter for adding a new pet to the store",
"description": "",
"operationId": "addPetUsingByteArray",
"consumes": [
"application/json",
"application/xml"
],
"produces": [
"application/json",
"application/xml"
],
"parameters": [
{
"in": "body",
"name": "body",
"description": "Pet object in the form of byte array",
"required": false,
"schema": {
"type": "string",
"format": "binary"
}
}
],
"responses": {
"405": {
"description": "Invalid input"
}
},
"security": [
{
"petstore_auth": [
"write:pets",
"read:pets"
]
}
]
}
},
"/pet": { "/pet": {
"post": { "post": {
"tags": [ "tags": [
@ -206,6 +249,56 @@
] ]
} }
}, },
"/pet/{petId}?testing_byte_array=true": {
"get": {
"tags": [
"pet"
],
"summary": "Fake endpoint to test byte array return by 'Find pet by ID'",
"description": "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions",
"operationId": "getPetByIdWithByteArray",
"produces": [
"application/json",
"application/xml"
],
"parameters": [
{
"name": "petId",
"in": "path",
"description": "ID of pet that needs to be fetched",
"required": true,
"type": "integer",
"format": "int64"
}
],
"responses": {
"404": {
"description": "Pet not found"
},
"200": {
"description": "successful operation",
"schema": {
"type": "string",
"format": "binary"
}
},
"400": {
"description": "Invalid ID supplied"
}
},
"security": [
{
"api_key": []
},
{
"petstore_auth": [
"write:pets",
"read:pets"
]
}
]
}
},
"/pet/{petId}": { "/pet/{petId}": {
"get": { "get": {
"tags": [ "tags": [

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-codegen-project</artifactId> <artifactId>swagger-codegen-project</artifactId>
<version>2.1.5</version> <version>2.1.6-SNAPSHOT</version>
<relativePath>../..</relativePath> <relativePath>../..</relativePath>
</parent> </parent>
<artifactId>swagger-generator</artifactId> <artifactId>swagger-generator</artifactId>
@ -218,6 +218,6 @@
<servlet-api-version>2.5</servlet-api-version> <servlet-api-version>2.5</servlet-api-version>
<zip-version>1.3.2</zip-version> <zip-version>1.3.2</zip-version>
<jetty-version>9.2.9.v20150224</jetty-version> <jetty-version>9.2.9.v20150224</jetty-version>
<jersey2-version>2.4.1</jersey2-version> <jersey2-version>2.6</jersey2-version>
</properties> </properties>
</project> </project>

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,5 +1,5 @@
/** /**
* Copyright 2015 SmartBear Software * Copyright 2016 SmartBear Software
* <p> * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

23
pom.xml
View File

@ -10,7 +10,7 @@
<artifactId>swagger-codegen-project</artifactId> <artifactId>swagger-codegen-project</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>swagger-codegen-project</name> <name>swagger-codegen-project</name>
<version>2.1.5</version> <version>2.1.6-SNAPSHOT</version>
<url>https://github.com/swagger-api/swagger-codegen</url> <url>https://github.com/swagger-api/swagger-codegen</url>
<scm> <scm>
<connection>scm:git:git@github.com:swagger-api/swagger-codegen.git</connection> <connection>scm:git:git@github.com:swagger-api/swagger-codegen.git</connection>
@ -151,26 +151,16 @@
<artifactId>maven-release-plugin</artifactId> <artifactId>maven-release-plugin</artifactId>
<version>2.1</version> <version>2.1</version>
</plugin> </plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin-version}</version>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version> <version>2.10.3</version>
<configuration> <configuration>
<aggregate>true</aggregate> <aggregate>true</aggregate>
<source>1.6</source> <source>1.7</source>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<maxmemory>1g</maxmemory> <maxmemory>1g</maxmemory>
<links>
<link>http://java.sun.com/javase/6/docs/api/</link>
</links>
<excludePackageNames>${javadoc.package.exclude}</excludePackageNames> <excludePackageNames>${javadoc.package.exclude}</excludePackageNames>
</configuration> </configuration>
<executions> <executions>
@ -198,7 +188,6 @@
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
</pluginManagement>
</build> </build>
<profiles> <profiles>
<profile> <profile>
@ -530,10 +519,10 @@
</repository> </repository>
</repositories> </repositories>
<properties> <properties>
<swagger-parser-version>1.0.15-SNAPSHOT</swagger-parser-version> <swagger-parser-version>1.0.17-SNAPSHOT</swagger-parser-version>
<scala-version>2.11.1</scala-version> <scala-version>2.11.1</scala-version>
<felix-version>2.3.4</felix-version> <felix-version>2.3.4</felix-version>
<swagger-core-version>1.5.5</swagger-core-version> <swagger-core-version>1.5.6</swagger-core-version>
<commons-io-version>2.4</commons-io-version> <commons-io-version>2.4</commons-io-version>
<commons-cli-version>1.2</commons-cli-version> <commons-cli-version>1.2</commons-cli-version>
<junit-version>4.8.1</junit-version> <junit-version>4.8.1</junit-version>

View File

@ -72,6 +72,11 @@ public class PetApiTest {
} }
@Test @Test
@Ignore
/* ignoring the findPetByTags test below as it's very similar to
* testFindPetsByStatus and testFindPetsByTags sometimes got 500
* due to server issue, which makes the test unstable.
*/
public void testFindPetsByTags() throws Exception { public void testFindPetsByTags() throws Exception {
Pet pet = createRandomPet(); Pet pet = createRandomPet();
pet.setName("monster"); pet.setName("monster");

View File

@ -7,6 +7,6 @@ vendor/RestSharp.Net2.1.1.11/lib/net20/RestSharp.Net2.dll,\
System.Runtime.Serialization.dll \ System.Runtime.Serialization.dll \
-target:library \ -target:library \
-out:bin/IO.Swagger.dll \ -out:bin/IO.Swagger.dll \
-recurse:src/*.cs \ -recurse:'src/*.cs' \
-doc:bin/IO.Swagger.xml \ -doc:bin/IO.Swagger.xml \
-platform:anycpu -platform:anycpu

View File

@ -8,6 +8,9 @@ using IO.Swagger.Model;
namespace IO.Swagger.Api namespace IO.Swagger.Api
{ {
/// <summary>
/// Represents a collection of functions to interact with the API endpoints
/// </summary>
public interface IPetApi public interface IPetApi
{ {
@ -29,14 +32,14 @@ namespace IO.Swagger.Api
/// Finds Pets by status Multiple status values can be provided with comma seperated strings /// Finds Pets by status Multiple status values can be provided with comma seperated strings
/// </summary> /// </summary>
/// <param name="status">Status values that need to be considered for filter</param> /// <param name="status">Status values that need to be considered for filter</param>
/// <returns>List<Pet></returns> /// <returns>List&lt;Pet&gt;</returns>
List<Pet> FindPetsByStatus (List<string> status); List<Pet> FindPetsByStatus (List<string> status);
/// <summary> /// <summary>
/// Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. /// Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.
/// </summary> /// </summary>
/// <param name="tags">Tags to filter by</param> /// <param name="tags">Tags to filter by</param>
/// <returns>List<Pet></returns> /// <returns>List&lt;Pet&gt;</returns>
List<Pet> FindPetsByTags (List<string> tags); List<Pet> FindPetsByTags (List<string> tags);
/// <summary> /// <summary>
@ -124,7 +127,7 @@ namespace IO.Swagger.Api
/// <summary> /// <summary>
/// Gets or sets the API client. /// Gets or sets the API client.
/// </summary> /// </summary>
/// <value>An instance of the ApiClient</param> /// <value>An instance of the ApiClient</value>
public ApiClient ApiClient {get; set;} public ApiClient ApiClient {get; set;}
@ -212,7 +215,7 @@ namespace IO.Swagger.Api
/// Finds Pets by status Multiple status values can be provided with comma seperated strings /// Finds Pets by status Multiple status values can be provided with comma seperated strings
/// </summary> /// </summary>
/// <param name="status">Status values that need to be considered for filter</param> /// <param name="status">Status values that need to be considered for filter</param>
/// <returns>List<Pet></returns> /// <returns>List&lt;Pet&gt;</returns>
public List<Pet> FindPetsByStatus (List<string> status) public List<Pet> FindPetsByStatus (List<string> status)
{ {
@ -252,7 +255,7 @@ namespace IO.Swagger.Api
/// Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. /// Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.
/// </summary> /// </summary>
/// <param name="tags">Tags to filter by</param> /// <param name="tags">Tags to filter by</param>
/// <returns>List<Pet></returns> /// <returns>List&lt;Pet&gt;</returns>
public List<Pet> FindPetsByTags (List<string> tags) public List<Pet> FindPetsByTags (List<string> tags)
{ {

View File

@ -8,13 +8,16 @@ using IO.Swagger.Model;
namespace IO.Swagger.Api namespace IO.Swagger.Api
{ {
/// <summary>
/// Represents a collection of functions to interact with the API endpoints
/// </summary>
public interface IStoreApi public interface IStoreApi
{ {
/// <summary> /// <summary>
/// Returns pet inventories by status Returns a map of status codes to quantities /// Returns pet inventories by status Returns a map of status codes to quantities
/// </summary> /// </summary>
/// <returns>Dictionary<String, int?></returns> /// <returns>Dictionary&lt;String, int?&gt;</returns>
Dictionary<String, int?> GetInventory (); Dictionary<String, int?> GetInventory ();
/// <summary> /// <summary>
@ -90,14 +93,14 @@ namespace IO.Swagger.Api
/// <summary> /// <summary>
/// Gets or sets the API client. /// Gets or sets the API client.
/// </summary> /// </summary>
/// <value>An instance of the ApiClient</param> /// <value>An instance of the ApiClient</value>
public ApiClient ApiClient {get; set;} public ApiClient ApiClient {get; set;}
/// <summary> /// <summary>
/// Returns pet inventories by status Returns a map of status codes to quantities /// Returns pet inventories by status Returns a map of status codes to quantities
/// </summary> /// </summary>
/// <returns>Dictionary<String, int?></returns> /// <returns>Dictionary&lt;String, int?&gt;</returns>
public Dictionary<String, int?> GetInventory () public Dictionary<String, int?> GetInventory ()
{ {

View File

@ -8,6 +8,9 @@ using IO.Swagger.Model;
namespace IO.Swagger.Api namespace IO.Swagger.Api
{ {
/// <summary>
/// Represents a collection of functions to interact with the API endpoints
/// </summary>
public interface IUserApi public interface IUserApi
{ {
@ -120,7 +123,7 @@ namespace IO.Swagger.Api
/// <summary> /// <summary>
/// Gets or sets the API client. /// Gets or sets the API client.
/// </summary> /// </summary>
/// <value>An instance of the ApiClient</param> /// <value>An instance of the ApiClient</value>
public ApiClient ApiClient {get; set;} public ApiClient ApiClient {get; set;}

View File

@ -159,6 +159,7 @@ namespace IO.Swagger.Client
/// </summary> /// </summary>
/// <param name="content">HTTP body (e.g. string, JSON).</param> /// <param name="content">HTTP body (e.g. string, JSON).</param>
/// <param name="type">Object type.</param> /// <param name="type">Object type.</param>
/// <param name="headers">HTTP headers.</param>
/// <returns>Object representation of the JSON string.</returns> /// <returns>Object representation of the JSON string.</returns>
public object Deserialize(string content, Type type, IList<Parameter> headers=null) public object Deserialize(string content, Type type, IList<Parameter> headers=null)
{ {

View File

@ -20,7 +20,6 @@ namespace IO.Swagger.Client {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ApiException"/> class. /// Initializes a new instance of the <see cref="ApiException"/> class.
/// </summary> /// </summary>
/// <param name="basePath">The base path.</param>
public ApiException() {} public ApiException() {}
/// <summary> /// <summary>

View File

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Swagger Library")]
[assembly: AssemblyDescription("A library generated from a Swagger doc")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Swagger")]
[assembly: AssemblyProduct("SwaggerLibrary")]
[assembly: AssemblyCopyright("No Copyright")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("1.0.0")]

View File

@ -274,15 +274,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -293,7 +299,6 @@ namespace IO.Swagger.Api
// authentication (api_key) required // authentication (api_key) required
var apiKeyValue = Configuration.GetApiKeyWithPrefix("api_key"); var apiKeyValue = Configuration.GetApiKeyWithPrefix("api_key");
@ -304,7 +309,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -345,15 +352,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -375,7 +388,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -417,15 +432,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -434,13 +455,21 @@ namespace IO.Swagger.Api
if (body.GetType() != typeof(byte[]))
{
postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
}
else
{
postBody = body; // byte array
}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -483,15 +512,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -506,7 +541,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -541,7 +578,8 @@ namespace IO.Swagger.Api
{ {
// verify the required parameter 'orderId' is set // verify the required parameter 'orderId' is set
if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling GetOrderById"); if (orderId == null)
throw new ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->GetOrderById");
var path_ = "/store/order/{orderId}"; var path_ = "/store/order/{orderId}";
@ -551,15 +589,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -574,7 +618,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -619,15 +665,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -642,7 +694,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -676,7 +730,8 @@ namespace IO.Swagger.Api
{ {
// verify the required parameter 'orderId' is set // verify the required parameter 'orderId' is set
if (orderId == null) throw new ApiException(400, "Missing required parameter 'orderId' when calling DeleteOrder"); if (orderId == null)
throw new ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->DeleteOrder");
var path_ = "/store/order/{orderId}"; var path_ = "/store/order/{orderId}";
@ -686,15 +741,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -709,7 +770,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -753,15 +816,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -776,7 +845,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;

View File

@ -443,15 +443,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -460,13 +466,21 @@ namespace IO.Swagger.Api
if (body.GetType() != typeof(byte[]))
{
postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
}
else
{
postBody = body; // byte array
}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -508,15 +522,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -531,7 +551,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -572,15 +594,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -589,13 +617,21 @@ namespace IO.Swagger.Api
if (body.GetType() != typeof(byte[]))
{
postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
}
else
{
postBody = body; // byte array
}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -637,15 +673,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -660,7 +702,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -701,15 +745,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -718,13 +768,21 @@ namespace IO.Swagger.Api
if (body.GetType() != typeof(byte[]))
{
postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
}
else
{
postBody = body; // byte array
}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -766,15 +824,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -789,7 +853,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.POST, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -833,15 +899,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -857,7 +929,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -902,15 +976,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -926,7 +1006,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -965,15 +1047,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -987,7 +1075,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1027,15 +1117,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1049,7 +1145,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1084,7 +1182,8 @@ namespace IO.Swagger.Api
{ {
// verify the required parameter 'username' is set // verify the required parameter 'username' is set
if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling GetUserByName"); if (username == null)
throw new ApiException(400, "Missing required parameter 'username' when calling UserApi->GetUserByName");
var path_ = "/user/{username}"; var path_ = "/user/{username}";
@ -1094,15 +1193,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1117,7 +1222,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1162,15 +1269,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1185,7 +1298,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.GET, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1221,7 +1336,8 @@ namespace IO.Swagger.Api
{ {
// verify the required parameter 'username' is set // verify the required parameter 'username' is set
if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling UpdateUser"); if (username == null)
throw new ApiException(400, "Missing required parameter 'username' when calling UserApi->UpdateUser");
var path_ = "/user/{username}"; var path_ = "/user/{username}";
@ -1231,15 +1347,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1249,13 +1371,21 @@ namespace IO.Swagger.Api
if (body.GetType() != typeof(byte[]))
{
postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter postBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
}
else
{
postBody = body; // byte array
}
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.PUT, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1301,15 +1431,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1325,7 +1461,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.PUT, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.PUT, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1359,7 +1497,8 @@ namespace IO.Swagger.Api
{ {
// verify the required parameter 'username' is set // verify the required parameter 'username' is set
if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling DeleteUser"); if (username == null)
throw new ApiException(400, "Missing required parameter 'username' when calling UserApi->DeleteUser");
var path_ = "/user/{username}"; var path_ = "/user/{username}";
@ -1369,15 +1508,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader); var headerParams = new Dictionary<String, String>(Configuration.DefaultHeader);
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1392,7 +1537,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) Configuration.ApiClient.CallApi(path_,
Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;
@ -1436,15 +1583,21 @@ namespace IO.Swagger.Api
var headerParams = new Dictionary<String, String>(); var headerParams = new Dictionary<String, String>();
var formParams = new Dictionary<String, String>(); var formParams = new Dictionary<String, String>();
var fileParams = new Dictionary<String, FileParameter>(); var fileParams = new Dictionary<String, FileParameter>();
String postBody = null; Object postBody = null;
// to determine the Content-Type header
String[] httpContentTypes = new String[] {
};
String httpContentType = Configuration.ApiClient.SelectHeaderContentType(httpContentTypes);
// to determine the Accept header // to determine the Accept header
String[] http_header_accepts = new String[] { String[] httpHeaderAccepts = new String[] {
"application/json", "application/xml" "application/json", "application/xml"
}; };
String http_header_accept = Configuration.ApiClient.SelectHeaderAccept(http_header_accepts); String httpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(httpHeaderAccepts);
if (http_header_accept != null) if (httpHeaderAccept != null)
headerParams.Add("Accept", Configuration.ApiClient.SelectHeaderAccept(http_header_accepts)); headerParams.Add("Accept", httpHeaderAccept);
// set "format" to json by default // set "format" to json by default
// e.g. /pet/{petId}.{format} becomes /pet/{petId}.json // e.g. /pet/{petId}.{format} becomes /pet/{petId}.json
@ -1459,7 +1612,9 @@ namespace IO.Swagger.Api
// make the HTTP request // make the HTTP request
IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_, Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams, pathParams); IRestResponse response = (IRestResponse) await Configuration.ApiClient.CallApiAsync(path_,
Method.DELETE, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, httpContentType);
int statusCode = (int) response.StatusCode; int statusCode = (int) response.StatusCode;

View File

@ -77,9 +77,10 @@ namespace IO.Swagger.Client
// Creates and sets up a RestRequest prior to a call. // Creates and sets up a RestRequest prior to a call.
private RestRequest PrepareRequest( private RestRequest PrepareRequest(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = new RestRequest(path, method); var request = new RestRequest(path, method);
@ -103,8 +104,17 @@ namespace IO.Swagger.Client
foreach(var param in fileParams) foreach(var param in fileParams)
request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType);
if (postBody != null) // http body (model) parameter if (postBody != null) // http body (model or byte[]) parameter
{
if (postBody.GetType() == typeof(String))
{
request.AddParameter("application/json", postBody, ParameterType.RequestBody); request.AddParameter("application/json", postBody, ParameterType.RequestBody);
}
else if (postBody.GetType() == typeof(byte[]))
{
request.AddParameter(contentType, postBody, ParameterType.RequestBody);
}
}
return request; return request;
} }
@ -120,14 +130,18 @@ namespace IO.Swagger.Client
/// <param name="formParams">Form parameters.</param> /// <param name="formParams">Form parameters.</param>
/// <param name="fileParams">File parameters.</param> /// <param name="fileParams">File parameters.</param>
/// <param name="pathParams">Path parameters.</param> /// <param name="pathParams">Path parameters.</param>
/// <param name="contentType">Content Type of the request</param>
/// <returns>Object</returns> /// <returns>Object</returns>
public Object CallApi( public Object CallApi(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = PrepareRequest( var request = PrepareRequest(
path, method, queryParams, postBody, headerParams, formParams, fileParams, pathParams); path, method, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, contentType);
var response = RestClient.Execute(request); var response = RestClient.Execute(request);
return (Object) response; return (Object) response;
} }
@ -143,14 +157,17 @@ namespace IO.Swagger.Client
/// <param name="formParams">Form parameters.</param> /// <param name="formParams">Form parameters.</param>
/// <param name="fileParams">File parameters.</param> /// <param name="fileParams">File parameters.</param>
/// <param name="pathParams">Path parameters.</param> /// <param name="pathParams">Path parameters.</param>
/// <param name="contentType">Content type.</param>
/// <returns>The Task instance.</returns> /// <returns>The Task instance.</returns>
public async System.Threading.Tasks.Task<Object> CallApiAsync( public async System.Threading.Tasks.Task<Object> CallApiAsync(
String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody, String path, RestSharp.Method method, Dictionary<String, String> queryParams, Object postBody,
Dictionary<String, String> headerParams, Dictionary<String, String> formParams, Dictionary<String, String> headerParams, Dictionary<String, String> formParams,
Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams) Dictionary<String, FileParameter> fileParams, Dictionary<String, String> pathParams,
String contentType)
{ {
var request = PrepareRequest( var request = PrepareRequest(
path, method, queryParams, postBody, headerParams, formParams, fileParams, pathParams); path, method, queryParams, postBody, headerParams, formParams, fileParams,
pathParams, contentType);
var response = await RestClient.ExecuteTaskAsync(request); var response = await RestClient.ExecuteTaskAsync(request);
return (Object)response; return (Object)response;
} }
@ -194,6 +211,12 @@ namespace IO.Swagger.Client
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
// For example: 2009-06-15T13:45:30.0000000 // For example: 2009-06-15T13:45:30.0000000
return ((DateTime)obj).ToString (Configuration.DateTimeFormat); return ((DateTime)obj).ToString (Configuration.DateTimeFormat);
else if (obj is DateTimeOffset)
// Return a formatted date string - Can be customized with Configuration.DateTimeFormat
// Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
// For example: 2009-06-15T13:45:30.0000000
return ((DateTimeOffset)obj).ToString (Configuration.DateTimeFormat);
else if (obj is IList) else if (obj is IList)
{ {
var flattenedString = new StringBuilder(); var flattenedString = new StringBuilder();
@ -224,6 +247,10 @@ namespace IO.Swagger.Client
{ {
return content; return content;
} }
else if (type == typeof(byte[])) // return byte array
{
return data;
}
if (type == typeof(Stream)) if (type == typeof(Stream))
{ {
@ -270,11 +297,11 @@ namespace IO.Swagger.Client
} }
/// <summary> /// <summary>
/// Serialize an object into JSON string. /// Serialize an input (model) into JSON string
/// </summary> /// </summary>
/// <param name="obj">Object.</param> /// <param name="obj">Object.</param>
/// <returns>JSON string.</returns> /// <returns>JSON string.</returns>
public string Serialize(object obj) public String Serialize(object obj)
{ {
try try
{ {
@ -286,6 +313,24 @@ namespace IO.Swagger.Client
} }
} }
/// <summary>
/// Select the Content-Type header's value from the given content-type array:
/// if JSON exists in the given array, use it;
/// otherwise use the first one defined in 'consumes'
/// </summary>
/// <param name="contentTypes">The Content-Type array to select from.</param>
/// <returns>The Content-Type header to use.</returns>
public String SelectHeaderContentType(String[] contentTypes)
{
if (contentTypes.Length == 0)
return null;
if (contentTypes.Contains("application/json", StringComparer.OrdinalIgnoreCase))
return "application/json";
return contentTypes[0]; // use the first content type specified in 'consumes'
}
/// <summary> /// <summary>
/// Select the Accept header's value from the given accepts array: /// Select the Accept header's value from the given accepts array:
/// if JSON exists in the given array, use it; /// if JSON exists in the given array, use it;

View File

@ -27,10 +27,10 @@ namespace IO.Swagger.Client
public T Data { get; private set; } public T Data { get; private set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ApiResponse"/> class. /// Initializes a new instance of the <see cref="ApiResponse&lt;T&gt;" /> class.
/// </summary> /// </summary>
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="message">Error message.</param> /// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param> /// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(int statusCode, IDictionary<string, string> headers, T data) public ApiResponse(int statusCode, IDictionary<string, string> headers, T data)
{ {

View File

@ -24,6 +24,7 @@ namespace IO.Swagger.Client
/// <param name="apiKeyPrefix">Dictionary of API key prefix</param> /// <param name="apiKeyPrefix">Dictionary of API key prefix</param>
/// <param name="tempFolderPath">Temp folder path</param> /// <param name="tempFolderPath">Temp folder path</param>
/// <param name="dateTimeFormat">DateTime format string</param> /// <param name="dateTimeFormat">DateTime format string</param>
/// <param name="timeout">HTTP connection timeout (in milliseconds)</param>
public Configuration(ApiClient apiClient = null, public Configuration(ApiClient apiClient = null,
Dictionary<String, String> defaultHeader = null, Dictionary<String, String> defaultHeader = null,
string username = null, string username = null,

View File

@ -78,7 +78,7 @@ namespace IO.Swagger.Model
/// <summary> /// <summary>
/// Returns true if Category instances are equal /// Returns true if Category instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of Category to be compared</param> /// <param name="other">Instance of Category to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals(Category other) public bool Equals(Category other)
{ {

View File

@ -111,7 +111,7 @@ namespace IO.Swagger.Model
/// <summary> /// <summary>
/// Returns true if Order instances are equal /// Returns true if Order instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of Order to be compared</param> /// <param name="other">Instance of Order to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals(Order other) public bool Equals(Order other)
{ {

View File

@ -111,7 +111,7 @@ namespace IO.Swagger.Model
/// <summary> /// <summary>
/// Returns true if Pet instances are equal /// Returns true if Pet instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of Pet to be compared</param> /// <param name="other">Instance of Pet to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals(Pet other) public bool Equals(Pet other)
{ {

View File

@ -78,7 +78,7 @@ namespace IO.Swagger.Model
/// <summary> /// <summary>
/// Returns true if Tag instances are equal /// Returns true if Tag instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of Tag to be compared</param> /// <param name="other">Instance of Tag to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals(Tag other) public bool Equals(Tag other)
{ {

View File

@ -127,7 +127,7 @@ namespace IO.Swagger.Model
/// <summary> /// <summary>
/// Returns true if User instances are equal /// Returns true if User instances are equal
/// </summary> /// </summary>
/// <param name="obj">Instance of User to be compared</param> /// <param name="other">Instance of User to be compared</param>
/// <returns>Boolean</returns> /// <returns>Boolean</returns>
public bool Equals(User other) public bool Equals(User other)
{ {

View File

@ -1,11 +1,22 @@
<Properties StartupItem="SwaggerClientTest.csproj"> <Properties StartupItem="SwaggerClientTest.csproj">
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" /> <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
<MonoDevelop.Ide.Workbench ActiveDocument="Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs"> <MonoDevelop.Ide.Workbench ActiveDocument="TestPet.cs">
<Files> <Files>
<File FileName="TestConfiguration.cs" Line="1" Column="1" /> <File FileName="TestPet.cs" Line="182" Column="4" />
<File FileName="TestPet.cs" Line="1" Column="1" /> <File FileName="TestConfiguration.cs" Line="17" Column="7" />
<File FileName="Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs" Line="15" Column="29" /> <File FileName="TestPet.cs" Line="288" Column="11" />
<File FileName="Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs" Line="1" Column="1" />
<File FileName="Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs" Line="1" Column="1" />
</Files> </Files>
<Pads>
<Pad Id="MonoDevelop.NUnit.TestPad">
<State name="__root__">
<Node name="SwaggerClientTest" expanded="True">
<Node name="SwaggerClientTest" selected="True" />
</Node>
</State>
</Pad>
</Pads>
</MonoDevelop.Ide.Workbench> </MonoDevelop.Ide.Workbench>
<MonoDevelop.Ide.DebuggingService.Breakpoints> <MonoDevelop.Ide.DebuggingService.Breakpoints>
<BreakpointStore /> <BreakpointStore />

Some files were not shown because too many files have changed in this diff Show More