Swagger Validator не распознает ошибку формата openapi yaml - Codegen генерирует исключение NullPointerException в getParameterFromRef () для действительной спецификации openapi - PullRequest
0 голосов
/ 12 октября 2018

Тем не менее, проверка не обнаруживает никаких проблем, сваггерный кодоген продолжает сбой на NPE.Это происходит как в v2.3.1, так и в 3.0.1 (https://github.com/swagger-api/swagger-codegen).. Не имеет значения, генерирую ли я Java, Spring или php - все та же ошибка.

Неудачная часть определения APIследующее (когда я связываю API только с работающими фрагментами кода):

openapi: 3.0.2

paths:
  /Service/listProducts:
    get:
      parameters:
        - in: header
          name: engineName
          schema:
            $ref: '#/components/schemas/EngineNameEnum'
          required: true
      responses:
        '200':
          description: 'Listing OK'

components:
  schemas:   
    EngineNameEnum:
      type: string
      enum:
        - A
        - B
        - C
        - D
        - E

Я запускаю:

java -jar modules\swagger-codegen-cli\target\swagger-codegen-cli.jar generate -i openapi.yaml -l spring -o tmp-spring\

Компоненты генерируются, но по первому определению операции пути я получаю:

18:51:01.070 [Thread-1] WARN io.swagger.codegen.v3.generators.DefaultCodegenConfig - Empty operationId found for path: get /Service/listProducts. Renamed to auto-generated operationId: serviceListProductsGet
18:51:01.092 [Thread-1] DEBUG io.swagger.codegen.v3.generators.DefaultCodegenConfig - Property type is not primitive: \Swagger\Client\Model\EngineNameEnum
java.lang.NullPointerException
        at io.swagger.codegen.v3.generators.DefaultCodegenConfig.getParameterFromRef(DefaultCodegenConfig.java:3659)
        at io.swagger.codegen.v3.generators.DefaultCodegenConfig.fromOperation(DefaultCodegenConfig.java:2012)
        at io.swagger.codegen.v3.DefaultGenerator.processOperation(DefaultGenerator.java:847)
        at io.swagger.codegen.v3.DefaultGenerator.processPaths(DefaultGenerator.java:771)
        at io.swagger.codegen.v3.DefaultGenerator.generateApis(DefaultGenerator.java:419)
        at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:722)
        at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:342)
        at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-1" java.lang.RuntimeException: Could not process operation:
  Tag: class Tag {
    name: products
    description: Operations for Products Management
    externalDocs: null
}
  Operation: null
  Resource: get /Service/listProducts
  Exception: null
        at io.swagger.codegen.v3.DefaultGenerator.processOperation(DefaultGenerator.java:872)
        at io.swagger.codegen.v3.DefaultGenerator.processPaths(DefaultGenerator.java:771)
        at io.swagger.codegen.v3.DefaultGenerator.generateApis(DefaultGenerator.java:419)
        at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:722)
        at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:342)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
        at io.swagger.codegen.v3.generators.DefaultCodegenConfig.getParameterFromRef(DefaultCodegenConfig.java:3659)
        at io.swagger.codegen.v3.generators.DefaultCodegenConfig.fromOperation(DefaultCodegenConfig.java:2012)
        at io.swagger.codegen.v3.DefaultGenerator.processOperation(DefaultGenerator.java:847)
        ... 5 more

Любая идея о причине NPE на io.swagger.codegen.v3.generators.DefaultCodegenConfig.getParameterFromRef ()? Я не нашел ничего об этом методе, бросающем его.

Я ожидаю, чтопроблема вызвана форматированием более крупного API, но валидатор не находит проблем.

Заранее спасибо!

1 Ответ

0 голосов
/ 12 октября 2018

поэтому мой вопрос не полностью описывал проблему.Причиной сбоя генератора была правильная ниже опубликованный код, посмотрите неправильный фрагмент кода / ok:

# WRONG
paths:
  /Service/listProducts:
    get:
      parameters:
        - in: header
          name: engineName
          schema:
            $ref: '#/components/schemas/EngineNameEnum'
          required: true
        - $ref: '#/components/schemas/ListProductsRequest
      responses:
        '200':
          description: 'Listing OK'

# OK
paths:
  /Service/listProducts:
    get:
      parameters:
        - in: header
          name: engineName
          schema:
            $ref: '#/components/schemas/EngineNameEnum'
          required: true
        - in: query
          name: listCampaignRequest
          schema:
            $ref: '#/components/schemas/ListProductsRequest'
          required: true
      responses:
        '200':
          description: 'Listing OK' 

Так что это скорее проблема swagger validator - я обновлю название этой проблемы соответственно.

...