Play Framework 2.5, маршруты к веб-сокету не компилируются

Я пытаюсь перенести свой код контроллера WebSocket в Play 2.5 и следую инструкциям на странице ScalaWebSockets. Я получаю ошибки компилятора для моих конфигураций маршрута. Мой код контроллера WebSocket выглядит следующим образом

package controllers

import akka.actor.ActorSystem
import akka.stream.Materializer
import com.google.inject.Inject
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment}
// This is needed to implicitly provide the Scala ActorSystem
import play.api.libs.concurrent.Execution.Implicits._
import play.api.mvc._
import play.api.libs.streams._
import scala.concurrent.Future

abstract class IntegrationMonitorProvider @Inject() (implicit system:     ActorSystem,
                                                 materializer: Materializer)
  extends AuthenticationController{

  def monitor = WebSocket.acceptOrResult[String, String] { request =>
    implicit val req = Request(request, AnyContentAsEmpty)
    SecuredRequestHandler { securedRequest =>
      Future.successful(HandlerResult(Ok, Some(securedRequest.identity)))
    }.map {
      case HandlerResult(r, Some(user)) =>
                Right(ActorFlow.actorRef(IntegrationMonitor.props(req.session.get("integration").get.toLong) _))
      case HandlerResult(r, None) => Left(r)
    }
  }
}

Предполагается, что отдельные контроллеры, намеревающиеся поддерживать WebSocket, расширят это. Этот шаблон отлично работал с Play 2.4, и код этого контроллера тоже компилируется. Но конфигурация моего маршрутизатора не компилируется со следующими ошибками

маршруты: 56: недостаточно аргументов для применения метода: (запрос: play.api.mvc.RequestHeader) scala.concurrent.Future[Either[play.api.mvc.Result,akka.stream.scaladsl.Flow[play.api. http.websocket.Message, play.api.http.websocket.Message, _]]] в трейте WebSocket. Запрос параметра с неопределенным значением.

Read from stdout: 
GET     /sample/monitor        controllers.sample.Connection.monitor()

Контроллер, расширяющий IntegrationMonitorProvider, показан ниже.

package controllers.sample
import javax.inject.Inject
import akka.actor.ActorSystem
import akka.stream.Materializer
import controllers.{IntegrationMonitor, IntegrationMonitorProvider}
import modules.oauth.{Credential, Metadata, TokenReader}
import play.Logger
import play.api.i18n.MessagesApi
import play.api.libs.json.JsResult
import play.api.mvc.{AnyContent, BodyParsers}
import utils.silhouette.{AuthenticationController, AuthenticationEnvironment}
// This is needed to implicitly provide the Scala ActorSystem
import play.api.libs.concurrent.Execution.Implicits._
import scala.concurrent.Future

class Connection @Inject()(val env: AuthenticationEnvironment, val messagesApi: MessagesApi)
                      (implicit system: ActorSystem,
                       materializer: Materializer)
extends IntegrationMonitorProvider with UrlCreator with DataReader {...

Цените любую помощь в этом.


person JerryK    schedule 13.04.2016    source источник


Ответы (1)


Я могу исправить проблему, удалив скобки в routes

То есть,

GET     /sample/monitor        controllers.sample.Connection.monitor

вместо

GET     /sample/monitor        controllers.sample.Connection.monitor()
person HKTonyLee    schedule 03.05.2016
comment
Я отошел от веб-сокетов, чтобы исправить это. Попробую ваше предложение и вернусь. Спасибо. - person JerryK; 06.05.2016