FasterXML / FasterXML/jackson-module-scala

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

オープン
#232 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。