Openapi-generator: [BUG] Transitive library issue

Created on 8 Feb 2019  Â·  7Comments  Â·  Source: OpenAPITools/openapi-generator

Bug Report Checklist

  • [Yes ] Have you provided a full/minimal spec to reproduce the issue?

  • [yes] Have you validated the input using an OpenAPI validator (example)?

  • [3.3.2+] What's the version of OpenAPI Generator used?
  • [yes ] Have you search for related issues/PRs?
  • [ ] What's the actual output vs expected output?

Expected: Build success
Actual: Failure:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':openApiGenerate'.
> org.yaml.snakeyaml.events.MappingStartEvent.<init>(Ljava/lang/String;Ljava/lang/String;ZLorg/yaml/snakeyaml/error/Mark;Lorg/yaml/snakeyaml/error/Mark;Ljava/lang/Boolean;)V

  • [ ] [Optional] Bounty to sponsor the fix (example)
Description

Build fails due to transitive dependency?
Gradle 4.10.2

openapi-generator version

OpenApiGen 3.3.0+

Possible regression in a transitive dependency

OpenAPI declaration file content or url
openapi: 3.0.0

info:
  title: example
  version: 1.0.0
  description: example
  contact:
    email: [email protected]

servers:
- url: http://example.com/v0

tags:
- name: example
  description: example
  externalDocs:
    description: example
    url: example

paths:
  '/example':
    get:
      tags: [example]
      summary: example
      operationId: example
      responses:
        '200':
          description: example
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Example'
        '404':
          description: example

components:
  schemas:
    Example:
      type: object
      description: example.
      required: [example]
      properties:
        example:
          type: integer
          description: example
          format: int32
          minimum: 0
Command line used for generation

gradle clean build

Steps to reproduce

gradle clean build

Related issues/PRs

n/a

Suggest a fix

n/a

Bug Swagger-Parser

All 7 comments

Stacktrace:

* What went wrong:
Execution failed for task ':openApiGenerate'.
> org.yaml.snakeyaml.events.MappingStartEvent.<init>(Ljava/lang/String;Ljava/lang/String;ZLorg/yaml/snakeyaml/error/Mark;Lorg/yaml/snakeyaml/error/Mark;Ljava/lang/Boolean;)V

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':openApiGenerate'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NoSuchMethodError: org.yaml.snakeyaml.events.MappingStartEvent.<init>(Ljava/lang/String;Ljava/lang/String;ZLorg/yaml/snakeyaml/error/Mark;Lorg/yaml/snakeyaml/error/Mark;Ljava/lang/Boolean;)V
        at com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.writeStartObject(YAMLGenerator.java:489)
        at org.openapitools.codegen.serializer.OpenAPISerializer.serialize(OpenAPISerializer.java:17)
        at org.openapitools.codegen.serializer.OpenAPISerializer.serialize(OpenAPISerializer.java:12)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3893)
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3207)
        at org.openapitools.codegen.serializer.SerializerUtils.toYamlString(SerializerUtils.java:27)
        at org.openapitools.codegen.DefaultCodegen.generateYAMLSpecFile(DefaultCodegen.java:4725)
        at org.openapitools.codegen.languages.SpringCodegen.postProcessSupportingFileData(SpringCodegen.java:626)
        at org.openapitools.codegen.DefaultGenerator.buildSupportFileBundle(DefaultGenerator.java:857)
        at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:894)
        at org.openapitools.generator.gradle.plugin.tasks.GenerateTask.doWork(GenerateTask.kt:537)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 31 more

Also fails for "org.openapitools:openapi-generator-gradle-plugin:4.0.0-beta"

Workaround in build.gradle:

dependencies {
        classpath "org.openapitools:openapi-generator-gradle-plugin:3.3.2"

        // WORKAROUND HERE:
        configurations.all {
            resolutionStrategy {
                force 'org.yaml:snakeyaml:1.18'
            }
        }
    }

@tcjcodes Thank you a lot for your analysis!
I guess that forcing gradle to stick to org.yaml:snakeyaml:jar:1.18 is a good temporary solution.

—

I had a look a the dependency tree:

The problem is that swagger-core is using this old version of snakeyaml, because of an old version of jackson.

See the dependency tree:

org.openapitools:openapi-generator:jar:4.0.0-SNAPSHOT
+- io.swagger.core.v3:swagger-core:jar:2.0.6:compile
   +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.9.5:compile
      +- org.yaml:snakeyaml:jar:1.15:compile

By the way swagger-parser-v3 has also a dependency on the same version of jackson.

Swagger-Core and Swagger-Parser have updated their poms to use a newer version (2.9.8) of jackson. So it will be solved with the next update of Swagger-Parser (and Swagger-Core).

Error is no longer showing up in v4.0.0-beta3

Yes we updated the Swagger-Parser version there! Thank you a lot for testing and reporting here.

Was this page helpful?
0 / 5 - 0 ratings