diff --git a/modules/openapi-generator/src/main/resources/go/api.mustache b/modules/openapi-generator/src/main/resources/go/api.mustache index 8b2943af55f4c3ad8fa7dffda8a35a3a3113887e..3df0454bb3046b5775e8347672eff1f201d154b7 100644 --- a/modules/openapi-generator/src/main/resources/go/api.mustache +++ b/modules/openapi-generator/src/main/resources/go/api.mustache @@ -266,8 +266,7 @@ func (a *{{{classname}}}Service) {{{nickname}}}(ctx context.Context{{#hasParams} return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHttpResponse, err } - localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) - localVarHttpResponse.Body.Close() + if err != nil { return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHttpResponse, err } @@ -275,8 +274,8 @@ func (a *{{{classname}}}Service) {{{nickname}}}(ctx context.Context{{#hasParams} {{#returnType}} if localVarHttpResponse.StatusCode < 300 { // If we succeed, return the data, otherwise pass on to decode error. - err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err == nil { + err = a.client.decode(&localVarReturnValue, localVarHttpResponse.Body, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHttpResponse, err } } @@ -284,14 +283,13 @@ func (a *{{{classname}}}Service) {{{nickname}}}(ctx context.Context{{#hasParams} {{/returnType}} if localVarHttpResponse.StatusCode >= 300 { newErr := GenericOpenAPIError{ - body: localVarBody, error: localVarHttpResponse.Status, } {{#responses}} {{#dataType}} if localVarHttpResponse.StatusCode == {{{code}}} { var v {{{dataType}}} - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + err = a.client.decode(&v, localVarHttpResponse.Body, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHttpResponse, newErr diff --git a/modules/openapi-generator/src/main/resources/go/client.mustache b/modules/openapi-generator/src/main/resources/go/client.mustache index a6aec184854bb9f75b2ad2b167aafc8df866f9d3..90d0250e6a7cce8702080787bb0127e46c638d09 100644 --- a/modules/openapi-generator/src/main/resources/go/client.mustache +++ b/modules/openapi-generator/src/main/resources/go/client.mustache @@ -306,17 +306,22 @@ func (c *APIClient) prepareRequest( return localVarRequest, nil } -func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { +func (c *APIClient) decode(v interface{}, reader io.ReadCloser, contentType string) (err error) { if strings.Contains(contentType, "application/xml") { - if err = xml.Unmarshal(b, v); err != nil { + defer reader.Close() + if err = xml.NewDecoder(reader).Decode(v); err != nil { return err } return nil } else if strings.Contains(contentType, "application/json") { - if err = json.Unmarshal(b, v); err != nil { + defer reader.Close() + if err = json.NewDecoder(reader).Decode(v); err != nil { return err } return nil + } else if strings.Contains(contentType, "application/octet-stream") { + // do nothing + return nil } return errors.New("undefined response type") } diff --git a/modules/openapi-generator/src/main/resources/python/rest.mustache b/modules/openapi-generator/src/main/resources/python/rest.mustache index 8418ec2a0fde5d157c10546d2f8e7e6fd0d772c0..a4a9f57ac5416e4832627ecbad2e66cc9cd4cf70 100644 --- a/modules/openapi-generator/src/main/resources/python/rest.mustache +++ b/modules/openapi-generator/src/main/resources/python/rest.mustache @@ -176,6 +176,14 @@ class RESTClientObject(object): preload_content=_preload_content, timeout=timeout, headers=headers) + elif headers['Content-Type'] == 'application/octet-stream' and isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) # Pass a `string` parameter directly in the body to support # other content types than Json when `body` argument is # provided in serialized form