I built securesocial from the latest master branch:
commit 0f9710325724da34a46c5ecefb439121fce837b7 (HEAD -> master, origin/master, origin/HEAD)
Author: João Ferreira <jtjefe...@gmail.com>
Date: Sat Jul 21 15:07:06 2018 +0100
Use cacheApi dependency (#620)
* Update build.sbt
* update scala demo
* update java demo
While I am using it inside controller as following:
public class HomeController extends Controller {
private final ObjectMapper mapper = new ObjectMapper();
private RuntimeEnvironment env;
private HttpExecutionContext httpExecutionContext;
@Inject
public HomeController(RuntimeEnvironment env, HttpExecutionContext context) {
this.env = env;
this.httpExecutionContext = context;
}
@BodyParser.Of(SomeResult.class)
@SecuredAction()
public CompletionStage<Result> secureSearch() {...}
}
At runtime it generates following exception:
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:255)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:182)
at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:320)
at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:318)
at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:414)
at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
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:292)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:769)
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
at java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:561)
at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:580)
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)
Caused by: java.lang.RuntimeException: There is no HTTP Context available from here.
at play.mvc.Http$Context.current(Http.java:68)
at securesocial.core.java.Secured.clearEnv(Secured.java:66)
at securesocial.core.java.Secured.lambda$call$0(Secured.java:78)
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
at java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:561)
at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:580)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
The code raise error is as following:
static void clearEnv() {
Http.Context.current().args.remove(ENVIRONMENT_KEY);
}
I was wondering what I miss or it is a bug ( I saw somewhere oldContext is null, and after runnable.run, oldContext was setback, and then it trying to cleanEnv, then exception occur).
Can I simply eat the exception?
static void clearEnv() {
try{
Http.Context.current().args.remove(ENVIRONMENT_KEY);
} catch (Throwable ignored){}
}
Thanks,
Barry