Java 播放2.5升级错误:CompletionException-此处没有可用的HTTP上下文

Java 播放2.5升级错误:CompletionException-此处没有可用的HTTP上下文,java,scala,java-8,akka,playframework-2.5,Java,Scala,Java 8,Akka,Playframework 2.5,在示例应用程序上从Play 2.4升级到Play 2.5后,当我运行/activator clean dist时,在转到特定端点http://localhost:9000/java/proxy,我收到以下错误: [error] application - ! @72keog237 - Internal server error, for (GET) [/java/proxy] -> play.api.http.HttpErrorHandlerExceptions$$anon$1: E

在示例应用程序上从Play 2.4升级到Play 2.5后,当我运行
/activator clean dist
时,在转到特定端点
http://localhost:9000/java/proxy
,我收到以下错误:

[error] application - 

! @72keog237 - Internal server error, for (GET) [/java/proxy] ->

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[CompletionException: java.lang.RuntimeException: There is no HTTP Context available from here.]]
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220)
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160)
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188)
    at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
Caused by: java.util.concurrent.CompletionException: java.lang.RuntimeException: There is no HTTP Context available from here.
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:604)
    at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
    ... 5 common frames omitted
Caused by: java.lang.RuntimeException: There is no HTTP Context available from here.
    at play.mvc.Http$Context.current(Http.java:62)
    at play.mvc.Controller.response(Controller.java:81)
    at controllers.JavaController$4.apply(JavaController.java:107)
    at controllers.JavaController$4.apply(JavaController.java:103)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
    at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
    at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
我一直在使用替换F.Promise、map和flatMap中的指南以及上一个链接中建议的替换(反映了下面的更改片段)

public CompletionStage代理(){
final CompletionStage responsePromise=WS.url(“http://example.com).get();
Logger.info(“地图前”);
最终完成阶段resultPromise=响应Promise.thenApplyAsync(
新函数(){
@凌驾
公共结果应用(WSResponse WSResponse){
Logger.info(“地图内”);
response().setContentType(wsResponse.getHeader(“内容类型”));
返回ok(wsResponse.getBody());
}
}
);
回到2.4时,我没有看到这个错误和
http://localhost:9000/java/proxy
端点工作成功

在使用此方法替换
代理
方法中的相应替换调用后,我不断得到上面的
无可用HTTP上下文
错误。我还得到了与
相同的结果http://localhost:9000/java8/proxy
中的端点

我找到了其他遇到这个问题的人,到目前为止,我能够猜测我需要一个电话和/或使用,尽管我在将知识转移到这个例子中遇到了困难。也许有人可以举一两个(或三个)例子关于如何解决此错误?欢迎提供任何建议,并提前感谢您。

根据,在操作中使用Java CompletionStage时,您必须作为执行者显式提供HTTP执行上下文。 因此,您可以在操作中插入HTTP上下文

public class Application extends Controller {
@Inject HttpExecutionContext ec;

public CompletionStage<Result> index() {
    someCompletableFuture.supplyAsync(() -> { 
      // do something with request()
    }, ec.current());
  }
}
公共类应用程序扩展控制器{
@注入HttpExecutionContext ec;
公共完成阶段索引(){
someCompletableFuture.SupplySync(()->{
//对request()执行某些操作
},ec.current());
}
}
希望有帮助

public class Application extends Controller {
@Inject HttpExecutionContext ec;

public CompletionStage<Result> index() {
    someCompletableFuture.supplyAsync(() -> { 
      // do something with request()
    }, ec.current());
  }
}