0
我有很多的問題,期貨工作作爲使用Scala的Dispatch異步HTTP調用的答案。我還用Case Class MatchersSpecs2與期貨和case類
讓想我在這裏做一個電話:http://ip.jsontest.com/至極返回該JSON:
{
"ip": "x.xxx.xxx.xxx"
}
所以我建立我的規格爲這
import dispatch._
import Defaults._
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.specs2.concurrent.ExecutionEnv
import org.specs2.mutable.Specification
import org.specs2.matcher.MatcherMacros
import scala.language.experimental.macros
import scala.concurrent.duration._
class TestDispatchJSON extends Specification with MatcherMacros{
implicit val formats = DefaultFormats
case class Direction(ip: String)
val translateAPI = url("http://ip.jsontest.com/")
val response = Http(translateAPI OK as.String)
val direction = for(json <- response) yield parse(json).extract[Direction]
"The direction" should {
"direction must be of class Direction" in { implicit ee: ExecutionEnv =>
direction must matchA[Direction].ip("x.xxx.xxx.xxx").await(retries = 2, timeout = 10.seconds)
}
}
}
但它不工作,我得到這個錯誤。
Testing started at 13:44 ...
13:44:41.170 [New I/O worker #1] DEBUG c.n.h.c.p.n.r.NettyConnectListener - Request using non cached Channel '[id: 0x702a0c8a, /172.16.10.142:5548 => ip.jsontest.com/64.233.184.121:80]':
DefaultHttpRequest(chunked: false)
GET/HTTP/1.1
Connection: keep-alive
Host: ip.jsontest.com
Accept: */*
User-Agent: Dispatch/0.11.3
13:44:41.335 [New I/O worker #1] DEBUG c.n.h.c.p.netty.handler.HttpProtocol -
Request DefaultHttpRequest(chunked: false)
GET/HTTP/1.1
Connection: keep-alive
Host: ip.jsontest.com
Accept: */*
User-Agent: Dispatch/0.11.3
Response DefaultHttpResponse(chunked: true)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Vary: Accept-Encoding
Date: Thu, 18 Jun 2015 11:44:41 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,p=0
Accept-Ranges: none
Transfer-Encoding: chunked
13:44:41.337 [New I/O worker #1] DEBUG c.n.h.c.p.n.channel.ChannelManager - Adding key: http://ip.jsontest.com:80 for channel [id: 0x702a0c8a, /172.16.10.142:5548 => ip.jsontest.com/64.233.184.121:80]
No usable value for $outer
Can't find ScalaSig for class java.lang.Object
org.json4s.package$MappingException: No usable value for $outer
Can't find ScalaSig for class java.lang.Object
at org.json4s.reflect.package$.fail(package.scala:96)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:462)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:482)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$14.apply(Extraction.scala:482)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$instantiate(Extraction.scala:470)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:515)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(Extraction.scala:512)
at org.json4s.Extraction$.org$json4s$Extraction$$customOrElse(Extraction.scala:524)
at org.json4s.Extraction$ClassInstanceBuilder.result(Extraction.scala:512)
at org.json4s.Extraction$.extract(Extraction.scala:351)
at org.json4s.Extraction$.extract(Extraction.scala:42)
at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21)
at com.elevenpaths.TestDispatchJSON$$anonfun$1.apply(TestDispatchJSON.scala:35)
at com.elevenpaths.TestDispatchJSON$$anonfun$1.apply(TestDispatchJSON.scala:35)
at scala.util.Success$$anonfun$map$1.apply(Try.scala:236)
at scala.util.Try$.apply(Try.scala:191)
at scala.util.Success.map(Try.scala:236)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
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)
Caused by: org.json4s.package$MappingException: Can't find ScalaSig for class java.lang.Object
at org.json4s.reflect.ScalaSigReader$.findClass(ScalaSigReader.scala:42)
at org.json4s.reflect.ScalaSigReader$.org$json4s$reflect$ScalaSigReader$$read$1(ScalaSigReader.scala:36)
at org.json4s.reflect.ScalaSigReader$.org$json4s$reflect$ScalaSigReader$$read$1(ScalaSigReader.scala:36)
at org.json4s.reflect.ScalaSigReader$.readField(ScalaSigReader.scala:38)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$3.apply(Reflector.scala:66)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$3.apply(Reflector.scala:65)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder.fields(Reflector.scala:65)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder.fields(Reflector.scala:78)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder.properties(Reflector.scala:82)
at org.json4s.reflect.Reflector$ClassDescriptorBuilder.result(Reflector.scala:158)
at org.json4s.reflect.Reflector$.createDescriptor(Reflector.scala:50)
at org.json4s.reflect.Reflector$$anonfun$describe$1.apply(Reflector.scala:44)
at org.json4s.reflect.Reflector$$anonfun$describe$1.apply(Reflector.scala:44)
at org.json4s.reflect.package$Memo.apply(package.scala:39)
at org.json4s.reflect.Reflector$.describe(Reflector.scala:44)
at org.json4s.Extraction$.extract(Extraction.scala:349)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:450)
... 30 more
方向應與退出代碼
過程完成0
我也希望有一個好方法裏面Specs2期貨工作,東陽我不喜歡的執行環境,請加進口喲你答案
你試圖做什麼錯誤提示?要導入macros._不是宏 – melps
是的,這是正確的,我會糾正你 – anquegi
可以嘗試使用'懶val',而不是'val'爲'formats','translateAPI','response'代碼和錯誤'direction'?另請參閱https://etorreborre.github.io/specs2/guide/SPECS2-3.6.1/org.specs2.guide.Environment.html以獲取訪問執行環境的更簡單方法。 – Eric