Разрешить внешний $ ref с помощью API swagger-parser - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать ресурсы API, содержащие ссылку на внешний файл в параметрах и ответах, и пытаюсь разрешить эти ссылки с помощью swagger. (Поддержка импорта определений OpenAPI с внешними ссылками).

Для этого я получаю файлы YAML в виде файлового архива, и там будет главный файл main.YAML и ссылки на другие файлы из него.

    OpenAPIV3Parser openAPIV3Parser = new OpenAPIV3Parser();
    ParseOptions options = new ParseOptions();
    options.setResolve(true);
    options.setFlatten(true);
    OpenAPI openAPI = openAPIV3Parser.read(extractedLocation + "/main.yaml", null, options);
    String openAPIContent = Yaml.mapper().writerWithDefaultPrettyPrinter().writeValueAsString(openAPI);
    APIDefinitionValidationResponse  apiDefinitionValidationResponse  = new APIDefinitionValidationResponse (); 
    apiDefinitionValidationResponse = OASParserUtil.validateAPIDefinition(openAPIContent, returnContent);

Я пробовал использовать этот фрагмент кода, но apiDefinitionValidationResponse выдает ошибку, когда в YAML-файле есть $ref. Если $ref нет, то apiDefinitionValidationResponse успешен и api создан.

Поэтому я сомневаюсь, что существует проблема с передачей данных методу OASParserUtil.validateAPIDefinition (метод validateAPIDefinition не имеет проблем, и он был проверен и протестирован)

Может ли кто-нибудь помочь мне с этим ?

Созданный файл YAML содержит extensions{} строк

Сообщения об ошибках в журналах отладки:

attribute info.license.extensions is unexpected
attribute info.extensions is unexpected
attribute components.schemas.ErrorListItem.extensions is unexpected
attribute components.schemas.MenuItem.extensions is unexpected
attribute components.schemas.Order.extensions is unexpected

1 Ответ

1 голос
/ 07 мая 2020

Что я могу сказать из сообщения об ошибке и вашего результата yaml, так это то, что на этапе преобразования в окончательный yaml добавляется несколько extensions: {} строк.

Наличие атрибута extensions в тех местах, на которые он жалуется, не допускается спецификацией OpenAPI.

Похоже, ваша сериализация yaml слишком проста. Глядя на SerializerUtils из генератора openapi, у них немного больше конфигурации.

Дополнительный модуль заботится о сериализации только интересной части объекта OpenAPI.

...