1

JSON 文字列をカスタム Scala オブジェクトに解析しようとすると、ScalaTest が壊れます。[de]serialization に Play-Json ライブラリを使用しています。シリアル化は正常に機能しますが、Blah クラスで単体テストを実行しているときに逆シリアル化が中断されます。このテストでは fromJsonString() メソッドを呼び出し、Im は単体テスト用の ScalaTest ライブラリを使用します。ここでいくつかの助けに感謝します。

例外トレース: (完全なトレース - http://pasted.co/e627b1ee )

An exception or error caused a run to abort: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object; 
java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:144)
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:108)
    at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:103)
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3536)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1872)
    at play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:226)
    at play.api.libs.json.Json$.parse(Json.scala:21)
    at com.project.gateway.model.Blah.fromJsonString(Blah.scala:98)

Scala オブジェクトの定義:

case class Blah(name: String, id: String) {

      implicit val BlahWrites: Writes[Blah] = (
        (JsPath \ "name").write[String] and
          (JsPath \ "id").write[String]
        )(unlift(Blah.unapply))

      implicit val BlahReads: Reads[Blah] = (
        (JsPath \ "name").read[String] and
          (JsPath \ "id").read[String]
        )(Blah)


      def toJsonString(): String = {
        Json.toJson(this).toString()
      }

      def fromJsonString(jsonString: String): Blah = {
        val value = Json.parse(jsonString)
        value.as[Blah]
        //Json.fromJson[Blah](value).get
      }
    }

私のSBTファイル:

name := "Project"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies += "com.typesafe.scala-logging" % "scala-logging_2.11" % "3.1.0"
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"
libraryDependencies += "com.typesafe.play" % "play-json_2.10" % "2.4.2"
4

1 に答える 1

2

実行時/テスト時のscala-libraryのバージョンと、エラーを引き起こしている依存関係の構築に使用されたものとの間に違いがあると思います。

SBT や Maven を使用している場合は、使用されているライブラリ (推移的なものを含む) を確認できます。そのため、scala-library (異なる依存関係によって異なるバージョンをプルする) に関する非互換性がないことを確認してください。

于 2015-09-16T08:16:27.473 に答える