Skip to content
This repository has been archived by the owner on Nov 23, 2024. It is now read-only.

Error when UI is generated for two sources #166

Open
sharmasourabh opened this issue Mar 30, 2019 · 2 comments
Open

Error when UI is generated for two sources #166

sharmasourabh opened this issue Mar 30, 2019 · 2 comments
Labels

Comments

@sharmasourabh
Copy link

Describe the bug

Gives following error when two or more sources are used under swaggerSources while generating UI. It works well for single source.

Caused by:
org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method copy() for arguments [build_f1ze0druuyrt748fg165ca1g2$_run_closure2$_closure18$_closure24$_closure25$_closure26@511a0d5d] on task ':generateSwaggerUISource2' of type org.hidetake.gradle.swagger.generator.GenerateSwaggerUI.

To Reproduce:

Use following code, then generate UI

swaggerSources {
  source1 {
    inputFile = file(<Yaml full path>)
    code {
      language = 'spring'
      configFile = file(<config full path>)
      components = ['models', 'apis']
      dependsOn validation
    }
    ui {
      doLast {
        copy {
          from "index.html"
          into outputDir
        }
      }
    }
  } 
  source2 {
    inputFile = file(<Yaml2 fullpath>)
    code {
      language = 'spring'
      configFile = file(<config2 full path>)
      components = ['apis']
      dependsOn validation
    }
    ui {
      doLast {
        copy {
          from "index.html"
          into outputDir
        }
      }
    }
  }
}

Expected behavior:

Should generate working UI for both sources.

Environment

Plugin version:
2.10.0 (tested with latest 2.18.1 also)
Swagger Codegen version: 2.3.1
Gradle version: 4.5.1
Java version: 1.8
OS: Windows 10

@sharmasourabh
Copy link
Author

Any workaround to resolve it?

@AlexGustafsson
Copy link

This seems stale to say the least, but for people coming here from Google, I took the direction of combining multiple files to one before using this plugin.

I opened an issue to suggest the implementation of a $include field which would allow for arbitrary includes of other YAML files.

For now, the workaround I use is an added task to compile the YAML files before using the plugin:

task compileSwaggerSchema(type: Exec) {
  inputs.files 'api.yml', 'index.yml', 'models.yml'
  outputs.file 'documentation/api/schemas/v1/schema.yml'
  workingDir 'documentation/api/schemas/v1'
  commandLine 'bash', '-c', 'npx swagger-cli bundle --outfile schema.yml --type yaml index.yml'
}
generateSwaggerUI.dependsOn compileSwaggerSchema

Example index.yml:

openapi: 3.0.0
paths:
  $ref: "./api.yml"
components:
  schemas:
    $ref: "./models.yml"
# api.yml
/:
  get:
    responses:
      '200':
        description: The authentication process was started successfully.
        content:
          application/json:
            schema:
              $ref: './models.yml#/Response'
     
# models.yml
Response:
  type: object
  properties:
    foo:
      type: string

The workaround requires node and npm. It uses https://github.com/APIDevTools/swagger-cli.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants