MatchError with empty Schema
When trying to compile from openapi spec of a modified Airbyte client (original here),
Hitting the below error. It seems like it's parsing some schema object without any definitions, but there aren't any in the spec file.
Using version 0.2.2
[error] scala.MatchError: class Schema {
[error] type: null
[error] format: null
[error] $ref: null
[error] description: null
[error] title: null
[error] multipleOf: null
[error] maximum: null
[error] exclusiveMaximum: null
[error] minimum: null
[error] exclusiveMinimum: null
[error] maxLength: null
[error] minLength: null
[error] pattern: null
[error] maxItems: null
[error] minItems: null
[error] uniqueItems: null
[error] maxProperties: null
[error] minProperties: null
[error] required: null
[error] not: null
[error] properties: null
[error] additionalProperties: null
[error] nullable: null
[error] readOnly: null
[error] writeOnly: null
[error] example: null
[error] externalDocs: null
[error] deprecated: null
[error] discriminator: null
[error] xml: null
[error] } (of class io.swagger.v3.oas.models.media.Schema)
[error] at io.github.ghostbuster91.sttp.client3.openapi.SafeSchema$.apply(SafeOpenApi.scala:241)
[error] at io.github.ghostbuster91.sttp.client3.openapi.SafeArraySchema.items(SafeOpenApi.scala:174)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectFromSchemaRec(ReferenceCollector.scala:58)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.$anonfun$collectFromSchemaRec$1(ReferenceCollector.scala:52)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:196)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:194)
[error] at scala.collection.Iterator.foreach(Iterator.scala:943)
[error] at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error] at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error] at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:214)
[error] at scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:199)
[error] at scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:192)
[error] at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:108)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectFromSchemaRec(ReferenceCollector.scala:51)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.$anonfun$collectFromSchemaRec$1(ReferenceCollector.scala:52)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:196)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:194)
[error] at scala.collection.Iterator.foreach(Iterator.scala:943)
[error] at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error] at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error] at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:214)
[error] at scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:199)
[error] at scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:192)
[error] at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:108)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectFromSchemaRec(ReferenceCollector.scala:51)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.$anonfun$collectFromSchemaRec$1(ReferenceCollector.scala:52)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:196)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:194)
[error] at scala.collection.immutable.HashMap$HashMapValues.$anonfun$foreach$2(HashMap.scala:158)
[error] at scala.collection.immutable.HashMap$HashMap1.foreachEntry(HashMap.scala:401)
[error] at scala.collection.immutable.HashMap$HashTrieMap.foreachEntry(HashMap.scala:735)
[error] at scala.collection.immutable.HashMap$HashMapValues.foreach(HashMap.scala:158)
[error] at scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:199)
[error] at scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:192)
[error] at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:108)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectFromSchemaRec(ReferenceCollector.scala:51)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectFromSchema(ReferenceCollector.scala:37)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.$anonfun$collectResponses$2(ReferenceCollector.scala:25)
[error] at scala.collection.immutable.List.flatMap(List.scala:366)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectResponses(ReferenceCollector.scala:25)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collectSingleOperation(ReferenceCollector.scala:20)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.$anonfun$collect$1(ReferenceCollector.scala:7)
[error] at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:293)
[error] at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:335)
[error] at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:1111)
[error] at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:1111)
[error] at scala.collection.TraversableLike.flatMap(TraversableLike.scala:293)
[error] at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:290)
[error] at scala.collection.AbstractTraversable.flatMap(Traversable.scala:108)
[error] at io.github.ghostbuster91.sttp.client3.ReferenceCollector.collect(ReferenceCollector.scala:7)
[error] at io.github.ghostbuster91.sttp.client3.Codegen.createModel(Codegen.scala:80)
[error] at io.github.ghostbuster91.sttp.client3.Codegen.generate(Codegen.scala:41)
[error] at io.github.ghostbuster91.sttp.client3.Codegen.$anonfun$generate$3(Codegen.scala:28)
[error] at scala.util.Either.map(Either.scala:353)
[error] at io.github.ghostbuster91.sttp.client3.Codegen.generate(Codegen.scala:28)
[error] at io.github.ghostbuster91.sttp.client3.SbtCodegenAdapter.processSingleFile(SbtCodegenAdapter.scala:30)
[error] at io.github.ghostbuster91.sttp.client3.SttpOpenApiCodegenPlugin$autoImport$.$anonfun$generateSources$3(SttpOpenApiCodegenPlugin.scala:57)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:196)
[error] at scala.collection.TraversableOnce$folder$1.apply(TraversableOnce.scala:194)
[error] at scala.collection.immutable.Set$Set1.foreach(Set.scala:141)
[error] at scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:199)
[error] at scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:192)
[error] at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:108)
[error] at io.github.ghostbuster91.sttp.client3.SttpOpenApiCodegenPlugin$autoImport$.$anonfun$generateSources$2(SttpOpenApiCodegenPlugin.scala:55)
[error] at sbt.util.FileFunction$.$anonfun$cached$1(FileFunction.scala:80)
[error] at sbt.util.FileFunction$.$anonfun$cached$4(FileFunction.scala:153)
[error] at sbt.util.Difference.apply(Tracked.scala:414)
[error] at sbt.util.Difference.apply(Tracked.scala:394)
[error] at sbt.util.FileFunction$.$anonfun$cached$3(FileFunction.scala:149)
[error] at sbt.util.Difference.apply(Tracked.scala:414)
[error] at sbt.util.Difference.apply(Tracked.scala:389)
[error] at sbt.util.FileFunction$.$anonfun$cached$2(FileFunction.scala:148)
[error] at io.github.ghostbuster91.sttp.client3.SttpOpenApiCodegenPlugin$autoImport$.$anonfun$generateSources$1(SttpOpenApiCodegenPlugin.scala:66)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] at sbt.Execute.work(Execute.scala:291)
[error] at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] at java.base/java.lang.Thread.run(Thread.java:833)
[error] (airbyteClient / Compile / managedSources) scala.MatchError: class Schema {
[error] type: null
[error] format: null
[error] $ref: null
[error] description: null
[error] title: null
[error] multipleOf: null
[error] maximum: null
[error] exclusiveMaximum: null
[error] minimum: null
[error] exclusiveMinimum: null
[error] maxLength: null
[error] minLength: null
[error] pattern: null
[error] maxItems: null
[error] minItems: null
[error] uniqueItems: null
[error] maxProperties: null
[error] minProperties: null
[error] required: null
[error] not: null
[error] properties: null
[error] additionalProperties: null
[error] nullable: null
[error] readOnly: null
[error] writeOnly: null
[error] example: null
[error] externalDocs: null
[error] deprecated: null
[error] discriminator: null
[error] xml: null
[error] } (of class io.swagger.v3.oas.models.media.Schema)`
module in build.sbt:
lazy val airbyteClient = (project in file("airbyte-client"))
.enablePlugins(SttpOpenApiCodegenPlugin)
.settings(commonSettings: _*)
.settings(
// sttpOpenApiInputPath := file(s"${baseDirectory.value.getPath}/openapi-spec.yaml"),
// sttpOpenApiOutputPath := file(baseDirectory.value.getPath),
libraryDependencies ++= Seq(
"com.softwaremill.sttp.client3" %% "core" % "3.3.16",
"com.softwaremill.sttp.client3" %% "json4s" % "3.3.16",
"org.json4s" %% "json4s-jackson" % "3.6.8"
),
)
`
Hi,
Thanks for reporting. Yes, the parser is definitely something which should be improved. Thanks to such reports hopefully I will be able create more robust one. I just need to find some time...
Hi there. I got the same error with the OpenAI spec: https://github.com/openai/openai-openapi/blob/master/openapi.yaml
Is there any way to trace which part of the spec is causing this issue?
Hi,
Sorry to disappoint you but for now I have been using good old binary search. Thanks for reporting. I think that I already have enough specs to start working on the better parser, but I cannot promise anything.