jdegre/5GC_APIs

NullPointerException when generating TS29598_Nudsf_DataRepository as go-gin-server

DonRichie opened this issue · 3 comments

Hello,

I am trying to generate server boilerplate code of the TS29598_Nudsf_DataRepository.yaml. Unfortunately I get a NullPointerException when doing so.

I want to generate as go-gin-server, but python-flask did produce the same error.
Generating the TS29598_Nudsf_Timer.yaml works, but the DataRepostory doesn't.

Does someone know why this Error happens and is able to fix it?

Command:

openapi-generator-cli generate -g go-server --additional-properties=prependFormOrBodyParameters=true -o out -i TS29598_Nudsf_DataRepository.yaml

Error:

Exception: null
	at org.openapitools.codegen.DefaultGenerator.processOperation(DefaultGenerator.java:1163)
	at org.openapitools.codegen.DefaultGenerator.processPaths(DefaultGenerator.java:1054)
	at org.openapitools.codegen.DefaultGenerator.generateApis(DefaultGenerator.java:549)
	at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:891)
	at org.openapitools.codegen.cmd.Generate.execute(Generate.java:441)
	at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
	at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
Caused by: java.lang.NullPointerException
	at org.openapitools.codegen.DefaultCodegen.getContent(DefaultCodegen.java:6743)
	at org.openapitools.codegen.DefaultCodegen.fromOperation(DefaultCodegen.java:4006)
	at org.openapitools.codegen.DefaultGenerator.processOperation(DefaultGenerator.java:1131)
	... 6 more

I believe the responses are the problem:

      responses:
        '200' : #result ok
          $ref: '#/components/responses/RecordBody'

If I swap the above lines in a limited example with a another schema, for example like this:

      responses:
        '200':
          description: Successful case. Response contains result of the search.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordSearchResult'

Then it works.

If I further swap

$ref: '#/components/responses/RecordBody'

with

$ref: '#/components/schemas/RecordBody'

It works. But only in my limited example. Not the full spec.

Please excuse my stumbling forward.

hi @DonRichie; thanks for reporting the issue.
from what I can see in the API definition, it seems that it is correct, and if you load the API with, say, with Swagger Editor or Swagger UI, they correctly render the response payload of the 200 OK response message, for the resource path: /{realmId}/{storageId}/records/{recordId}

the "swaps" you have done above, are not really valid, since you cannot simply replace $ref: '#/components/responses/RecordBody' with $ref: '#/components/schemas/RecordBody'

the former is a reference to an entire re-usable response component, while the latter is simply a reference to a given schema component, and both are entirely different. the reusable response component is defined as:

      content:
        multipart/mixed:
          schema:
            $ref: '#/components/schemas/Record'
          encoding:
              meta: # The meta part shall be the first part and is mandatory but can be empty.
                contentType: application/json
                headers:
                  Content-Id: # The meta part is identified by the 'meta' Content-Id header.
                    schema:
                      type: string
                    required: true
              blocks: # Zero or more block parts may follow the meta part
                contentType: '*/*' # Block parts can be of any type.
                headers:
                  Content-Id: # Block identifier is defined by the Content-Id header.
                    schema:
                      type: string
                    required: true
                  Content-Transfer-Encoding:
                    schema:
                      type: string
                    required: true
      headers:
        Cache-Control:
          $ref: '#/components/headers/Cache-Control'
        ETag:
          $ref: '#/components/headers/ETag'
        Last-Modified:
          $ref: '#/components/headers/Last-Modified'

so, it seems to me that openpi-generator does not handle well any of those definitions above.

maybe one way of narrowing-down the issue could be to replace $ref: '#/components/responses/RecordBody' in your test API, with the block I quoted above (the entire response message definition), and then, try to remove/change parts of it until you succeed with the code generation. at least this might indicate which part of such response definition is the "offending" part for openapi-generator.