2011-08-26 66 views
2

我遵循示例here。它工作,很好。但現在我需要執行一些業務邏輯case get:Get =>Akka REST服務+派遣

所需的業務邏輯包括使用dispatch庫。簡而言之,我向某個頁面發出請求,獲取數據,將其包裝在某個類中,然後將其返回。

我的接收情況是這樣的:

case get:Get => { 
    get.response.setContentType(MediaType.APPLICATION_JSON) 
    val response = Sender.doLogin 
    val battery = (response.batteryRemaining/response.batteryCapacity) * 100 
    val soc = (response.pluginState + ", " + response.chargingStatus).replaceAll("_", " ") 
    val jsonResult = pretty(render(("battery" -> battery) ~ ("soc" -> soc))) 
    get OK jsonResult 
    // get OK "works" 
} 

這不起作用:

ERROR [akka:event-driven:dispatcher:event:handler-5] akka.event.slf4j.Slf4jEventHandler - 
    [akka.http.Servlet30ContextMethodFactory$$anon$2] 
    [org.eclipse.jetty.io.EofException] 
    [org.eclipse.jetty.io.UncheckedIOException: org.eclipse.jetty.io.EofException 
    at org.eclipse.jetty.io.UncheckedPrintWriter.setError(UncheckedPrintWriter.java:107) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:280) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:295) 
    at akka.http.RequestMethod$$anonfun$complete$1.apply(Mist.scala:346) 
    at akka.http.RequestMethod$$anonfun$complete$1.apply(Mist.scala:343) 
    at akka.http.RequestMethod$class.rawComplete(Mist.scala:357) 
    at akka.http.Get.rawComplete(Mist.scala:407) 
    at akka.http.RequestMethod$class.complete(Mist.scala:343) 
    at akka.http.Get.complete(Mist.scala:407) 
    at akka.http.RequestMethod$class.complete(Mist.scala:340) 
    at akka.http.Get.complete(Mist.scala:407) 
    at akka.http.RequestMethod$class.OK(Mist.scala:388) 
    at akka.http.Get.OK(Mist.scala:407) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService$$anonfun$receive$1.apply(BatteryStatusService.scala:36) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService$$anonfun$receive$1.apply(BatteryStatusService.scala:28) 
    at akka.actor.Actor$class.apply(Actor.scala:563) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService.apply(BatteryStatusService.scala:27) 
    at akka.actor.LocalActorRef.invoke(ActorRef.scala:890) 
    at akka.dispatch.MessageInvocation.invoke(MessageHandling.scala:25) 
    at akka.dispatch.ExecutableMailbox$class.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:214) 
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$4.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:120) 
    at akka.dispatch.ExecutableMailbox$class.run(ExecutorBasedEventDrivenDispatcher.scala:186) 
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$4.run(ExecutorBasedEventDrivenDispatcher.scala:120) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
    at akka.dispatch.MonitorableThread.run(ThreadPoolBuilder.scala:181) 
Caused by: org.eclipse.jetty.io.EofException 
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:150) 
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:97) 
    at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:109) 
    at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:283) 
    at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:271) 
    ... 25 more 
] 

它也似乎,它開始發出請求(和訊庫)後響應與HTTP 200 OK

這裏有什麼問題?

+1

不管它是值得的,你的使用情況似乎正好是那種東西,[藍眼睛](https://github.com/jdegoes/blueeyes)是爲了。 –

+0

謝謝,我會試試看。 – folone

回答

3
+0

沒有幫助。我也證實,有效的任何來自接收主體的調度請求都會導致這個異常。 – folone

+0

這很有趣。當我離開約10分鐘沒有請求時,它會工作一次,然後再次停止工作。 – folone

+0

如果您在get OK之前設置get.response.setContentType(MediaType.APPLICATION_JSON) ,會發生什麼情況? –