使用PlayFramework 2.4.2的ProvisionException

Ste*_*ven 4 java dependency-injection playframework playframework-2.4

我正在将一个项目从Play 2.2.4迁移到2.4.2,我得到一个我无法理解和解决的异常.

Unexpected exception

ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.NullPointerException
  at controllers.Application.<init>(Application.java:33)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:36)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router

1 error
Run Code Online (Sandbox Code Playgroud)

它发生在我为WS API添加依赖注入之后,如:

public class Application extends Controller {

    @Inject
    WSClient ws;

    WSRequest request = ws.url("https://...");

    ...
}
Run Code Online (Sandbox Code Playgroud)

build.sbt文件包含必要的配置

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator
Run Code Online (Sandbox Code Playgroud)

什么可能遗漏或做错了?

Mon*_*ari 5

此行导致Nullpointer: ws.url("https://...");当Guice实例化Application类时,ws为null .更重要的是,具有requestas控制器字段不是线程安全的.将代码更改为以下内容:

public class Application extends Controller {

    private WSClient ws;

    @Inject
    public Application(WSClient ws) {

        this.ws = ws;
        WSRequest request = this.ws.url("https://...");

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)