Skip to content
New issue

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

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

Already on GitHub? Sign in 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/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

@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 <[email protected]>

* [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

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

No branches or pull requests

3 participants