Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cast Error in OpenAPIGenerator for DateSchema and DateTimeSchema #146

Closed
trafficant opened this issue Oct 22, 2024 · 0 comments
Closed

Cast Error in OpenAPIGenerator for DateSchema and DateTimeSchema #146

trafficant opened this issue Oct 22, 2024 · 0 comments
Assignees
Labels
bug Something isn't working

Comments

@trafficant
Copy link

When having Date schema and a DateTimeSchema strings in the OpenAPI the value results in an Cast exception

To Reproduce
Steps to reproduce the behaviour:

  1. Run `cats --contract ... --useExamples=true
  2. Using which OpenAPI file a definition like

...
startDateTime:
in: query
name: startDate
description: Starting date and time in ISO8601 format for query
required: true
schema:
type: string
format: date-time
examples:
- "2018-10-09T08:16:29.234Z"
startDate:
in: query
name: startDate
description: Starting date for query
required: true
schema:
type: string
format: date
examples:
- "2018-10-09"
...

  1. And details about the error/issue you are facing
    Getting the followng errors:

For Date:
Java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Date (java.lang.String and java.util.Date are in module java.base of loader 'bootstrap')
at com.endava.cats.openapi.OpenAPIModelGenerator.formatExampleIfNeeded(OpenAPIModelGenerator.java:294)
at com.endava.cats.openapi.OpenAPIModelGenerator.extractExampleFromSchema(OpenAPIModelGenerator.java:258)
at com.endava.cats.openapi.OpenAPIModelGenerator.resolvePropertyToExample(OpenAPIModelGenerator.java:203)
at com.endava.cats.openapi.OpenAPIModelGenerator.parseFromInnerSchema(OpenAPIModelGenerator.java:644)
at com.endava.cats.openapi.OpenAPIModelGenerator.processInnerSchema(OpenAPIModelGenerator.java:581)
at com.endava.cats.openapi.OpenAPIModelGenerator.processSchemaProperties(OpenAPIModelGenerator.java:573)
at com.endava.cats.openapi.OpenAPIModelGenerator.resolveModelToExample(OpenAPIModelGenerator.java:529)
at com.endava.cats.openapi.OpenAPIModelGenerator.generate(OpenAPIModelGenerator.java:157)
at com.endava.cats.factory.FuzzingDataFactory.generateSample(FuzzingDataFactory.java:533)
at com.endava.cats.factory.FuzzingDataFactory.getRequestPayloadsSamples(FuzzingDataFactory.java:499)
at com.endava.cats.factory.FuzzingDataFactory.getFuzzDataForNonBodyMethods(FuzzingDataFactory.java:348)
at com.endava.cats.factory.FuzzingDataFactory.getFuzzingDataForGet(FuzzingDataFactory.java:228)
at com.endava.cats.factory.FuzzingDataFactory.fromPathItem(FuzzingDataFactory.java:131)
at com.endava.cats.factory.FuzzingDataFactory_ClientProxy.fromPathItem(Unknown Source)
at com.endava.cats.command.CatsCommand.fuzzPath(CatsCommand.java:379)
at com.endava.cats.command.CatsCommand.startFuzzing(CatsCommand.java:298)
at com.endava.cats.command.CatsCommand.doLogic(CatsCommand.java:243)
at com.endava.cats.command.CatsCommand.run(CatsCommand.java:193)
at picocli.CommandLine.executeUserObject(CommandLine.java:2030)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
at picocli.CommandLine.execute(CommandLine.java:2174)
at com.endava.cats.CatsMain.run(CatsMain.java:41)
at com.endava.cats.CatsMain_ClientProxy.run(Unknown Source)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:140)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
at io.quarkus.runner.GeneratedMain.main(Unknown Source)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:116)
at java.base/java.lang.Thread.run(Thread.java:1570)

For DateTime
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.time.OffsetDateTime (java.lang.String and java.time.OffsetDateTime are in module java.base of loader 'bootstrap')
at com.endava.cats.openapi.OpenAPIModelGenerator.formatExampleIfNeeded(OpenAPIModelGenerator.java:298)
at com.endava.cats.openapi.OpenAPIModelGenerator.extractExampleFromSchema(OpenAPIModelGenerator.java:258)
at com.endava.cats.openapi.OpenAPIModelGenerator.resolvePropertyToExample(OpenAPIModelGenerator.java:203)
at com.endava.cats.openapi.OpenAPIModelGenerator.parseFromInnerSchema(OpenAPIModelGenerator.java:644)
at com.endava.cats.openapi.OpenAPIModelGenerator.processInnerSchema(OpenAPIModelGenerator.java:581)
at com.endava.cats.openapi.OpenAPIModelGenerator.processSchemaProperties(OpenAPIModelGenerator.java:573)
at com.endava.cats.openapi.OpenAPIModelGenerator.resolveModelToExample(OpenAPIModelGenerator.java:529)
at com.endava.cats.openapi.OpenAPIModelGenerator.generate(OpenAPIModelGenerator.java:157)
at com.endava.cats.factory.FuzzingDataFactory.generateSample(FuzzingDataFactory.java:533)
at com.endava.cats.factory.FuzzingDataFactory.getRequestPayloadsSamples(FuzzingDataFactory.java:499)
at com.endava.cats.factory.FuzzingDataFactory.getFuzzDataForNonBodyMethods(FuzzingDataFactory.java:348)
at com.endava.cats.factory.FuzzingDataFactory.getFuzzingDataForGet(FuzzingDataFactory.java:228)
at com.endava.cats.factory.FuzzingDataFactory.fromPathItem(FuzzingDataFactory.java:131)
at com.endava.cats.factory.FuzzingDataFactory_ClientProxy.fromPathItem(Unknown Source)
at com.endava.cats.command.CatsCommand.fuzzPath(CatsCommand.java:379)
at com.endava.cats.command.CatsCommand.startFuzzing(CatsCommand.java:298)
at com.endava.cats.command.CatsCommand.doLogic(CatsCommand.java:243)
at com.endava.cats.command.CatsCommand.run(CatsCommand.java:193)
at picocli.CommandLine.executeUserObject(CommandLine.java:2030)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
at picocli.CommandLine.execute(CommandLine.java:2174)
at com.endava.cats.CatsMain.run(CatsMain.java:41)
at com.endava.cats.CatsMain_ClientProxy.run(Unknown Source)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:140)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
at io.quarkus.runner.GeneratedMain.main(Unknown Source)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:116)
at java.base/java.lang.Thread.run(Thread.java:1570)

Expected behaviour
No Exeption

Environment:

  • Key | Value
    ------------- | --------------------
    OS Name | Windows 11
    OS Version | 10.0
    OS Arch | amd64
    Binary Type | uber-jar
    Cats Version | 12.1.1-SNAPSHOT
    Cats Build | 2024-10-22T05:28:00Z
    Term Width | 80
    Term Type | unknown
    Shell | unknown

Additional context
What I saw:
When having a OpenAPI spec like this the example value in method formatExampleIfNeeded are still strings and cannot be casted
like in the code

  • Date: example = "2018-10-09"
  • DateTime: example = "2018-10-09T08:16:29.234Z"

But during tests in the cats project the objects ar already objects of the corresponding type, not strings

  • Date: example = Date
  • DateTime: example = OffsetDateTime
@trafficant trafficant added the bug Something isn't working label Oct 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants