FasterXML / FasterXML/jackson-module-scala
jsonSchema generation for classes extending TraversableOnce return { type: array }
- 主要言語
- Scala
- スター
- 506
- フォーク
- 138
- 平均マージ
- 3時間 6分
- マージ済み PR(30日)
- 48
説明
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?
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。