{"id":13456868,"url":"https://github.com/swagger-api/swagger-parser","last_synced_at":"2025-05-11T03:44:10.907Z","repository":{"id":16249745,"uuid":"18997610","full_name":"swagger-api/swagger-parser","owner":"swagger-api","description":"Swagger Spec to Java POJOs","archived":false,"fork":false,"pushed_at":"2025-05-09T13:20:16.000Z","size":8912,"stargazers_count":806,"open_issues_count":325,"forks_count":535,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-05-11T03:43:37.083Z","etag":null,"topics":["java","open-source","openapi","openapi-specification","openapi3","rest","rest-api","swagger","swagger-oss","swagger-parser"],"latest_commit_sha":null,"homepage":"http://swagger.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swagger-api.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-04-21T16:00:22.000Z","updated_at":"2025-05-09T13:20:19.000Z","dependencies_parsed_at":"2023-10-16T19:42:10.661Z","dependency_job_id":"3bf129cb-3712-4081-85b7-dd80a07be59a","html_url":"https://github.com/swagger-api/swagger-parser","commit_stats":{"total_commits":1802,"total_committers":187,"mean_commits":9.636363636363637,"dds":0.7941176470588236,"last_synced_commit":"153070c54acc6b96f902dd9e6155956921453847"},"previous_names":[],"tags_count":137,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swagger-api%2Fswagger-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swagger-api%2Fswagger-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swagger-api%2Fswagger-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swagger-api%2Fswagger-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swagger-api","download_url":"https://codeload.github.com/swagger-api/swagger-parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253514553,"owners_count":21920334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","open-source","openapi","openapi-specification","openapi3","rest","rest-api","swagger","swagger-oss","swagger-parser"],"created_at":"2024-07-31T08:01:29.267Z","updated_at":"2025-05-11T03:44:10.893Z","avatar_url":"https://github.com/swagger-api.png","language":"Java","readme":"# Swagger Parser \u003cimg src=\"https://raw.githubusercontent.com/swagger-api/swagger.io/wordpress/images/assets/SW-logo-clr.png\" height=\"50\" align=\"right\"\u003e\n\n**NOTE:** If you're looking for `swagger-parser` 1.X and OpenAPI 2.0, please refer to [v1 branch](https://github.com/swagger-api/swagger-parser/tree/v1)\n\n**NOTE:** Since version 2.1.0 Swagger Parser supports OpenAPI 3.1; see [this page](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---OpenAPI-3.1) for details\n\n![Build Master - Java 11, 14 and 17](https://github.com/swagger-api/swagger-parser/workflows/Build%20Test%20Deploy%20master/badge.svg?branch=master)\n\n# Table of contents\n\n  - [Overview](#overview)\n  - [Table of Contents](#table-of-contents)\n  - [Usage](#usage)\n  - [Adding to your project](#adding-to-your-project)\n    - [Prerequisites](#prerequisites)\n  - [Authentication](#authentication)  \n  - [Options](#options)\n    - [Resolve](#1-resolve)\n    - [ResolveFully](#2-resolvefully)\n    - [Flatten](#3-flatten)\n    - [ResolveCombinators](#4-resolvecombinators)\n  - [Extensions](#extensions)\n  - [OpenAPI 3.1 Support](#openapi-31-support)\n  - [License](#license)\n   \n## Overview \n\nThis is the Swagger Parser project, which parses OpenAPI definitions in JSON or YAML format into [swagger-core](https://github.com/swagger-api/swagger-core) representation as [Java POJO](https://github.com/swagger-api/swagger-core/blob/master/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/OpenAPI.java#L36), returning any validation warnings/errors.  \n\nIt also provides a simple framework to add additional converters from different formats into the Swagger objects, making the entire toolchain available.\n\n\n### Usage\nUsing the Swagger Parser is simple.  Once included in your project, you can read a OpenAPI Specification from any location:\n\n```java\nimport io.swagger.parser.OpenAPIParser;\nimport io.swagger.v3.parser.OpenAPIV3Parser;\nimport io.swagger.v3.parser.core.models.SwaggerParseResult;\nimport io.swagger.v3.oas.models.OpenAPI;\n\n// ... your code\n\n  // parse a swagger description from the petstore and get the result\n  SwaggerParseResult result = new OpenAPIParser().readLocation(\"https://petstore3.swagger.io/api/v3/openapi.json\", null, null);\n  \n  // or from a file\n  //   SwaggerParseResult result = new OpenAPIParser().readLocation(\"./path/to/openapi.yaml\", null, null);\n  \n  // the parsed POJO\n  OpenAPI openAPI = result.getOpenAPI();\n  \n  if (result.getMessages() != null) result.getMessages().forEach(System.err::println); // validation errors and warnings\n  \n  if (openAPI != null) {\n    ...\n  }\n  \n```\n\nor from a string:\n\n```java\nimport io.swagger.parser.OpenAPIParser;\nimport io.swagger.v3.parser.OpenAPIV3Parser;\nimport io.swagger.v3.parser.core.models.SwaggerParseResult;\nimport io.swagger.v3.oas.models.OpenAPI;\n\n// ... your code\n\n  // parse a swagger description from the petstore and get the result\n  SwaggerParseResult result = new OpenAPIParser().readContents(\"https://petstore3.swagger.io/api/v3/openapi.json\", null, null);\n  \n  // or from a file\n  //   SwaggerParseResult result = new OpenAPIParser().readContents(\"./path/to/openapi.yaml\", null, null);\n  \n  // the parsed POJO\n  OpenAPI openAPI = result.getOpenAPI();\n  \n  if (result.getMessages() != null) result.getMessages().forEach(System.err::println); // validation errors and warnings\n  \n  if (openAPI != null) {\n    ...\n  }\n  \n```\n\nIf you are providing a Swagger/OpenAPI 2.0 document to the parser , e.g.:\n\n```java\nSwaggerParseResult result = new OpenAPIParser().readContents(\"./path/to/swagger.yaml\", null, null);\n```\n\nthe Swagger/OpenAPI 2.0 document will be first converted into a comparable OpenAPI 3.0 one.\n\nYou can also directly use `OpenAPIV3Parser` which only handles OpenAPI 3.0 documents, and provides a convenience method to get directly the parsed `OpenAPI object:\n\n```java\nimport io.swagger.v3.parser.OpenAPIV3Parser;\nimport io.swagger.v3.oas.models.OpenAPI;\n\n// ... your code\n\n  // read a swagger description from the petstore\n    \n  OpenAPI openAPI = new OpenAPIV3Parser().read(\"https://petstore3.swagger.io/api/v3/openapi.json\");\n  \n```\n\n### Adding to your project\nYou can include this library from Sonatype OSS for SNAPSHOTS, or Maven central for releases.  In your dependencies:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eio.swagger.parser.v3\u003c/groupId\u003e\n  \u003cartifactId\u003eswagger-parser\u003c/artifactId\u003e\n  \u003cversion\u003e2.1.27\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Prerequisites\nYou need the following installed and available in your $PATH:\n\n* Java 11\n* [Apache maven 3.x](http://maven.apache.org/)\n\nAfter cloning the project, you can build it from source with this command:\n\n```\nmvn package\n```\n\n### Authentication\n\nIf your OpenAPI definition is protected, you can pass headers in the request:\n```java\nimport io.swagger.v3.parser.core.models.AuthorizationValue;\n\n// ... your code\n\n  // build a authorization value\n  AuthorizationValue mySpecialHeader = new AuthorizationValue()\n    .keyName(\"x-special-access\")  //  the name of the authorization to pass\n    .value(\"i-am-special\")        //  the value of the authorization\n    .type(\"header\");              //  the location, as either `header` or `query`\n\n  // or in a single constructor\n  AuthorizationValue apiKey = new AuthorizationValue(\"api_key\", \"special-key\", \"header\");\n  OpenAPI openAPI = new OpenAPIV3Parser().readWithInfo(\n    \"https://petstore3.swagger.io/api/v3/openapi.json\",\n    Arrays.asList(mySpecialHeader, apiKey)\n  );\n```\n\n#### Dealing with self-signed SSL certificates\nIf you're dealing with self-signed SSL certificates, or those signed by GoDaddy, you'll need to disable SSL Trust \nManager.  That's done by setting a system environment variable as such:\n\n```\nexport TRUST_ALL=true\n```\n\nAnd then the Swagger Parser will _ignore_ invalid certificates.  Of course this is generally a bad idea, but if you're \nworking inside a firewall or really know what you're doing, well, there's your rope.\n\n#### Dealing with Let's Encrypt\nDepending on the version of Java that you use, certificates signed by the [Let's Encrypt](https://letsencrypt.org) certificate authority _may not work_ by default.  If you are using any version of Java prior to 1.8u101, you most likely _must_ install an additional CA in your\nJVM.  Also note that 1.8u101 may _not_ be sufficient on it's own.  Some users have reported that certain operating systems are \nnot accepting Let's Encrypt signed certificates.\n\nYour options include:\n\n* Accepting all certificates per above\n* Installing the certificate manually in your JVM using the keystore using the `keytool` command\n* Configuring the JVM on startup to load your certificate\n\nBut... this is all standard SSL configuration stuff and is well documented across the web.\n\n\n### Options\nParser uses options as a way to customize the behavior while parsing:\n\n#### 1. resolve:\n\n```java\nParseOptions parseOptions = new ParseOptions();\nparseOptions.setResolve(true); \nfinal OpenAPI openAPI = new OpenAPIV3Parser().read(\"a.yaml\", null, parseOptions);\n```\n\n\n- When remote or relative references are found in the parsed document, parser will attempt to:\n\n1. resolve the reference in the remote or relative location \n1. parse the resolved reference\n1. add the resolved \"component\" (e.g. parameter, schema, response, etc.) to the resolved `OpenAPI` POJO components section\n1. replace the remote/relative reference with a local reference,  e.g. : `#/components/schemas/NameOfRemoteSchema`. \n\nThis applies to schemas, parameters, responses, pretty much everything containing a ref.\n\n#### 2. resolveFully:\n\n```java\nParseOptions parseOptions = new ParseOptions();\nparseOptions.setResolve(true); // implicit\nparseOptions.setResolveFully(true);\nfinal OpenAPI openAPI = new OpenAPIV3Parser().read(\"a.yaml\", null, parseOptions);\n```\n\n- In some scenarios, after references are resolved (with `resolve`, see above), you might need to have all local references removed replacing the reference with the content of the referenced element. This is for example used in [Swagger Inflector](https://github.com/swagger-api/swagger-inflector). Be aware that the result could be more heavy/long due to duplication\n    \nOriginal document:\n\n`a.yaml` \n```\nopenapi: 3.0.1\npaths:\n  \"/newPerson\":\n    post:\n      summary: Create new person\n      description: Create new person\n      responses:\n        '200':\n          description: ok\n          content:\n            \"*/*\":\n              schema:\n                \"$ref\": \"./ref-without-component/b.yaml#/components/schemas/CustomerType\"\n```\n`b.yaml`\n```\nopenapi: 3.0.1\ncomponents:\n  schemas:\n    CustomerType:\n      type: string\n      example: Example value\n```\n\nSerialized result after parsing with option `resolveFully(true)`\n\n`a.yaml`\n```\nopenapi: 3.0.1\nservers:\n- url: /\npaths:\n  /newPerson:\n    post:\n      summary: Create new person\n      description: Create new person\n      responses:\n        200:\n          description: ok\n          content:\n            '*/*':\n              schema:\n                type: string\n                example: Example value\ncomponents:\n  schemas:\n    CustomerType:\n      type: string\n      example: Example value\n```\n\n#### 3. flatten: \n\n```java\nParseOptions parseOptions = new ParseOptions();\nparseOptions.setFlatten(true); \nfinal OpenAPI openAPI = new OpenAPIV3Parser().read(\"a.yaml\", null, parseOptions);\n```\n\n\nThis is kind of the opposite of resolveFully, limited to defined schemas.\n\nIn some scenarios, you might need to have all schemas defined inline (e.g. a response schema) moved to the `components/schemas` section and replaced with a reference to the newly added schema within `components/schemas`. This is for example used in [Swagger Codegen](https://github.com/swagger-api/swagger-codegen).\n\nOriginal document:\n\n`flatten.yaml`\n\n```\nopenapi: 3.0.0\ninfo:\n  version: 1.0.0\n  title: Swagger Petstore\n  license:\n    name: MIT\npaths:\n  /pets:\n    get:\n      summary: List all pets\n      operationId: listPets\n      responses:\n        '200':\n          description: An paged array of pets\n          headers:\n            x-next:\n              description: A link to the next page of responses\n              schema:\n                type: string\n          content:\n            application/json:\n              schema:\n                 type: object\n                 properties:\n                    id:\n                      type: integer\n                      format: int64\n                    name:\n                      type: string\n                    tag:\n                      type: string\n```\n\nSerialized result after parsing with option `flatten(true)`\n\n```\nopenapi: 3.0.0\ninfo:\n  title: Swagger Petstore\n  license:\n    name: MIT\n  version: 1.0.0\nservers:\n- url: /\npaths:\n  /pets:\n    get:\n      tags:\n      - pets\n      summary: List all pets\n      responses:\n        200:\n          description: An paged array of pets\n          headers:\n            x-next:\n              description: A link to the next page of responses\n              style: simple\n              explode: false\n              schema:\n                type: string\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/inline_response_200'\ncomponents:\n  schemas:\n    inline_response_200:\n      type: object\n      properties:\n        id:\n          type: integer\n          format: int64\n        name:\n          type: string\n        tag:\n          type: string\n```\n\n#### 4. resolveCombinators: \n\n```java\nParseOptions parseOptions = new ParseOptions();\nparseOptions.setResolve(true); // implicit\nparseOptions.setResolveFully(true);\nparseOptions.setResolveCombinators(false); // default is true \nfinal OpenAPI openAPI = new OpenAPIV3Parser().read(\"a.yaml\", null, parseOptions);\n```\n\nThis option (only available with `resolveFully = true`) allows to customize behaviour related to `allOf/anyOf/oneOf` (composed schemas)  processing. With option set to `true` (default), composed schemas are transformed into \"non composed\" ones, by having all properties merged into a single resulting schema (see example below).\nIf option is set to `false`, the resulting schema will instead maintain its \"composed\" nature, keeping properties within e.g. the `allOf` members.\n\nPlease see examples below:\n\n**Unresolved yaml**\n\n```\nopenapi: 3.0.1\nservers:\n- url: http://petstore.swagger.io/api\n\ninfo:\n  description: 'This is a sample server Petstore'\n  version: 1.0.0\n  title: testing source file\n  termsOfService: http://swagger.io/terms/\n\npaths:\n  \"/withInvalidComposedModel\":\n    post:\n      operationId: withInvalidComposedModel\n      requestBody:\n        content:\n          \"application/json\":\n            schema:\n              \"$ref\": \"#/components/schemas/ExtendedAddress\"\n        required: false\n      responses:\n        '200':\n          description: success!\ncomponents:\n  schemas:\n    ExtendedAddress:\n      type: object\n      allOf:\n        - $ref: '#/components/schemas/Address'\n        - type: object\n          required:\n          - gps\n          properties:\n            gps:\n              type: string\n    Address:\n      required:\n      - street\n      type: object\n      properties:\n        street:\n          type: string\n          example: 12345 El Monte Road\n        city:\n          type: string\n          example: Los Altos Hills\n        state:\n          type: string\n          example: CA\n        zip:\n          type: string\n          example: '94022'\n```\n\n**resolvedCombinator = true (default) - Test case**\n\n```\n@Test\n    public void resolveAllOfWithoutAggregatingParameters(@Injectable final List\u003cAuthorizationValue\u003e auths) {\n        ParseOptions options = new ParseOptions();\n        options.setResolveFully(true);\n        options.setResolveCombinators(true);\n\n        // Testing components/schemas\n        OpenAPI openAPI = new OpenAPIV3Parser().readLocation(\"src/test/resources/composed.yaml\",auths,options).getOpenAPI();\n        \n        ComposedSchema allOf = (ComposedSchema) openAPI.getComponents().getSchemas().get(\"ExtendedAddress\");\n        assertEquals(allOf.getAllOf().size(), 2);\n\n        assertTrue(allOf.getAllOf().get(0).get$ref() != null);\n        assertTrue(allOf.getAllOf().get(1).getProperties().containsKey(\"gps\"));\n\n\n        // Testing path item\n        ObjectSchema schema = (ObjectSchema) openAPI.getPaths().get(\"/withInvalidComposedModel\").getPost().getRequestBody().getContent().get(\"application/json\").getSchema();\n\n        assertEquals(schema.getProperties().size(), 5);\n        assertTrue(schema.getProperties().containsKey(\"street\"));\n        assertTrue(schema.getProperties().containsKey(\"gps\"));\n\n    }\n```\n\n**resolvedCombinator = true (default) - Resolved Yaml**\n\n```\nopenapi: 3.0.1\ninfo:\n  title: testing source file\n  description: This is a sample server Petstore\n  termsOfService: http://swagger.io/terms/\n  version: 1.0.0\nservers:\n- url: http://petstore.swagger.io/api\npaths:\n  /withInvalidComposedModel:\n    post:\n      operationId: withInvalidComposedModel\n      requestBody:\n        content:\n          application/json:\n            schema:\n              required:\n              - gps\n              - street\n              type: object\n              properties:\n                street:\n                  type: string\n                  example: 12345 El Monte Road\n                city:\n                  type: string\n                  example: Los Altos Hills\n                state:\n                  type: string\n                  example: CA\n                zip:\n                  type: string\n                  example: \"94022\"\n                gps:\n                  type: string\n        required: false\n      responses:\n        200:\n          description: success!\ncomponents:\n  schemas:\n    ExtendedAddress:\n      type: object\n      allOf:\n      - $ref: '#/components/schemas/Address'\n      - required:\n        - gps\n        type: object\n        properties:\n          gps:\n            type: string\n    Address:\n      required:\n      - street\n      type: object\n      properties:\n        street:\n          type: string\n          example: 12345 El Monte Road\n        city:\n          type: string\n          example: Los Altos Hills\n        state:\n          type: string\n          example: CA\n        zip:\n          type: string\n          example: \"94022\"\n ```\n \n **resolvedCombinator = false - Test case**\n \n ```\n @Test\n    public void resolveAllOfWithoutAggregatingParameters(@Injectable final List\u003cAuthorizationValue\u003e auths) {\n        ParseOptions options = new ParseOptions();\n        options.setResolveFully(true);\n        options.setResolveCombinators(false);\n\n        // Testing components/schemas\n        OpenAPI openAPI = new OpenAPIV3Parser().readLocation(\"src/test/resources/composed.yaml\",auths,options).getOpenAPI();\n       \n        ComposedSchema allOf = (ComposedSchema) openAPI.getComponents().getSchemas().get(\"ExtendedAddress\");\n        assertEquals(allOf.getAllOf().size(), 2);\n        assertTrue(allOf.getAllOf().get(0).getProperties().containsKey(\"street\"));\n        assertTrue(allOf.getAllOf().get(1).getProperties().containsKey(\"gps\"));\n\n        // Testing path item\n        ComposedSchema schema = (ComposedSchema) openAPI.getPaths().get(\"/withInvalidComposedModel\").getPost().getRequestBody().getContent().get(\"application/json\").getSchema();\n        // In fact the schema resolved previously is the same of /withInvalidComposedModel\n        assertEquals(schema, allOf);\n        assertEquals(schema.getAllOf().size(), 2);\n        assertTrue(schema.getAllOf().get(0).getProperties().containsKey(\"street\"));\n        assertTrue(schema.getAllOf().get(1).getProperties().containsKey(\"gps\"));\n\n    }\n  ```\n  \n  **resolvedCombinator = false - Resolved Yaml**\n  \n  ```\nopenapi: 3.0.1\ninfo:\n  title: testing source file\n  description: This is a sample server Petstore\n  termsOfService: http://swagger.io/terms/\n  version: 1.0.0\nservers:\n- url: http://petstore.swagger.io/api\npaths:\n  /withInvalidComposedModel:\n    post:\n      operationId: withInvalidComposedModel\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              allOf:\n              - required:\n                - street\n                type: object\n                properties:\n                  street:\n                    type: string\n                    example: 12345 El Monte Road\n                  city:\n                    type: string\n                    example: Los Altos Hills\n                  state:\n                    type: string\n                    example: CA\n                  zip:\n                    type: string\n                    example: \"94022\"\n              - required:\n                - gps\n                type: object\n                properties:\n                  gps:\n                    type: string\n        required: false\n      responses:\n        200:\n          description: success!\ncomponents:\n  schemas:\n    ExtendedAddress:\n      type: object\n      allOf:\n      - required:\n        - street\n        type: object\n        properties:\n          street:\n            type: string\n            example: 12345 El Monte Road\n          city:\n            type: string\n            example: Los Altos Hills\n          state:\n            type: string\n            example: CA\n          zip:\n            type: string\n            example: \"94022\"\n      - required:\n        - gps\n        type: object\n        properties:\n          gps:\n            type: string\n    Address:\n      required:\n      - street\n      type: object\n      properties:\n        street:\n          type: string\n          example: 12345 El Monte Road\n        city:\n          type: string\n          example: Los Altos Hills\n        state:\n          type: string\n          example: CA\n        zip:\n          type: string\n          example: \"94022\"\n```\n\n### Extensions\nThis project has a core artifact--`swagger-parser`, which uses Java Service Provider Interface (SPI) so additional extensions can be added. \n\nTo build your own extension, you simply need to create a `src/main/resources/META-INF/services/io.swagger.v3.parser.core.extensions.SwaggerParserExtension` file with the full classname of your implementation.  Your class must also implement the `io.swagger.v3.parser.core.extensions.SwaggerParserExtension` interface.  Then, including your library with the `swagger-parser` module will cause it to be triggered automatically.\n\n### OpenAPI 3.1 support\n\nSince version 2.1.0 Swagger Parser supports OpenAPI 3.1; see [this page](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---OpenAPI-3.1) for details\n\n## Security contact\n\nPlease disclose any security-related issues or vulnerabilities by emailing [security@swagger.io](mailto:security@swagger.io), instead of using the public issue tracker.\n","funding_links":[],"categories":["Java","By Technology"],"sub_categories":["Java"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswagger-api%2Fswagger-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswagger-api%2Fswagger-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswagger-api%2Fswagger-parser/lists"}