运行 尝试 json 序列化祖父特征中的 'val' 或 'lazy val' 元组字段时出现时间异常,在 scala 中使用 json4s
Run time exception while trying to json serialize a 'val' or 'lazy val' Tuple field in grand parent Trait, in scala using json4s
我 运行 在序列化案例 class 时进入 运行 时间异常,这扩展了一个特征,进而扩展了另一个 g运行dparent 特征。
仅当 g运行dparent trait 包含一个 val 或 lazy val,它是一个元组时才会出现问题。
trait Trait0 {
def a: Int
lazy val b: (Int, Int) = (1, 2)
// also errors if "val"
// executes if "def" or just a simple type
}
trait Trait1 extends Trait0
case class Test(a: Int) extends Trait1
object Main {
def main(args: Array[String]): Unit = {
import org.json4s._
import org.json4s.native.Serialization.write
implicit val formats = DefaultFormats
println(write(Test(1)))
}
}
我得到的运行时异常是
Exception in thread "main" org.json4s.package$MappingException: Can't
find field b from class com.adobe.formfactory.generator.Test at
org.json4s.reflect.package$.fail(package.scala:95) at
org.json4s.reflect.ScalaSigReader$.read(ScalaSigReader.scala:43) at
org.json4s.reflect.ScalaSigReader$.$anonfun$readField(ScalaSigReader.scala:47)
at scala.Option.getOrElse(Option.scala:121) at
org.json4s.reflect.ScalaSigReader$.read(ScalaSigReader.scala:47) at
org.json4s.reflect.ScalaSigReader$.readField(ScalaSigReader.scala:49)
at
org.json4s.reflect.Reflector$ClassDescriptorBuilder.$anonfun$fields(Reflector.scala:69)
at
scala.collection.TraversableLike.$anonfun$map(TraversableLike.scala:234)
at
scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59)
at
scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:52)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at scala.collection.TraversableLike.map(TraversableLike.scala:234)
at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at
org.json4s.reflect.Reflector$ClassDescriptorBuilder.fields(Reflector.scala:68)
at
org.json4s.reflect.Reflector$ClassDescriptorBuilder.properties(Reflector.scala:85)
at
org.json4s.reflect.Reflector$ClassDescriptorBuilder.result(Reflector.scala:184)
at org.json4s.reflect.Reflector$.createDescriptor(Reflector.scala:53)
at
org.json4s.reflect.Reflector$.$anonfun$describe(Reflector.scala:48)
at org.json4s.reflect.package$Memo.apply(package.scala:36) at
org.json4s.reflect.Reflector$.describe(Reflector.scala:48) at
org.json4s.Extraction$.decomposeObject(Extraction.scala:118) at
org.json4s.Extraction$.internalDecomposeWithBuilder(Extraction.scala:228)
at org.json4s.Extraction$.decomposeWithBuilder(Extraction.scala:64)
at org.json4s.native.Serialization$.write(Serialization.scala:43) at
org.json4s.native.Serialization$.write(Serialization.scala:37) at
com.adobe.formfactory.generator.Main$.main(Main.scala:31) at
com.adobe.formfactory.generator.Main.main(Main.scala)
Scala2.12.3
JDK1.8
json4s-native 3.5.3
我猜 json4s 没有遍历元组或其他复合对象的超级链?
如果是提供自定义序列化程序的情况,错误会提到某些类型无法序列化。
我想这是自 v3.4 以来就存在的错误
我 运行 在序列化案例 class 时进入 运行 时间异常,这扩展了一个特征,进而扩展了另一个 g运行dparent 特征。
仅当 g运行dparent trait 包含一个 val 或 lazy val,它是一个元组时才会出现问题。
trait Trait0 {
def a: Int
lazy val b: (Int, Int) = (1, 2)
// also errors if "val"
// executes if "def" or just a simple type
}
trait Trait1 extends Trait0
case class Test(a: Int) extends Trait1
object Main {
def main(args: Array[String]): Unit = {
import org.json4s._
import org.json4s.native.Serialization.write
implicit val formats = DefaultFormats
println(write(Test(1)))
}
}
我得到的运行时异常是
Exception in thread "main" org.json4s.package$MappingException: Can't find field b from class com.adobe.formfactory.generator.Test at org.json4s.reflect.package$.fail(package.scala:95) at org.json4s.reflect.ScalaSigReader$.read(ScalaSigReader.scala:43) at org.json4s.reflect.ScalaSigReader$.$anonfun$readField(ScalaSigReader.scala:47) at scala.Option.getOrElse(Option.scala:121) at org.json4s.reflect.ScalaSigReader$.read(ScalaSigReader.scala:47) at org.json4s.reflect.ScalaSigReader$.readField(ScalaSigReader.scala:49) at org.json4s.reflect.Reflector$ClassDescriptorBuilder.$anonfun$fields(Reflector.scala:69) at scala.collection.TraversableLike.$anonfun$map(TraversableLike.scala:234) at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59) at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:52) at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) at scala.collection.TraversableLike.map(TraversableLike.scala:234) at scala.collection.TraversableLike.map$(TraversableLike.scala:227) at scala.collection.AbstractTraversable.map(Traversable.scala:104) at org.json4s.reflect.Reflector$ClassDescriptorBuilder.fields(Reflector.scala:68) at org.json4s.reflect.Reflector$ClassDescriptorBuilder.properties(Reflector.scala:85) at org.json4s.reflect.Reflector$ClassDescriptorBuilder.result(Reflector.scala:184) at org.json4s.reflect.Reflector$.createDescriptor(Reflector.scala:53) at org.json4s.reflect.Reflector$.$anonfun$describe(Reflector.scala:48) at org.json4s.reflect.package$Memo.apply(package.scala:36) at org.json4s.reflect.Reflector$.describe(Reflector.scala:48) at org.json4s.Extraction$.decomposeObject(Extraction.scala:118) at org.json4s.Extraction$.internalDecomposeWithBuilder(Extraction.scala:228) at org.json4s.Extraction$.decomposeWithBuilder(Extraction.scala:64) at org.json4s.native.Serialization$.write(Serialization.scala:43) at org.json4s.native.Serialization$.write(Serialization.scala:37) at com.adobe.formfactory.generator.Main$.main(Main.scala:31) at com.adobe.formfactory.generator.Main.main(Main.scala)
Scala2.12.3
JDK1.8
json4s-native 3.5.3
我猜 json4s 没有遍历元组或其他复合对象的超级链?
如果是提供自定义序列化程序的情况,错误会提到某些类型无法序列化。
我想这是自 v3.4 以来就存在的错误