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][C++] special characters and case sensitivity and key "operator" in properties not respected #4320

Closed
5 of 6 tasks
AIexG opened this issue Oct 30, 2019 · 2 comments · Fixed by #4323
Closed
5 of 6 tasks

Comments

@AIexG
Copy link
Contributor

AIexG commented Oct 30, 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 (example)
Description

When generating a server stub, cpp-restbed-server in my case, all functions reading the values through the keys of a JSON request will automatically stripe certain special characters from the keys set the first letter to uppercase and add an underscore to certain keywords (e.g. operator). This causes the pt.put(), pt.get() etc, which apparently are case sensitive to fail aquiring and passing data to and from a JSON file/array.

The OAS also states that keys are case sensitive

All field names in the specification are case sensitive. This includes all fields that are used as keys in a map, except where explicitly noted that keys are case insensitive.

I haven't confirmed if any other languages/generators are affected by this problem, but it might be possible!

openapi-generator version
  • 4.1.3
  • 4.2.0-SNAPSHOT
OpenAPI declaration file content or url

caseSensitive.yaml

openapi: 3.0.1
info:
  title: Case Sensitivity Demo
  contact:
    email: mail@example.com
  version: 1.0.0

paths:
  /demo:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/demoSchema'
        required: true
      responses:
        '405':
          description: 'Validation error'
          content: {}

components:
  schemas:      
    demoSchema:
      type: object
      properties:
        $dollarsign:
          type: string
        §paragraph:
          type: string
        operator:
          type: string
        Firstupper:
          type: string
        noupper: 
          type: string
        midUpper: 
          type: string
        ALLUPPER:
          type: string

Generates the following function toJsonString():

std::string DemoSchema::toJsonString()
{
	std::stringstream ss;
	ptree pt;
	pt.put("dollarsign", m_dollarsign); // should be "$dollarsign"
	pt.put("paragraph", m_paragraph); // should be "§paragraph"
	pt.put("_operator", m__operator); // should be "operator"
	pt.put("Firstupper", m_Firstupper); // alright
	pt.put("Noupper", m_Noupper); // should be "noupper"
	pt.put("MidUpper", m_MidUpper); // should be "midUpper"
	pt.put("ALLUPPER", m_ALLUPPER); // alright
	write_json(ss, pt, false);
	return ss.str();
}

comments indicate the expected output

Command line used for generation

java -jar openapi-generator-cli.jar generate -i .\caseSensitive.yaml -g cpp-restbed-server -o .\openapi-server\

Steps to reproduce

Simply don't use an uppercase letter as first character for a property key.

Related issues/PRs
Suggest a fix
@auto-labeler
Copy link

auto-labeler bot commented Oct 30, 2019

👍 Thanks for opening this issue!
🏷 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

@wing328
Copy link
Member

wing328 commented Nov 1, 2019

Closed via #4323. Thanks for the PR by @lwlee2608

jimschubert added a commit that referenced this issue Nov 3, 2019
* 'master' of github.com:OpenAPITools/openapi-generator: (88 commits)
  smaller tests, better code format (#4355)
  csharp-netcore: Replace null literals with default (#4345)
  [core] consider polymorphism when computing unused schemas (#4335)
  Fix issue 4326 forward throws for delegate to main method (#4327)
  [kotlin][client] annotate api exceptions (#4339)
  refactor java-vertx-web parameters and bugfix on non primitive parameter (#4353)
  Remove deprecated API use of ObjectFactory.property() (#2613) (#4352)
  [python][metadata]: Adding license and author fields (#4318)
  [Python] Avoid pep8 violation (#4316)
  [JS] Update package.json (#4261)
  Add slash-arun to Python technical committee (#4354)
  [typescript-fetch] Fix discriminator mapping name (#4340)
  fix security alerts reported by github (#4344)
  fix cpp-restbed-server json field serialization #4320 (#4323)
  typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (#4341)
  fix(typescript-angular): do not call .toISOString() on a string (#4330) (#4337)
  update samples (#4334)
  Prepare 4.2.0 release (#4333)
  [FEATURE][Haskell] Haskell-Servant serves static files (#4058)
  [FEATURE][Haskell] Add Middleware support for the haskell servant generator (#4056)
  ...
jimschubert added a commit that referenced this issue Nov 3, 2019
* master: (142 commits)
  smaller tests, better code format (#4355)
  csharp-netcore: Replace null literals with default (#4345)
  [core] consider polymorphism when computing unused schemas (#4335)
  Fix issue 4326 forward throws for delegate to main method (#4327)
  [kotlin][client] annotate api exceptions (#4339)
  refactor java-vertx-web parameters and bugfix on non primitive parameter (#4353)
  Remove deprecated API use of ObjectFactory.property() (#2613) (#4352)
  [python][metadata]: Adding license and author fields (#4318)
  [Python] Avoid pep8 violation (#4316)
  [JS] Update package.json (#4261)
  Add slash-arun to Python technical committee (#4354)
  [typescript-fetch] Fix discriminator mapping name (#4340)
  fix security alerts reported by github (#4344)
  fix cpp-restbed-server json field serialization #4320 (#4323)
  typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (#4341)
  fix(typescript-angular): do not call .toISOString() on a string (#4330) (#4337)
  update samples (#4334)
  Prepare 4.2.0 release (#4333)
  [FEATURE][Haskell] Haskell-Servant serves static files (#4058)
  [FEATURE][Haskell] Add Middleware support for the haskell servant generator (#4056)
  ...
jimschubert added a commit to jimschubert/openapi-generator that referenced this issue Nov 3, 2019
* master: (141 commits)
  smaller tests, better code format (OpenAPITools#4355)
  csharp-netcore: Replace null literals with default (OpenAPITools#4345)
  [core] consider polymorphism when computing unused schemas (OpenAPITools#4335)
  Fix issue 4326 forward throws for delegate to main method (OpenAPITools#4327)
  [kotlin][client] annotate api exceptions (OpenAPITools#4339)
  refactor java-vertx-web parameters and bugfix on non primitive parameter (OpenAPITools#4353)
  Remove deprecated API use of ObjectFactory.property() (OpenAPITools#2613) (OpenAPITools#4352)
  [python][metadata]: Adding license and author fields (OpenAPITools#4318)
  [Python] Avoid pep8 violation (OpenAPITools#4316)
  [JS] Update package.json (OpenAPITools#4261)
  Add slash-arun to Python technical committee (OpenAPITools#4354)
  [typescript-fetch] Fix discriminator mapping name (OpenAPITools#4340)
  fix security alerts reported by github (OpenAPITools#4344)
  fix cpp-restbed-server json field serialization OpenAPITools#4320 (OpenAPITools#4323)
  typescript-angular: fix oneOf and anyOf generates incorrect model for primitive types (OpenAPITools#4341)
  fix(typescript-angular): do not call .toISOString() on a string (OpenAPITools#4330) (OpenAPITools#4337)
  update samples (OpenAPITools#4334)
  Prepare 4.2.0 release (OpenAPITools#4333)
  [FEATURE][Haskell] Haskell-Servant serves static files (OpenAPITools#4058)
  [FEATURE][Haskell] Add Middleware support for the haskell servant generator (OpenAPITools#4056)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants