Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[BUG] [Java][okhttp-gson] fails to deserialize floats #3157

Closed
5 of 6 tasks
spacether opened this issue Jun 14, 2019 · 6 comments
Closed
5 of 6 tasks

[BUG] [Java][okhttp-gson] fails to deserialize floats #3157

spacether opened this issue Jun 14, 2019 · 6 comments

Comments

@spacether
Copy link
Contributor

spacether commented Jun 14, 2019

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/#:
    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

@wing328
Copy link
Member

wing328 commented Aug 14, 2019

the generator should use jsonReader.nextDouble for numbers of type float and double

@spacether may I know if you've time to contribute a fix?

@spacether
Copy link
Contributor Author

Things are pretty busy with work right now. And I am more interested in adding features to the Python experimental generator. Not at this time.

@wing328
Copy link
Member

wing328 commented Aug 14, 2019

@spacether that's ok. Let's see if anyone from the community can help on this.

@bensimpson-ch
Copy link
Contributor

@wing328 I will do this one.

@bensimpson-ch
Copy link
Contributor

@wing328 A pull request with the updated mustache file and corresponding extension to the 2_0/petstore-with-fake-endpoints-models-for-testing.yaml to test against floats.
PR: #3846

wing328 pushed a commit that referenced this issue Sep 7, 2019
* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam}

* fix to bug #3157

* update samples
hokamoto pushed a commit to hokamoto/openapi-generator that referenced this issue Sep 12, 2019
…3846)

* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam}

* fix to bug OpenAPITools#3157

* update samples
wing328 pushed a commit that referenced this issue Sep 13, 2019
* First version of Nim Client

* Add some codes

* Add some codes

* Add some codes

* Add some codes

* Add some codes

* First version of Nim Client

* Add some codes

* Add some codes

* [Dart] Fix README template and update testing doco (#3809)

* [Dart] Fix README template and update testing doco

- deleted redundant shell script
- fixed and updated README template
- updated test package and moved to a dev_dependency
- removed old unused dev_dependency packages
- updated testing documentation in petstore sample

* Remove references to dart-flutter-petstore.sh

* Fix typos

* Fix typo

* Support custom git repository (#3757)

* add gitHost param to GeneratorSettings and related

* parameterize gitHost in READMEs

* parameterize gitHost in go.mod

* parameterize gitHost in git_push

* update petstore samples

* run ./bin/utils/export_docs_generators.sh

* run meta-codehen.sh

* Revert "run meta-codehen.sh"

This reverts commit d6d579f.

* Revert "run ./bin/utils/export_docs_generators.sh"

This reverts commit 1b81538.

* Revert "update petstore samples"

This reverts commit f513add.

* run ensure-up-to-date

* Add links to article and video (#3820)

* Better Go code format (#3819)

* better varible naming

* better comments

* better code format for go experimental client

* better comment, update samples

* Add some codes

* Add some codes

* Add some codes

* Add gRPC Protobuf schema generator (#3818)

* add grpc protobuf generator

* update doc

* add new doc

* add windows batch, comment out root proto

* 1792 fix remote spec handling and hash calculation (#3440)

* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam} (#3821)

* Revert "1792 fix remote spec handling and hash calculation (#3440)"

This reverts commit 2a2eefe.

* Add  nickmeinhold to Dart technical committee (#3830)

* Bug #2845 typescript angular inheritance (#3812)

* issue #2845: enable 'supportsMultipleInheritance' on typescript angular client codegen

- note I reran ./bin/openapi3/typescript-angular-petstore-all.sh and no changes occurred.
  this suggests to me that the petstore.yaml sample should be improved to make use of the
  anyOf / allOf / oneOf keywords, in order to better show the effects of changes on generated code.

* issue #2845: run ./bin/openapi3/typescript-angular-petstore-all.sh

* run `mvn clean package && ./bin/typescript-angular-petstore-all.sh`

* revert extranous files

* fix warnings in csharp-netcore client (#3831)

* Add missing files to the form request (#3834)

* [client][go] avoid duplicated reflect imports (#3847)

* Following up for #3440 (1792 fix remote spec handling and hash calculation) (#3826)

* This patch fixes the bug that we cannot access to remote files when checking file updates.
Following up #3440, supporting auth.

* 1792 fix remote spec handling and hash calculation (#3440)

(cherry picked from commit 2a2eefe)

* fix detecting remote file / local file logic while finding the hash file, taking care of IllegalArgumentException for local files.

* add testcase

* Add a link (#3850)

* Add Element AI to the list (#3856)

* maven-plugin-plugin 3.6.0 (#3854)

*  [Java][okhttp-gson] fix failure to deserialize floats (#3846)

* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam}

* fix to bug #3157

* update samples

* Adds Http Info To Dart Api (#3851)

* [C++][Pistache] Add missing setter for arrays (#3837)

* [C++][Pistache] Add missing setter for arrays

Fixes #3769

* [C++][Pistache] Update Petstore sample

* typescript-inversify: improve check for required parameters, support multiple media types (#3849)

* [typescript-inversify] Allow falsy parameters

A required parameter to an api method must not be `null` or `undefined`.
It can be any other falsy value, e.g. `""`, `0` or `false` though. This
change makes sure an error is only thrown in the former case and not in
the latter.

* [typescript-inversify] Handle multiple media types

The Accept and Content-Type HTTP headers can contain a list of media
types. Previously all but the first media type in the api definition
were ignored. Now the headers are properly generated.

* [typescript-inversify] Fix http client interface

The api service methods allow the `body` parameter to be optional. The
parameter is then passed to an `IHttpClient`. So it needs to be optional
there as well.
Also fixed the sample implementation `HttpClient`.

Fixes #3618.

* [typescript-inversify] Regenerate Petstore sample

* [typescript-inversify] Use more explicit null check

This does not change the semantic of the generated code, but makes it more explicit.

Co-Authored-By: Esteban Gehring <esteban.gehring@gmail.com>

* [typescript-angular] allow empty string basePath (#3489)

* [typescript-angular] Fixing #2731 - empty string basePath

* typescript-angular: refactor base path configuration

* typescript-angular: refactor base path configuration

* Fix/r/serialization fix and minor 3xx resp fix (#3817)

* fix(qlik): fix for minor serialization bug

* fix(r): add petsore generated classes

* fix(r): indendation fixes

* typescript-axios: Fix baseoptions (#3866)

* Fixed missing baseOptions of typescript-axios.

The typescript-axios template was missing the baseOptions setting when building an API Configuration. Set it.

* update sample.

* re-generate typescript axios samples

* Rename gRPC generator to "protobuf-schema" (#3864)

* rename grpc generator to protobuf-schema

* update doc

* Prepare v4.1.2 release (#3873)

* update samples

* update date

* fix version in readme

* BugFix #2053 Spring Boot fails to parse LocalDate query parameter (#3860)

Adds the format annotation so that Spring is able to serialize OpenApi date/date-time format into LocalDate/OffsetDateTime.

* update doc, samples (#3875)

* update stable release

* Update the batch for Windows

* Add a test snippet

* Update ensure-up-to-date

* Add Nim to README.md

* Ran ensure-up-to-date to pass CircleCI tests
@spacether
Copy link
Contributor Author

issue was resolved by pr

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

3 participants