FasterXML / FasterXML/jackson-module-scala

jsonSchema generation for classes extending TraversableOnce return { type: array }

Ouverte
#232 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub
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.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.