My Code is :
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Success, Failure}
import scala.concurrent.duration._
import akka.actor.ActorSystem
import akka.pattern.ask
import akka.event.Logging
import akka.io.IO
import spray.can.Http
import spray.client.pipelining._
import spray.util._
import argonaut._, Argonaut._
object Main extends App {
case class Elevation(location: Location, elevation: Double)
case class Location(lat: Double, lng: Double)
case class GoogleApiResult(status: String, results: List[Elevation])
implicit def locationFormat: CodecJson[Location] = casecodec2(Location.apply, Location.unapply)("lat", "lng")
implicit def elevationFormat: CodecJson[Elevation] = casecodec2(Elevation.apply, Elevation.unapply)("location", "elevation")
implicit def googleApiResultFormat: CodecJson[GoogleApiResult] = casecodec2(GoogleApiResult.apply, GoogleApiResult.unapply)("status", "results")
implicit val system = ActorSystem("simple-spray-client")
val log = Logging(system, getClass)
log.info("Requesting the elevation of Mt. Everest from Googles Elevation API...")
val pipeline= sendReceive
val responseFuture= pipeline {
Get("http://maps.googleapis.com/maps/api/elevation/json?locations=27.988056,86.925278&sensor=false")
}
responseFuture.onComplete {
case Success(result) => {
val content= result.entity.asString
println(content)
val resultdecode: GoogleApiResult= content.decodeOption[GoogleApiResult].getOrElse(GoogleApiResult("",Nil))
println(resultdecode)
log.info("The elevation of Mt.Everest is: {} ", resultdecode.results.toString())
shutdown()
}
case Failure(error) =>
log.error(error, "Couldn't get elevation")
shutdown()
}
def shutdown(): Unit = {
IO(Http).ask(Http.CloseAll)(1.second).await
system.shutdown()
}
}
for my dependencies I have:
name := "test"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies ++= {
val akkaV = "2.3.6"
val sprayV = "1.3.2"
Seq(
"io.spray" %% "spray-can" % sprayV withSources() withJavadoc(),
"io.spray" %% "spray-routing" % sprayV withSources() withJavadoc(),
"io.spray" %% "spray-json" % "1.3.1",
"io.spray" %% "spray-testkit" % sprayV % "test",
"com.typesafe.akka" %% "akka-actor" % akkaV,
"com.typesafe.akka" %% "akka-testkit" % akkaV % "test",
"org.specs2" %% "specs2-core" % "2.3.11" % "test",
"org.scalaz" %% "scalaz-core" % "7.1.0",
"io.spray" % "spray-client_2.11" % "1.3.3",
"io.argonaut" %% "argonaut" % "6.0.4"
)
}
and the errors :
java.lang.IncompatibleClassChangeError: Found class scalaz.$bslash$div, but interface was expected
at argonaut.JsonParser$.expectObject(JsonParser.scala:80)
at argonaut.JsonParser$.argonaut$JsonParser$$expectValue(JsonParser.scala:128)
at argonaut.JsonParser$.parse(JsonParser.scala:53)
at argonaut.Parse$.parse(Parse.scala:116)
at argonaut.Parse$.parse(Parse.scala:110)
at argonaut.Parse$class.decode(Parse.scala:47)
at argonaut.Parse$.decode(Parse.scala:110)
at argonaut.Parse$class.decodeOption(Parse.scala:92)
at argonaut.Parse$.decodeOption(Parse.scala:110)
at argonaut.ParseWrap.decodeOption(ParseWrap.scala:93)
at Main$$anonfun$1.apply(test.scala:40)
at Main$$anonfun$1.apply(test.scala:35)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)