java – Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4095字,纯文字阅读大概需要6分钟。
内容图文
![java – Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文](/upload/InfoBanner/zyjiaocheng/757/e69b0c9e126745de95d22a5fafa46fc7.jpg)
参见英文答案 > Play Framework 2.5 JavaAsync throwing CompletionException 2个
在示例应用程序上从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)
我一直在使用Replaced F.Promise with Java 8’s CompletionStage中的指南替换F.Promise,map和flatMap以及上一个链接的建议替换(下面反映的更改片段).
public CompletionStage<Result> proxy() {
final CompletionStage<WSResponse> responsePromise = WS.url("http://example.com").get();
Logger.info("Before map");
final CompletionStage<Result> resultPromise = responsePromise.thenApplyAsync(
new Function<WSResponse, Result>() {
@Override
public Result apply(WSResponse wsResponse) {
Logger.info("Within map");
response().setContentType(wsResponse.getHeader("Content-Type"));
return ok(wsResponse.getBody());
}
}
);
回到2.4时,我没有收到此错误,http:// localhost:9000 / java / proxy端点成功运行.
在使用此public sample app on github替换代理方法中的相应替换调用之后,我不断获得上面的无HTTP上下文可用错误.我也在Java8Controller class中使用http:// localhost:9000 / java8 / proxy端点获得了相同的结果.
我发现其他人遇到过这个问题,到目前为止我已经能够猜测我需要拨打HttpExecutionContext和/或使用supplyAsync,尽管我在将这些知识转移到这个例子时遇到了麻烦.也许有人可以举一两个(或三个)关于我如何解决这个错误的例子?欢迎任何建议,并提前感谢您.
解决方法:
根据Play Documentation,在Action中使用Java CompletionStage时,必须显式提供HTTP执行上下文作为执行程序.
因此,您可以在Action中注入HTTP Context.
public class Application extends Controller {
@Inject HttpExecutionContext ec;
public CompletionStage<Result> index() {
someCompletableFuture.supplyAsync(() -> {
// do something with request()
}, ec.current());
}
}
希望有所帮助.
内容总结
以上是互联网集市为您收集整理的java – Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文全部内容,希望文章能够帮你解决java – Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。