Secured.cleanEnv generates java.lang.RuntimeException: There is no HTTP Context available from here

14 views
Skip to first unread message

Barry Zhong

unread,
Jan 6, 2019, 4:57:18 AM1/6/19
to SecureSocial
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
Reply all
Reply to author
Forward
0 new messages