From 59b91c2120477eb288ed6c25234ad00797a408eb Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 11 Jan 2016 21:18:28 +0100 Subject: [PATCH 01/37] [android-volley] improved RequestQueue configuration and decoupled ApiInvoker from Android Context --- .../libraries/volley/apiInvoker.mustache | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index 04e6fdbc05c..d3dd8877aa3 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -1,10 +1,14 @@ package {{invokerPackage}}; -import android.content.Context; - +import com.android.volley.Cache; +import com.android.volley.Network; import com.android.volley.RequestQueue; import com.android.volley.Response; -import com.android.volley.toolbox.Volley; +import com.android.volley.ResponseDelivery; +import com.android.volley.toolbox.BasicNetwork; +import com.android.volley.toolbox.HttpStack; +import com.android.volley.toolbox.HurlStack; +import com.android.volley.toolbox.NoCache; import com.google.gson.JsonParseException; import org.apache.http.Consts; @@ -36,7 +40,6 @@ public class ApiInvoker { private static ApiInvoker INSTANCE; private Map defaultHeaderMap = new HashMap(); - private Context context; private RequestQueue mRequestQueue; private Map authentications; @@ -165,8 +168,16 @@ public class ApiInvoker { return params; } - public static void initializeInstance(Context context) { - INSTANCE = new ApiInvoker(context); + public static void initializeInstance() { + initializeInstance(null, null, 0, null); + } + + public static void initializeInstance(Cache cache) { + initializeInstance(cache, null, 0, null); + } + + public static void initializeInstance(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + INSTANCE = new ApiInvoker(cache, network, threadPoolSize, delivery); setUserAgent("Android-Volley-Swagger"); // Setup authentications (key: authentication name, value: authentication). @@ -182,13 +193,19 @@ public class ApiInvoker { // Prevent the authentications from being modified. INSTANCE.authentications = Collections.unmodifiableMap(INSTANCE.authentications); } - private ApiInvoker(Context context) { - this.context = context; - initConnectionManager(); - } - public ApiInvoker() { - initConnectionManager(); + private ApiInvoker(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + if(cache == null) cache = new NoCache(); + if(network == null) { + HttpStack stack = new HurlStack(); + network = new BasicNetwork(stack); + } + + if(delivery == null) { + initConnectionRequest(cache, network); + } else { + initConnectionRequest(cache, network, threadPoolSize, delivery); + } } public static ApiInvoker getInstance() { @@ -433,7 +450,17 @@ public class ApiInvoker { } } - private void initConnectionManager() { - mRequestQueue = Volley.newRequestQueue(context); + private void initConnectionRequest(Cache cache, Network network) { + mRequestQueue = new RequestQueue(cache, network); + mRequestQueue.start(); + } + + private void initConnectionRequest(Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) { + mRequestQueue = new RequestQueue(cache, network, threadPoolSize, delivery); + mRequestQueue.start(); + } + + public void stopQueue() { + mRequestQueue.stop(); } } From d40bb8ad3266b63966f2b77759eab582019e1dd9 Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 11 Jan 2016 23:18:18 +0100 Subject: [PATCH 02/37] [android-volley] Added synchronous request support --- .../android/libraries/volley/api.mustache | 92 ++++++++++++++++++- .../libraries/volley/apiInvoker.mustache | 36 ++++++-- 2 files changed, 113 insertions(+), 15 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache index 1d70000c1dc..be1074f4037 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache @@ -17,9 +17,12 @@ import com.android.volley.VolleyError; import org.apache.http.HttpEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; -import java.util.Map; +import java.util.ArrayList; import java.util.HashMap; -import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; {{#operations}} public class {{classname}} { @@ -44,11 +47,90 @@ public class {{classname}} { {{#operation}} /** - * {{summary}} - * {{notes}} + * {{summary}} + * {{notes}} {{#allParams}} * @param {{paramName}} {{description}} {{/allParams}} * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} - */ + */ + public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) throws TimeoutException, ExecutionException, InterruptedException, ApiException { + Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) { + VolleyError error = new VolleyError("Missing the required parameter '{{paramName}}' when calling {{nickname}}", + new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}")); + } + {{/required}}{{/allParams}} + + // create path and map variables + String path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}.replaceAll("\\{" + "{{baseName}}" + "\\}", apiInvoker.escapeString({{{paramName}}}.toString())){{/pathParams}}; + + // query params + List queryParams = new ArrayList(); + // header params + Map headerParams = new HashMap(); + // form params + Map formParams = new HashMap(); + + {{#queryParams}} + queryParams.addAll(ApiInvoker.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}})); + {{/queryParams}} + + {{#headerParams}} + headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}})); + {{/headerParams}} + + String[] contentTypes = { + {{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}} + }; + String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json"; + + if (contentType.startsWith("multipart/form-data")) { + // file uploading + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + {{#formParams}}{{#notFile}} + if ({{paramName}} != null) { + builder.addTextBody("{{baseName}}", ApiInvoker.parameterToString({{paramName}}), ApiInvoker.TEXT_PLAIN_UTF8); + } + {{/notFile}}{{#isFile}} + if ({{paramName}} != null) { + builder.addBinaryBody("{{baseName}}", {{paramName}}); + } + {{/isFile}}{{/formParams}} + + HttpEntity httpEntity = builder.build(); + postBody = httpEntity; + } else { + // normal form params + {{#formParams}}{{#notFile}}formParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));{{/notFile}} + {{/formParams}} + } + + String[] authNames = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; + + try { + String response = apiInvoker.invokeAPI (basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, authNames); + if(response != null){ + return {{#returnType}}({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class){{/returnType}}; + } else { + return {{#returnType}}null{{/returnType}}; + } + } catch (ApiException ex) { + throw ex; + } catch (InterruptedException ex) { + throw ex; + } catch (ExecutionException ex) { + throw ex; + } catch (TimeoutException ex) { + throw ex; + } + } + + /** + * {{summary}} + * {{notes}} +{{#allParams}} * @param {{paramName}} {{description}}{{/allParams}} + */ 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}}; diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index d3dd8877aa3..1f3b899d248 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -2,6 +2,7 @@ package {{invokerPackage}}; import com.android.volley.Cache; import com.android.volley.Network; +import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.ResponseDelivery; @@ -9,6 +10,7 @@ import com.android.volley.toolbox.BasicNetwork; import com.android.volley.toolbox.HttpStack; import com.android.volley.toolbox.HurlStack; import com.android.volley.toolbox.NoCache; +import com.android.volley.toolbox.RequestFuture; import com.google.gson.JsonParseException; import org.apache.http.Consts; @@ -26,6 +28,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TimeZone; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.ApiKeyAuth; @@ -334,7 +339,21 @@ public class ApiInvoker { } } + public String invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException, InterruptedException, ExecutionException, TimeoutException { + RequestFuture future = RequestFuture.newFuture(); + Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, future, future); + if(request != null) { + mRequestQueue.add(request); + return future.get(30, TimeUnit.SECONDS); + } else return "no data"; + } + public void invokeAPI(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { + Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, stringRequest, errorListener); + if (request != null) mRequestQueue.add(request); + } + + public Request createRequest(String host, String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames, Response.Listener stringRequest, Response.ErrorListener errorListener) throws ApiException { StringBuilder b = new StringBuilder(); b.append("?"); @@ -391,13 +410,13 @@ public class ApiInvoker { } formParamStr = formParamBuilder.toString(); } + Request request = null; if ("GET".equals(method)) { - GetRequest request = new GetRequest(url, headers, null, stringRequest, errorListener); - mRequestQueue.add(request); + request = new GetRequest(url, headers, null, stringRequest, errorListener); } else if ("POST".equals(method)) { - PostRequest request = null; + request = null; if (formParamStr != null) { request = new PostRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -407,10 +426,9 @@ public class ApiInvoker { request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("PUT".equals(method)) { - PutRequest request = null; + request = null; if (formParamStr != null) { request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -420,10 +438,9 @@ public class ApiInvoker { request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("DELETE".equals(method)) { - DeleteRequest request = null; + request = null; if (formParamStr != null) { request = new DeleteRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -433,10 +450,9 @@ public class ApiInvoker { request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } else if ("PATCH".equals(method)) { - PatchRequest request = null; + request = null; if (formParamStr != null) { request = new PatchRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener); } else if (body != null) { @@ -446,8 +462,8 @@ public class ApiInvoker { request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } } - if(request != null) mRequestQueue.add(request); } + return request; } private void initConnectionRequest(Cache cache, Network network) { From 319c2606783687419180ed3361b0acd78a3e779a Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 15 Jan 2016 19:32:23 +0800 Subject: [PATCH 03/37] Java okhttp-gson: support binary (byte array) for body parameter and response. Also Update Java default, jersey2 and okhttp-gson clients to support (constant) query string in the `path` (to work with the 2 "fake" petstore endpoints on binary). --- .../main/resources/Java/ApiClient.mustache | 59 +++-- .../Java/libraries/jersey2/ApiClient.mustache | 4 +- .../libraries/okhttp-gson/ApiClient.mustache | 74 +++++-- .../java/io/swagger/client/ApiClient.java | 61 ++++-- .../java/io/swagger/client/api/PetApi.java | 89 +++++++- .../io/swagger/client/model/Category.java | 12 +- .../java/io/swagger/client/model/Order.java | 12 +- .../java/io/swagger/client/model/Pet.java | 12 +- .../java/io/swagger/client/model/Tag.java | 12 +- .../java/io/swagger/client/model/User.java | 12 +- .../io/swagger/petstore/test/PetApiTest.java | 54 ++++- .../java/io/swagger/client/ApiClient.java | 6 +- .../java/io/swagger/client/api/PetApi.java | 89 +++++++- .../io/swagger/client/model/Category.java | 12 +- .../java/io/swagger/client/model/Order.java | 12 +- .../java/io/swagger/client/model/Pet.java | 12 +- .../java/io/swagger/client/model/Tag.java | 12 +- .../java/io/swagger/client/model/User.java | 12 +- .../io/swagger/petstore/test/PetApiTest.java | 34 +++ .../java/io/swagger/client/ApiClient.java | 74 +++++-- .../java/io/swagger/client/api/PetApi.java | 206 ++++++++++++++++++ .../io/swagger/petstore/test/PetApiTest.java | 28 +++ 22 files changed, 751 insertions(+), 147 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache index 9f55d5a14d4..0ac7e31d387 100644 --- a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache @@ -452,34 +452,51 @@ public class ApiClient { } } - private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + /** + * Build full URL by concatenating base path, the given sub path and query parameters. + * + * @param path The sub path + * @param queryParams The query parameters + * @return The full URL + */ + private String buildUrl(String path, List queryParams) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); - if (body != null && !formParams.isEmpty()){ + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; + for (Pair param : queryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); + } + } + } + + return url.toString(); + } + + private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + if (body != null && !formParams.isEmpty()) { throw new ApiException(500, "Cannot have body and form params"); } updateParamsForAuth(authNames, queryParams, headerParams); - StringBuilder b = new StringBuilder(); - b.append("?"); - if (queryParams != null){ - for (Pair queryParam : queryParams){ - if (!queryParam.getName().isEmpty()) { - b.append(escapeString(queryParam.getName())); - b.append("="); - b.append(escapeString(queryParam.getValue())); - b.append("&"); - } - } - } - - String querystring = b.substring(0, b.length() - 1); - + final String url = buildUrl(path, queryParams); Builder builder; - if (accept == null) - builder = httpClient.resource(basePath + path + querystring).getRequestBuilder(); - else - builder = httpClient.resource(basePath + path + querystring).accept(accept); + if (accept == null) { + builder = httpClient.resource(url).getRequestBuilder(); + } else { + builder = httpClient.resource(url).accept(accept); + } for (String key : headerParams.keySet()) { builder = builder.header(key, headerParams.get(key)); diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache index 83e92921a82..ec3c7a7f7c5 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache @@ -495,7 +495,9 @@ public class ApiClient { public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { updateParamsForAuth(authNames, queryParams, headerParams); - WebTarget target = httpClient.target(this.basePath).path(path); + // Not using `.target(this.basePath).path(path)` below, + // to support (constant) query string in `path`, e.g. "/posts?draft=1" + WebTarget target = httpClient.target(this.basePath + path); if (queryParams != null) { for (Pair queryParam : queryParams) { diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache index 651a77ca23b..34b0e4b33b2 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/ApiClient.mustache @@ -657,8 +657,8 @@ public class ApiClient { } /** - * Deserialize response body to Java object, according to the Content-Type - * response header. + * Deserialize response body to Java object, according to the return type and + * the Content-Type response header. * * @param response HTTP response * @param returnType The type of the Java object @@ -667,12 +667,21 @@ public class ApiClient { * or the Content-Type of the response is not supported. */ public T deserialize(Response response, Type returnType) throws ApiException { - if (response == null || returnType == null) + if (response == null || returnType == null) { return null; + } - // Handle file downloading. - if (returnType.equals(File.class)) + if ("byte[]".equals(returnType.toString())) { + // Handle binary response (byte array). + try { + return (T) response.body().bytes(); + } catch (IOException e) { + throw new ApiException(e); + } + } else if (returnType.equals(File.class)) { + // Handle file downloading. return (T) downloadFileFromResponse(response); + } String respBody; try { @@ -684,8 +693,9 @@ public class ApiClient { throw new ApiException(e); } - if (respBody == null || "".equals(respBody)) + if (respBody == null || "".equals(respBody)) { return null; + } String contentType = response.headers().get("Content-Type"); if (contentType == null) { @@ -707,20 +717,29 @@ public class ApiClient { } /** - * Serialize the given Java object into request body string, according to the - * request Content-Type. + * Serialize the given Java object into request body according to the object's + * class and the request Content-Type. * * @param obj The Java object * @param contentType The request Content-Type - * @return The serialized string + * @return The serialized request body * @throws ApiException If fail to serialize the given object */ - public String serialize(Object obj, String contentType) throws ApiException { - if (isJsonMime(contentType)) { - if (obj != null) - return json.serialize(obj); - else - return null; + public RequestBody serialize(Object obj, String contentType) throws ApiException { + if (obj instanceof byte[]) { + // Binary (byte array) body parameter support. + return RequestBody.create(MediaType.parse(contentType), (byte[]) obj); + } else if (obj instanceof File) { + // File body parameter support. + return RequestBody.create(MediaType.parse(contentType), (File) obj); + } else if (isJsonMime(contentType)) { + String content; + if (obj != null) { + content = json.serialize(obj); + } else { + content = null; + } + return RequestBody.create(MediaType.parse(contentType), content); } else { throw new ApiException("Content type \"" + contentType + "\" is not supported"); } @@ -909,7 +928,7 @@ public class ApiClient { reqBody = RequestBody.create(MediaType.parse(contentType), ""); } } else { - reqBody = RequestBody.create(MediaType.parse(contentType), serialize(body, contentType)); + reqBody = serialize(body, contentType); } Request request = null; @@ -932,20 +951,27 @@ public class ApiClient { * @return The full URL */ public String buildUrl(String path, List queryParams) { - StringBuilder query = new StringBuilder(); - if (queryParams != null) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); + + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; for (Pair param : queryParams) { if (param.getValue() != null) { - if (query.toString().length() == 0) - query.append("?"); - else - query.append("&"); + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } String value = parameterToString(param.getValue()); - query.append(escapeString(param.getName())).append("=").append(escapeString(value)); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); } } } - return basePath + path + query.toString(); + + return url.toString(); } /** diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java index 581eafa51ca..da80705902c 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java @@ -41,7 +41,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-08T18:50:38.131+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -451,34 +451,51 @@ public class ApiClient { } } - private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + /** + * Build full URL by concatenating base path, the given sub path and query parameters. + * + * @param path The sub path + * @param queryParams The query parameters + * @return The full URL + */ + private String buildUrl(String path, List queryParams) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); - if (body != null && !formParams.isEmpty()){ + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; + for (Pair param : queryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); + } + } + } + + return url.toString(); + } + + private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + if (body != null && !formParams.isEmpty()) { throw new ApiException(500, "Cannot have body and form params"); } updateParamsForAuth(authNames, queryParams, headerParams); - StringBuilder b = new StringBuilder(); - b.append("?"); - if (queryParams != null){ - for (Pair queryParam : queryParams){ - if (!queryParam.getName().isEmpty()) { - b.append(escapeString(queryParam.getName())); - b.append("="); - b.append(escapeString(queryParam.getValue())); - b.append("&"); - } - } - } - - String querystring = b.substring(0, b.length() - 1); - + final String url = buildUrl(path, queryParams); Builder builder; - if (accept == null) - builder = httpClient.resource(basePath + path + querystring).getRequestBuilder(); - else - builder = httpClient.resource(basePath + path + querystring).accept(accept); + if (accept == null) { + builder = httpClient.resource(url).getRequestBuilder(); + } else { + builder = httpClient.resource(url).accept(accept); + } for (String key : headerParams.keySet()) { builder = builder.header(key, headerParams.get(key)); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index 1ae3b1dc44d..bbbc5503c92 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class PetApi { private ApiClient apiClient; @@ -395,6 +395,93 @@ public class PetApi { String[] authNames = new String[] { "petstore_auth" }; + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); + + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"); + } + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "api_key" }; + + + GenericType returnType = new GenericType() {}; + return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return void + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + Object postBody = body; + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "petstore_auth" }; + + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index 1faa3f27589..4dcaa928c9a 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Category { private Long id = null; @@ -45,7 +45,7 @@ public class Category { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Category { return false; } Category category = (Category) o; - return Objects.equals(id, category.id) && - Objects.equals(name, category.name); + + return true && Objects.equals(id, category.id) && + Objects.equals(name, category.name) + ; } @Override @@ -77,7 +79,7 @@ public class Category { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index ec66ccbd777..67543c5a227 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Order { private Long id = null; @@ -123,7 +123,7 @@ public class Order { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -131,12 +131,14 @@ public class Order { return false; } Order order = (Order) o; - return Objects.equals(id, order.id) && + + return true && Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && Objects.equals(quantity, order.quantity) && Objects.equals(shipDate, order.shipDate) && Objects.equals(status, order.status) && - Objects.equals(complete, order.complete); + Objects.equals(complete, order.complete) + ; } @Override @@ -163,7 +165,7 @@ public class Order { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index 2d773d9f5bd..12d3e5a441f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Pet { private Long id = null; @@ -125,7 +125,7 @@ public class Pet { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -133,12 +133,14 @@ public class Pet { return false; } Pet pet = (Pet) o; - return Objects.equals(id, pet.id) && + + return true && Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && Objects.equals(name, pet.name) && Objects.equals(photoUrls, pet.photoUrls) && Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status); + Objects.equals(status, pet.status) + ; } @Override @@ -165,7 +167,7 @@ public class Pet { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index c1156c9f4c0..7f65d9c963a 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class Tag { private Long id = null; @@ -45,7 +45,7 @@ public class Tag { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Tag { return false; } Tag tag = (Tag) o; - return Objects.equals(id, tag.id) && - Objects.equals(name, tag.name); + + return true && Objects.equals(id, tag.id) && + Objects.equals(name, tag.name) + ; } @Override @@ -77,7 +79,7 @@ public class Tag { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index 7c07662debe..df6bc1e543f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") public class User { private Long id = null; @@ -130,7 +130,7 @@ public class User { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -138,14 +138,16 @@ public class User { return false; } User user = (User) o; - return Objects.equals(id, user.id) && + + return true && Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(firstName, user.firstName) && Objects.equals(lastName, user.lastName) && Objects.equals(email, user.email) && Objects.equals(password, user.password) && Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus); + Objects.equals(userStatus, user.userStatus) + ; } @Override @@ -174,7 +176,7 @@ public class User { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java index c0bee9328d5..00ec57ab774 100644 --- a/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/default/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,9 @@ package io.swagger.petstore.test; +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.datatype.joda.*; + import io.swagger.client.ApiClient; import io.swagger.client.ApiException; import io.swagger.client.Configuration; @@ -19,7 +23,8 @@ import org.junit.*; import static org.junit.Assert.*; public class PetApiTest { - PetApi api = null; + private PetApi api; + private ObjectMapper mapper; @Before public void setup() { @@ -68,6 +73,20 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + byte[] bytes = serializeJson(pet).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + Pet fetched = deserializeJson(new String(fetchedBytes), Pet.class); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testUpdatePet() throws Exception { Pet pet = createRandomPet(); @@ -216,4 +235,37 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o) { + if (mapper == null) { + mapper = createObjectMapper(); + } + try { + return mapper.writeValueAsString(o); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private T deserializeJson(String json, Class klass) { + if (mapper == null) { + mapper = createObjectMapper(); + } + try { + return mapper.readValue(json, klass); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private ObjectMapper createObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); + mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); + mapper.registerModule(new JodaModule()); + return mapper; + } } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java index 7f06e36633f..c5b3f24e0a1 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java @@ -43,7 +43,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-08T18:51:26.068+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -494,7 +494,9 @@ public class ApiClient { public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { updateParamsForAuth(authNames, queryParams, headerParams); - WebTarget target = httpClient.target(this.basePath).path(path); + // Not using `.target(this.basePath).path(path)` below, + // to support (constant) query string in `path`, e.g. "/posts?draft=1" + WebTarget target = httpClient.target(this.basePath + path); if (queryParams != null) { for (Pair queryParam : queryParams) { diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index 09b7bdba247..9155782024a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class PetApi { private ApiClient apiClient; @@ -395,6 +395,93 @@ public class PetApi { String[] authNames = new String[] { "petstore_auth" }; + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); + + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"); + } + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "api_key" }; + + + GenericType returnType = new GenericType() {}; + return apiClient.invokeAPI(path, "GET", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return void + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + Object postBody = body; + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + // query params + List queryParams = new ArrayList(); + Map headerParams = new HashMap(); + Map formParams = new HashMap(); + + + + + + + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + + String[] authNames = new String[] { "petstore_auth" }; + + apiClient.invokeAPI(path, "POST", queryParams, postBody, headerParams, formParams, accept, contentType, authNames, null); } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index 4a66bec68d3..2235895ee8a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Category { private Long id = null; @@ -45,7 +45,7 @@ public class Category { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Category { return false; } Category category = (Category) o; - return Objects.equals(id, category.id) && - Objects.equals(name, category.name); + + return true && Objects.equals(id, category.id) && + Objects.equals(name, category.name) + ; } @Override @@ -77,7 +79,7 @@ public class Category { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 29d0a70616d..0d9b89eb58f 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Order { private Long id = null; @@ -123,7 +123,7 @@ public class Order { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -131,12 +131,14 @@ public class Order { return false; } Order order = (Order) o; - return Objects.equals(id, order.id) && + + return true && Objects.equals(id, order.id) && Objects.equals(petId, order.petId) && Objects.equals(quantity, order.quantity) && Objects.equals(shipDate, order.shipDate) && Objects.equals(status, order.status) && - Objects.equals(complete, order.complete); + Objects.equals(complete, order.complete) + ; } @Override @@ -163,7 +165,7 @@ public class Order { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index 8ded8bc4cb2..9e5a2d97fb2 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Pet { private Long id = null; @@ -125,7 +125,7 @@ public class Pet { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -133,12 +133,14 @@ public class Pet { return false; } Pet pet = (Pet) o; - return Objects.equals(id, pet.id) && + + return true && Objects.equals(id, pet.id) && Objects.equals(category, pet.category) && Objects.equals(name, pet.name) && Objects.equals(photoUrls, pet.photoUrls) && Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status); + Objects.equals(status, pet.status) + ; } @Override @@ -165,7 +167,7 @@ public class Pet { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index cbdca57888f..4b2cc23bc23 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class Tag { private Long id = null; @@ -45,7 +45,7 @@ public class Tag { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,8 +53,10 @@ public class Tag { return false; } Tag tag = (Tag) o; - return Objects.equals(id, tag.id) && - Objects.equals(name, tag.name); + + return true && Objects.equals(id, tag.id) && + Objects.equals(name, tag.name) + ; } @Override @@ -77,7 +79,7 @@ public class Tag { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index ae1dff618fc..4f859759ce8 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") public class User { private Long id = null; @@ -130,7 +130,7 @@ public class User { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -138,14 +138,16 @@ public class User { return false; } User user = (User) o; - return Objects.equals(id, user.id) && + + return true && Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(firstName, user.firstName) && Objects.equals(lastName, user.lastName) && Objects.equals(email, user.email) && Objects.equals(password, user.password) && Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus); + Objects.equals(userStatus, user.userStatus) + ; } @Override @@ -174,7 +176,7 @@ public class User { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java index c0bee9328d5..91fb92fbf01 100644 --- a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,7 @@ package io.swagger.petstore.test; +import com.fasterxml.jackson.databind.ObjectMapper; + import io.swagger.client.ApiClient; import io.swagger.client.ApiException; import io.swagger.client.Configuration; @@ -68,6 +70,20 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + byte[] bytes = serializeJson(pet, api.getApiClient()).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + Pet fetched = deserializeJson(new String(fetchedBytes), Pet.class, api.getApiClient()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testUpdatePet() throws Exception { Pet pet = createRandomPet(); @@ -216,4 +232,22 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o, ApiClient apiClient) { + ObjectMapper mapper = apiClient.getJSON().getContext(null); + try { + return mapper.writeValueAsString(o); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private T deserializeJson(String json, Class klass, ApiClient apiClient) { + ObjectMapper mapper = apiClient.getJSON().getContext(null); + try { + return mapper.readValue(json, klass); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java index e8933b9373a..810922b90a2 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java @@ -656,8 +656,8 @@ public class ApiClient { } /** - * Deserialize response body to Java object, according to the Content-Type - * response header. + * Deserialize response body to Java object, according to the return type and + * the Content-Type response header. * * @param response HTTP response * @param returnType The type of the Java object @@ -666,12 +666,21 @@ public class ApiClient { * or the Content-Type of the response is not supported. */ public T deserialize(Response response, Type returnType) throws ApiException { - if (response == null || returnType == null) + if (response == null || returnType == null) { return null; + } - // Handle file downloading. - if (returnType.equals(File.class)) + if ("byte[]".equals(returnType.toString())) { + // Handle binary response (byte array). + try { + return (T) response.body().bytes(); + } catch (IOException e) { + throw new ApiException(e); + } + } else if (returnType.equals(File.class)) { + // Handle file downloading. return (T) downloadFileFromResponse(response); + } String respBody; try { @@ -683,8 +692,9 @@ public class ApiClient { throw new ApiException(e); } - if (respBody == null || "".equals(respBody)) + if (respBody == null || "".equals(respBody)) { return null; + } String contentType = response.headers().get("Content-Type"); if (contentType == null) { @@ -706,20 +716,29 @@ public class ApiClient { } /** - * Serialize the given Java object into request body string, according to the - * request Content-Type. + * Serialize the given Java object into request body according to the object's + * class and the request Content-Type. * * @param obj The Java object * @param contentType The request Content-Type - * @return The serialized string + * @return The serialized request body * @throws ApiException If fail to serialize the given object */ - public String serialize(Object obj, String contentType) throws ApiException { - if (isJsonMime(contentType)) { - if (obj != null) - return json.serialize(obj); - else - return null; + public RequestBody serialize(Object obj, String contentType) throws ApiException { + if (obj instanceof byte[]) { + // Binary (byte array) body parameter support. + return RequestBody.create(MediaType.parse(contentType), (byte[]) obj); + } else if (obj instanceof File) { + // File body parameter support. + return RequestBody.create(MediaType.parse(contentType), (File) obj); + } else if (isJsonMime(contentType)) { + String content; + if (obj != null) { + content = json.serialize(obj); + } else { + content = null; + } + return RequestBody.create(MediaType.parse(contentType), content); } else { throw new ApiException("Content type \"" + contentType + "\" is not supported"); } @@ -908,7 +927,7 @@ public class ApiClient { reqBody = RequestBody.create(MediaType.parse(contentType), ""); } } else { - reqBody = RequestBody.create(MediaType.parse(contentType), serialize(body, contentType)); + reqBody = serialize(body, contentType); } Request request = null; @@ -931,20 +950,27 @@ public class ApiClient { * @return The full URL */ public String buildUrl(String path, List queryParams) { - StringBuilder query = new StringBuilder(); - if (queryParams != null) { + final StringBuilder url = new StringBuilder(); + url.append(basePath).append(path); + + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; for (Pair param : queryParams) { if (param.getValue() != null) { - if (query.toString().length() == 0) - query.append("?"); - else - query.append("&"); + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } String value = parameterToString(param.getValue()); - query.append(escapeString(param.getName())).append("=").append(escapeString(value)); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); } } } - return basePath + path + query.toString(); + + return url.toString(); } /** diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java index 460cd0f4c4d..497e3ade6a8 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java @@ -892,4 +892,210 @@ public class PetApi { return call; } + /* Build call for getPetByIdWithByteArray */ + private Call getPetByIdWithByteArrayCall(Long petId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException { + Object postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw new ApiException("Missing the required parameter 'petId' when calling getPetByIdWithByteArray(Async)"); + } + + + // create path and map variables + String path = "/pet/{petId}?testing_byte_array=true".replaceAll("\\{format\\}","json") + .replaceAll("\\{" + "petId" + "\\}", apiClient.escapeString(petId.toString())); + + List queryParams = new ArrayList(); + + Map headerParams = new HashMap(); + + Map formParams = new HashMap(); + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + if (accept != null) headerParams.put("Accept", accept); + + final String[] contentTypes = { + + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + headerParams.put("Content-Type", contentType); + + if(progressListener != null) { + apiClient.getHttpClient().networkInterceptors().add(new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), progressListener)) + .build(); + } + }); + } + + String[] authNames = new String[] { "api_key" }; + return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public byte[] getPetByIdWithByteArray(Long petId) throws ApiException { + ApiResponse resp = getPetByIdWithByteArrayWithHttpInfo(petId); + return resp.getData(); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return ApiResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public ApiResponse getPetByIdWithByteArrayWithHttpInfo(Long petId) throws ApiException { + Call call = getPetByIdWithByteArrayCall(petId, null, null); + Type returnType = new TypeToken(){}.getType(); + return apiClient.execute(call, returnType); + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' (asynchronously) + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @param callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + */ + public Call getPetByIdWithByteArrayAsync(Long petId, final ApiCallback callback) throws ApiException { + + ProgressResponseBody.ProgressListener progressListener = null; + ProgressRequestBody.ProgressRequestListener progressRequestListener = null; + + if (callback != null) { + progressListener = new ProgressResponseBody.ProgressListener() { + @Override + public void update(long bytesRead, long contentLength, boolean done) { + callback.onDownloadProgress(bytesRead, contentLength, done); + } + }; + + progressRequestListener = new ProgressRequestBody.ProgressRequestListener() { + @Override + public void onRequestProgress(long bytesWritten, long contentLength, boolean done) { + callback.onUploadProgress(bytesWritten, contentLength, done); + } + }; + } + + Call call = getPetByIdWithByteArrayCall(petId, progressListener, progressRequestListener); + Type returnType = new TypeToken(){}.getType(); + apiClient.executeAsync(call, returnType, callback); + return call; + } + + /* Build call for addPetUsingByteArray */ + private Call addPetUsingByteArrayCall(byte[] body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException { + Object postBody = body; + + + // create path and map variables + String path = "/pet?testing_byte_array=true".replaceAll("\\{format\\}","json"); + + List queryParams = new ArrayList(); + + Map headerParams = new HashMap(); + + Map formParams = new HashMap(); + + final String[] accepts = { + "application/json", "application/xml" + }; + final String accept = apiClient.selectHeaderAccept(accepts); + if (accept != null) headerParams.put("Accept", accept); + + final String[] contentTypes = { + "application/json", "application/xml" + }; + final String contentType = apiClient.selectHeaderContentType(contentTypes); + headerParams.put("Content-Type", contentType); + + if(progressListener != null) { + apiClient.getHttpClient().networkInterceptors().add(new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), progressListener)) + .build(); + } + }); + } + + String[] authNames = new String[] { "petstore_auth" }; + return apiClient.buildCall(path, "POST", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public void addPetUsingByteArray(byte[] body) throws ApiException { + addPetUsingByteArrayWithHttpInfo(body); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return ApiResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + */ + public ApiResponse addPetUsingByteArrayWithHttpInfo(byte[] body) throws ApiException { + Call call = addPetUsingByteArrayCall(body, null, null); + return apiClient.execute(call); + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store (asynchronously) + * + * @param body Pet object in the form of byte array + * @param callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + */ + public Call addPetUsingByteArrayAsync(byte[] body, final ApiCallback callback) throws ApiException { + + ProgressResponseBody.ProgressListener progressListener = null; + ProgressRequestBody.ProgressRequestListener progressRequestListener = null; + + if (callback != null) { + progressListener = new ProgressResponseBody.ProgressListener() { + @Override + public void update(long bytesRead, long contentLength, boolean done) { + callback.onDownloadProgress(bytesRead, contentLength, done); + } + }; + + progressRequestListener = new ProgressRequestBody.ProgressRequestListener() { + @Override + public void onRequestProgress(long bytesWritten, long contentLength, boolean done) { + callback.onUploadProgress(bytesWritten, contentLength, done); + } + }; + } + + Call call = addPetUsingByteArrayCall(body, progressListener, progressRequestListener); + apiClient.executeAsync(call, callback); + return call; + } + } diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java index 56cc8073984..6c79f2b61fb 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,5 +1,7 @@ package io.swagger.petstore.test; +import com.google.gson.reflect.TypeToken; + import io.swagger.client.*; import io.swagger.client.api.*; import io.swagger.client.auth.*; @@ -8,6 +10,7 @@ import io.swagger.client.model.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -67,6 +70,23 @@ public class PetApiTest { assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); } + @Test + public void testCreateAndGetPetWithByteArray() throws Exception { + Pet pet = createRandomPet(); + System.out.println(serializeJson(pet, api.getApiClient())); + byte[] bytes = serializeJson(pet, api.getApiClient()).getBytes(); + api.addPetUsingByteArray(bytes); + + byte[] fetchedBytes = api.getPetByIdWithByteArray(pet.getId()); + System.out.println(new String(fetchedBytes)); + Type type = new TypeToken(){}.getType(); + Pet fetched = deserializeJson(new String(fetchedBytes), type, api.getApiClient()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + @Test public void testCreateAndGetPetWithHttpInfo() throws Exception { Pet pet = createRandomPet(); @@ -325,4 +345,12 @@ public class PetApiTest { return pet; } + + private String serializeJson(Object o, ApiClient apiClient) { + return apiClient.getJSON().serialize(o); + } + + private T deserializeJson(String json, Type type, ApiClient apiClient) { + return (T) apiClient.getJSON().deserialize(json, type); + } } From e3d8eb0e0a4cb033ad42de023a6e0f5e9205ec21 Mon Sep 17 00:00:00 2001 From: Ole Lensmar Date: Fri, 15 Jan 2016 14:02:35 -0500 Subject: [PATCH 04/37] fixed cmdline class in custom template examples --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f44085cfe03..9bd5fdb01fe 100644 --- a/README.md +++ b/README.md @@ -237,16 +237,15 @@ This will write, in the folder `output/myLibrary`, all the files you need to get You would then compile your library in the `output/myLibrary` folder with `mvn package` and execute the codegen like such: - ``` -java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.Codegen +java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen ``` Note the `myClientCodegen` is an option now, and you can use the usual arguments for generating your library: ``` java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \ - io.swagger.codegen.Codegen generate -l myClientCodegen\ + io.swagger.codegen.SwaggerCodegen generate -l myClientCodegen\ -i http://petstore.swagger.io/v2/swagger.json \ -o myClient ``` From 1bae5c44b2d406cf229e06f76d0eb6e1bcfedc6b Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 17 Jan 2016 16:04:13 +0800 Subject: [PATCH 05/37] fix null apiclient in .net (windows) --- .gitignore | 3 ++ .../resources/csharp/Configuration.mustache | 4 +-- .../csharp/IO/Swagger/Client/Configuration.cs | 4 +-- .../bin/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 35062 -> 34926 bytes ...ClientTest.csproj.FilesWrittenAbsolute.txt | 27 ++++++------------ .../obj/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index d84a08f7b94..e337758c906 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ samples/client/petstore/python/.venv/ *.pm~ *.xml~ *.t~ + +samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/ +samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/ diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index 029b38324c0..a7e5df5179c 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -38,8 +38,8 @@ namespace {{packageName}}.Client ) { if (apiClient == null) - ApiClient = ApiClient.Default; - else + ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; + else ApiClient = apiClient; Username = username; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index 3df5d02c116..d321ad5ef82 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -38,8 +38,8 @@ namespace IO.Swagger.Client ) { if (apiClient == null) - ApiClient = ApiClient.Default; - else + ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; + else ApiClient = apiClient; Username = username; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index f70fa971c5b10d8a8f33600bed509a4cc7e77a6d..10b5d98d5fad634730375b3da0c5a3c58207f3ab 100755 GIT binary patch delta 2138 zcmYk;e@vBC7zgn4<(Kb@L|j)8e`R~Q$$OzO=O2j4*47jmf8Z)hP)GzrpnGqM{4nI@ zCSDB5flykp)*t*)tr>+1GnzP&6}HAwh=?gEzfwqXsAM%d=Q&TayWQ=6_@48g=Q-!y z8I?oxDu?FPeF}H|XRqL?2Eay9gAew~w4eZ?KFRVMAc94z1@Xf#LV*4%M0@MXfET|) zPs7?%8yA~uP({2DL5YvapL_2K5t0xrf3==(ovN^te^QhDkyAl0n6IKm%SeeRb8JN) zYfHrGMO!h$ijDbaX*$9#(>x<7CdEw0Vl81T4_lUjSkBU73dDA7U~P}_NTspzWtNG2 zn^_{mOcb%IWSE7ctVWq-;e?iGj&VC)!yV4r<;Wcfy`qb`BuDN*CF`opvhfjXT4vek zBE2tytoIx{;q9~4#QMnbRYB%XoaiHog;u&$2TAQrw#dPET87igHFI#C6=&^}nq*xI zEfBc~>DR@qu{=@>NZlelxIpYeozBF1OX-V#q1Nvf7b2%3cA=NTF$ZR*#Sh?0&Gavak*h1G9elzNG! zj%g3vB-?MObJ~Ma4sTeOqW9t$Yufr%s);pcjYJpW49jrcm+EAxo!N&$mfD$p7$NEI zi!pJHnxO8B5j3pSZPVEoV--<#FPtUl{Eb37`%*MqSJK^=qDhOoFU1*_>b?}6EY)Ed z23e}XGK`RPG5e8ogPtjD^(O8|B~ibK`_W8N#mslU1@FkCV#;xuq>CxXkQNnFj{7WC zOgY3TEn%oz-~ggn>J~TvlND~e3Pc5xm@8Z!sbp51%xq+{5@lwikhM`}mGHAR%d8T0 zEOoW`@HtD}EIyoKWypDN<40Dm%l1ePFg>ob=0V(LRk(Vj{wC>dt3vX)-Zr&sRmdUf zU8}-jlG?SU&O;dZ{n4)Z@!%%Sqr1e9&|6AA@vh5bJN@WoW;@J9ei)N9R2+9@i)zHP znn>GN%_Q%X9@$R1@`u&{Y38=pIO(}NT7j|ZnYFB?Qg$^ynbzTI3TIi*>!Ejb_A;q% zMk`B?WR;Ls-=mB=tVW`ic!#o7)-h5C>!gwm^S*v)7lnseqogj@!Z=m;f(LqJ5@{RD zLs~xj|K*)pynF(yibl4uj+5+JW-~GDPrbxBQUYs$RK=Pg84vYHJgZ9UU_DNX`|H1A zVgss?s%6{@E_2ji7s+RYM4et#1Fyy5x{w=DM^M9|BPw~x5j1i(ZG0G5i<51e60zdo zg7qz%#Ja+psUM%~-E!Xd%&oT4Z_&8wiDdqtK&_m4eAyV5Agyif7%rl1{sbNd26)%B Mg-_x(>f`7A3q!>$od5s; delta 2120 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%0AORGE4t&wZoe9zoYdv3$s~k#OPB!C^RwD9v&P0 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 literal 35062 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 Mg-_x(>f`7A3q!>$od5s; delta 2120 zcmYk-e@vBC7zgn4<>$L<1k{xqlFser4&E!RIo8O`(dHJ}a%#&I`Q;T1g}6kDKv!OF zUN5AyNtmQ_tvUXn#mokVBbt?ZSL&LjA{8MDA|-?{G!mPg^PH#E-PrDj@A>gO=Y4l> zU4L|4fAroqk&*b6cv!i4%{$-giWDKadGb3X|I`mYeJ9Sg!<{tTZt zztrjJxY=>J)=vLXMM39y#4>X&4rv+76RI8S@HJ~q!m&B)Fvwb%`gc+`W?4&9mz&v$ zyg;i6W8TA$uZL61SeaTPaUte zL=y2zY!s4f zvzF2ay+Z9D5+|MG37gPE;RsGTcbTuD;j$VU5@(#%j$+&->0*j8twqHYBc_iQHB>Rh zaI#j(LN{X(YrV`iV+pIs>NdAvjg;I!XjE8dBnvpStqW!eYFLfdb*TXBfULU|AF^6y zhoxv^eQHgZuj3n5k9A+_97%UyhGF?8%KfPOGKilgZ0^1crlL^Y8_8ar>sQjNf%M%|YqiS?cJMe-YXiq&hKmda$Q$5erAk{vYEbE-fgheOucBhLgAAFw1b?k!okDli7w4OP$O%oG0n-D{=7(6-wP#;ua}n)3dL{qk}3` z-3!-tv|m-y-B-cBrlh;CLW34{UxmXg_3W$A&Qcv#Bg9e-R^vQL7gK|kL$s!_)tgv@ zQlfqlYp|E3iivT(g`8nER2SpJ36d_xhi|p07$2^&R53n`vD7WF15wv$LqpvHI}po? zv)v`478Y~9+bfmMN|Tw56|BWFv$2--yv*uQ!CED=I`~-XYVl(~OWiDfe8gHW=e>jo+1mR9&ewPqD7Ny@HA(cP7j^Z*()U9v{t?z$=XhucbhWmupTZg z@eXAftoKN5tRqS`V(;ihPf@s)b)9sS6`!W+zQXY41PWe0wEI{4y&_#;=R zmaTrItMN Date: Sun, 17 Jan 2016 19:14:11 +0800 Subject: [PATCH 06/37] add binary mapping for code generator --- .../codegen/languages/AbstractTypeScriptClientCodegen.java | 4 +++- .../java/io/swagger/codegen/languages/DartClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/FlashClientCodegen.java | 3 +++ .../java/io/swagger/codegen/languages/PerlClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/PythonClientCodegen.java | 3 +++ .../java/io/swagger/codegen/languages/Qt5CPPGenerator.java | 3 +++ .../io/swagger/codegen/languages/ScalaClientCodegen.java | 3 +++ .../io/swagger/codegen/languages/ScalatraServerCodegen.java | 5 ++++- .../io/swagger/codegen/languages/SilexServerCodegen.java | 3 +++ .../io/swagger/codegen/languages/SinatraServerCodegen.java | 3 +++ .../codegen/languages/SlimFrameworkServerCodegen.java | 3 +++ .../main/java/io/swagger/codegen/languages/SwiftCodegen.java | 3 +++ .../io/swagger/codegen/languages/TizenClientCodegen.java | 3 +++ 13 files changed, 40 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index cdfc01d2f82..ebc8a0617f0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -52,7 +52,9 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp typeMapping.put("integer", "number"); typeMapping.put("Map", "any"); typeMapping.put("DateTime", "Date"); - + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); } @Override diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java index 7d11f2a8183..e936a37f3c0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/DartClientCodegen.java @@ -76,6 +76,9 @@ public class DartClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("Date", "DateTime"); typeMapping.put("date", "DateTime"); typeMapping.put("File", "MultipartFile"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); cliOptions.add(new CliOption(BROWSER_CLIENT, "Is the client browser based")); cliOptions.add(new CliOption(PUB_NAME, "Name in generated pubspec")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index dac3d23b22a..435e235c681 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -63,6 +63,9 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("DateTime", "Date"); typeMapping.put("object", "Object"); typeMapping.put("file", "File"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); importMapping.put("File", "flash.filesystem.File"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 90fea3f4a9b..9f287ea0891 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -72,6 +72,9 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("array", "ARRAY"); typeMapping.put("map", "HASH"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); cliOptions.clear(); cliOptions.add(new CliOption(MODULE_NAME, "Perl module name (convention: CamelCase or Long::Module).").defaultValue("SwaggerClient")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java index 02ce858d0cd..6bcb9c5d550 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PythonClientCodegen.java @@ -51,6 +51,9 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("DateTime", "datetime"); typeMapping.put("object", "object"); typeMapping.put("file", "file"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "str"); // from https://docs.python.org/release/2.5.4/ref/keywords.html reservedWords = new HashSet( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java index 18ba3718068..94cac627e9f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java @@ -121,6 +121,9 @@ public class Qt5CPPGenerator extends DefaultCodegen implements CodegenConfig { typeMapping.put("map", "QMap"); typeMapping.put("file", "SWGHttpRequestInputFileElement"); typeMapping.put("object", PREFIX + "Object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "QString"); importMapping = new HashMap(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java index 088d7fdaad8..e8f462a41fd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalaClientCodegen.java @@ -96,6 +96,9 @@ public class ScalaClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("double", "Double"); typeMapping.put("object", "Any"); typeMapping.put("file", "File"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); languageSpecificPrimitives = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java index 5d6da580130..5a4d5c43ef8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ScalatraServerCodegen.java @@ -67,6 +67,9 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf typeMapping.put("integer", "Int"); typeMapping.put("long", "Long"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); additionalProperties.put("appName", "Swagger Sample"); additionalProperties.put("appName", "Swagger Sample"); @@ -193,4 +196,4 @@ public class ScalatraServerCodegen extends DefaultCodegen implements CodegenConf } return toModelName(type); } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java index 4effb480048..40dedb0aeae 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SilexServerCodegen.java @@ -81,6 +81,9 @@ public class SilexServerCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("array", "array"); typeMapping.put("list", "array"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md")); supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java index e478c00341e..d512f7deb9e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SinatraServerCodegen.java @@ -60,6 +60,9 @@ public class SinatraServerCodegen extends DefaultCodegen implements CodegenConfi typeMapping.put("String", "string"); typeMapping.put("List", "array"); typeMapping.put("map", "map"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); // remove modelPackage and apiPackage added by default cliOptions.clear(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java index ae28493fe7c..3810c6895ec 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SlimFrameworkServerCodegen.java @@ -83,6 +83,9 @@ public class SlimFrameworkServerCodegen extends DefaultCodegen implements Codege typeMapping.put("array", "array"); typeMapping.put("list", "array"); typeMapping.put("object", "object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "string"); supportingFiles.add(new SupportingFile("README.mustache", packagePath.replace('/', File.separatorChar), "README.md")); supportingFiles.add(new SupportingFile("composer.json", packagePath.replace('/', File.separatorChar), "composer.json")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index ddd72e4230b..1beb9a3b236 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -120,6 +120,9 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("double", "Double"); typeMapping.put("object", "String"); typeMapping.put("file", "NSURL"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java index 83241ddc5e7..d7b7d13f637 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TizenClientCodegen.java @@ -76,6 +76,9 @@ public class TizenClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("map", "HashMap"); typeMapping.put("number", "Long"); typeMapping.put("object", PREFIX + "Object"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "String"); importMapping = new HashMap(); From bfc83b330fdaf8f8ce9846175a990d0f53b079d5 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 17 Jan 2016 19:32:50 +0800 Subject: [PATCH 07/37] fix indent, update perl & python sample --- .gitignore | 1 + .../AbstractTypeScriptClientCodegen.java | 2 +- samples/client/petstore/perl/README.md | 2 +- .../perl/lib/WWW/SwaggerClient/Role.pm | 4 +- samples/client/petstore/perl/t/04_role.t | 2 +- samples/client/petstore/python/.coverage | 2 +- .../petstore/python/dev-requirements.txt.log | 15 ++ .../python/swagger_client/apis/pet_api.py | 155 ++++++++++++++++++ 8 files changed, 177 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index d84a08f7b94..f80da2af555 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ samples/client/petstore/perl/deep_module_test/ samples/client/petstore/python/.projectile samples/client/petstore/python/.venv/ +samples/client/petstore/python/dev-requirements.txt.log .settings diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java index ebc8a0617f0..4a9c0557305 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -52,7 +52,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp typeMapping.put("integer", "number"); typeMapping.put("Map", "any"); typeMapping.put("DateTime", "Date"); - //TODO binary should be mapped to byte array + //TODO binary should be mapped to byte array // mapped to String as a workaround typeMapping.put("binary", "string"); } diff --git a/samples/client/petstore/perl/README.md b/samples/client/petstore/perl/README.md index f42bbf6eb17..e2685dd2468 100644 --- a/samples/client/petstore/perl/README.md +++ b/samples/client/petstore/perl/README.md @@ -8,7 +8,7 @@ WWW::SwaggerClient::Role - a Moose role for the Swagger Petstore Automatically generated by the Perl Swagger Codegen project: -- Build date: 2016-01-15T15:57:32.150+08:00 +- Build date: 2016-01-17T19:21:19.346+08:00 - Build package: class io.swagger.codegen.languages.PerlClientCodegen - Codegen version: diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm index 07b499ad75e..cc1e39c6657 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm @@ -37,7 +37,7 @@ has version_info => ( is => 'ro', default => sub { { app_name => 'Swagger Petstore', app_version => '1.0.0', - generated_date => '2016-01-15T15:57:32.150+08:00', + generated_date => '2016-01-17T19:21:19.346+08:00', generator_class => 'class io.swagger.codegen.languages.PerlClientCodegen', } }, documentation => 'Information about the application version and the codegen codebase version' @@ -103,7 +103,7 @@ Automatically generated by the Perl Swagger Codegen project: =over 4 -=item Build date: 2016-01-15T15:57:32.150+08:00 +=item Build date: 2016-01-17T19:21:19.346+08:00 =item Build package: class io.swagger.codegen.languages.PerlClientCodegen diff --git a/samples/client/petstore/perl/t/04_role.t b/samples/client/petstore/perl/t/04_role.t index 73328fa6e62..a5f47ec53c5 100644 --- a/samples/client/petstore/perl/t/04_role.t +++ b/samples/client/petstore/perl/t/04_role.t @@ -50,7 +50,7 @@ is $get_pet->tags->[0]->id, '11', 'stored and retrieved: got the proper tag id'; # API method docs is_deeply( [sort keys %{$api->pet_api->method_documentation}], - [ 'add_pet', 'delete_pet', 'find_pets_by_status', 'find_pets_by_tags', 'get_pet_by_id', 'update_pet', 'update_pet_with_form', 'upload_file'], + [ 'add_pet', 'add_pet_using_byte_array', 'delete_pet', 'find_pets_by_status', 'find_pets_by_tags', 'get_pet_by_id', 'get_pet_by_id_with_byte_array', 'update_pet', 'update_pet_with_form', 'upload_file'], "Pet API method_documentation has the correct keys"); is $api->pet_api->method_documentation->{get_pet_by_id}->{params}->{pet_id}->{description}, 'ID of pet that needs to be fetched', 'get_pet_by_id parameter pet_id description is correct'; diff --git a/samples/client/petstore/python/.coverage b/samples/client/petstore/python/.coverage index 9921d07556e..4cd98e43d2c 100644 --- a/samples/client/petstore/python/.coverage +++ b/samples/client/petstore/python/.coverage @@ -1 +1 @@ -!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [278, 70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 284, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [128, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 172, 141, 173, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 234, 108, 240, 119], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 516, 598, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 265, 568, 569, 345, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 86, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 115, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 669, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 676, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 235, 236, 110, 238, 240, 552, 242, 244, 246, 247, 249, 383, 252, 253, 254, 258, 259, 262, 264, 44, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 475, 112, 298, 300, 301, 302, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 505, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 241, 346, 347, 348, 349, 350, 485, 352, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 323, 404, 407, 408, 409, 297, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 72, 499, 671, 74, 672, 454, 455, 457, 458, 459, 674, 464, 465, 468, 471, 472, 164, 474, 79, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 83, 502, 681, 504, 84, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 234, 108, 238, 240, 117, 119, 212, 106], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [512, 520, 527, 528, 529, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 550, 40, 42, 44, 560, 49, 52, 568, 570, 571, 572, 573, 574, 575, 577, 68, 69, 74, 75, 76, 78, 79, 81, 82, 84, 86, 93, 98, 100, 104, 105, 106, 109, 110, 111, 113, 114, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 131, 132, 133, 136, 139, 140, 143, 146, 147, 148, 149, 151, 154, 155, 157, 159, 160, 162, 539, 164, 173, 174, 176, 178, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 207, 214, 215, 216, 548, 218, 219, 221, 549, 233, 237, 238, 242, 244, 253, 254, 256, 257, 258, 259, 260, 262, 263, 264, 265, 269, 270, 271, 274, 276, 277, 278, 280, 281, 282, 283, 285, 288, 289, 290, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 339, 340, 341, 342, 343, 347, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 371, 372, 373, 374, 381, 389, 391, 392, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 406, 408, 415, 416, 418, 420, 421, 423, 425, 432, 433, 435, 437, 438, 440, 442, 450, 452, 455, 456, 457, 458, 460, 461, 469, 495, 504, 505, 510], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [128, 132, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/tmp/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8]}} \ No newline at end of file +!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/pet_api.py": [512, 513, 514, 683, 516, 86, 18, 20, 22, 23, 26, 539, 28, 29, 542, 543, 32, 548, 37, 39, 40, 41, 42, 555, 556, 45, 558, 559, 560, 562, 564, 565, 566, 265, 568, 569, 571, 574, 575, 576, 580, 581, 70, 584, 73, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 598, 88, 90, 92, 93, 95, 96, 97, 100, 101, 102, 106, 107, 621, 622, 624, 625, 626, 79, 116, 117, 118, 631, 632, 121, 122, 635, 124, 638, 639, 641, 642, 643, 645, 647, 649, 650, 651, 652, 653, 654, 656, 145, 146, 659, 148, 661, 150, 665, 666, 155, 156, 538, 159, 160, 673, 162, 675, 164, 677, 166, 679, 168, 169, 171, 172, 173, 541, 176, 177, 178, 115, 182, 183, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 119, 120, 377, 221, 222, 549, 224, 225, 226, 231, 232, 431, 235, 236, 110, 238, 240, 552, 242, 244, 246, 247, 249, 762, 383, 252, 253, 254, 258, 259, 262, 264, 44, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 46, 48, 297, 298, 300, 301, 302, 307, 308, 311, 312, 314, 316, 317, 318, 320, 322, 323, 325, 113, 328, 329, 330, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 485, 352, 84, 114, 373, 374, 376, 660, 378, 149, 384, 387, 390, 391, 393, 394, 395, 397, 399, 401, 402, 404, 407, 408, 409, 413, 414, 69, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 669, 72, 241, 671, 74, 672, 83, 454, 455, 457, 458, 459, 674, 112, 464, 465, 468, 471, 472, 676, 474, 475, 476, 478, 480, 80, 482, 483, 484, 678, 486, 487, 489, 492, 493, 494, 680, 498, 499, 502, 681, 504, 505, 506, 507, 508, 509, 510, 511], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/category.py": [128, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/tag.py": [128, 132, 134, 72, 74, 109, 19, 21, 22, 104, 25, 29, 30, 96, 100, 114, 102, 39, 40, 41, 103, 44, 45, 46, 112, 49, 50, 83, 116, 94, 52, 122, 61, 85, 63], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/__init__.py": [1, 4, 5, 6, 7, 8, 11, 12, 13, 16, 18, 20], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/pet.py": [128, 130, 150, 172, 139, 141, 19, 215, 21, 22, 152, 25, 29, 30, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 48, 49, 50, 51, 52, 53, 54, 183, 57, 58, 59, 60, 61, 62, 64, 194, 195, 200, 73, 202, 75, 206, 208, 209, 210, 211, 84, 213, 86, 185, 216, 218, 220, 222, 95, 97, 226, 228, 234, 108, 238, 240, 117, 119, 212, 106], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/configuration.py": [135, 136, 137, 138, 139, 142, 19, 149, 22, 23, 25, 26, 27, 29, 158, 31, 32, 34, 36, 37, 39, 40, 41, 170, 43, 172, 46, 47, 189, 179, 52, 54, 59, 61, 190, 63, 192, 224, 67, 69, 71, 200, 73, 204, 80, 81, 82, 84, 213, 86, 199, 88, 90, 219, 92, 221, 222, 223, 96, 225, 98, 100, 102, 230, 104, 167, 111, 76, 168, 157, 122, 123, 42, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/order.py": [130, 172, 141, 173, 19, 21, 22, 152, 25, 29, 30, 52, 161, 163, 39, 40, 41, 42, 43, 44, 45, 174, 175, 48, 49, 50, 51, 180, 53, 54, 57, 58, 59, 60, 61, 62, 191, 64, 202, 75, 86, 176, 222, 97, 228, 178, 234, 108, 240, 119], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/api_client.py": [512, 520, 527, 528, 529, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 550, 40, 42, 44, 560, 49, 52, 568, 570, 571, 572, 573, 574, 575, 577, 68, 69, 74, 75, 76, 78, 79, 81, 82, 84, 86, 93, 98, 100, 104, 105, 106, 109, 110, 111, 113, 114, 117, 118, 119, 120, 121, 122, 125, 126, 127, 128, 131, 132, 133, 136, 139, 140, 143, 146, 147, 148, 149, 151, 154, 155, 157, 159, 160, 162, 539, 164, 173, 174, 176, 178, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 206, 207, 214, 215, 216, 548, 218, 219, 221, 549, 233, 237, 238, 242, 244, 253, 254, 256, 257, 258, 259, 260, 262, 263, 264, 265, 269, 270, 271, 274, 276, 277, 278, 280, 281, 282, 283, 285, 288, 289, 290, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 339, 340, 341, 342, 343, 347, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 371, 372, 373, 374, 381, 389, 391, 392, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 406, 408, 415, 416, 418, 420, 421, 423, 425, 432, 433, 435, 437, 438, 440, 442, 450, 452, 455, 456, 457, 458, 460, 461, 469, 495, 504, 505, 510], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/__init__.py": [1, 4, 5, 6], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/store_api.py": [18, 276, 22, 23, 26, 28, 29, 197, 32, 37, 39, 40, 41, 44, 46, 48, 20, 68, 69, 71, 72, 79, 82, 83, 85, 87, 89, 91, 92, 94, 97, 98, 99, 103, 104, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/user.py": [278, 70, 136, 202, 272, 81, 147, 213, 22, 25, 92, 29, 158, 224, 103, 169, 235, 284, 114, 19, 180, 30, 246, 266, 191, 125, 21], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/apis/user_api.py": [32, 355, 37, 39, 200, 124, 428, 589, 48, 18, 20, 22, 23, 276, 26, 507, 28, 29], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/models/__init__.py": [1, 4, 5, 6, 7, 8], "/Users/williamcheng/Code/swagger-codegen/samples/client/petstore/python/swagger_client/rest.py": [20, 21, 23, 24, 25, 26, 27, 28, 31, 33, 35, 36, 40, 42, 48, 51, 53, 54, 55, 56, 57, 59, 63, 65, 72, 74, 82, 83, 88, 92, 95, 98, 101, 102, 103, 104, 105, 106, 109, 110, 121, 122, 124, 129, 130, 132, 135, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 159, 160, 161, 166, 170, 171, 174, 176, 177, 179, 181, 182, 183, 184, 186, 191, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 225, 227, 228, 229, 230, 231, 232, 239, 243, 244, 245, 246, 248, 249, 251]}} \ No newline at end of file diff --git a/samples/client/petstore/python/dev-requirements.txt.log b/samples/client/petstore/python/dev-requirements.txt.log index 28a3909b9e4..3418ab244d8 100644 --- a/samples/client/petstore/python/dev-requirements.txt.log +++ b/samples/client/petstore/python/dev-requirements.txt.log @@ -146,3 +146,18 @@ Requirement already satisfied (use --upgrade to upgrade): randomize in /private/ Requirement already satisfied (use --upgrade to upgrade): virtualenv>=1.11.2 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): py>=1.4.17 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): pluggy<0.4.0,>=0.3.0 in /private/var/tmp/pr/Tengah/swagger-codegen/samples/client/petstore/python/venv/lib/python2.7/site-packages (from tox->-r dev-requirements.txt (line 2)) +Collecting nose (from -r dev-requirements.txt (line 1)) + Using cached nose-1.3.7-py2-none-any.whl +Collecting tox (from -r dev-requirements.txt (line 2)) + Using cached tox-2.3.1-py2.py3-none-any.whl +Collecting coverage (from -r dev-requirements.txt (line 3)) +Collecting randomize (from -r dev-requirements.txt (line 4)) + Using cached randomize-0.13-py2.py3-none-any.whl +Collecting virtualenv>=1.11.2 (from tox->-r dev-requirements.txt (line 2)) + Using cached virtualenv-13.1.2-py2.py3-none-any.whl +Collecting py>=1.4.17 (from tox->-r dev-requirements.txt (line 2)) + Using cached py-1.4.31-py2.py3-none-any.whl +Collecting pluggy<0.4.0,>=0.3.0 (from tox->-r dev-requirements.txt (line 2)) + Using cached pluggy-0.3.1-py2.py3-none-any.whl +Installing collected packages: nose, virtualenv, py, pluggy, tox, coverage, randomize +Successfully installed coverage-4.0.3 nose-1.3.7 pluggy-0.3.1 py-1.4.31 randomize-0.13 tox-2.3.1 virtualenv-13.1.2 diff --git a/samples/client/petstore/python/swagger_client/apis/pet_api.py b/samples/client/petstore/python/swagger_client/apis/pet_api.py index 8e50474658c..c3171760ddf 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -679,3 +679,158 @@ class PetApi(object): auth_settings=auth_settings, callback=params.get('callback')) return response + + def get_pet_by_id_with_byte_array(self, pet_id, **kwargs): + """ + Fake endpoint to test byte array return by 'Find pet by ID' + Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.get_pet_by_id_with_byte_array(pet_id, callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param int pet_id: ID of pet that needs to be fetched (required) + :return: Binary + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['pet_id'] + all_params.append('callback') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_pet_by_id_with_byte_array" % key + ) + params[key] = val + del params['kwargs'] + + # verify the required parameter 'pet_id' is set + if ('pet_id' not in params) or (params['pet_id'] is None): + raise ValueError("Missing the required parameter `pet_id` when calling `get_pet_by_id_with_byte_array`") + + resource_path = '/pet/{petId}?testing_byte_array=true'.replace('{format}', 'json') + method = 'GET' + + path_params = {} + if 'pet_id' in params: + path_params['petId'] = params['pet_id'] + + query_params = {} + + header_params = {} + + form_params = {} + files = {} + + body_params = None + + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type([]) + + # Authentication setting + auth_settings = ['api_key'] + + response = self.api_client.call_api(resource_path, method, + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=files, + response_type='Binary', + auth_settings=auth_settings, + callback=params.get('callback')) + return response + + def add_pet_using_byte_array(self, **kwargs): + """ + Fake endpoint to test byte array in body parameter for adding a new pet to the store + + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please define a `callback` function + to be invoked when receiving the response. + >>> def callback_function(response): + >>> pprint(response) + >>> + >>> thread = api.add_pet_using_byte_array(callback=callback_function) + + :param callback function: The callback function + for asynchronous request. (optional) + :param Binary body: Pet object in the form of byte array + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] + all_params.append('callback') + + params = locals() + for key, val in iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method add_pet_using_byte_array" % key + ) + params[key] = val + del params['kwargs'] + + + resource_path = '/pet?testing_byte_array=true'.replace('{format}', 'json') + method = 'POST' + + path_params = {} + + query_params = {} + + header_params = {} + + form_params = {} + files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + + # HTTP header `Accept` + header_params['Accept'] = self.api_client.\ + select_header_accept(['application/json', 'application/xml']) + if not header_params['Accept']: + del header_params['Accept'] + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.\ + select_header_content_type(['application/json', 'application/xml']) + + # Authentication setting + auth_settings = ['petstore_auth'] + + response = self.api_client.call_api(resource_path, method, + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=files, + response_type=None, + auth_settings=auth_settings, + callback=params.get('callback')) + return response From 417dcc8a86becd63f5ec109482d9ccb7d62c2ba2 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 11:39:32 +0800 Subject: [PATCH 08/37] update csharp configuration to avoid circular dependency, deprecate ApiClient.Default --- .../main/resources/csharp/ApiClient.mustache | 3 +- .../resources/csharp/Configuration.mustache | 59 +++++++++++------- .../csharp/IO/Swagger/Client/ApiClient.cs | 3 +- .../csharp/IO/Swagger/Client/Configuration.cs | 59 +++++++++++------- .../SwaggerClientTest.userprefs | 21 +------ .../csharp/SwaggerClientTest/TestApiClient.cs | 27 ++++++++ .../bin/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 34926 -> 34893 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes 9 files changed, 110 insertions(+), 62 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 049f8814fc3..3b83a33c889 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -61,7 +61,8 @@ namespace {{packageName}}.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - public static ApiClient Default = new ApiClient(Configuration.Default); + [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + public static ApiClient Default; /// /// Gets or sets the Configuration. diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index a7e5df5179c..e7a19003e15 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -37,10 +37,7 @@ namespace {{packageName}}.Client int timeout = 100000 ) { - if (apiClient == null) - ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); Username = username; Password = password; @@ -64,18 +61,15 @@ namespace {{packageName}}.Client /// Api client. public Configuration(ApiClient apiClient) { - if (apiClient == null) - ApiClient = ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); } - + /// /// Version of the package. /// /// Version of the package. public const string Version = "{{packageVersion}}"; - + /// /// Gets or sets the default Configuration. /// @@ -103,8 +97,31 @@ namespace {{packageName}}.Client /// The API client. public ApiClient ApiClient; + /// + /// Set the ApiClient using Default or ApiClient instance + /// + /// An instance of ApiClient + /// + public void setApiClientUsingDefault (ApiClient apiClient = null) + { + if (apiClient == null) + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = new ApiClient(); + + ApiClient = Default != null ? Default.ApiClient : new ApiClient(); + } + else + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = apiClient; + + ApiClient = apiClient; + } + } + private Dictionary _defaultHeaderMap = new Dictionary(); - + /// /// Gets or sets the default header. /// @@ -134,13 +151,13 @@ namespace {{packageName}}.Client /// /// The username. public String Username { get; set; } - + /// /// Gets or sets the password (HTTP basic authentication). /// /// The password. public String Password { get; set; } - + /// /// Gets or sets the access token for OAuth2 authentication. /// @@ -152,7 +169,7 @@ namespace {{packageName}}.Client /// /// The API key. public Dictionary ApiKey = new Dictionary(); - + /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. /// @@ -174,9 +191,9 @@ namespace {{packageName}}.Client else return apiKeyValue; } - + private string _tempFolderPath = Path.GetTempPath(); - + /// /// Gets or sets the temporary folder path to store the files downloaded from the server. /// @@ -184,19 +201,19 @@ namespace {{packageName}}.Client public String TempFolderPath { get { return _tempFolderPath; } - - set + + set { if (String.IsNullOrEmpty(value)) { _tempFolderPath = value; return; } - + // create the directory if it does not exist if (!Directory.Exists(value)) Directory.CreateDirectory(value); - + // check if the path contains directory separator at the end if (value[value.Length - 1] == Path.DirectorySeparatorChar) _tempFolderPath = value; @@ -251,7 +268,7 @@ namespace {{packageName}}.Client .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n"; report += " Version of the API: {{version}}\n"; report += " SDK Package Version: {{packageVersion}}\n"; - + return report; } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 9ebd05fa731..70b17804f65 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -61,7 +61,8 @@ namespace IO.Swagger.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - public static ApiClient Default = new ApiClient(Configuration.Default); + [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + public static ApiClient Default; /// /// Gets or sets the Configuration. diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index d321ad5ef82..e55fc875f42 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -37,10 +37,7 @@ namespace IO.Swagger.Client int timeout = 100000 ) { - if (apiClient == null) - ApiClient = ApiClient.Default == null ? new ApiClient() : ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); Username = username; Password = password; @@ -64,18 +61,15 @@ namespace IO.Swagger.Client /// Api client. public Configuration(ApiClient apiClient) { - if (apiClient == null) - ApiClient = ApiClient.Default; - else - ApiClient = apiClient; + setApiClientUsingDefault(apiClient); } - + /// /// Version of the package. /// /// Version of the package. public const string Version = "1.0.0"; - + /// /// Gets or sets the default Configuration. /// @@ -103,8 +97,31 @@ namespace IO.Swagger.Client /// The API client. public ApiClient ApiClient; + /// + /// Set the ApiClient using Default or ApiClient instance + /// + /// An instance of ApiClient + /// + public void setApiClientUsingDefault (ApiClient apiClient = null) + { + if (apiClient == null) + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = new ApiClient(); + + ApiClient = Default != null ? Default.ApiClient : new ApiClient(); + } + else + { + if (Default != null && Default.ApiClient == null) + Default.ApiClient = apiClient; + + ApiClient = apiClient; + } + } + private Dictionary _defaultHeaderMap = new Dictionary(); - + /// /// Gets or sets the default header. /// @@ -134,13 +151,13 @@ namespace IO.Swagger.Client /// /// The username. public String Username { get; set; } - + /// /// Gets or sets the password (HTTP basic authentication). /// /// The password. public String Password { get; set; } - + /// /// Gets or sets the access token for OAuth2 authentication. /// @@ -152,7 +169,7 @@ namespace IO.Swagger.Client /// /// The API key. public Dictionary ApiKey = new Dictionary(); - + /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. /// @@ -174,9 +191,9 @@ namespace IO.Swagger.Client else return apiKeyValue; } - + private string _tempFolderPath = Path.GetTempPath(); - + /// /// Gets or sets the temporary folder path to store the files downloaded from the server. /// @@ -184,19 +201,19 @@ namespace IO.Swagger.Client public String TempFolderPath { get { return _tempFolderPath; } - - set + + set { if (String.IsNullOrEmpty(value)) { _tempFolderPath = value; return; } - + // create the directory if it does not exist if (!Directory.Exists(value)) Directory.CreateDirectory(value); - + // check if the path contains directory separator at the end if (value[value.Length - 1] == Path.DirectorySeparatorChar) _tempFolderPath = value; @@ -251,7 +268,7 @@ namespace IO.Swagger.Client .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n"; report += " Version of the API: 1.0.0\n"; report += " SDK Package Version: 1.0.0\n"; - + return report; } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 4a3939f7094..1b32b6e5da6 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -1,29 +1,14 @@  - + - + - + - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index d57627a623a..af7c22ba088 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using IO.Swagger.Client; +using IO.Swagger.Api; namespace SwaggerClientTest.TestApiClient { @@ -111,6 +112,32 @@ namespace SwaggerClientTest.TestApiClient Assert.AreEqual("sun.gif", ApiClient.SanitizeFilename(".\\sun.gif")); } + + [Test ()] + public void TestApiClientInstance () + { + PetApi p1 = new PetApi (); + PetApi p2 = new PetApi (); + + Configuration c1 = new Configuration (); // using default ApiClient + PetApi p3 = new PetApi (c1); + + ApiClient a1 = new ApiClient(); + Configuration c2 = new Configuration (a1); // using default ApiClient + PetApi p4 = new PetApi (c2); + + + // ensure both using the same default ApiClient + Assert.AreSame(p1.Configuration.ApiClient, p2.Configuration.ApiClient); + Assert.AreSame(p1.Configuration.ApiClient, Configuration.Default.ApiClient); + + Assert.AreSame(p3.Configuration.ApiClient, c1.ApiClient); + Assert.AreSame(p3.Configuration.ApiClient, Configuration.Default.ApiClient); + + Assert.AreSame(p4.Configuration.ApiClient, c2.ApiClient); + Assert.AreNotSame(p4.Configuration.ApiClient, Configuration.Default.ApiClient); + + } } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index 10b5d98d5fad634730375b3da0c5a3c58207f3ab..ad3f04827de336f237615fbba44b7cd961f524e5 100755 GIT binary patch delta 13609 zcmZvi30#!b_y6yCU|>K{wwVEDhXDpuT)yV6LGHPvxo;(kCT_T3?hK@&rj|N>9o))2 zE%%|Ya!n;QHFwLUzy&R}GPT95e&?L$GUMy}|3ALw%zfX_Ip^Mc?tPvakb-N$1=oTX zZB|Ze7Jt~QdVxj}9R*%CMQ8&S+oRofcwM=0+x-^gC+|d&uJ-s+ghouS2|`>E0xe&6 zp9!%z-BVZzY3{B{1VnqYl-3G_yEg?UL%8=;;BbP5!2|GB<1Vv#T z0K&Xy!e0gKORPbCFV}ElpZiRBWA`Y1h_@u-HPWJ^NNXBZPu0%4Tf}U`?t3xR9i_8_ zHVj12)bWip?y=f>-ckBV6m`o$a<$m@RdR6<%B$TGF}2-E@rCH|K|Fb!j-Nx5>SZRF zVSYCVA>7fhWjN(jri~RMP??sCHaA*`(EK;CRXZ}~pP-GXPl&;;0_x)a{7F^fCU2p` z5Qv$UI~$@ssz7JomJlid%XGeEeeErS2q}p^Iy`434 zHm9%!&8=|Qy|uXsj(CqZzeC%ytK~}4J7@X|p$9624y{@U6SlYz$9)4*S3Vnam3YE? zDD!7d*y=kB?sUCF;wS1Vj~kLqfIYwmenPvb%D(=C+J4e3ss{dV_G1ebdf{L?do z#(S}MJRP2XeW48P?Q>&x6RY@nhT-lMJXe znHoto>^O~UIBYukFPxrAHS9R8%snH2A*QM3qVD>x7`6MHJFbvQJGhX#=M^5J(srEV zEA3CXdS%)Jv}$P|S5@OrU#X}opUsmh@u~N~oC8!^*L#or}U<1#?u!+LDY_dY4d(0*i zIK1;W#cFZOHf-;MUVm@@SOMWZysJIL)xZ*_y`}^@V?cxoCBR7?ipCk~c6htO8h7WC zHo@47Pl_P-J#Vj2d{_jfMb}kCTarShlqQ6GXGvR^BIc@}Cqe`??M}`7hWMOnVyS9P zYlPUeMiowYB1F&(>QhulpTdrfHR$N~5shmj%arj|Ej48|!YCRnK+UJV3GbtlVg)y9 zL1}gzzCAo+1&DG-o@~A{pffo9l#LGpe5h9SK5WlOIWB<3e zDnR;2K9?&}2TPQ8LZV0FJ)oivdLImf=cpcX} z)oHPHkPwOaLd0eXajOotyXTG18S};joRWC9NQl-p?CaTGWb6_m0{ar%_3Y3Z-@793 z^lS@*6#EFoOne={Iws?*62CvafSiTzEAjo2=SdjUgVUuc;V@c>9+-Af2^9_MoC;bG z?Qz6V(c81F2DoZe1Hd6BicZ3e@ll>;5s>Rz#GMU+I{S+i5C9RPJV=P;@S0f5G%lEE zh*-~5swJ8%K43b{G(&7*iVY!ciP*-}j;UDeU|PboO?a7hF?q$uF2>+c3Opu0WlCT= zEk0*j#&k;@VA{iUPaI+j#2auqC~%a?!lZ>SnFcdi;47wgn3CWW(?zD{a28y&-hUWh zg7YkP52K`g;4;$`rh)J+(}8f(#=~`{YfO{idnQeF(iXr?CL7ZdxXsj#=>zzIDVu2< z+=BoY4!@A`3;3DEElgj+L#CTd*Wd}$KTH+yJ5v%qx0b_i@E6l7On<@OOtYEr8=683 z+|Hy^0+?e9Xe5oWQn3@oigi(hJC!75CZ_S|1Rlf#N=j*qXqXMKrSxzN zyk8xLd4?oH9oI-*fcP?MgAyQ~25Ce9-e+U6#}*upKU4e~mS)h465Rql-V=D0Y0~1i z8}T0Dt4z}%zJ#7cl3tGAZ^U>>edCWB1AUZ-ar7ZTSD9uS#^DV?mkaS748%KvuQJUF z48(gt((d^4Mm*V)4#!s*@wiGVkAGyub0+Dxc#R29mZVtYc_W@BNh!t(BW|>$myC~$ zxI=uo$~3)<8WWb2uQJV>MxzPKDXGwyWWs7nDmMPdggs=F+5_rkm_4VJ#Y)icE<<>S9`IO7hV_)BC0rA5Avx zGNt-xrfHw4mXB7LPMPZX=tI*LQ+*$mnSL_SvyQGZjq5wpA13^`<*Q7in1jstF)qn! zjxjg(QG0VEeG?xIG$)&z`Y7LA*WAoU#pXul=Ax^OI*MW+1m=nsVuX*{m|KcPDvAA` z@MJK%UNL8g@6;~sU2_|xyVBvQxvx1>Xt_W|LTed`6w8D^;^LudB^;9IFt!%8xOkO7 zhp~+qC5aAWTd_qF9maN|L=qlGm$ALr%XO{LyxCq{H~Cm?eo0V|TGx z5*@}K;uwA{p~=u;>?ySAD$!x=CE7@$!`NH&kVJ>EpD3=YdeUJWDDFz4!#Kz#UZ|&v zbQp(-){^Kj4i#hnqiS>*-w=Bw(P7LHe@mjnI8uZ)P(A4|juFH8SXBZY#&KegBsz?F zLd%D&66i2a60TYj=`cWQ>iER{3^X$d8y@yj&(Y%f{e zgm{%{PS{>~j&9lpJx5P$|N5wneZ6&=kFxB$tsbWS zG~gKf9&52roMZpOy4*+0?I*1(d{k=B}A<*(kK*$+Hru zG8;vPB&y6tF=L&mIgxgY zz^N3tShPd(3Y(;Cq!N)KsSxR7F+kE9q))_jNe7ThMX{voNPGC8W70CsUkQKNKBfG4 zm1%+!!Ty;FNan<9_RoD(J2A?>*GC-^ZT5XW8j_f1-|wS&iH+?Ce6%^SmHnWP&STsm z@w&=on)?{|g-?uhG`1i1Q5{Ds`w<`YbtLGI`e=xwr~OMGO>w+#KklQsjvSAc!u(mfKN&i6>Ucy%G^>OE2} z2B^gMNQIa#i9U=g!~&*Dpbfn#iY3v8-V%M@r7V>|8+uz5OQH>}6c;7YhTak7l5j&^ z_Pb)uVl|L<^aoKciFWiyVP2wYw4?WgQxa|HeQ}qcUzI=``an4OIaCR>p+AY?l4wJJ z77HZNhCURN`KeS1w4vdT#6gL)qn+#Uj^^MS?&$AAyIdWfcJy~qOA_tqA0lj}s?m=A zDLP4_9epb1NunM7OB73@9sOG@;wM%m(2o8qzL7*b3SfRu&51ke5&__pNIMz`ci&e< z+EEQS*QkU$Y7K(nOpC>xq|26Im?bGN`Laa|8zkA0Lg1jJ&Pbt9E@=u#1iptscbVb3G1z<=a#}vvKfD(vy^%3GtvWqdZ00K<5J_ z8&jc(c0NilLcuZCM1nIn(E)oUr8(Co)`kqey^BO6=Luay7$B*&^Fm@H*eR)pv%;0w z1WHb*X@)ufOl%6rPO3ECS&`TrVos?v-C4`g0tQH0iqsOeGA$DyIQQyagbR{Nob??U z(1)KA%fvxv3r8zBCg~)4wuVt(Q_f}L5|XP8RPsZEzHJW{ZQ*Ah4R^E!!H*Eq#yHwT ztV-HD&WpN^P+!s$XQZJcG?x^RdR^NIdNCDhV^XI$I>R7U!z}rZE)aH(mxQ#+(Z>aY zRMfs~xTxz3vnBO1L>l_S29-oo>MBP+Xv|NrB5ljmzUKbWT~gQ7b&mcpP$mBO9ROpc zHaK;pcn#i`l$)B1v{ce`)LsYIc8T*)d>!^kT882vI45ZnYJ=dKO5&5$6S^#DaDi8$ zJ%OHsp{u0p=s6gUNcsh}A@IGVfV5mBEkAgd34Pi_T{e`s7#GJn(snzt;hIXKX4)r6 z;!;(i28*E(rjqu>v_p=ekSwWf+F7K!lD-ccDTcwzk~-sn!=MLKnTXVk6mP%@mpQ~l!aBPRzHz0;T1}fojY=vVulrxoy6R{U{Ine4G|73EYlS(|992h2vCX)kW zC5^y|j)1o%<)JnLmP*P`(N!pl}iF8fUZk+dM z_)XG2T;XU?Kdy?j$I?0`je&Un@G8f+NeZpm2&r6BY|V`1iSSgCz2>V(f#37gv{acl!6Jz&^Cmc% z)YVUdTIKA?tDgkznOy4XC&4I2TK$0J$q;yhT-DW2fy+$l6JiRKtHi6H0#7B;>Zd^9 zO^Peh(h8@7MG`G=DmaAgtl~!}4aKT#=8`sQ5S|F({Y6Y-KQg_q} zV5g)(s1?EqNh44zgbR}B(ef7jB#E9ZZ^0ju@-S{DL{+MF%6DPlOfX5DTT`Dj3mQuD z)J#UoU{cFA8y4K*K(5+s*vzDE;cPg`L{*!dTm+^c{Z*R-&F=ZDHV3*g6^czYU0)^7 zftdRw7K*{T0{tB5#8f19)*LM6LY}0Lnbt_!$5irwlZvxUu|KQykg4%6Dv4T@r9hI2 z>5QZoY7KUwcB3`Go2+_1QE3s=n=0|Sm<#z*TgTcWNgpwZ z-_*D-kz8|OxWwx$o|NbaV!)1ORoGCfoh>STsX z@{*?u$|aU@p!2Dk<~-Ajl737Sg2AkWv{DI40PkWU}^gyRhe$4{| znAD`jFj*2MT@J<4lj2rDUT1&Y3YaB{w3QIs&9AKlXE*-*QDf$2fhbgC6V?%MD+4&?}Lp=&AA4eOQM`>VSx0cxOGssH-G-AC0z#@h*f*I9-8;} zCtVMnnAD^jV7Meox)J6|PfEH8dJOQ#ZGvn`q{Y;AxmEiL|ewc)MTw8a6Yj6Fmb*BvH<@a7%hp z+&MV5!yo552j55}@jMLh`o;4wib+j+0p?1gq!(ec^rW~;FucSccL^p-BJDB^FZFAe zVKS4N^BWf|l}Jgyg%asXfmdMB9)I8!SR;wFs}Q!=uU!QblbZAzG?qj;uR|Z{NpatS zW1m0nJ8(6SNaFWUe9$j`51X0Pq~&l#5+$vGThf!_Zot+<{p@ds9d$JQ1al;*dBCQw?l6>JF#iiiO5NMCxP1H7qq z-G~Vj=OTZMSpemc|HLeX`;jXGmcrdI`culskp|rY{A>=_bc1@B+73;k60pA&+sBb< zx)_dK#jzVWs;{8$@O?$ksMfl^A}5O4Z=$tBQB)V*D$bT8-ibO2A!0?;Yo6n;;{V3& zMOR1gA)Ot6+B~5f2V@I@ezC9^&P9H$n}-8j*A_y*=!@7tH2Pb%<=9V?TaNyBbW_Az z(f9EO&Ud39>egaxt|-CSXS%%@yCPsMoQ|%p{}ir7hii60WwcIz2q4C&KaP_g=@MBY zDkedH7OXK&eHI4S(N~~tr2heEHCbX%ObfkTjEs3n56YpKE_#6TF(U;i-^bk1g(%f@ zJ@spaUDscqCEDsH=;M^Wx~XXCd+~A@sVmak6NYEn3!M~j$W5F;|zt$Ji{p{R2CT~W6ySj%a8+m z46|6BV_2?~8y0bUnPH0(9J>mwDR!OV7LN8itQDEDdkt$vyV!3HyOhqcx7qU^w$&27 z6ZOb&h?jYstc9zS8JjJ3#jXfw!oMlVLfZoWM;CuH;0fso=0>S;&w%7-a4jTUvsPS+ z-4gdL=g1Zh0y~EUV!I+fjBS<(iTgFaLNUet?iq-|u4=}RfT?i?W0(Rl$;LpoM@0X) z6#)YTeMu#?iE)6S@1!Q>-MClKe`Q=xY(q>x;}&II+%Wv_+jEhlj1Gm4h(n>n6cVr( zeQ3zRA|&8QT)wdu51$%9J>y_x%sk9Q z3Vk(huF#j@<_dk?&BPS_oZUQ)dO-yY^u+asL|9nbqBks8tbGhoB1bb&*hNio3+-2M z0so^lpjwtQT~wXlAX~^Vu2W)qV&Ej?r zw)0{OxjmEZJnUH=yO!JQ*>1s}GS8`gU~oN%t>CVkY=1xjhYa8$*@gsk52+Vt=XN67 zRO~UuW^%g~+YZ>%FD{GQL)hkE&#bsYZqH;p4|~dD*K&J3+b!7hr^|4N;V|3d*ky{X z;C4j-733zje;`)_;D2XhCD?`pb`LoaXXkbz+f?ki8<)xLR%|<9PgHysw}-IJ!JcOE zh1{OWHgz6$WyP;$SkHC~_PiZ`h}(zR9><=Yo@xVNeh>sDilUg(Wdoo{qnoKaXs0Qa zvlR){ww2Z!4EG?kyk0;kQvJU|JjvNmE710zfKX4bY_PdR1MGa7LZThW;P*&bvony||DAlrUHm4Rv&{A&+l&_6!&bE9 z0JaC&iWgaBdys8L2KTTPne5N@AY1Vgt85Rl&1l6vtz7gbT5|x~gKRsRdzc5C$C=lg zH=DPacbiMiC(K|8vQ)D~SacSfrH7@j!b@|ESR<+|mT z)GiW25}GAsCbUcFoX|btwS>h9o`ls2>l3yl>`3@HVPC>m2^SLXCRh@S6Hg~z zORP);N0Ot7qqXA|M_FF*6HDIY|=nFfW-VEDU(_8sm|KFtQB+5C_k8B^YRj2hQ zxBulKL+j8obagtRHP`9sR77q3(=ZVD3>2RIZ$N!(b)Y{GtASP#5l{o$k!TeW1CiL) zmDU&zqrtioUO`%gRuQYA8@As=tKd(&-LbvKvoZ&UbownOR99cuOgBmQL>Ht#qQ9+g zX=r2c8uW3dxWu@t@%Q2bjqQzZ8fO|;k4-+D99TeKte(FT>Udrr0SUT! z&WUxXKkzwmo~LjGM7Nmd%x5Y1IcbS=SIqyquXMis|4DHcQ$%iXu4IWq0AC-KJ{bY2 zO6?iCdyuO)E1eAOl=FrT_{vps^|{JtakG^u<7~x@uUhzOfUm65j-%mbT($05qlb#j z@k6`h=9M;?1OHU_v|I))4HJguWsc2hH7aN5n7p17@Q+(t4;_{@ag=B3GPoO*K4eH< z?)cIy4@?fIQRUTP%!ItGF+)nvt$>+OI(HR3wnbjwWHG>@#p delta 13352 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 E3kkQBZvX%Q diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 292442f3a88c23f7f170b088ce9861942ab1996d..5008263b22310a03e46f36026133deea88a58324 100644 GIT binary patch literal 34893 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%0AORGE4t&wZoe9zoYdv3$s~k#OPB!C^RwD9v&P0 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 diff --git a/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/SwaggerClientTest.dll index 10b5d98d5fad634730375b3da0c5a3c58207f3ab..ad3f04827de336f237615fbba44b7cd961f524e5 100755 GIT binary patch delta 13609 zcmZvi30#!b_y6yCU|>K{wwVEDhXDpuT)yV6LGHPvxo;(kCT_T3?hK@&rj|N>9o))2 zE%%|Ya!n;QHFwLUzy&R}GPT95e&?L$GUMy}|3ALw%zfX_Ip^Mc?tPvakb-N$1=oTX zZB|Ze7Jt~QdVxj}9R*%CMQ8&S+oRofcwM=0+x-^gC+|d&uJ-s+ghouS2|`>E0xe&6 zp9!%z-BVZzY3{B{1VnqYl-3G_yEg?UL%8=;;BbP5!2|GB<1Vv#T z0K&Xy!e0gKORPbCFV}ElpZiRBWA`Y1h_@u-HPWJ^NNXBZPu0%4Tf}U`?t3xR9i_8_ zHVj12)bWip?y=f>-ckBV6m`o$a<$m@RdR6<%B$TGF}2-E@rCH|K|Fb!j-Nx5>SZRF zVSYCVA>7fhWjN(jri~RMP??sCHaA*`(EK;CRXZ}~pP-GXPl&;;0_x)a{7F^fCU2p` z5Qv$UI~$@ssz7JomJlid%XGeEeeErS2q}p^Iy`434 zHm9%!&8=|Qy|uXsj(CqZzeC%ytK~}4J7@X|p$9624y{@U6SlYz$9)4*S3Vnam3YE? zDD!7d*y=kB?sUCF;wS1Vj~kLqfIYwmenPvb%D(=C+J4e3ss{dV_G1ebdf{L?do z#(S}MJRP2XeW48P?Q>&x6RY@nhT-lMJXe znHoto>^O~UIBYukFPxrAHS9R8%snH2A*QM3qVD>x7`6MHJFbvQJGhX#=M^5J(srEV zEA3CXdS%)Jv}$P|S5@OrU#X}opUsmh@u~N~oC8!^*L#or}U<1#?u!+LDY_dY4d(0*i zIK1;W#cFZOHf-;MUVm@@SOMWZysJIL)xZ*_y`}^@V?cxoCBR7?ipCk~c6htO8h7WC zHo@47Pl_P-J#Vj2d{_jfMb}kCTarShlqQ6GXGvR^BIc@}Cqe`??M}`7hWMOnVyS9P zYlPUeMiowYB1F&(>QhulpTdrfHR$N~5shmj%arj|Ej48|!YCRnK+UJV3GbtlVg)y9 zL1}gzzCAo+1&DG-o@~A{pffo9l#LGpe5h9SK5WlOIWB<3e zDnR;2K9?&}2TPQ8LZV0FJ)oivdLImf=cpcX} z)oHPHkPwOaLd0eXajOotyXTG18S};joRWC9NQl-p?CaTGWb6_m0{ar%_3Y3Z-@793 z^lS@*6#EFoOne={Iws?*62CvafSiTzEAjo2=SdjUgVUuc;V@c>9+-Af2^9_MoC;bG z?Qz6V(c81F2DoZe1Hd6BicZ3e@ll>;5s>Rz#GMU+I{S+i5C9RPJV=P;@S0f5G%lEE zh*-~5swJ8%K43b{G(&7*iVY!ciP*-}j;UDeU|PboO?a7hF?q$uF2>+c3Opu0WlCT= zEk0*j#&k;@VA{iUPaI+j#2auqC~%a?!lZ>SnFcdi;47wgn3CWW(?zD{a28y&-hUWh zg7YkP52K`g;4;$`rh)J+(}8f(#=~`{YfO{idnQeF(iXr?CL7ZdxXsj#=>zzIDVu2< z+=BoY4!@A`3;3DEElgj+L#CTd*Wd}$KTH+yJ5v%qx0b_i@E6l7On<@OOtYEr8=683 z+|Hy^0+?e9Xe5oWQn3@oigi(hJC!75CZ_S|1Rlf#N=j*qXqXMKrSxzN zyk8xLd4?oH9oI-*fcP?MgAyQ~25Ce9-e+U6#}*upKU4e~mS)h465Rql-V=D0Y0~1i z8}T0Dt4z}%zJ#7cl3tGAZ^U>>edCWB1AUZ-ar7ZTSD9uS#^DV?mkaS748%KvuQJUF z48(gt((d^4Mm*V)4#!s*@wiGVkAGyub0+Dxc#R29mZVtYc_W@BNh!t(BW|>$myC~$ zxI=uo$~3)<8WWb2uQJV>MxzPKDXGwyWWs7nDmMPdggs=F+5_rkm_4VJ#Y)icE<<>S9`IO7hV_)BC0rA5Avx zGNt-xrfHw4mXB7LPMPZX=tI*LQ+*$mnSL_SvyQGZjq5wpA13^`<*Q7in1jstF)qn! zjxjg(QG0VEeG?xIG$)&z`Y7LA*WAoU#pXul=Ax^OI*MW+1m=nsVuX*{m|KcPDvAA` z@MJK%UNL8g@6;~sU2_|xyVBvQxvx1>Xt_W|LTed`6w8D^;^LudB^;9IFt!%8xOkO7 zhp~+qC5aAWTd_qF9maN|L=qlGm$ALr%XO{LyxCq{H~Cm?eo0V|TGx z5*@}K;uwA{p~=u;>?ySAD$!x=CE7@$!`NH&kVJ>EpD3=YdeUJWDDFz4!#Kz#UZ|&v zbQp(-){^Kj4i#hnqiS>*-w=Bw(P7LHe@mjnI8uZ)P(A4|juFH8SXBZY#&KegBsz?F zLd%D&66i2a60TYj=`cWQ>iER{3^X$d8y@yj&(Y%f{e zgm{%{PS{>~j&9lpJx5P$|N5wneZ6&=kFxB$tsbWS zG~gKf9&52roMZpOy4*+0?I*1(d{k=B}A<*(kK*$+Hru zG8;vPB&y6tF=L&mIgxgY zz^N3tShPd(3Y(;Cq!N)KsSxR7F+kE9q))_jNe7ThMX{voNPGC8W70CsUkQKNKBfG4 zm1%+!!Ty;FNan<9_RoD(J2A?>*GC-^ZT5XW8j_f1-|wS&iH+?Ce6%^SmHnWP&STsm z@w&=on)?{|g-?uhG`1i1Q5{Ds`w<`YbtLGI`e=xwr~OMGO>w+#KklQsjvSAc!u(mfKN&i6>Ucy%G^>OE2} z2B^gMNQIa#i9U=g!~&*Dpbfn#iY3v8-V%M@r7V>|8+uz5OQH>}6c;7YhTak7l5j&^ z_Pb)uVl|L<^aoKciFWiyVP2wYw4?WgQxa|HeQ}qcUzI=``an4OIaCR>p+AY?l4wJJ z77HZNhCURN`KeS1w4vdT#6gL)qn+#Uj^^MS?&$AAyIdWfcJy~qOA_tqA0lj}s?m=A zDLP4_9epb1NunM7OB73@9sOG@;wM%m(2o8qzL7*b3SfRu&51ke5&__pNIMz`ci&e< z+EEQS*QkU$Y7K(nOpC>xq|26Im?bGN`Laa|8zkA0Lg1jJ&Pbt9E@=u#1iptscbVb3G1z<=a#}vvKfD(vy^%3GtvWqdZ00K<5J_ z8&jc(c0NilLcuZCM1nIn(E)oUr8(Co)`kqey^BO6=Luay7$B*&^Fm@H*eR)pv%;0w z1WHb*X@)ufOl%6rPO3ECS&`TrVos?v-C4`g0tQH0iqsOeGA$DyIQQyagbR{Nob??U z(1)KA%fvxv3r8zBCg~)4wuVt(Q_f}L5|XP8RPsZEzHJW{ZQ*Ah4R^E!!H*Eq#yHwT ztV-HD&WpN^P+!s$XQZJcG?x^RdR^NIdNCDhV^XI$I>R7U!z}rZE)aH(mxQ#+(Z>aY zRMfs~xTxz3vnBO1L>l_S29-oo>MBP+Xv|NrB5ljmzUKbWT~gQ7b&mcpP$mBO9ROpc zHaK;pcn#i`l$)B1v{ce`)LsYIc8T*)d>!^kT882vI45ZnYJ=dKO5&5$6S^#DaDi8$ zJ%OHsp{u0p=s6gUNcsh}A@IGVfV5mBEkAgd34Pi_T{e`s7#GJn(snzt;hIXKX4)r6 z;!;(i28*E(rjqu>v_p=ekSwWf+F7K!lD-ccDTcwzk~-sn!=MLKnTXVk6mP%@mpQ~l!aBPRzHz0;T1}fojY=vVulrxoy6R{U{Ine4G|73EYlS(|992h2vCX)kW zC5^y|j)1o%<)JnLmP*P`(N!pl}iF8fUZk+dM z_)XG2T;XU?Kdy?j$I?0`je&Un@G8f+NeZpm2&r6BY|V`1iSSgCz2>V(f#37gv{acl!6Jz&^Cmc% z)YVUdTIKA?tDgkznOy4XC&4I2TK$0J$q;yhT-DW2fy+$l6JiRKtHi6H0#7B;>Zd^9 zO^Peh(h8@7MG`G=DmaAgtl~!}4aKT#=8`sQ5S|F({Y6Y-KQg_q} zV5g)(s1?EqNh44zgbR}B(ef7jB#E9ZZ^0ju@-S{DL{+MF%6DPlOfX5DTT`Dj3mQuD z)J#UoU{cFA8y4K*K(5+s*vzDE;cPg`L{*!dTm+^c{Z*R-&F=ZDHV3*g6^czYU0)^7 zftdRw7K*{T0{tB5#8f19)*LM6LY}0Lnbt_!$5irwlZvxUu|KQykg4%6Dv4T@r9hI2 z>5QZoY7KUwcB3`Go2+_1QE3s=n=0|Sm<#z*TgTcWNgpwZ z-_*D-kz8|OxWwx$o|NbaV!)1ORoGCfoh>STsX z@{*?u$|aU@p!2Dk<~-Ajl737Sg2AkWv{DI40PkWU}^gyRhe$4{| znAD`jFj*2MT@J<4lj2rDUT1&Y3YaB{w3QIs&9AKlXE*-*QDf$2fhbgC6V?%MD+4&?}Lp=&AA4eOQM`>VSx0cxOGssH-G-AC0z#@h*f*I9-8;} zCtVMnnAD^jV7Meox)J6|PfEH8dJOQ#ZGvn`q{Y;AxmEiL|ewc)MTw8a6Yj6Fmb*BvH<@a7%hp z+&MV5!yo552j55}@jMLh`o;4wib+j+0p?1gq!(ec^rW~;FucSccL^p-BJDB^FZFAe zVKS4N^BWf|l}Jgyg%asXfmdMB9)I8!SR;wFs}Q!=uU!QblbZAzG?qj;uR|Z{NpatS zW1m0nJ8(6SNaFWUe9$j`51X0Pq~&l#5+$vGThf!_Zot+<{p@ds9d$JQ1al;*dBCQw?l6>JF#iiiO5NMCxP1H7qq z-G~Vj=OTZMSpemc|HLeX`;jXGmcrdI`culskp|rY{A>=_bc1@B+73;k60pA&+sBb< zx)_dK#jzVWs;{8$@O?$ksMfl^A}5O4Z=$tBQB)V*D$bT8-ibO2A!0?;Yo6n;;{V3& zMOR1gA)Ot6+B~5f2V@I@ezC9^&P9H$n}-8j*A_y*=!@7tH2Pb%<=9V?TaNyBbW_Az z(f9EO&Ud39>egaxt|-CSXS%%@yCPsMoQ|%p{}ir7hii60WwcIz2q4C&KaP_g=@MBY zDkedH7OXK&eHI4S(N~~tr2heEHCbX%ObfkTjEs3n56YpKE_#6TF(U;i-^bk1g(%f@ zJ@spaUDscqCEDsH=;M^Wx~XXCd+~A@sVmak6NYEn3!M~j$W5F;|zt$Ji{p{R2CT~W6ySj%a8+m z46|6BV_2?~8y0bUnPH0(9J>mwDR!OV7LN8itQDEDdkt$vyV!3HyOhqcx7qU^w$&27 z6ZOb&h?jYstc9zS8JjJ3#jXfw!oMlVLfZoWM;CuH;0fso=0>S;&w%7-a4jTUvsPS+ z-4gdL=g1Zh0y~EUV!I+fjBS<(iTgFaLNUet?iq-|u4=}RfT?i?W0(Rl$;LpoM@0X) z6#)YTeMu#?iE)6S@1!Q>-MClKe`Q=xY(q>x;}&II+%Wv_+jEhlj1Gm4h(n>n6cVr( zeQ3zRA|&8QT)wdu51$%9J>y_x%sk9Q z3Vk(huF#j@<_dk?&BPS_oZUQ)dO-yY^u+asL|9nbqBks8tbGhoB1bb&*hNio3+-2M z0so^lpjwtQT~wXlAX~^Vu2W)qV&Ej?r zw)0{OxjmEZJnUH=yO!JQ*>1s}GS8`gU~oN%t>CVkY=1xjhYa8$*@gsk52+Vt=XN67 zRO~UuW^%g~+YZ>%FD{GQL)hkE&#bsYZqH;p4|~dD*K&J3+b!7hr^|4N;V|3d*ky{X z;C4j-733zje;`)_;D2XhCD?`pb`LoaXXkbz+f?ki8<)xLR%|<9PgHysw}-IJ!JcOE zh1{OWHgz6$WyP;$SkHC~_PiZ`h}(zR9><=Yo@xVNeh>sDilUg(Wdoo{qnoKaXs0Qa zvlR){ww2Z!4EG?kyk0;kQvJU|JjvNmE710zfKX4bY_PdR1MGa7LZThW;P*&bvony||DAlrUHm4Rv&{A&+l&_6!&bE9 z0JaC&iWgaBdys8L2KTTPne5N@AY1Vgt85Rl&1l6vtz7gbT5|x~gKRsRdzc5C$C=lg zH=DPacbiMiC(K|8vQ)D~SacSfrH7@j!b@|ESR<+|mT z)GiW25}GAsCbUcFoX|btwS>h9o`ls2>l3yl>`3@HVPC>m2^SLXCRh@S6Hg~z zORP);N0Ot7qqXA|M_FF*6HDIY|=nFfW-VEDU(_8sm|KFtQB+5C_k8B^YRj2hQ zxBulKL+j8obagtRHP`9sR77q3(=ZVD3>2RIZ$N!(b)Y{GtASP#5l{o$k!TeW1CiL) zmDU&zqrtioUO`%gRuQYA8@As=tKd(&-LbvKvoZ&UbownOR99cuOgBmQL>Ht#qQ9+g zX=r2c8uW3dxWu@t@%Q2bjqQzZ8fO|;k4-+D99TeKte(FT>Udrr0SUT! z&WUxXKkzwmo~LjGM7Nmd%x5Y1IcbS=SIqyquXMis|4DHcQ$%iXu4IWq0AC-KJ{bY2 zO6?iCdyuO)E1eAOl=FrT_{vps^|{JtakG^u<7~x@uUhzOfUm65j-%mbT($05qlb#j z@k6`h=9M;?1OHU_v|I))4HJguWsc2hH7aN5n7p17@Q+(t4;_{@ag=B3GPoO*K4eH< z?)cIy4@?fIQRUTP%!ItGF+)nvt$>+OI(HR3wnbjwWHG>@#p delta 13352 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 E3kkQBZvX%Q From d04d554e0a8f71256fbcf604ce42851ba4323b95 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 11:45:13 +0800 Subject: [PATCH 09/37] update comment in csharp test --- .../csharp/SwaggerClientTest/TestApiClient.cs | 4 +++- .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 34893 -> 34893 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs index af7c22ba088..9d1921d8ea7 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestApiClient.cs @@ -123,7 +123,7 @@ namespace SwaggerClientTest.TestApiClient PetApi p3 = new PetApi (c1); ApiClient a1 = new ApiClient(); - Configuration c2 = new Configuration (a1); // using default ApiClient + Configuration c2 = new Configuration (a1); // using "a1" as the ApiClient PetApi p4 = new PetApi (c2); @@ -131,9 +131,11 @@ namespace SwaggerClientTest.TestApiClient Assert.AreSame(p1.Configuration.ApiClient, p2.Configuration.ApiClient); Assert.AreSame(p1.Configuration.ApiClient, Configuration.Default.ApiClient); + // ensure both using the same default ApiClient Assert.AreSame(p3.Configuration.ApiClient, c1.ApiClient); Assert.AreSame(p3.Configuration.ApiClient, Configuration.Default.ApiClient); + // ensure it's not using the default ApiClient Assert.AreSame(p4.Configuration.ApiClient, c2.ApiClient); Assert.AreNotSame(p4.Configuration.ApiClient, Configuration.Default.ApiClient); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 5008263b22310a03e46f36026133deea88a58324..9fd5b3c6f762ed5964c1fb0d75bf5f4fdd4c8a16 100644 GIT binary patch delta 50 zcmV-20L}l+kOIw+0 Date: Mon, 18 Jan 2016 21:27:29 +0800 Subject: [PATCH 10/37] update tostring to use sanitizeforserialization --- .../src/main/resources/php/ApiClient.mustache | 2 +- .../main/resources/php/ObjectSerializer.mustache | 16 ++++++++-------- .../src/main/resources/php/api.mustache | 4 ++-- .../src/main/resources/php/model.mustache | 4 ++-- .../php/SwaggerClient-php/lib/Api/PetApi.php | 16 ++++++++-------- .../php/SwaggerClient-php/lib/Api/StoreApi.php | 12 ++++++------ .../php/SwaggerClient-php/lib/Api/UserApi.php | 8 ++++---- .../php/SwaggerClient-php/lib/ApiClient.php | 2 +- .../php/SwaggerClient-php/lib/Model/Category.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Order.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Pet.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/Tag.php | 4 ++-- .../php/SwaggerClient-php/lib/Model/User.php | 4 ++-- .../SwaggerClient-php/lib/ObjectSerializer.php | 16 ++++++++-------- .../php/SwaggerClient-php/tests/OrderApiTest.php | 9 +++------ 15 files changed, 53 insertions(+), 56 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache index defea63b138..a0a0b8fcf59 100644 --- a/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ApiClient.mustache @@ -150,7 +150,7 @@ class ApiClient if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { $postData = http_build_query($postData); } elseif ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) { // json model - $postData = json_encode($this->serializer->sanitizeForSerialization($postData)); + $postData = json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($postData)); } $url = $this->config->getHost() . $resourcePath; diff --git a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache index 6cc2206b455..263ade673a0 100644 --- a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache @@ -46,13 +46,13 @@ class ObjectSerializer { /** - * Build a JSON POST object + * Serialize data * * @param mixed $data the data to serialize * * @return string serialized form of $data */ - public function sanitizeForSerialization($data) + public static function sanitizeForSerialization($data) { if (is_scalar($data) || null === $data) { $sanitized = $data; @@ -60,7 +60,7 @@ class ObjectSerializer $sanitized = $data->format(\DateTime::ISO8601); } elseif (is_array($data)) { foreach ($data as $property => $value) { - $data[$property] = $this->sanitizeForSerialization($value); + $data[$property] = self::sanitizeForSerialization($value); } $sanitized = $data; } elseif (is_object($data)) { @@ -68,7 +68,7 @@ class ObjectSerializer foreach (array_keys($data::$swaggerTypes) as $property) { $getter = $data::$getters[$property]; if ($data->$getter() !== null) { - $values[$data::$attributeMap[$property]] = $this->sanitizeForSerialization($data->$getter()); + $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } $sanitized = $values; @@ -220,7 +220,7 @@ class ObjectSerializer * * @return object an instance of $class */ - public function deserialize($data, $class, $httpHeaders=null) + public static function deserialize($data, $class, $httpHeaders=null) { if (null === $data) { $deserialized = null; @@ -231,14 +231,14 @@ class ObjectSerializer $subClass_array = explode(',', $inner, 2); $subClass = $subClass_array[1]; foreach ($data as $key => $value) { - $deserialized[$key] = $this->deserialize($value, $subClass); + $deserialized[$key] = self::deserialize($value, $subClass); } } } elseif (strcasecmp(substr($class, -2), '[]') == 0) { $subClass = substr($class, 0, -2); $values = array(); foreach ($data as $key => $value) { - $values[] = $this->deserialize($value, $subClass); + $values[] = self::deserialize($value, $subClass); } $deserialized = $values; } elseif ($class === 'ByteArray') { // byte array @@ -270,7 +270,7 @@ class ObjectSerializer $propertyValue = $data->{$instance::$attributeMap[$property]}; if (isset($propertyValue)) { - $instance->$propertySetter($this->deserialize($propertyValue, $type)); + $instance->$propertySetter(self::deserialize($propertyValue, $type)); } } $deserialized = $instance; diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index 6d1a3d570f7..d21301ee387 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -223,14 +223,14 @@ use \{{invokerPackage}}\ObjectSerializer; return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '{{returnType}}', $httpHeader), $statusCode, $httpHeader); + return array(\{{invokerPackage}}\ObjectSerializer::deserialize($response, '{{returnType}}', $httpHeader), $statusCode, $httpHeader); {{/returnType}}{{^returnType}} return array(null, $statusCode, $httpHeader); {{/returnType}} } catch (ApiException $e) { switch ($e->getCode()) { {{#responses}}{{#dataType}} {{^isWildcard}}case {{code}}:{{/isWildcard}}{{#isWildcard}}default:{{/isWildcard}} - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '{{dataType}}', $e->getResponseHeaders()); + $data = \{{invokerPackage}}\ObjectSerializer::deserialize($e->getResponseBody(), '{{dataType}}', $e->getResponseHeaders()); $e->setResponseObject($data); break;{{/dataType}}{{/responses}} } diff --git a/modules/swagger-codegen/src/main/resources/php/model.mustache b/modules/swagger-codegen/src/main/resources/php/model.mustache index 5b486c7fa62..75cf55bde0b 100644 --- a/modules/swagger-codegen/src/main/resources/php/model.mustache +++ b/modules/swagger-codegen/src/main/resources/php/model.mustache @@ -176,9 +176,9 @@ class {{classname}} implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\{{invokerPackage}}\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php index 66e8f34df09..ed06acb525e 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -341,12 +341,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -437,12 +437,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet[]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet[]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -539,12 +539,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Pet', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Pet', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Pet', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -961,12 +961,12 @@ class PetApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'ByteArray', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'ByteArray', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'ByteArray', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'ByteArray', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php index 2874d8f47ac..0f67fa63d15 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php @@ -165,12 +165,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'map[string,int]', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'map[string,int]', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'map[string,int]', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'map[string,int]', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -252,12 +252,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -347,12 +347,12 @@ class StoreApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\Order', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\Order', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php index b63b679aba1..595d82fffc1 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/UserApi.php @@ -407,12 +407,12 @@ class UserApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, 'string', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, 'string', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), 'string', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), 'string', $e->getResponseHeaders()); $e->setResponseObject($data); break; } @@ -575,12 +575,12 @@ class UserApi return array(null, $statusCode, $httpHeader); } - return array($this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\User', $httpHeader), $statusCode, $httpHeader); + return array(\Swagger\Client\ObjectSerializer::deserialize($response, '\Swagger\Client\Model\User', $httpHeader), $statusCode, $httpHeader); } catch (ApiException $e) { switch ($e->getCode()) { case 200: - $data = $this->apiClient->getSerializer()->deserialize($e->getResponseBody(), '\Swagger\Client\Model\User', $e->getResponseHeaders()); + $data = \Swagger\Client\ObjectSerializer::deserialize($e->getResponseBody(), '\Swagger\Client\Model\User', $e->getResponseHeaders()); $e->setResponseObject($data); break; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php index 310a0bdc726..8313dc52004 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ApiClient.php @@ -150,7 +150,7 @@ class ApiClient if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { $postData = http_build_query($postData); } elseif ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) { // json model - $postData = json_encode($this->serializer->sanitizeForSerialization($postData)); + $postData = json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($postData)); } $url = $this->config->getHost() . $resourcePath; diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php index ae4d3e39db0..723617198b5 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Category.php @@ -198,9 +198,9 @@ class Category implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php index c9f2629e31b..f2540992e2d 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Order.php @@ -329,9 +329,9 @@ class Order implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php index 543041b0115..aa8c6d67a8f 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Pet.php @@ -329,9 +329,9 @@ class Pet implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php index 91bfa6aece9..7288e39eff9 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/Tag.php @@ -198,9 +198,9 @@ class Tag implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php b/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php index 8268f6da2b1..7de225ec744 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Model/User.php @@ -390,9 +390,9 @@ class User implements ArrayAccess public function __toString() { if (defined('JSON_PRETTY_PRINT')) { - return json_encode(get_object_vars($this), JSON_PRETTY_PRINT); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT); } else { - return json_encode(get_object_vars($this)); + return json_encode(\Swagger\Client\ObjectSerializer::sanitizeForSerialization($this)); } } } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index 1a5a46d4128..9ee2f3c1217 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -46,13 +46,13 @@ class ObjectSerializer { /** - * Build a JSON POST object + * Serialize data * * @param mixed $data the data to serialize * * @return string serialized form of $data */ - public function sanitizeForSerialization($data) + public static function sanitizeForSerialization($data) { if (is_scalar($data) || null === $data) { $sanitized = $data; @@ -60,7 +60,7 @@ class ObjectSerializer $sanitized = $data->format(\DateTime::ISO8601); } elseif (is_array($data)) { foreach ($data as $property => $value) { - $data[$property] = $this->sanitizeForSerialization($value); + $data[$property] = self::sanitizeForSerialization($value); } $sanitized = $data; } elseif (is_object($data)) { @@ -68,7 +68,7 @@ class ObjectSerializer foreach (array_keys($data::$swaggerTypes) as $property) { $getter = $data::$getters[$property]; if ($data->$getter() !== null) { - $values[$data::$attributeMap[$property]] = $this->sanitizeForSerialization($data->$getter()); + $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } $sanitized = $values; @@ -220,7 +220,7 @@ class ObjectSerializer * * @return object an instance of $class */ - public function deserialize($data, $class, $httpHeaders=null) + public static function deserialize($data, $class, $httpHeaders=null) { if (null === $data) { $deserialized = null; @@ -231,14 +231,14 @@ class ObjectSerializer $subClass_array = explode(',', $inner, 2); $subClass = $subClass_array[1]; foreach ($data as $key => $value) { - $deserialized[$key] = $this->deserialize($value, $subClass); + $deserialized[$key] = self::deserialize($value, $subClass); } } } elseif (strcasecmp(substr($class, -2), '[]') == 0) { $subClass = substr($class, 0, -2); $values = array(); foreach ($data as $key => $value) { - $values[] = $this->deserialize($value, $subClass); + $values[] = self::deserialize($value, $subClass); } $deserialized = $values; } elseif ($class === 'ByteArray') { // byte array @@ -270,7 +270,7 @@ class ObjectSerializer $propertyValue = $data->{$instance::$attributeMap[$property]}; if (isset($propertyValue)) { - $instance->$propertySetter($this->deserialize($propertyValue, $type)); + $instance->$propertySetter(self::deserialize($propertyValue, $type)); } } $deserialized = $instance; diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php index f92cc83c693..51b82a695d6 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/OrderApiTest.php @@ -45,8 +45,7 @@ class OrderApiTest extends \PHPUnit_Framework_TestCase "complete": false } ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'Swagger\Client\Model\Order'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'Swagger\Client\Model\Order'); $this->assertInstanceOf('Swagger\Client\Model\Order', $order); $this->assertSame(10, $order->getId()); @@ -70,8 +69,7 @@ ORDER; "complete": false }]] ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'Swagger\Client\Model\Order[][]'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'Swagger\Client\Model\Order[][]'); $this->assertArrayHasKey(0, $order); $this->assertArrayHasKey(0, $order[0]); @@ -102,8 +100,7 @@ ORDER; } } ORDER; - $serializer = new Swagger\Client\ObjectSerializer; - $order = $serializer->deserialize(json_decode($order_json), 'map[string,map[string,\Swagger\Client\Model\Order]]'); + $order = \Swagger\Client\ObjectSerializer::deserialize(json_decode($order_json), 'map[string,map[string,\Swagger\Client\Model\Order]]'); $this->assertArrayHasKey('test', $order); $this->assertArrayHasKey('test2', $order['test']); From dcd2c00fe6c08ff88c70903c06e2780db917db04 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 18 Jan 2016 21:42:24 +0800 Subject: [PATCH 11/37] fix empty object serialization issue --- .../src/main/resources/php/ObjectSerializer.mustache | 2 +- .../php/SwaggerClient-php/lib/ObjectSerializer.php | 2 +- .../php/SwaggerClient-php/tests/PetApiTest.php | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache index 263ade673a0..414e40650f6 100644 --- a/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/swagger-codegen/src/main/resources/php/ObjectSerializer.mustache @@ -71,7 +71,7 @@ class ObjectSerializer $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } - $sanitized = $values; + $sanitized = (object)$values; } else { $sanitized = (string)$data; } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php index 9ee2f3c1217..a4a1d061185 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/ObjectSerializer.php @@ -71,7 +71,7 @@ class ObjectSerializer $values[$data::$attributeMap[$property]] = self::sanitizeForSerialization($data->$getter()); } } - $sanitized = $values; + $sanitized = (object)$values; } else { $sanitized = (string)$data; } diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index dfc45971209..534b9d32c1a 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -316,6 +316,16 @@ class PetApiTest extends \PHPUnit_Framework_TestCase $this->assertSame($json['tags'][0]['id'], $pet_id); $this->assertSame($json['tags'][0]['name'], 'test php tag'); } + + // test empty object serialization + public function testEmptyPetSerialization() + { + $new_pet = new Swagger\Client\Model\Pet; + // the empty object should be serialised to {} + $this->assertSame("{}", "$new_pet"); + + } + } ?> From 86587607e13788e42ad0df91554528c1340e108e Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 00:51:21 +0800 Subject: [PATCH 12/37] add api test and model test files --- .../io/swagger/codegen/CodegenConfig.java | 16 +++++++ .../io/swagger/codegen/DefaultCodegen.java | 48 +++++++++++++++++++ .../io/swagger/codegen/DefaultGenerator.java | 45 +++++++++++++++++ .../codegen/languages/PhpClientCodegen.java | 19 ++++++++ 4 files changed, 128 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java index a74e652bb6d..720f2f8aa67 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java @@ -19,10 +19,14 @@ public interface CodegenConfig { Map additionalProperties(); + String testPackage(); + String apiPackage(); String apiFileFolder(); + String apiTestFileFolder(); + String fileSuffix(); String outputFolder(); @@ -33,6 +37,8 @@ public interface CodegenConfig { String modelFileFolder(); + String modelTestFileFolder(); + String modelPackage(); String toApiName(String name); @@ -87,6 +93,10 @@ public interface CodegenConfig { Map modelTemplateFiles(); + Map apiTestTemplateFiles(); + + Map modelTestTemplateFiles(); + Set languageSpecificPrimitives(); void preprocessSwagger(Swagger swagger); @@ -97,6 +107,10 @@ public interface CodegenConfig { String toModelFilename(String name); + String toApiTestFilename(String name); + + String toModelTestFilename(String name); + String toModelImport(String name); String toApiImport(String name); @@ -115,6 +129,8 @@ public interface CodegenConfig { String apiFilename(String templateName, String tag); + String apiTestFilename(String templateName, String tag); + boolean shouldOverwrite(String filename); boolean isSkipOverwrite(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index abc4d045315..5b2c45166ac 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -63,8 +63,11 @@ public class DefaultCodegen { protected Set languageSpecificPrimitives = new HashSet(); protected Map importMapping = new HashMap(); protected String modelPackage = "", apiPackage = "", fileSuffix; + protected String testPackage = ""; protected Map apiTemplateFiles = new HashMap(); protected Map modelTemplateFiles = new HashMap(); + protected Map apiTestTemplateFiles = new HashMap(); + protected Map modelTestTemplateFiles = new HashMap(); protected String templateDir; protected String embeddedTemplateDir; protected Map additionalProperties = new HashMap(); @@ -170,6 +173,10 @@ public class DefaultCodegen { return importMapping; } + public String testPackage() { + return testPackage; + } + public String modelPackage() { return modelPackage; } @@ -194,6 +201,14 @@ public class DefaultCodegen { } } + public Map apiTestTemplateFiles() { + return apiTestTemplateFiles; + } + + public Map modelTestTemplateFiles() { + return modelTestTemplateFiles; + } + public Map apiTemplateFiles() { return apiTemplateFiles; } @@ -210,6 +225,14 @@ public class DefaultCodegen { return outputFolder + "/" + modelPackage().replace('.', '/'); } + public String apiTestFileFolder() { + return outputFolder + "/" + testPackage().replace('.', '/'); + } + + public String modelTestFileFolder() { + return outputFolder + "/" + testPackage().replace('.', '/'); + } + public Map additionalProperties() { return additionalProperties; } @@ -260,6 +283,16 @@ public class DefaultCodegen { return toApiName(name); } + /** + * Return the file name of the Api + * + * @param name the file name of the Api + * @return the file name of the Api + */ + public String toApiTestFilename(String name) { + return toApiName(name) + "Test"; + } + /** * Return the variable name in the Api * @@ -280,6 +313,16 @@ public class DefaultCodegen { return initialCaps(name); } + /** + * Return the capitalized file name of the model + * + * @param name the model name + * @return the file name of the model + */ + public String toModelTestFilename(String name) { + return initialCaps(name) + "Test"; + } + /** * Return the operation ID (method name) * @@ -2028,6 +2071,11 @@ public class DefaultCodegen { return apiFileFolder() + '/' + toApiFilename(tag) + suffix; } + public String apiTestFilename(String templateName, String tag) { + String suffix = apiTestTemplateFiles().get(templateName); + return apiTestFileFolder() + '/' + toApiTestFilename(tag) + suffix; + } + public boolean shouldOverwrite(String filename) { return !(skipOverwrite && new File(filename).exists()); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 79b07f2427b..00878ff5236 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -211,6 +211,28 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { writeToFile(filename, tmpl.execute(models)); files.add(new File(filename)); } + + // to generate model test files + for (String templateName : config.modelTestTemplateFiles().keySet()) { + String suffix = config.modelTestTemplateFiles().get(templateName); + String filename = config.modelTestFileFolder() + File.separator + config.toModelTestFilename(name) + suffix; + if (!config.shouldOverwrite(filename)) { + continue; + } + String templateFile = getFullTemplateFile(config, templateName); + String template = readTemplate(templateFile); + Template tmpl = Mustache.compiler() + .withLoader(new Mustache.TemplateLoader() { + @Override + public Reader getTemplate(String name) { + return getTemplateReader(getFullTemplateFile(config, name + ".mustache")); + } + }) + .defaultValue("") + .compile(template); + writeToFile(filename, tmpl.execute(models)); + files.add(new File(filename)); + } } catch (Exception e) { throw new RuntimeException("Could not generate model '" + name + "'", e); } @@ -288,6 +310,29 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { writeToFile(filename, tmpl.execute(operation)); files.add(new File(filename)); } + + for (String templateName : config.apiTestTemplateFiles().keySet()) { + String filename = config.apiTestFilename(templateName, tag); + if (!config.shouldOverwrite(filename) && new File(filename).exists()) { + continue; + } + + String templateFile = getFullTemplateFile(config, templateName); + String template = readTemplate(templateFile); + Template tmpl = Mustache.compiler() + .withLoader(new Mustache.TemplateLoader() { + @Override + public Reader getTemplate(String name) { + return getTemplateReader(getFullTemplateFile(config, name + ".mustache")); + } + }) + .defaultValue("") + .compile(template); + + writeToFile(filename, tmpl.execute(operation)); + files.add(new File(filename)); + } + } catch (Exception e) { throw new RuntimeException("Could not generate api file for '" + tag + "'", e); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index 12e6b3ea8ed..fa5451372c5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -41,9 +41,12 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { outputFolder = "generated-code" + File.separator + "php"; modelTemplateFiles.put("model.mustache", ".php"); apiTemplateFiles.put("api.mustache", ".php"); + modelTestTemplateFiles.put("model_test.mustache", ".php"); + apiTestTemplateFiles.put("api_test.mustache", ".php"); embeddedTemplateDir = templateDir = "php"; apiPackage = invokerPackage + "\\Api"; modelPackage = invokerPackage + "\\Model"; + testPackage = invokerPackage + "\\Tests"; reservedWords = new HashSet( Arrays.asList( @@ -236,6 +239,16 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { return (outputFolder + "/" + toPackagePath(modelPackage, srcBasePath)); } + @Override + public String apiTestFileFolder() { + return (outputFolder + "/" + toPackagePath(testPackage, srcBasePath)); + } + + @Override + public String modelTestFileFolder() { + return (outputFolder + "/" + toPackagePath(testPackage, srcBasePath)); + } + @Override public String getTypeDeclaration(Property p) { if (p instanceof ArrayProperty) { @@ -364,6 +377,12 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { return toModelName(name); } + @Override + public String toModelTestFilename(String name) { + // should be the same as the model name + return toModelName(name) + "Test"; + } + @Override public String toOperationId(String operationId) { // throw exception if method name is empty From 51468503b294227e75959300070811c30232018c Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:05:36 +0100 Subject: [PATCH 13/37] fix post, put, delete and patch when body is null [android-volley-library] --- .../android/libraries/volley/apiInvoker.mustache | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache index 1f3b899d248..dbcfb7c454c 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache @@ -425,6 +425,8 @@ public class ApiInvoker { } else { request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new PostRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("PUT".equals(method)) { @@ -437,6 +439,8 @@ public class ApiInvoker { } else { request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new PutRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("DELETE".equals(method)) { @@ -449,6 +453,8 @@ public class ApiInvoker { } else { request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } + } else { + request = new DeleteRequest(url, headers, null, null, stringRequest, errorListener); } } else if ("PATCH".equals(method)) { @@ -461,7 +467,9 @@ public class ApiInvoker { } else { request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener); } - } + } else { + request = new PatchRequest(url, headers, null, null, stringRequest, errorListener); + } } return request; } From 97e1d1e27352790549cea42a7d78758615b5d4dd Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:06:02 +0100 Subject: [PATCH 14/37] fix networ error excetption for synchronous requests [android-volley-library] --- .../src/main/resources/android/libraries/volley/api.mustache | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache index be1074f4037..d98ef59be18 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache @@ -120,6 +120,9 @@ public class {{classname}} { } catch (InterruptedException ex) { throw ex; } catch (ExecutionException ex) { + if(ex.getCause() instanceof VolleyError) { + throw new ApiException(((VolleyError) ex.getCause()).networkResponse.statusCode, ((VolleyError) ex.getCause()).getMessage()); + } throw ex; } catch (TimeoutException ex) { throw ex; From 060f0f33c2bfd12c2b1894563e3d260c710626da Mon Sep 17 00:00:00 2001 From: Shyri Villar Date: Mon, 18 Jan 2016 22:11:11 +0100 Subject: [PATCH 15/37] add test dependencies [android-volley-library] --- .../resources/android/libraries/volley/build.mustache | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache b/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache index 87d7f4a882c..f3cf1c21da6 100644 --- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache +++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/build.mustache @@ -49,6 +49,10 @@ android { } } } + + testOptions { + unitTests.returnDefaultValues = true + } } @@ -58,6 +62,8 @@ ext { httpclient_version = "4.3.3" volley_version = "1.0.19" junit_version = "4.8.1" + robolectric_version = "3.0" + concurrent_unit_version = "0.4.2" } dependencies { @@ -67,6 +73,8 @@ dependencies { compile "org.apache.httpcomponents:httpmime:$httpclient_version" compile "com.mcxiaoke.volley:library:${volley_version}@aar" testCompile "junit:junit:$junit_version" + testCompile "org.robolectric:robolectric:${robolectric_version}" + testCompile "net.jodah:concurrentunit:${concurrentunitVersion}" } afterEvaluate { From 731fd4be3301fc648b17d36f98cca0dc2c8c0545 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 10:40:43 +0800 Subject: [PATCH 16/37] fix typo --- .../src/main/resources/csharp/ApiClient.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 3b83a33c889..4fabfa4667b 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -61,7 +61,7 @@ namespace {{packageName}}.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + [Obsolete("ApiClient.Default is deprecated, please use 'Configuration.Default.ApiClient' instead.")] public static ApiClient Default; /// From 3269a84632813a28cd294848c4a693cbf4d07e65 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 10:42:17 +0800 Subject: [PATCH 17/37] fix typo Configuraiton --- .../src/main/csharp/IO/Swagger/Client/ApiClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 70b17804f65..9ff8b481e14 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -61,7 +61,7 @@ namespace IO.Swagger.Client /// Gets or sets the default API client for making HTTP calls. /// /// The default API client. - [Obsolete("ApiClient.Default is deprecated, please use 'Configuraiton.Default.ApiClient' instead.")] + [Obsolete("ApiClient.Default is deprecated, please use 'Configuration.Default.ApiClient' instead.")] public static ApiClient Default; /// From 8927c1dc0f7be50d43e29c5c1e2ed192a5cabc71 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 19 Jan 2016 14:49:32 +0800 Subject: [PATCH 18/37] add test template for php --- .../src/main/resources/php/api_test.mustache | 79 ++++++++ .../main/resources/php/model_test.mustache | 74 ++++++++ .../lib/Tests/CategoryTest.php | 70 +++++++ .../SwaggerClient-php/lib/Tests/OrderTest.php | 70 +++++++ .../lib/Tests/PetApiTest.php | 178 ++++++++++++++++++ .../SwaggerClient-php/lib/Tests/PetTest.php | 70 +++++++ .../lib/Tests/StoreApiTest.php | 112 +++++++++++ .../SwaggerClient-php/lib/Tests/TagTest.php | 70 +++++++ .../lib/Tests/UserApiTest.php | 156 +++++++++++++++ .../SwaggerClient-php/lib/Tests/UserTest.php | 70 +++++++ 10 files changed, 949 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/php/api_test.mustache create mode 100644 modules/swagger-codegen/src/main/resources/php/model_test.mustache create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/CategoryTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/OrderTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/TagTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php create mode 100644 samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserTest.php diff --git a/modules/swagger-codegen/src/main/resources/php/api_test.mustache b/modules/swagger-codegen/src/main/resources/php/api_test.mustache new file mode 100644 index 00000000000..ee26ec31ff2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/php/api_test.mustache @@ -0,0 +1,79 @@ + Date: Tue, 19 Jan 2016 19:50:27 +0800 Subject: [PATCH 19/37] add comments --- .../main/java/io/swagger/codegen/DefaultCodegen.java | 12 ++++++++++-- .../java/io/swagger/codegen/DefaultGenerator.java | 1 + .../php/SwaggerClient-php/lib/Tests/PetApiTest.php | 10 ---------- .../php/SwaggerClient-php/lib/Tests/StoreApiTest.php | 4 ---- .../php/SwaggerClient-php/lib/Tests/UserApiTest.php | 8 -------- 5 files changed, 11 insertions(+), 24 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 5b2c45166ac..f9bd468a25b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -284,7 +284,7 @@ public class DefaultCodegen { } /** - * Return the file name of the Api + * Return the file name of the Api Test * * @param name the file name of the Api * @return the file name of the Api @@ -314,7 +314,7 @@ public class DefaultCodegen { } /** - * Return the capitalized file name of the model + * Return the capitalized file name of the model test * * @param name the model name * @return the file name of the model @@ -2071,6 +2071,14 @@ public class DefaultCodegen { return apiFileFolder() + '/' + toApiFilename(tag) + suffix; } + /** + * Return the full path and API test file + * + * @param templateName template name + * @param tag tag + * + * @return the API test file name with full path + */ public String apiTestFilename(String templateName, String tag) { String suffix = apiTestTemplateFiles().get(templateName); return apiTestFileFolder() + '/' + toApiTestFilename(tag) + suffix; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 00878ff5236..c08babd96c0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -311,6 +311,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { files.add(new File(filename)); } + // to generate api test files for (String templateName : config.apiTestTemplateFiles().keySet()) { String filename = config.apiTestFilename(templateName, tag); if (!config.shouldOverwrite(filename) && new File(filename).exists()) { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php index 75928df30d3..3df47d97be1 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/PetApiTest.php @@ -72,7 +72,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updatePet() { - //$body = null } @@ -83,7 +82,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_addPet() { - //$body = null } @@ -94,7 +92,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_findPetsByStatus() { - //$status = null } @@ -105,7 +102,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_findPetsByTags() { - //$tags = null } @@ -116,7 +112,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getPetById() { - //$pet_id } @@ -127,7 +122,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updatePetWithForm() { - //$pet_id, $name = null, $status = null } @@ -138,7 +132,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deletePet() { - //$pet_id, $api_key = null } @@ -149,7 +142,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_uploadFile() { - //$pet_id, $additional_metadata = null, $file = null } @@ -160,7 +152,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getPetByIdWithByteArray() { - //$pet_id } @@ -171,7 +162,6 @@ class PetApiTest extends \PHPUnit_Framework_TestCase * */ public function test_addPetUsingByteArray() { - //$body = null } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php index 14cb5a68290..899f5791c8a 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/StoreApiTest.php @@ -72,7 +72,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getInventory() { - // } @@ -83,7 +82,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_placeOrder() { - //$body = null } @@ -94,7 +92,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getOrderById() { - //$order_id } @@ -105,7 +102,6 @@ class StoreApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deleteOrder() { - //$order_id } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php index f69ccf8ef7b..500b99c4c4f 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Tests/UserApiTest.php @@ -72,7 +72,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUser() { - //$body = null } @@ -83,7 +82,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUsersWithArrayInput() { - //$body = null } @@ -94,7 +92,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_createUsersWithListInput() { - //$body = null } @@ -105,7 +102,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_loginUser() { - //$username = null, $password = null } @@ -116,7 +112,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_logoutUser() { - // } @@ -127,7 +122,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_getUserByName() { - //$username } @@ -138,7 +132,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_updateUser() { - //$username, $body = null } @@ -149,7 +142,6 @@ class UserApiTest extends \PHPUnit_Framework_TestCase * */ public function test_deleteUser() { - //$username } From 14630c763289cd1d09cd880ec6904f23849f0fcf Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 19 Jan 2016 10:46:20 +0800 Subject: [PATCH 20/37] Make JavaScript client work in both Node.js and browser * Replace jQuery with SuperAgent which works in both Node.js and browser * Use UMD pattern (returnExports.js) to make the module exporting compatible with all major systems: AMD, Node.js (CommonJS) and browser * Implement support of header and form parameters. Closes #1736 * Move HTTP requesting code to `ApiClient` and allow customizing options in it, e.g. "basePath" * Update unit tests accordingly and add some tests for `ApiClient` --- .../languages/JavascriptClientCodegen.java | 3 + .../resources/Javascript/ApiClient.mustache | 146 ++ .../main/resources/Javascript/api.mustache | 201 +-- .../main/resources/Javascript/index.mustache | 27 +- .../main/resources/Javascript/model.mustache | 144 +- .../resources/Javascript/package.mustache | 7 +- .../client/petstore/javascript/package.json | 7 +- .../petstore/javascript/src/ApiClient.js | 146 ++ .../petstore/javascript/src/api/PetApi.js | 895 +++++------ .../petstore/javascript/src/api/StoreApi.js | 442 +++--- .../petstore/javascript/src/api/UserApi.js | 775 ++++----- .../client/petstore/javascript/src/index.js | 45 +- .../petstore/javascript/src/model/Category.js | 150 +- .../petstore/javascript/src/model/Order.js | 312 ++-- .../petstore/javascript/src/model/Pet.js | 320 ++-- .../petstore/javascript/src/model/Tag.js | 150 +- .../petstore/javascript/src/model/User.js | 390 ++--- .../petstore/javascript/test/ApiClientTest.js | 69 + .../javascript/test/api/PetApiTest.js | 28 +- .../client/petstore/javascript/test/helper.js | 19 - .../petstore/javascript/test/run_tests.html | 9 +- .../petstore/javascript/test/superagent.js | 1396 +++++++++++++++++ 22 files changed, 3575 insertions(+), 2106 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache create mode 100644 samples/client/petstore/javascript/src/ApiClient.js create mode 100644 samples/client/petstore/javascript/test/ApiClientTest.js delete mode 100644 samples/client/petstore/javascript/test/helper.js create mode 100644 samples/client/petstore/javascript/test/superagent.js diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index ac680d59463..9f76abed151 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -133,6 +133,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo typeMapping.put("double", "Number"); typeMapping.put("number", "Number"); typeMapping.put("DateTime", "Date"); + // binary not supported in JavaScript client right now, using Object as a workaround + typeMapping.put("binary", "Object"); importMapping.clear(); } @@ -205,6 +207,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); + supportingFiles.add(new SupportingFile("ApiClient.mustache", sourceFolder, "ApiClient.js")); } @Override diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache new file mode 100644 index 00000000000..2f85250694d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -0,0 +1,146 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['superagent'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('superagent')); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; + } + root.{{moduleName}}.ApiClient = factory(root.superagent); + } +}(this, function(superagent) { + 'use strict'; + + var ApiClient = function ApiClient() { + this.basePath = '{{basePath}}'.replace(/\/+$/, ''); + }; + + ApiClient.prototype.paramToString = function paramToString(param) { + if (param == null) { + // return empty string for null and undefined + return ''; + } else { + return param.toString(); + } + }; + + /** + * Build full URL by appending the given path to base path and replacing + * path parameter placeholders with parameter values. + * NOTE: query parameters are not handled here. + */ + ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) { + if (!path.match(/^\//)) { + path = '/' + path; + } + var url = this.basePath + path; + var _this = this; + url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) { + var value; + if (pathParams.hasOwnProperty(key)) { + value = _this.paramToString(pathParams[key]); + } else { + value = fullMatch; + } + return encodeURIComponent(value); + }); + return url; + }; + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + */ + ApiClient.prototype.isJsonMime = function isJsonMime(mime) { + return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i)); + }; + + /** + * Choose a MIME from the given MIMEs with JSON preferred, + * i.e. return JSON if included, otherwise return the first one. + */ + ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) { + var len = mimes.length; + for (var i = 0; i < len; i++) { + if (this.isJsonMime(mimes[i])) { + return mimes[i]; + } + } + return mimes[0]; + }; + + /** + * Normalize parameters values: + * remove nils, + * keep files and arrays, + * format to string with `paramToString` for other cases. + */ + ApiClient.prototype.normalizeParams = function normalizeParams(params) { + var newParams = {}; + for (var key in params) { + if (params.hasOwnProperty(key) && params[key] != null) { + var value = params[key]; + if (value instanceof Blob || Array.isArray(value)) { + newParams[key] = value; + } else { + newParams[key] = this.paramToString(value); + } + } + } + return newParams; + }; + + ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, + queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, + callback) { + var url = this.buildUrl(path, pathParams); + var request = superagent(httpMethod, url); + + // set query parameters + request.query(this.normalizeParams(queryParams)); + + // set header parameters + request.set(this.normalizeParams(headerParams)); + + var contentType = this.jsonPreferredMime(contentTypes) || 'application/json'; + request.type(contentType); + + if (contentType === 'application/x-www-form-urlencoded') { + request.send(this.normalizeParams(formParams)); + } else if (contentType == 'multipart/form-data') { + var _formParams = this.normalizeParams(formParams); + for (var key in _formParams) { + if (_formParams.hasOwnProperty(key)) { + if (_formParams[key] instanceof Blob) { + // file field + request.attach(key, _formParams[key]); + } else { + request.field(key, _formParams[key]); + } + } + } + } else if (bodyParam) { + request.send(bodyParam); + } + + request.end(function(error, response) { + if (callback) { + var data = response && response.body; + callback(error, data, response); + } + }); + + return request; + }; + + ApiClient.default = new ApiClient(); + + return ApiClient; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index 9957fc4e2c5..a61e4912596 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -1,125 +1,86 @@ -// require files in Node.js environment -var ${{#imports}}, {{import}}{{/imports}}; -if (typeof module === 'object' && module.exports) { - $ = require('jquery');{{#imports}} - {{import}} = require('../model/{{import}}.js');{{/imports}} -} - -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery'{{#imports}}, '{{import}}'{{/imports}}], function(${{#imports}}, {{import}}{{/imports}}) { - return {{classname}}; - }); -} - -var {{classname}} = function {{classname}}() { - var self = this; - {{#operations}} - {{#operation}} - /** - * {{summary}} - * {{notes}} -{{#allParams}} * @param {{=<% %>=}}{<% dataType %>} <%={{ }}=%> {{paramName}} {{description}} -{{/allParams}} * @param {function} callback the callback function - * @return {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} - */ - self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}callback) { - var {{localVariablePrefix}}postBody = {{#bodyParam}}{{^isBinary}}JSON.stringify({{paramName}}){{/isBinary}}{{#isBinary}}null{{/isBinary}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; - var {{localVariablePrefix}}postBinaryBody = {{#bodyParam}}{{#isBinary}}{{paramName}}{{/isBinary}}{{^isBinary}}null{{/isBinary}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; - {{#allParams}}{{#required}} - // verify the required parameter '{{paramName}}' is set - if ({{paramName}} == null) { - //throw new ApiException(400, "Missing the required parameter '{{paramName}}' when calling {{nickname}}"); - var errorRequiredMsg = "Missing the required parameter '{{paramName}}' when calling {{nickname}}"; - throw errorRequiredMsg; - } - {{/required}}{{/allParams}} - // create path and map variables - var basePath = '{{basePath}}'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient'{{#imports}}, '../model/{{import}}'{{/imports}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'){{#imports}}, require('../model/{{import}}.js'){{/imports}}); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; } - - var {{localVariablePrefix}}path = basePath + replaceAll(replaceAll("{{{path}}}", "\\{format\\}","json"){{#pathParams}} -, "\\{" + "{{baseName}}" + "\\}", encodeURIComponent({{{paramName}}}.toString()){{/pathParams}}); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - {{#queryParams}} - queryParams.{{baseName}} = {{paramName}}; - {{/queryParams}} - {{#headerParams}}if ({{paramName}} != null) - {{localVariablePrefix}}headerParams.put("{{baseName}}", {{paramName}}); - {{/headerParams}} - {{#formParams}}if ({{paramName}} != null) - {{localVariablePrefix}}formParams.put("{{baseName}}", {{paramName}}); - {{/formParams}} - - path += createQueryString(queryParams); - - var options = {type: "{{httpMethod}}", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - {{#returnType}} - /** - * @returns {{{returnType}}} - */ - {{#returnTypeIsPrimitive}}var myResponse = response;{{/returnTypeIsPrimitive}} - {{^returnTypeIsPrimitive}}var myResponse = new {{{returnType}}}(); - myResponse.constructFromObject(response);{{/returnTypeIsPrimitive}} - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - {{/returnType}}{{^returnType}} - if (callback) { - callback(response, textStatus, jqXHR); - } - {{/returnType}} - }); - - return request; + root.{{moduleName}}.{{classname}} = factory(root.{{moduleName}}.ApiClient{{#imports}}, root.{{moduleName}}.{{import}}{{/imports}}); } - {{/operation}} - {{/operations}} +}(this, function(ApiClient{{#imports}}, {{import}}{{/imports}}) { + 'use strict'; - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } + var {{classname}} = function {{classname}}(apiClient) { + this.apiClient = apiClient || ApiClient.default; - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} + var self = this; + {{#operations}} + {{#operation}} + /** + * {{summary}} + * {{notes}} + {{#allParams}} * @param {{=<% %>=}}{<% dataType %>} <%={{ }}=%> {{paramName}} {{description}} + {{/allParams}} * @param {function} callback the callback function, accepting three arguments: error, data, response{{#returnType}} + * data is of type: {{{returnType}}}{{/returnType}} + */ + self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}callback) { + var postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; + {{#allParams}}{{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) { + throw "Missing the required parameter '{{paramName}}' when calling {{nickname}}"; + } + {{/required}}{{/allParams}} -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = {{classname}}; -} + {{=< >=}} + var pathParams = {<#pathParams> + '': <#hasMore>, + }; + var queryParams = {<#queryParams> + '': <#hasMore>, + }; + var headerParams = {<#headerParams> + '': <#hasMore>, + }; + var formParams = {<#formParams> + '': <#hasMore>, + }; + + var contentTypes = [<#consumes>''<#hasMore>, ]; + var accepts = [<#produces>''<#hasMore>, ]; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) {<#returnType><#returnTypeIsPrimitive> + callback(error, data, response);<^returnTypeIsPrimitive><#isListContainer> + // TODO: support deserializing array of models + callback(error, data, response);<^isListContainer> + if (!error && data) { + var result = new <&returnType>(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + }<^returnType> + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '<&path>', '', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + <={{ }}=> + } + {{/operation}} + {{/operations}} + }; + + return {{classname}}; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/index.mustache b/modules/swagger-codegen/src/main/resources/Javascript/index.mustache index a0207a6cc91..7bb0329fa01 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/index.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/index.mustache @@ -1,10 +1,17 @@ -if (typeof module === 'object' && module.exports) { - var {{moduleName}} = {}; - {{#models}} - {{moduleName}}.{{importPath}} = require('./model/{{importPath}}.js'); - {{/models}} - {{#apiInfo}}{{#apis}} - {{moduleName}}.{{importPath}} = require('./api/{{importPath}}.js'); - {{/apis}}{{/apiInfo}} - module.exports = {{moduleName}}; -} \ No newline at end of file +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./ApiClient'{{#models}}, './model/{{importPath}}'{{/models}}{{#apiInfo}}{{#apis}}, './api/{{importPath}}'{{/apis}}{{/apiInfo}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('./ApiClient.js'){{#models}}, require('./model/{{importPath}}.js'){{/models}}{{#apiInfo}}{{#apis}}, require('./api/{{importPath}}.js'){{/apis}}{{/apiInfo}}); + } +}(function(ApiClient{{#models}}, {{importPath}}{{/models}}{{#apiInfo}}{{#apis}}, {{importPath}}{{/apis}}{{/apiInfo}}) { + 'use strict'; + + return { + ApiClient: ApiClient{{#models}}, + {{importPath}}: {{importPath}}{{/models}}{{#apiInfo}}{{#apis}}, + {{importPath}}: {{importPath}}{{/apis}}{{/apiInfo}} + }; +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index 0588d03a8c1..9f265c89cf7 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -1,75 +1,79 @@ -// require files in Node.js environment -{{#imports}} -var {{import}};{{/imports}} -if (typeof module === 'object' && module.exports) { - {{#imports}} - {{import}} = require('./{{import}}.js');{{/imports}} -} - -{{#models}}{{#model}} -{{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} -{{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} - -//export module -if ( typeof define === "function" && define.amd ) { - define('{{classname}}', ['jquery'{{#vars}}{{^isPrimitiveType}}{{^-last}}, {{/-last}}'{{datatypeWithEnum}}'{{/isPrimitiveType}}{{/vars}}], - function(${{#vars}}{{^isPrimitiveType}}{{^-last}}, {{/-last}}{{datatypeWithEnum}}{{/isPrimitiveType}}{{/vars}}) { - return {{classname}}; - }); -} - -{{#description}}/** - * {{description}} - **/{{/description}} -var {{classname}} = function {{classname}}({{#mandatory}}{{this}}{{^-last}}, {{/-last}}{{/mandatory}}) { {{#parent}}/* extends {{{parent}}}*/{{/parent}} - var self = this; - {{#vars}} - /**{{#description}} - * {{{description}}}{{/description}} - * datatype: {{{datatypeWithEnum}}}{{#required}} - * required{{/required}}{{#minimum}} - * minimum: {{minimum}}{{/minimum}}{{#maximum}} - * maximum: {{maximum}}{{/maximum}} - **/ - self.{{name}} = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; - {{/vars}} - - self.constructFromObject = function(data) { - if (!data) { - return; +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined{{#imports}}, './{{import}}'{{/imports}}], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined{{#imports}}, require('./{{import}}.js'){{/imports}}); + } else { + // Browser globals (root is window) + if (!root.{{moduleName}}) { + root.{{moduleName}} = {}; } + factory(root.{{moduleName}}{{#imports}}, root.{{moduleName}}.{{import}}{{/imports}}); + } +}(this, function(module{{#imports}}, {{import}}{{/imports}}) { + 'use strict'; + + {{#models}}{{#model}} + {{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} + {{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} + + {{#description}}/** + * {{description}} + **/{{/description}} + var {{classname}} = function {{classname}}({{#mandatory}}{{this}}{{^-last}}, {{/-last}}{{/mandatory}}) { {{#parent}}/* extends {{{parent}}}*/{{/parent}} + var self = this; {{#vars}} - self.{{name}}{{{defaultValueWithParam}}} + /**{{#description}} + * {{{description}}}{{/description}} + * datatype: {{{datatypeWithEnum}}}{{#required}} + * required{{/required}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + **/ + self.{{name}} = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; {{/vars}} + + self.constructFromObject = function(data) { + if (!data) { + return; + } + {{#vars}} + self.{{name}}{{{defaultValueWithParam}}} + {{/vars}} + } + + {{#vars}} + /**{{#description}} + * get {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> + **/ + self.{{getter}} = function() { + return self.{{name}}; + } + + /**{{#description}} + * set {{{description}}}{{/description}} + * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} + **/ + self.{{setter}} = function ({{name}}) { + self.{{name}} = {{name}}; + } + {{/vars}} + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.{{classname}} = {{classname}}; } - {{#vars}} - /**{{#description}} - * get {{{description}}}{{/description}}{{#minimum}} - * minimum: {{minimum}}{{/minimum}}{{#maximum}} - * maximum: {{maximum}}{{/maximum}} - * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> - **/ - self.{{getter}} = function() { - return self.{{name}}; - } - - /**{{#description}} - * set {{{description}}}{{/description}} - * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} - **/ - self.{{setter}} = function ({{name}}) { - self.{{name}} = {{name}}; - } - {{/vars}} - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = {{classname}}; -} -{{/model}} -{{/models}} + return {{classname}}; + {{/model}} + {{/models}} +})); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache index c77ee835709..1e7650a1ba1 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache @@ -8,13 +8,10 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "jquery": "~2.1.4" + "superagent": "^1.6.1" }, "devDependencies": { "mocha": "~2.3.4", - "expect.js": "~0.3.1", - "mockrequire": "~0.0.5", - "domino": "~1.0.20", - "xmlhttprequest": "~1.8.0" + "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/package.json b/samples/client/petstore/javascript/package.json index 6810fd633de..fe470da8b27 100644 --- a/samples/client/petstore/javascript/package.json +++ b/samples/client/petstore/javascript/package.json @@ -8,13 +8,10 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "jquery": "~2.1.4" + "superagent": "^1.6.1" }, "devDependencies": { "mocha": "~2.3.4", - "expect.js": "~0.3.1", - "mockrequire": "~0.0.5", - "domino": "~1.0.20", - "xmlhttprequest": "~1.8.0" + "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js new file mode 100644 index 00000000000..8138225e2b2 --- /dev/null +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -0,0 +1,146 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['superagent'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('superagent')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.ApiClient = factory(root.superagent); + } +}(this, function(superagent) { + 'use strict'; + + var ApiClient = function ApiClient() { + this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + }; + + ApiClient.prototype.paramToString = function paramToString(param) { + if (param == null) { + // return empty string for null and undefined + return ''; + } else { + return param.toString(); + } + }; + + /** + * Build full URL by appending the given path to base path and replacing + * path parameter placeholders with parameter values. + * NOTE: query parameters are not handled here. + */ + ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) { + if (!path.match(/^\//)) { + path = '/' + path; + } + var url = this.basePath + path; + var _this = this; + url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) { + var value; + if (pathParams.hasOwnProperty(key)) { + value = _this.paramToString(pathParams[key]); + } else { + value = fullMatch; + } + return encodeURIComponent(value); + }); + return url; + }; + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + */ + ApiClient.prototype.isJsonMime = function isJsonMime(mime) { + return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i)); + }; + + /** + * Choose a MIME from the given MIMEs with JSON preferred, + * i.e. return JSON if included, otherwise return the first one. + */ + ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) { + var len = mimes.length; + for (var i = 0; i < len; i++) { + if (this.isJsonMime(mimes[i])) { + return mimes[i]; + } + } + return mimes[0]; + }; + + /** + * Normalize parameters values: + * remove nils, + * keep files and arrays, + * format to string with `paramToString` for other cases. + */ + ApiClient.prototype.normalizeParams = function normalizeParams(params) { + var newParams = {}; + for (var key in params) { + if (params.hasOwnProperty(key) && params[key] != null) { + var value = params[key]; + if (value instanceof Blob || Array.isArray(value)) { + newParams[key] = value; + } else { + newParams[key] = this.paramToString(value); + } + } + } + return newParams; + }; + + ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, + queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, + callback) { + var url = this.buildUrl(path, pathParams); + var request = superagent(httpMethod, url); + + // set query parameters + request.query(this.normalizeParams(queryParams)); + + // set header parameters + request.set(this.normalizeParams(headerParams)); + + var contentType = this.jsonPreferredMime(contentTypes) || 'application/json'; + request.type(contentType); + + if (contentType === 'application/x-www-form-urlencoded') { + request.send(this.normalizeParams(formParams)); + } else if (contentType == 'multipart/form-data') { + var _formParams = this.normalizeParams(formParams); + for (var key in _formParams) { + if (_formParams.hasOwnProperty(key)) { + if (_formParams[key] instanceof Blob) { + // file field + request.attach(key, _formParams[key]); + } else { + request.field(key, _formParams[key]); + } + } + } + } else if (bodyParam) { + request.send(bodyParam); + } + + request.end(function(error, response) { + if (callback) { + var data = response && response.body; + callback(error, data, response); + } + }); + + return request; + }; + + ApiClient.default = new ApiClient(); + + return ApiClient; +})); diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 3b6d9c5b4c6..b6c1163111f 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -1,527 +1,462 @@ -// require files in Node.js environment -var $, Pet; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - Pet = require('../model/Pet.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Pet'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/Pet.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.PetApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Pet); + } +}(this, function(ApiClient, Pet) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'Pet'], function($, Pet) { - return PetApi; - }); -} + var PetApi = function PetApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var PetApi = function PetApi() { - var self = this; - - - /** - * Update an existing pet - * - * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function - * @return void - */ - self.updatePet = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Update an existing pet + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePet = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "PUT", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Add a new pet to the store + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPet = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Add a new pet to the store - * - * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function - * @return void - */ - self.addPet = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Finds Pets by status + * Multiple status values can be provided with comma seperated strings + * @param {Array} status Status values that need to be considered for filter + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Array + */ + self.findPetsByStatus = function(status, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + 'status': status + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + // TODO: support deserializing array of models + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/findByStatus', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Finds Pets by status - * Multiple status values can be provided with comma seperated strings - * @param {Array} status Status values that need to be considered for filter - * @param {function} callback the callback function - * @return Array - */ - self.findPetsByStatus = function(status, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet/findByStatus", "\\{format\\}","json")); + /** + * Finds Pets by tags + * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + * @param {Array} tags Tags to filter by + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Array + */ + self.findPetsByTags = function(tags, callback) { + var postBody = null; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + 'tags': tags + }; + var headerParams = { + }; + var formParams = { + }; - - queryParams.status = status; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + // TODO: support deserializing array of models + callback(error, data, response); + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/pet/findByTags', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns Array - */ - - var myResponse = new Array(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Finds Pets by tags - * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - * @param {Array} tags Tags to filter by - * @param {function} callback the callback function - * @return Array - */ - self.findPetsByTags = function(tags, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/pet/findByTags", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - queryParams.tags = tags; - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Pet + */ + self.getPetById = function(petId, callback) { + var postBody = null; - /** - * @returns Array - */ - - var myResponse = new Array(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetById"; } - }); - - return request; - } - - /** - * Find pet by ID - * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - * @param {Integer} petId ID of pet that needs to be fetched - * @param {function} callback the callback function - * @return Pet - */ - self.getPetById = function(petId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling getPetById"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling getPetById"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Pet(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Updates a pet in the store with form data + * + * @param {String} petId ID of pet that needs to be updated + * @param {String} name Updated name of the pet + * @param {String} status Updated status of the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePetWithForm = function(petId, name, status, callback) { + var postBody = null; - /** - * @returns Pet - */ - - var myResponse = new Pet(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling updatePetWithForm"; } - }); - - return request; - } - - /** - * Updates a pet in the store with form data - * - * @param {String} petId ID of pet that needs to be updated - * @param {String} name Updated name of the pet - * @param {String} status Updated status of the pet - * @param {function} callback the callback function - * @return void - */ - self.updatePetWithForm = function(petId, name, status, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling updatePetWithForm"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling updatePetWithForm"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'name': name, + 'status': status + }; + + var contentTypes = ['application/x-www-form-urlencoded']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - if (name != null) - formParams.put("name", name); - if (status != null) - formParams.put("status", status); - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Deletes a pet + * + * @param {Integer} petId Pet id to delete + * @param {String} apiKey + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deletePet = function(petId, apiKey, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling deletePet"; } - }); - - return request; - } - - /** - * Deletes a pet - * - * @param {Integer} petId Pet id to delete - * @param {String} apiKey - * @param {function} callback the callback function - * @return void - */ - self.deletePet = function(petId, apiKey, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling deletePet"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling deletePet"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + 'api_key': apiKey + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - if (apiKey != null) - headerParams.put("api_key", apiKey); - - - - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * uploads an image + * + * @param {Integer} petId ID of pet to update + * @param {String} additionalMetadata Additional data to pass to server + * @param {File} file file to upload + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.uploadFile = function(petId, additionalMetadata, file, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling uploadFile"; } - }); - - return request; - } - - /** - * uploads an image - * - * @param {Integer} petId ID of pet to update - * @param {String} additionalMetadata Additional data to pass to server - * @param {File} file file to upload - * @param {function} callback the callback function - * @return void - */ - self.uploadFile = function(petId, additionalMetadata, file, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'petId' is set - if (petId == null) { - //throw new ApiException(400, "Missing the required parameter 'petId' when calling uploadFile"); - var errorRequiredMsg = "Missing the required parameter 'petId' when calling uploadFile"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'additionalMetadata': additionalMetadata, + 'file': file + }; + + var contentTypes = ['multipart/form-data']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}/uploadImage', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/pet/{petId}/uploadImage", "\\{format\\}","json") -, "\\{" + "petId" + "\\}", encodeURIComponent(petId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - if (additionalMetadata != null) - formParams.put("additionalMetadata", additionalMetadata); - if (file != null) - formParams.put("file", file); - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Object + */ + self.getPetByIdWithByteArray = function(petId, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"; } - }); - - return request; - } - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = PetApi; -} + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet/{petId}?testing_byte_array=true', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param {Object} body Pet object in the form of byte array + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPetUsingByteArray = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/pet?testing_byte_array=true', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + + } + + + }; + + return PetApi; +})); diff --git a/samples/client/petstore/javascript/src/api/StoreApi.js b/samples/client/petstore/javascript/src/api/StoreApi.js index e52a3105964..28928fd40c2 100644 --- a/samples/client/petstore/javascript/src/api/StoreApi.js +++ b/samples/client/petstore/javascript/src/api/StoreApi.js @@ -1,286 +1,206 @@ -// require files in Node.js environment -var $, Order; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - Order = require('../model/Order.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Order'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/Order.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.StoreApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Order); + } +}(this, function(ApiClient, Order) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'Order'], function($, Order) { - return StoreApi; - }); -} + var StoreApi = function StoreApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var StoreApi = function StoreApi() { - var self = this; - - - /** - * Returns pet inventories by status - * Returns a map of status codes to quantities - * @param {function} callback the callback function - * @return Object - */ - self.getInventory = function(callback) { - var postBody = null; - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Object + */ + self.getInventory = function(callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/store/inventory', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/inventory", "\\{format\\}","json")); + /** + * Place an order for a pet + * + * @param {Order} body order placed for purchasing the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.placeOrder = function(body, callback) { + var postBody = body; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Order(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/store/order', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns Object - */ - var myResponse = response; - - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Place an order for a pet - * - * @param {Order} body order placed for purchasing the pet - * @param {function} callback the callback function - * @return Order - */ - self.placeOrder = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/store/order", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param {String} orderId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.getOrderById = function(orderId, callback) { + var postBody = null; - /** - * @returns Order - */ - - var myResponse = new Order(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling getOrderById"; } - }); - - return request; - } - - /** - * Find purchase order by ID - * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * @param {String} orderId ID of pet that needs to be fetched - * @param {function} callback the callback function - * @return Order - */ - self.getOrderById = function(orderId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - //throw new ApiException(400, "Missing the required parameter 'orderId' when calling getOrderById"); - var errorRequiredMsg = "Missing the required parameter 'orderId' when calling getOrderById"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new Order(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/store/order/{orderId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/order/{orderId}", "\\{format\\}","json") -, "\\{" + "orderId" + "\\}", encodeURIComponent(orderId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param {String} orderId ID of the order that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteOrder = function(orderId, callback) { + var postBody = null; - /** - * @returns Order - */ - - var myResponse = new Order(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling deleteOrder"; } - }); - - return request; - } - - /** - * Delete purchase order by ID - * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * @param {String} orderId ID of the order that needs to be deleted - * @param {function} callback the callback function - * @return void - */ - self.deleteOrder = function(orderId, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'orderId' is set - if (orderId == null) { - //throw new ApiException(400, "Missing the required parameter 'orderId' when calling deleteOrder"); - var errorRequiredMsg = "Missing the required parameter 'orderId' when calling deleteOrder"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/store/order/{orderId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/store/order/{orderId}", "\\{format\\}","json") -, "\\{" + "orderId" + "\\}", encodeURIComponent(orderId.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - + }; - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - - if (callback) { - callback(response, textStatus, jqXHR); - } - - }); - - return request; - } - - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } - - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} - -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = StoreApi; -} + return StoreApi; +})); diff --git a/samples/client/petstore/javascript/src/api/UserApi.js b/samples/client/petstore/javascript/src/api/UserApi.js index 148e6171ed4..656bf56dd86 100644 --- a/samples/client/petstore/javascript/src/api/UserApi.js +++ b/samples/client/petstore/javascript/src/api/UserApi.js @@ -1,498 +1,361 @@ -// require files in Node.js environment -var $, User; -if (typeof module === 'object' && module.exports) { - $ = require('jquery'); - User = require('../model/User.js'); -} +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/User'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient.js'), require('../model/User.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.UserApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.User); + } +}(this, function(ApiClient, User) { + 'use strict'; -// export module for AMD -if ( typeof define === "function" && define.amd ) { - define(['jquery', 'User'], function($, User) { - return UserApi; - }); -} + var UserApi = function UserApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; -var UserApi = function UserApi() { - var self = this; - - - /** - * Create user - * This can only be done by the logged in user. - * @param {User} body Created user object - * @param {function} callback the callback function - * @return void - */ - self.createUser = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; + var self = this; - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + /** + * Create user + * This can only be done by the logged in user. + * @param {User} body Created user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUser = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Creates list of users with given input array + * + * @param {Array} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithArrayInput = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/createWithArray', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Creates list of users with given input array - * - * @param {Array} body List of user object - * @param {function} callback the callback function - * @return void - */ - self.createUsersWithArrayInput = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/createWithArray", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Creates list of users with given input array + * + * @param {Array} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithListInput = function(body, callback) { + var postBody = body; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/createWithList', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Creates list of users with given input array - * - * @param {Array} body List of user object - * @param {function} callback the callback function - * @return void - */ - self.createUsersWithListInput = function(body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/createWithList", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "POST", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Logs user into the system + * + * @param {String} username The user name for login + * @param {String} password The password for login in clear text + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: String + */ + self.loginUser = function(username, password, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); - } + + + var pathParams = { + }; + var queryParams = { + 'username': username, + 'password': password + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/login', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - }); - - return request; - } - - /** - * Logs user into the system - * - * @param {String} username The user name for login - * @param {String} password The password for login in clear text - * @param {function} callback the callback function - * @return String - */ - self.loginUser = function(username, password, callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/login", "\\{format\\}","json")); + /** + * Logs out current logged in user session + * + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.logoutUser = function(callback) { + var postBody = null; + - var queryParams = {}; - var headerParams = {}; - var formParams = {}; + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; - - queryParams.username = username; - - queryParams.password = password; - - - + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ + var handleResponse = null; if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); + handleResponse = function(error, data, response) { + callback(error, data, response); + }; } - }); - - request.done(function(response, textStatus, jqXHR){ + + return this.apiClient.callApi( + '/user/logout', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); - /** - * @returns String - */ - var myResponse = response; - - if (callback) { - callback(myResponse, textStatus, jqXHR); - } - - }); - - return request; - } - - /** - * Logs out current logged in user session - * - * @param {function} callback the callback function - * @return void - */ - self.logoutUser = function(callback) { - var postBody = null; - var postBinaryBody = null; - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); } - var path = basePath + replaceAll(replaceAll("/user/logout", "\\{format\\}","json")); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Get user by user name + * + * @param {String} username The name that needs to be fetched. Use user1 for testing. + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: User + */ + self.getUserByName = function(username, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling getUserByName"; } - }); - - return request; - } - - /** - * Get user by user name - * - * @param {String} username The name that needs to be fetched. Use user1 for testing. - * @param {function} callback the callback function - * @return User - */ - self.getUserByName = function(username, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling getUserByName"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling getUserByName"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + if (!error && data) { + var result = new User(); + result.constructFromObject(data); + callback(error, result, response); + } else { + callback(error, data, response); + } + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "GET", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Updated user + * This can only be done by the logged in user. + * @param {String} username name that need to be deleted + * @param {User} body Updated user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updateUser = function(username, body, callback) { + var postBody = body; - /** - * @returns User - */ - - var myResponse = new User(); - myResponse.constructFromObject(response); - if (callback) { - callback(myResponse, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling updateUser"; } - }); - - return request; - } - - /** - * Updated user - * This can only be done by the logged in user. - * @param {String} username name that need to be deleted - * @param {User} body Updated user object - * @param {function} callback the callback function - * @return void - */ - self.updateUser = function(username, body, callback) { - var postBody = JSON.stringify(body); - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling updateUser"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling updateUser"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - - - - path += createQueryString(queryParams); - - var options = {type: "PUT", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ + /** + * Delete user + * This can only be done by the logged in user. + * @param {String} username The name that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteUser = function(username, callback) { + var postBody = null; - if (callback) { - callback(response, textStatus, jqXHR); + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling deleteUser"; } - }); - - return request; - } - - /** - * Delete user - * This can only be done by the logged in user. - * @param {String} username The name that needs to be deleted - * @param {function} callback the callback function - * @return void - */ - self.deleteUser = function(username, callback) { - var postBody = null; - var postBinaryBody = null; - - // verify the required parameter 'username' is set - if (username == null) { - //throw new ApiException(400, "Missing the required parameter 'username' when calling deleteUser"); - var errorRequiredMsg = "Missing the required parameter 'username' when calling deleteUser"; - throw errorRequiredMsg; - } - - // create path and map variables - var basePath = 'http://petstore.swagger.io/v2'; - // if basePath ends with a /, remove it as path starts with a leading / - if (basePath.substring(basePath.length-1, basePath.length)=='/') { - basePath = basePath.substring(0, basePath.length-1); + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + + var handleResponse = null; + if (callback) { + handleResponse = function(error, data, response) { + callback(error, data, response); + }; + } + + return this.apiClient.callApi( + '/user/{username}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, handleResponse + ); + } - var path = basePath + replaceAll(replaceAll("/user/{username}", "\\{format\\}","json") -, "\\{" + "username" + "\\}", encodeURIComponent(username.toString())); - - var queryParams = {}; - var headerParams = {}; - var formParams = {}; - - - + }; - path += createQueryString(queryParams); - - var options = {type: "DELETE", async: true, contentType: "application/json", dataType: "json", data: postBody}; - var request = $.ajax(path, options); - - request.fail(function(jqXHR, textStatus, errorThrown){ - if (callback) { - var error = errorThrown || textStatus || jqXHR.statusText || 'error'; - callback(null, textStatus, jqXHR, error); - } - }); - - request.done(function(response, textStatus, jqXHR){ - - if (callback) { - callback(response, textStatus, jqXHR); - } - - }); - - return request; - } - - - - function replaceAll (haystack, needle, replace) { - var result= haystack; - if (needle !=null && replace!=null) { - result= haystack.replace(new RegExp(needle, 'g'), replace); - } - return result; - } - - function createQueryString (queryParams) { - var queryString =''; - var i = 0; - for (var queryParamName in queryParams) { - if (i==0) { - queryString += '?' ; - } else { - queryString += '&' ; - } - - queryString += queryParamName + '=' + encodeURIComponent(queryParams[queryParamName]); - i++; - } - - return queryString; - } -} - -// export module for Node.js -if (typeof module === 'object' && module.exports) { - module.exports = UserApi; -} + return UserApi; +})); diff --git a/samples/client/petstore/javascript/src/index.js b/samples/client/petstore/javascript/src/index.js index b772f6024dc..725eb486075 100644 --- a/samples/client/petstore/javascript/src/index.js +++ b/samples/client/petstore/javascript/src/index.js @@ -1,22 +1,23 @@ -if (typeof module === 'object' && module.exports) { - var SwaggerPetstore = {}; - - SwaggerPetstore.User = require('./model/User.js'); - - SwaggerPetstore.Category = require('./model/Category.js'); - - SwaggerPetstore.Pet = require('./model/Pet.js'); - - SwaggerPetstore.Tag = require('./model/Tag.js'); - - SwaggerPetstore.Order = require('./model/Order.js'); - - - SwaggerPetstore.UserApi = require('./api/UserApi.js'); - - SwaggerPetstore.StoreApi = require('./api/StoreApi.js'); - - SwaggerPetstore.PetApi = require('./api/PetApi.js'); - - module.exports = SwaggerPetstore; -} \ No newline at end of file +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./ApiClient', './model/User', './model/Category', './model/Pet', './model/Tag', './model/Order', './api/UserApi', './api/StoreApi', './api/PetApi'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('./ApiClient.js'), require('./model/User.js'), require('./model/Category.js'), require('./model/Pet.js'), require('./model/Tag.js'), require('./model/Order.js'), require('./api/UserApi.js'), require('./api/StoreApi.js'), require('./api/PetApi.js')); + } +}(function(ApiClient, User, Category, Pet, Tag, Order, UserApi, StoreApi, PetApi) { + 'use strict'; + + return { + ApiClient: ApiClient, + User: User, + Category: Category, + Pet: Pet, + Tag: Tag, + Order: Order, + UserApi: UserApi, + StoreApi: StoreApi, + PetApi: PetApi + }; +})); diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index ff40497a61a..6b302a32f30 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -1,81 +1,89 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { - -} - - - - -//export module -if ( typeof define === "function" && define.amd ) { - define('Category', ['jquery'], - function($) { - return Category; - }); -} - - -var Category = function Category() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.name = null; - self.constructFromObject = function(data) { - if (!data) { - return; + + + var Category = function Category() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.name = null; + + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.name = data.name; + + } + + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; - - self.name = data.name; + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Category = Category; } + return Category; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Category; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 3cf2335b535..9f641242bf8 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -1,11 +1,22 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { -} - - - + //export module if ( typeof define === "function" && define.amd ) { define('StatusEnum', ['jquery'], function($) { @@ -35,162 +46,159 @@ var StatusEnum = function StatusEnum() { } -//export module -if ( typeof define === "function" && define.amd ) { - define('Order', ['jquery'], - function($) { - return Order; - }); -} + + var Order = function Order() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: Integer + **/ + self.petId = null; + + /** + * datatype: Integer + **/ + self.quantity = null; + + /** + * datatype: Date + **/ + self.shipDate = null; + + /** + * Order Status + * datatype: StatusEnum + **/ + self.status = null; + + /** + * datatype: Boolean + **/ + self.complete = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.petId = data.petId; + + self.quantity = data.quantity; + + self.shipDate = data.shipDate; + + self.status = data.status; + + self.complete = data.complete; + + } -var Order = function Order() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: Integer - **/ - self.petId = null; - - /** - * datatype: Integer - **/ - self.quantity = null; - - /** - * datatype: Date - **/ - self.shipDate = null; - - /** - * Order Status - * datatype: StatusEnum - **/ - self.status = null; - - /** - * datatype: Boolean - **/ - self.complete = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {Integer} + **/ + self.getPetId = function() { + return self.petId; + } + + /** + * @param {Integer} petId + **/ + self.setPetId = function (petId) { + self.petId = petId; + } - self.petId = data.petId; + /** + * @return {Integer} + **/ + self.getQuantity = function() { + return self.quantity; + } + + /** + * @param {Integer} quantity + **/ + self.setQuantity = function (quantity) { + self.quantity = quantity; + } - self.quantity = data.quantity; + /** + * @return {Date} + **/ + self.getShipDate = function() { + return self.shipDate; + } + + /** + * @param {Date} shipDate + **/ + self.setShipDate = function (shipDate) { + self.shipDate = shipDate; + } - self.shipDate = data.shipDate; + /** + * get Order Status + * @return {StatusEnum} + **/ + self.getStatus = function() { + return self.status; + } + + /** + * set Order Status + * @param {StatusEnum} status + **/ + self.setStatus = function (status) { + self.status = status; + } - self.status = data.status; - - self.complete = data.complete; + /** + * @return {Boolean} + **/ + self.getComplete = function() { + return self.complete; + } + + /** + * @param {Boolean} complete + **/ + self.setComplete = function (complete) { + self.complete = complete; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Order = Order; } + return Order; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {Integer} - **/ - self.getPetId = function() { - return self.petId; - } - - /** - * @param {Integer} petId - **/ - self.setPetId = function (petId) { - self.petId = petId; - } - - /** - * @return {Integer} - **/ - self.getQuantity = function() { - return self.quantity; - } - - /** - * @param {Integer} quantity - **/ - self.setQuantity = function (quantity) { - self.quantity = quantity; - } - - /** - * @return {Date} - **/ - self.getShipDate = function() { - return self.shipDate; - } - - /** - * @param {Date} shipDate - **/ - self.setShipDate = function (shipDate) { - self.shipDate = shipDate; - } - - /** - * get Order Status - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self.status; - } - - /** - * set Order Status - * @param {StatusEnum} status - **/ - self.setStatus = function (status) { - self.status = status; - } - - /** - * @return {Boolean} - **/ - self.getComplete = function() { - return self.complete; - } - - /** - * @param {Boolean} complete - **/ - self.setComplete = function (complete) { - self.complete = complete; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Order; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index 25ae2e951c8..21de3265076 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -1,13 +1,22 @@ -// require files in Node.js environment -var Category;var Tag; -if (typeof module === 'object' && module.exports) { +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, './Category', './Tag'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('./Category.js'), require('./Tag.js')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.Category, root.SwaggerPetstore.Tag); + } +}(this, function(module, Category, Tag) { + 'use strict'; + + - Category = require('./Category.js'); - Tag = require('./Tag.js'); -} - - - //export module if ( typeof define === "function" && define.amd ) { define('StatusEnum', ['jquery'], function($) { @@ -37,164 +46,161 @@ var StatusEnum = function StatusEnum() { } -//export module -if ( typeof define === "function" && define.amd ) { - define('Pet', ['jquery', 'Category', 'Array'], - function($, Category, Array) { - return Pet; - }); -} + + var Pet = function Pet(photoUrls, name) { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: Category + **/ + self.category = new Category(); + + /** + * datatype: String + * required + **/ + self.name = name; + + /** + * datatype: Array + * required + **/ + self.photoUrls = photoUrls; + + /** + * datatype: Array + **/ + self.tags = []; + + /** + * pet status in the store + * datatype: StatusEnum + **/ + self.status = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.category.constructFromObject(data.category); + + self.name = data.name; + + self.photoUrls = new Array(); + + self.tags = new Array(); + + self.status = data.status; + + } -var Pet = function Pet(photoUrls, name) { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: Category - **/ - self.category = new Category(); - - /** - * datatype: String - * required - **/ - self.name = name; - - /** - * datatype: Array - * required - **/ - self.photoUrls = photoUrls; - - /** - * datatype: Array - **/ - self.tags = []; - - /** - * pet status in the store - * datatype: StatusEnum - **/ - self.status = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {Category} + **/ + self.getCategory = function() { + return self.category; + } + + /** + * @param {Category} category + **/ + self.setCategory = function (category) { + self.category = category; + } - self.category.constructFromObject(data.category); + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } - self.name = data.name; + /** + * @return {Array} + **/ + self.getPhotoUrls = function() { + return self.photoUrls; + } + + /** + * @param {Array} photoUrls + **/ + self.setPhotoUrls = function (photoUrls) { + self.photoUrls = photoUrls; + } - self.photoUrls = new Array(); + /** + * @return {Array} + **/ + self.getTags = function() { + return self.tags; + } + + /** + * @param {Array} tags + **/ + self.setTags = function (tags) { + self.tags = tags; + } - self.tags = new Array(); - - self.status = data.status; + /** + * get pet status in the store + * @return {StatusEnum} + **/ + self.getStatus = function() { + return self.status; + } + + /** + * set pet status in the store + * @param {StatusEnum} status + **/ + self.setStatus = function (status) { + self.status = status; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Pet = Pet; } + return Pet; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {Category} - **/ - self.getCategory = function() { - return self.category; - } - - /** - * @param {Category} category - **/ - self.setCategory = function (category) { - self.category = category; - } - - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - /** - * @return {Array} - **/ - self.getPhotoUrls = function() { - return self.photoUrls; - } - - /** - * @param {Array} photoUrls - **/ - self.setPhotoUrls = function (photoUrls) { - self.photoUrls = photoUrls; - } - - /** - * @return {Array} - **/ - self.getTags = function() { - return self.tags; - } - - /** - * @param {Array} tags - **/ - self.setTags = function (tags) { - self.tags = tags; - } - - /** - * get pet status in the store - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self.status; - } - - /** - * set pet status in the store - * @param {StatusEnum} status - **/ - self.setStatus = function (status) { - self.status = status; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Pet; -} +})); diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index 0fa97bd8c78..2dbf932f300 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -1,81 +1,89 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { - -} - - - - -//export module -if ( typeof define === "function" && define.amd ) { - define('Tag', ['jquery'], - function($) { - return Tag; - }); -} - - -var Tag = function Tag() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.name = null; - self.constructFromObject = function(data) { - if (!data) { - return; + + + var Tag = function Tag() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.name = null; + + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.name = data.name; + + } + + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } + + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; - - self.name = data.name; + /** + * @return {String} + **/ + self.getName = function() { + return self.name; + } + + /** + * @param {String} name + **/ + self.setName = function (name) { + self.name = name; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.Tag = Tag; } + return Tag; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getName = function() { - return self.name; - } - - /** - * @param {String} name - **/ - self.setName = function (name) { - self.name = name; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = Tag; -} +})); diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 632208a523c..a76ccf19013 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -1,210 +1,218 @@ -// require files in Node.js environment +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore); + } +}(this, function(module) { + 'use strict'; -if (typeof module === 'object' && module.exports) { -} + + + var User = function User() { + var self = this; + + /** + * datatype: Integer + **/ + self.id = null; + + /** + * datatype: String + **/ + self.username = null; + + /** + * datatype: String + **/ + self.firstName = null; + + /** + * datatype: String + **/ + self.lastName = null; + + /** + * datatype: String + **/ + self.email = null; + + /** + * datatype: String + **/ + self.password = null; + + /** + * datatype: String + **/ + self.phone = null; + + /** + * User Status + * datatype: Integer + **/ + self.userStatus = null; + + self.constructFromObject = function(data) { + if (!data) { + return; + } + + self.id = data.id; + + self.username = data.username; + + self.firstName = data.firstName; + + self.lastName = data.lastName; + + self.email = data.email; + + self.password = data.password; + + self.phone = data.phone; + + self.userStatus = data.userStatus; + + } + + /** + * @return {Integer} + **/ + self.getId = function() { + return self.id; + } -//export module -if ( typeof define === "function" && define.amd ) { - define('User', ['jquery'], - function($) { - return User; - }); -} - - -var User = function User() { - var self = this; - - /** - * datatype: Integer - **/ - self.id = null; - - /** - * datatype: String - **/ - self.username = null; - - /** - * datatype: String - **/ - self.firstName = null; - - /** - * datatype: String - **/ - self.lastName = null; - - /** - * datatype: String - **/ - self.email = null; - - /** - * datatype: String - **/ - self.password = null; - - /** - * datatype: String - **/ - self.phone = null; - - /** - * User Status - * datatype: Integer - **/ - self.userStatus = null; - - - self.constructFromObject = function(data) { - if (!data) { - return; + /** + * @param {Integer} id + **/ + self.setId = function (id) { + self.id = id; } - self.id = data.id; + /** + * @return {String} + **/ + self.getUsername = function() { + return self.username; + } + + /** + * @param {String} username + **/ + self.setUsername = function (username) { + self.username = username; + } - self.username = data.username; + /** + * @return {String} + **/ + self.getFirstName = function() { + return self.firstName; + } + + /** + * @param {String} firstName + **/ + self.setFirstName = function (firstName) { + self.firstName = firstName; + } - self.firstName = data.firstName; + /** + * @return {String} + **/ + self.getLastName = function() { + return self.lastName; + } + + /** + * @param {String} lastName + **/ + self.setLastName = function (lastName) { + self.lastName = lastName; + } - self.lastName = data.lastName; + /** + * @return {String} + **/ + self.getEmail = function() { + return self.email; + } + + /** + * @param {String} email + **/ + self.setEmail = function (email) { + self.email = email; + } - self.email = data.email; + /** + * @return {String} + **/ + self.getPassword = function() { + return self.password; + } + + /** + * @param {String} password + **/ + self.setPassword = function (password) { + self.password = password; + } - self.password = data.password; + /** + * @return {String} + **/ + self.getPhone = function() { + return self.phone; + } + + /** + * @param {String} phone + **/ + self.setPhone = function (phone) { + self.phone = phone; + } - self.phone = data.phone; - - self.userStatus = data.userStatus; + /** + * get User Status + * @return {Integer} + **/ + self.getUserStatus = function() { + return self.userStatus; + } + + /** + * set User Status + * @param {Integer} userStatus + **/ + self.setUserStatus = function (userStatus) { + self.userStatus = userStatus; + } + + self.toJson = function () { + return JSON.stringify(self); + } + }; + + if (module) { + module.User = User; } + return User; - /** - * @return {Integer} - **/ - self.getId = function() { - return self.id; - } - - /** - * @param {Integer} id - **/ - self.setId = function (id) { - self.id = id; - } - /** - * @return {String} - **/ - self.getUsername = function() { - return self.username; - } - - /** - * @param {String} username - **/ - self.setUsername = function (username) { - self.username = username; - } - - /** - * @return {String} - **/ - self.getFirstName = function() { - return self.firstName; - } - - /** - * @param {String} firstName - **/ - self.setFirstName = function (firstName) { - self.firstName = firstName; - } - - /** - * @return {String} - **/ - self.getLastName = function() { - return self.lastName; - } - - /** - * @param {String} lastName - **/ - self.setLastName = function (lastName) { - self.lastName = lastName; - } - - /** - * @return {String} - **/ - self.getEmail = function() { - return self.email; - } - - /** - * @param {String} email - **/ - self.setEmail = function (email) { - self.email = email; - } - - /** - * @return {String} - **/ - self.getPassword = function() { - return self.password; - } - - /** - * @param {String} password - **/ - self.setPassword = function (password) { - self.password = password; - } - - /** - * @return {String} - **/ - self.getPhone = function() { - return self.phone; - } - - /** - * @param {String} phone - **/ - self.setPhone = function (phone) { - self.phone = phone; - } - - /** - * get User Status - * @return {Integer} - **/ - self.getUserStatus = function() { - return self.userStatus; - } - - /** - * set User Status - * @param {Integer} userStatus - **/ - self.setUserStatus = function (userStatus) { - self.userStatus = userStatus; - } - - - self.toJson = function () { - return JSON.stringify(self); - } -} - -if (typeof module === 'object' && module.exports) { - module.exports = User; -} +})); diff --git a/samples/client/petstore/javascript/test/ApiClientTest.js b/samples/client/petstore/javascript/test/ApiClientTest.js new file mode 100644 index 00000000000..f577a3ec7b6 --- /dev/null +++ b/samples/client/petstore/javascript/test/ApiClientTest.js @@ -0,0 +1,69 @@ +if (typeof module === 'object' && module.exports) { + var expect = require('expect.js'); + var SwaggerPetstore = require('../src/index'); +} + +var apiClient = SwaggerPetstore.ApiClient.default; + +describe('ApiClient', function() { + describe('defaults', function() { + it('should have correct default values with the default API client', function() { + expect(apiClient).to.be.ok(); + expect(apiClient.basePath).to.be('http://petstore.swagger.io/v2'); + }); + + it('should have correct default values with new API client and can customize it', function() { + var newClient = new SwaggerPetstore.ApiClient; + expect(newClient.basePath).to.be('http://petstore.swagger.io/v2'); + expect(newClient.buildUrl('/abc', {})).to.be('http://petstore.swagger.io/v2/abc'); + + newClient.basePath = 'http://example.com'; + expect(newClient.basePath).to.be('http://example.com'); + expect(newClient.buildUrl('/abc', {})).to.be('http://example.com/abc'); + }); + }); + + describe('#paramToString', function() { + it('should return empty string for null and undefined', function() { + expect(apiClient.paramToString(null)).to.be(''); + expect(apiClient.paramToString(undefined)).to.be(''); + }); + + it('should return string', function() { + expect(apiClient.paramToString('')).to.be(''); + expect(apiClient.paramToString('abc')).to.be('abc'); + expect(apiClient.paramToString(123)).to.be('123'); + }); + }); + + describe('#buildUrl', function() { + it('should work without path parameters in the path', function() { + expect(apiClient.buildUrl('/abc', {})).to + .be('http://petstore.swagger.io/v2/abc'); + expect(apiClient.buildUrl('/abc/def?ok', {id: 123})).to + .be('http://petstore.swagger.io/v2/abc/def?ok'); + }); + + it('should work with path parameters in the path', function() { + expect(apiClient.buildUrl('/{id}', {id: 123})).to + .be('http://petstore.swagger.io/v2/123'); + expect(apiClient.buildUrl('/abc/{id}/{name}?ok', {id: 456, name: 'a b'})).to. + be('http://petstore.swagger.io/v2/abc/456/a%20b?ok'); + }); + }); + + describe('#isJsonMime', function() { + it('should return true for JSON MIME', function() { + expect(apiClient.isJsonMime('application/json')).to.be(true); + expect(apiClient.isJsonMime('application/json; charset=UTF8')).to.be(true); + expect(apiClient.isJsonMime('APPLICATION/JSON')).to.be(true); + }); + + it('should return false for non-JSON MIME', function() { + expect(apiClient.isJsonMime('')).to.be(false); + expect(apiClient.isJsonMime('text/plain')).to.be(false); + expect(apiClient.isJsonMime('application/xml')).to.be(false); + expect(apiClient.isJsonMime('application/jsonp')).to.be(false); + }); + }); +}); diff --git a/samples/client/petstore/javascript/test/api/PetApiTest.js b/samples/client/petstore/javascript/test/api/PetApiTest.js index 325cc16b616..f2c72bb8011 100644 --- a/samples/client/petstore/javascript/test/api/PetApiTest.js +++ b/samples/client/petstore/javascript/test/api/PetApiTest.js @@ -1,25 +1,21 @@ if (typeof module === 'object' && module.exports) { var expect = require('expect.js'); - var requireApiWithMocks = require('../helper.js').requireApiWithMocks; - var PetApi = requireApiWithMocks('PetApi'); - var Pet = require('../../src/model/Pet'); - var Category = require('../../src/model/Category'); - var Tag = require('../../src/model/Tag'); + var SwaggerPetstore = require('../../src/index'); } var api; beforeEach(function() { - api = new PetApi(); + api = new SwaggerPetstore.PetApi(); }); var createRandomPet = function() { var id = new Date().getTime(); - var pet = new Pet(); + var pet = new SwaggerPetstore.Pet(); pet.setId(id); pet.setName("gorilla" + id); - var category = new Category(); + var category = new SwaggerPetstore.Category(); category.setName("really-happy"); pet.setCategory(category); @@ -31,13 +27,17 @@ var createRandomPet = function() { }; describe('PetApi', function() { - it('should create and get pet', function (done) { + it('should create and get pet', function(done) { var pet = createRandomPet(); - api.addPet(pet).then(function() { - api.getPetById(pet.id, function(fetched, textStatus, jqXHR, error) { - if (error) throw error; + api.addPet(pet, function(error) { + if (error) throw error; + + api.getPetById(pet.id, function(error, fetched, response) { + if (error) throw error; + expect(response.status).to.be(200); + expect(response.ok).to.be(true); + expect(response.get('Content-Type')).to.be('application/json'); - expect(textStatus).to.be('success'); expect(fetched).to.be.ok(); expect(fetched.id).to.be(pet.id); expect(fetched.getCategory()).to.be.ok(); @@ -46,8 +46,6 @@ describe('PetApi', function() { api.deletePet(pet.id); done(); }); - }, function(jqXHR, textStatus, errorThrown) { - throw errorThrown || textStatus; }); }); }); diff --git a/samples/client/petstore/javascript/test/helper.js b/samples/client/petstore/javascript/test/helper.js deleted file mode 100644 index 018b6428af6..00000000000 --- a/samples/client/petstore/javascript/test/helper.js +++ /dev/null @@ -1,19 +0,0 @@ -var mockrequire = require('mockrequire'); - -var jquery = require('jquery'); -var domino = require('domino'); -var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; -var window = domino.createWindow(); -var $ = jquery(window); -$.support.cors = true; -$.ajaxSettings.xhr = function() { - return new XMLHttpRequest(); -}; - -var requireApiWithMocks = function(path) { - return mockrequire('../src/api/' + path, { - 'jquery': $ - }); -}; - -exports.requireApiWithMocks = requireApiWithMocks; diff --git a/samples/client/petstore/javascript/test/run_tests.html b/samples/client/petstore/javascript/test/run_tests.html index c5655275cc5..58118d8d7d4 100644 --- a/samples/client/petstore/javascript/test/run_tests.html +++ b/samples/client/petstore/javascript/test/run_tests.html @@ -10,7 +10,6 @@ - + + + + + + + +