FasterXML / FasterXML/jackson-module-scala
jsonSchema generation for classes extending TraversableOnce return { type: array }
- Langage dominant
- Scala
- Étoiles
- 506
- Forks
- 138
- Merge moyen
- 3 h 6 min
- PR mergées (30 j)
- 48
Description
The jsonSchema returned for:
``` scala
case class WorkingClass(int: Int) {
def iterator: Iterator[Int] = List().toIterator
}
```
looks correct:
``` json
{
"type" : "object",
"id" : "urn:jsonschema:com:ccri:commons:config:schema:ReproduceIssue:WorkingClass",
"properties" : {
"int" : {
"type" : "integer"
}
}
}
```
But if the class is declared as extending `Iterable[Int]`
``` scala
case class FailingClass(int: Int) extends Iterable[Int] {
def iterator: Iterator[Int] = List().toIterator
}
```
I get:
``` json
{
"type" : "array"
}
```
As far as I can tell, mixing in any trait that subclasses `TraversableOnce` produces `{"type": "array"}`.
To reproduce:
``` scala
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.jsonSchema.customProperties.ValidationSchemaFactoryWrapper
import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
object JacksonHelper {
val jacksonObjectMapper: ObjectMapper = new ObjectMapper() with ScalaObjectMapper
jacksonObjectMapper.registerModule(DefaultScalaModule)
val writer = jacksonObjectMapper.writer()
val visitor: SchemaFactoryWrapper = new ValidationSchemaFactoryWrapper()
val prettyPrinter = jacksonObjectMapper.writerWithDefaultPrettyPrinter()
def jsonSchema(c: Class[_]) = {
writer.acceptJsonFormatVisitor(c, visitor)
val jsonSchema = visitor.finalSchema()
prettyPrinter.writeValueAsString(jsonSchema)
}
}
object ReproduceIssue extends App {
case class WorkingClass(int: Int) {
def iterator: Iterator[Int] = List().toIterator
}
case class FailingClass(int: Int) extends Iterable[Int] {
def iterator: Iterator[Int] = List().toIterator
}
println("WorkingClass:")
println(JacksonHelper.jsonSchema(classOf[WorkingClass]))
println("FailingClass:")
println(JacksonHelper.jsonSchema(classOf[FailingClass]))
}
```
``` xml
com.fasterxml.jackson.module
jackson-module-jsonSchema
2.6.3
com.fasterxml.jackson.module
jackson-module-scala_2.10
2.6.3
```
Am I doing something wrong, is this not supposed to work, or is it a bug?
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Évaluation
Cette issue n'a pas encore été évaluée.