[BUG] [Java][okhttp-gson] fails to deserialize floats
Created by: spacether
Bug Report Checklist
-
Have you provided a full/minimal spec to reproduce the issue? -
Have you validated the input using an OpenAPI validator (example)? -
What's the version of OpenAPI Generator used? -
Have you search for related issues/PRs? -
What's the actual output vs expected output? -
[Optional] Bounty to sponsor the fix
Description
When a user defines a spec with a model that has a field where: type: number format: float The okhttp-gson generator makes uncompilable Java code:
@Override
public NumberItemEnum read(final JsonReader jsonReader) throws IOException {
Float value = jsonReader.nextFloat();
return NumberItemEnum.fromValue(value);
}
That code fails because there is no jsonReader.nextFloat method.
openapi-generator version
4.0.2-SNAPSHOT
OpenAPI declaration file content or url
swagger: '2.0'
info:
description: "This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\"
version: 1.0.0
title: OpenAPI Petstore
license:
name: Apache-2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: petstore.swagger.io:80
basePath: /v2
tags:
- name: pet
description: Everything about your Pets
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
schemes:
- http
paths:
/pet:
post:
tags:
- pet
summary: Add a new pet to the store
description: ''
operationId: addPet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'200':
description: successful operation
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
put:
tags:
- pet
summary: Update an existing pet
description: ''
operationId: updatePet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'200':
description: successful operation
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'405':
description: Validation exception
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
produces:
- application/xml
- application/json
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: true
type: array
items:
type: string
enum:
- available
- pending
- sold
default: available
collectionFormat: csv
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid status value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByTags:
get:
tags:
- pet
summary: Finds Pets by tags
description: 'Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.'
operationId: findPetsByTags
produces:
- application/xml
- application/json
parameters:
- name: tags
in: query
description: Tags to filter by
required: true
type: array
items:
type: string
collectionFormat: csv
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid tag value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
deprecated: true
'/pet/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getPetById
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
type: integer
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Pet'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- api_key: []
post:
tags:
- pet
summary: Updates a pet in the store with form data
description: ''
operationId: updatePetWithForm
consumes:
- application/x-www-form-urlencoded
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet that needs to be updated
required: true
type: integer
format: int64
- name: name
in: formData
description: Updated name of the pet
required: false
type: string
- name: status
in: formData
description: Updated status of the pet
required: false
type: string
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
delete:
tags:
- pet
summary: Deletes a pet
description: ''
operationId: deletePet
produces:
- application/xml
- application/json
parameters:
- name: api_key
in: header
required: false
type: string
- name: petId
in: path
description: Pet id to delete
required: true
type: integer
format: int64
responses:
'200':
description: successful operation
'400':
description: Invalid pet value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/pet/{petId}/uploadImage':
post:
tags:
- pet
summary: uploads an image
description: ''
operationId: uploadFile
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
type: integer
format: int64
- name: additionalMetadata
in: formData
description: Additional data to pass to server
required: false
type: string
- name: file
in: formData
description: file to upload
required: false
type: file
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/store/inventory:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
produces:
- application/json
parameters: []
responses:
'200':
description: successful operation
schema:
type: object
additionalProperties:
type: integer
format: int32
security:
- api_key: []
/store/order:
post:
tags:
- store
summary: Place an order for a pet
description: ''
operationId: placeOrder
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: order placed for purchasing the pet
required: true
schema:
$ref: '#/definitions/Order'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid Order
'/store/order/{order_id}':
get:
tags:
- store
summary: Find purchase order by ID
description: 'For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions'
operationId: getOrderById
produces:
- application/xml
- application/json
parameters:
- name: order_id
in: path
description: ID of pet that needs to be fetched
required: true
type: integer
maximum: 5
minimum: 1
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid ID supplied
'404':
description: Order not found
delete:
tags:
- store
summary: Delete purchase order by ID
description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
operationId: deleteOrder
produces:
- application/xml
- application/json
parameters:
- name: order_id
in: path
description: ID of the order that needs to be deleted
required: true
type: string
responses:
'400':
description: Invalid ID supplied
'404':
description: Order not found
/user:
post:
tags:
- user
summary: Create user
description: This can only be done by the logged in user.
operationId: createUser
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Created user object
required: true
schema:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/createWithArray:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithArrayInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/createWithList:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithListInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/login:
get:
tags:
- user
summary: Logs user into the system
description: ''
operationId: loginUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: query
description: The user name for login
required: true
type: string
- name: password
in: query
description: The password for login in clear text
required: true
type: string
responses:
'200':
description: successful operation
schema:
type: string
headers:
X-Rate-Limit:
type: integer
format: int32
description: calls per hour allowed by the user
X-Expires-After:
type: string
format: date-time
description: date in UTC when token expires
'400':
description: Invalid username/password supplied
/user/logout:
get:
tags:
- user
summary: Logs out current logged in user session
description: ''
operationId: logoutUser
produces:
- application/xml
- application/json
parameters: []
responses:
default:
description: successful operation
'/user/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getUserByName
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: 'The name that needs to be fetched. Use user1 for testing.'
required: true
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/User'
'400':
description: Invalid username supplied
'404':
description: User not found
put:
tags:
- user
summary: Updated user
description: This can only be done by the logged in user.
operationId: updateUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: name that need to be deleted
required: true
type: string
- in: body
name: body
description: Updated user object
required: true
schema:
$ref: '#/definitions/User'
responses:
'400':
description: Invalid user supplied
'404':
description: User not found
delete:
tags:
- user
summary: Delete user
description: This can only be done by the logged in user.
operationId: deleteUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: The name that needs to be deleted
required: true
type: string
responses:
'400':
description: Invalid username supplied
'404':
description: User not found
/fake_classname_test:
patch:
tags:
- "fake_classname_tags 123#$%^"
summary: To test class name in snake case
description: To test class name in snake case
operationId: testClassname
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: client model
required: true
schema:
$ref: '#/definitions/Client'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Client'
security:
- api_key_query: []
/fake:
patch:
tags:
- fake
summary: To test "client" model
description: To test "client" model
operationId: testClientModel
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: client model
required: true
schema:
$ref: '#/definitions/Client'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Client'
get:
tags:
- fake
summary: To test enum parameters
description: To test enum parameters
operationId: testEnumParameters
consumes:
- "application/x-www-form-urlencoded"
parameters:
- name: enum_form_string_array
type: array
items:
type: string
default: '$'
enum:
- '>'
- '$'
in: formData
description: Form parameter enum test (string array)
- name: enum_form_string
type: string
default: '-efg'
enum:
- _abc
- '-efg'
- (xyz)
in: formData
description: Form parameter enum test (string)
- name: enum_header_string_array
type: array
items:
type: string
default: '$'
enum:
- '>'
- '$'
in: header
description: Header parameter enum test (string array)
- name: enum_header_string
type: string
default: '-efg'
enum:
- _abc
- '-efg'
- (xyz)
in: header
description: Header parameter enum test (string)
- name: enum_query_string_array
type: array
items:
type: string
default: '$'
enum:
- '>'
- '$'
in: query
description: Query parameter enum test (string array)
- name: enum_query_string
type: string
default: '-efg'
enum:
- _abc
- '-efg'
- (xyz)
in: query
description: Query parameter enum test (string)
- name: enum_query_integer
type: integer
format: int32
enum:
- 1
- -2
in: query
description: Query parameter enum test (double)
- name: enum_query_double
type: number
format: double
enum:
- 1.1
- -1.2
in: query
description: Query parameter enum test (double)
responses:
'400':
description: Invalid request
'404':
description: Not found
post:
tags:
- fake
summary: |
Fake endpoint for testing various parameters
假端點
偽のエンドポイント
가짜 엔드 포인트
description: |
Fake endpoint for testing various parameters
假端點
偽のエンドポイント
가짜 엔드 포인트
operationId: testEndpointParameters
consumes:
- application/x-www-form-urlencoded
parameters:
- name: integer
type: integer
maximum: 100
minimum: 10
in: formData
description: None
- name: int32
type: integer
format: int32
maximum: 200
minimum: 20
in: formData
description: None
- name: int64
type: integer
format: int64
in: formData
description: None
- name: number
type: number
maximum: 543.2
minimum: 32.1
in: formData
description: None
required: true
- name: float
type: number
format: float
maximum: 987.6
in: formData
description: None
- name: double
type: number
in: formData
format: double
maximum: 123.4
minimum: 67.8
required: true
description: None
- name: string
type: string
pattern: /[a-z]/i
in: formData
description: None
- name: pattern_without_delimiter
type: string
pattern: "^[A-Z].*"
in: formData
description: None
required: true
- name: byte
type: string
format: byte
in: formData
description: None
required: true
- name: binary
type: string
format: binary
in: formData
description: None
- name: date
type: string
format: date
in: formData
description: None
- name: dateTime
type: string
format: date-time
in: formData
description: None
- name: password
type: string
format: password
maxLength: 64
minLength: 10
in: formData
description: None
- name: callback
type: string
in: formData
description: None
responses:
'400':
description: Invalid username supplied
'404':
description: User not found
security:
- http_basic_test: []
delete:
tags:
- fake
summary: Fake endpoint to test group parameters (optional)
description: Fake endpoint to test group parameters (optional)
operationId: testGroupParameters
x-group-parameters: true
parameters:
- name: required_string_group
type: integer
in: query
description: Required String in group parameters
required: true
- name: required_boolean_group
type: boolean
in: header
description: Required Boolean in group parameters
required: true
- name: required_int64_group
type: integer
format: int64
in: query
description: Required Integer in group parameters
required: true
- name: string_group
type: integer
in: query
description: String in group parameters
- name: boolean_group
type: boolean
in: header
description: Boolean in group parameters
- name: int64_group
type: integer
format: int64
in: query
description: Integer in group parameters
responses:
'400':
description: Someting wrong
/fake/outer/number:
post:
tags:
- fake
description: Test serialization of outer number types
operationId: fakeOuterNumberSerialize
parameters:
- name: body
in: body
description: Input number as post body
schema:
$ref: '#/definitions/OuterNumber'
responses:
'200':
description: Output number
schema:
$ref: '#/definitions/OuterNumber'
/fake/outer/string:
post:
tags:
- fake
description: Test serialization of outer string types
operationId: fakeOuterStringSerialize
parameters:
- name: body
in: body
description: Input string as post body
schema:
$ref: '#/definitions/OuterString'
responses:
'200':
description: Output string
schema:
$ref: '#/definitions/OuterString'
/fake/outer/boolean:
post:
tags:
- fake
description: Test serialization of outer boolean types
operationId: fakeOuterBooleanSerialize
parameters:
- name: body
in: body
description: Input boolean as post body
schema:
$ref: '#/definitions/OuterBoolean'
responses:
'200':
description: Output boolean
schema:
$ref: '#/definitions/OuterBoolean'
/fake/outer/composite:
post:
tags:
- fake
description: Test serialization of object with outer number type
operationId: fakeOuterCompositeSerialize
parameters:
- name: body
in: body
description: Input composite as post body
schema:
$ref: '#/definitions/OuterComposite'
responses:
'200':
description: Output composite
schema:
$ref: '#/definitions/OuterComposite'
/fake/jsonFormData:
get:
tags:
- fake
summary: test json serialization of form data
description: ''
operationId: testJsonFormData
consumes:
- application/x-www-form-urlencoded
parameters:
- name: param
in: formData
description: field1
required: true
type: string
- name: param2
in: formData
description: field2
required: true
type: string
responses:
'200':
description: successful operation
/fake/inline-additionalProperties:
post:
tags:
- fake
summary: test inline additionalProperties
description: ''
operationId: testInlineAdditionalProperties
consumes:
- application/json
parameters:
- name: param
in: body
description: request body
required: true
schema:
type: object
additionalProperties:
type: string
responses:
'200':
description: successful operation
/fake/body-with-query-params:
put:
tags:
- fake
operationId: testBodyWithQueryParams
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/User'
- name: query
in: query
required: true
type: string
consumes:
- application/json
responses:
'200':
description: Success
/fake/create_xml_item:
post:
tags:
- fake
operationId: createXmlItem
summary: creates an XmlItem
description: this route creates an XmlItem
consumes:
- 'application/xml'
- 'application/xml; charset=utf-8'
- 'application/xml; charset=utf-16'
- 'text/xml'
- 'text/xml; charset=utf-8'
- 'text/xml; charset=utf-16'
produces:
- 'application/xml'
- 'application/xml; charset=utf-8'
- 'application/xml; charset=utf-16'
- 'text/xml'
- 'text/xml; charset=utf-8'
- 'text/xml; charset=utf-16'
parameters:
- in: body
name: XmlItem
description: XmlItem Body
required: true
schema:
$ref: '#/definitions/XmlItem'
responses:
200:
description: successful operation
/another-fake/dummy:
patch:
tags:
- "$another-fake?"
summary: To test special tags
description: To test special tags and operation ID starting with number
operationId: 123_test_@#$%_special_tags
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: client model
required: true
schema:
$ref: '#/definitions/Client'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Client'
/fake/body-with-file-schema:
put:
tags:
- fake
description: 'For this test, the body for this request much reference a schema named `File`.'
operationId: testBodyWithFileSchema
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/FileSchemaTestClass'
consumes:
- application/json
responses:
'200':
description: Success
/fake/enums-of-length-one/{path_string}/{path_integer}:
put:
tags:
- fake
description: 'This route has required values with enums of 1'
operationId: testEndpointEnumsLengthOne
parameters:
- in: query
name: query_integer
required: true
type: integer
format: int32
enum:
- 3
- in: query
name: query_string
required: true
type: string
enum:
- brillig
- in: path
name: path_string
required: true
type: string
enum:
- hello
- in: path
name: path_integer
required: true
type: integer
enum:
- 34
- in: header
name: header_number
required: true
type: number
format: double
enum:
- 1.234
consumes:
- application/json
responses:
'200':
description: Success
'/fake/{petId}/uploadImageWithRequiredFile':
post:
tags:
- pet
summary: uploads an image (required)
description: ''
operationId: uploadFileWithRequiredFile
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
type: integer
format: int64
- name: additionalMetadata
in: formData
description: Additional data to pass to server
required: false
type: string
- name: requiredFile
in: formData
description: file to upload
required: true
type: file
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
securityDefinitions:
petstore_auth:
type: oauth2
authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
flow: implicit
scopes:
'write:pets': modify pets in your account
'read:pets': read your pets
api_key:
type: apiKey
name: api_key
in: header
api_key_query:
type: apiKey
name: api_key_query
in: query
http_basic_test:
type: basic
definitions:
Order:
type: object
properties:
id:
type: integer
format: int64
petId:
type: integer
format: int64
quantity:
type: integer
format: int32
shipDate:
type: string
format: date-time
status:
type: string
description: Order Status
enum:
- placed
- approved
- delivered
complete:
type: boolean
default: false
xml:
name: Order
Category:
type: object
required:
- name
properties:
id:
type: integer
format: int64
name:
type: string
default: default-name
xml:
name: Category
User:
type: object
properties:
id:
type: integer
format: int64
x-is-unique: true
username:
type: string
firstName:
type: string
lastName:
type: string
email:
type: string
password:
type: string
phone:
type: string
userStatus:
type: integer
format: int32
description: User Status
xml:
name: User
Tag:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Tag
Pet:
type: object
required:
- name
- photoUrls
properties:
id:
type: integer
format: int64
x-is-unique: true
category:
$ref: '#/definitions/Category'
name:
type: string
example: doggie
photoUrls:
type: array
xml:
name: photoUrl
wrapped: true
items:
type: string
tags:
type: array
xml:
name: tag
wrapped: true
items:
$ref: '#/definitions/Tag'
status:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
xml:
name: Pet
ApiResponse:
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string
'$special[model.name]':
properties:
'$special[property.name]':
type: integer
format: int64
xml:
name: '$special[model.name]'
Return:
description: Model for testing reserved words
properties:
return:
type: integer
format: int32
xml:
name: Return
Name:
description: Model for testing model name same as property name
required:
- name
properties:
name:
type: integer
format: int32
snake_case:
readOnly: true
type: integer
format: int32
property:
type: string
123Number:
type: integer
readOnly: true
xml:
name: Name
200_response:
description: Model for testing model name starting with number
properties:
name:
type: integer
format: int32
class:
type: string
xml:
name: Name
ClassModel:
description: Model for testing model with "_class" property
properties:
_class:
type: string
Dog:
allOf:
- $ref: '#/definitions/Animal'
- type: object
properties:
breed:
type: string
Cat:
allOf:
- $ref: '#/definitions/Animal'
- type: object
properties:
declawed:
type: boolean
Animal:
type: object
discriminator: className
required:
- className
properties:
className:
type: string
color:
type: string
default: 'red'
AnimalFarm:
type: array
items:
$ref: '#/definitions/Animal'
format_test:
type: object
required:
- number
- byte
- date
- password
properties:
integer:
type: integer
maximum: 100
minimum: 10
int32:
type: integer
format: int32
maximum: 200
minimum: 20
int64:
type: integer
format: int64
number:
maximum: 543.2
minimum: 32.1
type: number
float:
type: number
format: float
maximum: 987.6
minimum: 54.3
double:
type: number
format: double
maximum: 123.4
minimum: 67.8
string:
type: string
pattern: /[a-z]/i
byte:
type: string
format: byte
binary:
type: string
format: binary
date:
type: string
format: date
dateTime:
type: string
format: date-time
uuid:
type: string
format: uuid
example: 72f98069-206d-4f12-9f12-3d1e525a8e84
password:
type: string
format: password
maxLength: 64
minLength: 10
EnumClass:
type: string
default: '-efg'
enum:
- _abc
- '-efg'
- (xyz)
Enum_Test:
type: object
required:
- enum_string_required
properties:
enum_string:
type: string
enum:
- UPPER
- lower
- ''
enum_string_required:
type: string
enum:
- UPPER
- lower
- ''
enum_integer:
type: integer
format: int32
enum:
- 1
- -1
enum_number:
type: number
format: double
enum:
- 1.1
- -1.2
outerEnum:
$ref: '#/definitions/OuterEnum'
AdditionalPropertiesClass:
type: object
properties:
map_string:
type: object
additionalProperties:
type: string
map_number:
type: object
additionalProperties:
type: number
map_integer:
type: object
additionalProperties:
type: integer
map_boolean:
type: object
additionalProperties:
type: boolean
map_array_integer:
type: object
additionalProperties:
type: array
items:
type: integer
map_array_anytype:
type: object
additionalProperties:
type: array
items:
type: object
map_map_string:
type: object
additionalProperties:
type: object
additionalProperties:
type: string
map_map_anytype:
type: object
additionalProperties:
type: object
additionalProperties:
type: object
anytype_1:
type: object
anytype_2: {}
anytype_3:
type: object
properties: {}
AdditionalPropertiesString:
type: object
properties:
name:
type: string
additionalProperties:
type: string
AdditionalPropertiesInteger:
type: object
properties:
name:
type: string
additionalProperties:
type: integer
AdditionalPropertiesNumber:
type: object
properties:
name:
type: string
additionalProperties:
type: number
AdditionalPropertiesBoolean:
type: object
properties:
name:
type: string
additionalProperties:
type: boolean
AdditionalPropertiesArray:
type: object
properties:
name:
type: string
additionalProperties:
type: array
items:
type: object
AdditionalPropertiesObject:
type: object
properties:
name:
type: string
additionalProperties:
type: object
additionalProperties:
type: object
AdditionalPropertiesAnyType:
type: object
properties:
name:
type: string
additionalProperties:
type: object
MixedPropertiesAndAdditionalPropertiesClass:
type: object
properties:
uuid:
type: string
format: uuid
dateTime:
type: string
format: date-time
map:
type: object
additionalProperties:
$ref: '#/definitions/Animal'
List:
type: object
properties:
123-list:
type: string
Client:
type: object
properties:
client:
type: string
ReadOnlyFirst:
type: object
properties:
bar:
type: string
readOnly: true
baz:
type: string
hasOnlyReadOnly:
type: object
properties:
bar:
type: string
readOnly: true
foo:
type: string
readOnly: true
Capitalization:
type: object
properties:
smallCamel:
type: string
CapitalCamel:
type: string
small_Snake:
type: string
Capital_Snake:
type: string
SCA_ETH_Flow_Points:
type: string
ATT_NAME:
description: >
Name of the pet
type: string
MapTest:
type: object
properties:
map_map_of_string:
type: object
additionalProperties:
type: object
additionalProperties:
type: string
# comment out the following (map of map of enum) as many language not yet support this
#map_map_of_enum:
# type: object
# additionalProperties:
# type: object
# additionalProperties:
# type: string
# enum:
# - UPPER
# - lower
map_of_enum_string:
type: object
additionalProperties:
type: string
enum:
- UPPER
- lower
direct_map:
type: object
additionalProperties:
type: boolean
indirect_map:
$ref: "#/definitions/StringBooleanMap"
ArrayTest:
type: object
properties:
array_of_string:
type: array
items:
type: string
array_array_of_integer:
type: array
items:
type: array
items:
type: integer
format: int64
array_array_of_model:
type: array
items:
type: array
items:
$ref: '#/definitions/ReadOnlyFirst'
# commented out the below test case for array of enum for the time being
# as not all language can handle it
#array_of_enum:
# type: array
# items:
# type: string
# enum:
# - UPPER
# - lower
NumberOnly:
type: object
properties:
JustNumber:
type: number
ArrayOfNumberOnly:
type: object
properties:
ArrayNumber:
type: array
items:
type: number
ArrayOfArrayOfNumberOnly:
type: object
properties:
ArrayArrayNumber:
type: array
items:
type: array
items:
type: number
EnumArrays:
type: object
properties:
just_symbol:
type: string
enum:
- ">="
- "$"
array_enum:
type: array
items:
type: string
enum:
- fish
- crab
# comment out the following as 2d array of enum is not supported at the moment
#array_array_enum:
# type: array
# items:
# type: array
# items:
# type: string
# enum:
# - Cat
# - Dog
OuterEnum:
type: string
enum:
- "placed"
- "approved"
- "delivered"
OuterComposite:
type: object
properties:
my_number:
$ref: '#/definitions/OuterNumber'
my_string:
$ref: '#/definitions/OuterString'
my_boolean:
$ref: '#/definitions/OuterBoolean'
OuterNumber:
type: number
OuterString:
type: string
OuterBoolean:
type: boolean
x-codegen-body-parameter-name: boolean_post_body
StringBooleanMap:
additionalProperties:
type: boolean
FileSchemaTestClass:
type: object
properties:
file:
$ref: "#/definitions/File"
files:
type: array
items:
$ref: "#/definitions/File"
File:
type: object
description: 'Must be named `File` for test.'
properties:
sourceURI:
description: 'Test capitalization'
type: string
TypeHolderDefault:
type: object
description: a model to test optional properties with server defaults
required:
- string_item
- number_item
- integer_item
- bool_item
- array_item
properties:
string_item:
type: string
default: what
number_item:
type: number
default: 1.234
format: float
integer_item:
type: integer
format: int32
default: -2
bool_item:
type: boolean
default: true
# swagger-parser does not see date defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
date_item:
type: string
format: date
default: 2017-07-21
# swagger-parser does not see date-time defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
datetime_item:
type: string
format: date-time
default: 2017-07-21T17:32:28Z
# swagger-parser does not see array defaults yet: https://github.com/swagger-api/swagger-parser/issues/971
array_item:
type: array
items:
type: integer
default:
- 0
- 1
- 2
- 3
TypeHolderExample:
type: object
description: a model to test required properties with an example and length one enum
required:
- string_item
- number_item
- integer_item
- bool_item
- array_item
# - date_item/datetime_item adding date and datetime enums will be a future task, this does not yet work in many languages
properties:
string_item:
type: string
example: what
enum: [what]
number_item:
type: number
format: float
example: 1.234
enum: [1.234]
integer_item:
type: integer
format: int32
enum: [-2]
example: -2
# swagger-parser does not see bool enums yet https://github.com/swagger-api/swagger-parser/issues/985
bool_item:
type: boolean
example: true
array_item:
type: array
items:
type: integer
example:
-
- 0
- 1
- 2
- 3
enum:
-
- 0
- 1
- 2
- 3
XmlItem:
type: object
xml:
namespace: http://a.com/schema
prefix: pre
properties:
attribute_string:
type: string
example: string
xml:
attribute: true
attribute_number:
type: number
example: 1.234
xml:
attribute: true
attribute_integer:
type: integer
example: -2
xml:
attribute: true
attribute_boolean:
type: boolean
example: true
xml:
attribute: true
wrapped_array:
type: array
xml:
wrapped: true
items:
type: integer
name_string:
type: string
example: string
xml:
name: xml_name_string
name_number:
type: number
example: 1.234
xml:
name: xml_name_number
name_integer:
type: integer
example: -2
xml:
name: xml_name_integer
name_boolean:
type: boolean
example: true
xml:
name: xml_name_boolean
name_array:
type: array
items:
type: integer
xml:
name: xml_name_array_item
name_wrapped_array:
type: array
xml:
wrapped: true
name: xml_name_wrapped_array
items:
type: integer
xml:
name: xml_name_wrapped_array_item
prefix_string:
type: string
example: string
xml:
prefix: ab
prefix_number:
type: number
example: 1.234
xml:
prefix: cd
prefix_integer:
type: integer
example: -2
xml:
prefix: ef
prefix_boolean:
type: boolean
example: true
xml:
prefix: gh
prefix_array:
type: array
items:
type: integer
xml:
prefix: ij
prefix_wrapped_array:
type: array
xml:
wrapped: true
prefix: kl
items:
type: integer
xml:
prefix: mn
namespace_string:
type: string
example: string
xml:
namespace: http://a.com/schema
namespace_number:
type: number
example: 1.234
xml:
namespace: http://b.com/schema
namespace_integer:
type: integer
example: -2
xml:
namespace: http://c.com/schema
namespace_boolean:
type: boolean
example: true
xml:
namespace: http://d.com/schema
namespace_array:
type: array
items:
type: integer
xml:
namespace: http://e.com/schema
namespace_wrapped_array:
type: array
xml:
wrapped: true
namespace: http://f.com/schema
items:
type: integer
xml:
namespace: http://g.com/schema
prefix_ns_string:
type: string
example: string
xml:
namespace: http://a.com/schema
prefix: a
prefix_ns_number:
type: number
example: 1.234
xml:
namespace: http://b.com/schema
prefix: b
prefix_ns_integer:
type: integer
example: -2
xml:
namespace: http://c.com/schema
prefix: c
prefix_ns_boolean:
type: boolean
example: true
xml:
namespace: http://d.com/schema
prefix: d
prefix_ns_array:
type: array
items:
type: integer
xml:
namespace: http://e.com/schema
prefix: e
prefix_ns_wrapped_array:
type: array
xml:
wrapped: true
namespace: http://f.com/schema
prefix: f
items:
type: integer
xml:
namespace: http://g.com/schema
prefix: g
Command line used for generation
./bin/java-petstore-okhttp-gson.sh
Steps to reproduce
Generate the above client and run the tests on it
Related issues/PRs
None
Suggest a fix
Instead per docs https://www.javadoc.io/doc/com.google.code.gson/gson/2.8.5 the generator should use jsonReader.nextDouble for numbers of type float and double