我路线中的NullPointerException

时间:2013-09-06 22:15:32

标签: scala spray

无法想出这个,但我得到了以下的路线堆栈跟踪:

  
    

[ERROR] [09/06/2013 17:08:00.019] [example-akka.actor.default-dispatcher-5] [akka:// example / user / $ a]     处理请求时出错     HttpRequest(GET,/ user / 12345abcd?service = YT,List(Host:localhost:8080,     接受: / ,User-Agent:curl / 7.24.0(x86_64-apple-darwin12.0)     libcurl / 7.24.0 OpenSSL / 0.9.8x zlib / 1.2.5),EmptyEntity,HTTP / 1.1)     java.lang.NullPointerException at     spray.routing.directives.BasicDirectives $$ anonfun $ mapRequestContext $ 1 $$ anonfun $ $适用1.适用(BasicDirectives.scala:30)       在     spray.routing.directives.BasicDirectives $$ anonfun $ mapRequestContext $ 1 $$ anonfun $ $适用1.适用(BasicDirectives.scala:30)       在     spray.routing.directives.ExecutionDirectives $$ anonfun $ $ handleExceptions 1 $$ anonfun $ $申请2.适用(ExecutionDirectives.scala:34)       在     spray.routing.directives.ExecutionDirectives $$ anonfun $ $ handleExceptions 1 $$ anonfun $ $申请2.适用(ExecutionDirectives.scala:32)       在     spray.routing.HttpServiceBase $ class.runSealedRoute $ 1(HttpService.scala:36)       在     spray.routing.HttpServiceBase $$ anonfun $ runRoute $ 1.applyOrElse(HttpService.scala:46)       at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)at at at     akka.actor.ActorCell.invoke(ActorCell.scala:456)at     akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)at     akka.dispatch.Mailbox.run(Mailbox.scala:219)at     akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)       在     scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)       在     scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339)       在     scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)       在     scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

  

我的路线如下:

class UserServiceActor extends Actor with UserService {
  def actorRefFactory = context
  def receive = runRoute(userServiceRoute)

}

trait UserService extends HttpService {

  val userServiceRoute = linkRoute

  val linkRoute =
    pathPrefix("user" / Segment) {
      userId =>
        path("link") {
          parameters('service ! "YT") {
            complete {
              "Done"
            }
          }
        }
    }
}

我正在提出的要求是:

  

curl http://server.com/user/12345abcd/link?service=YT

有什么看似明显的问题吗?

1 个答案:

答案 0 :(得分:5)

这可能是一个初始化问题。尝试将路由定义设为def或lazy val。

还有一个scalac标志-Xcheckinit,它会添加一个运行时检查,并在一点点性能上交换更好的错误信息。