2015-09-16 4 views
1

My ScalaTest ломается, пытаясь разобрать строку JSON в пользовательский объект Scala. Я использую библиотеку Play-Json для сериализации [de]. Сериализация работает нормально, но десериализация ломается при выполнении единичного теста в классе Blah. Тест вызывает метод fromJsonString(), а Im использует библиотеку ScalaTest для модульного тестирования. Цените некоторую помощь здесь.Scala десериализация пользовательского объекта scala с помощью библиотеки play-json

Исключение след: (Полный след - 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" 
+1

Я предполагаю, что существует разница между версией scala-библиотеки во время выполнения/тестом, а другая используется для построения зависимости, которая вызывает ошибку. – cchantep

+0

Ничего себе, вы натыкаетесь. Я использовал Play-Json 2.10 и обновил его до Play-Json 2.11. – broun

+0

cchantep - Вы не возражаете против этого, так как ответ также обозначил это. Благодаря – broun

ответ

2

Я предполагаю, что есть разница между версией scala-библиотеки во время выполнения/теста, и тот, который используется для создания зависимостей, которые поднимаются Ошибка.

Если вы используете SBT или Maven, вы можете проверить используемые библиотеки (в том числе переходные), поэтому проверьте, нет ли несовместимости с scala-библиотекой (в разных версиях используются разные зависимости).

Смежные вопросы