Search code examples
scalaexceptionplayframeworksbtplayback

Play Framework is hiding the intial exception


I'm getting this error from Play after implementing a controller. If I throw in a try to catch and println the error, I can see what exception was thrown by my code, but otherwise this information is missing and I get an error relating to files in SBT instead.

What is going on during the handling of my exception that is causing this other exception?

I'm running my application with sbt api/run.

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /[0:0:0:0:0:0:0:0]:9000

(Server started, use Enter to stop and go back to the console...)

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/dan/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/inject/guice/4.2.3/guice-4.2.3.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-10-15 00:55:32 INFO  play.api.http.EnabledFilters  Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

    play.filters.csrf.CSRFFilter
    play.filters.headers.SecurityHeadersFilter
    play.filters.hosts.AllowedHostsFilter
    play.filters.cors.CORSFilter

2020-10-15 00:55:32 INFO  play.api.Play  Application started (Dev) (no global state)
2020-10-15 00:55:32 ERROR p.api.http.DefaultHttpErrorHandler  Error while handling error
java.lang.ClassCastException: class xsbti.BasicVirtualFileRef cannot be cast to class java.io.File (xsbti.BasicVirtualFileRef is in unnamed module of loader sbt.internal.MetaBuildLoader @6e75aa0d; java.io.File is in module java.base of loader 'bootstrap')
    at play.sbt.run.PlayReload$.$anonfun$sourceMap$1(PlayReload.scala:69)
    at scala.collection.MapLike$MappedValues.get(MapLike.scala:260)
    at play.runsupport.Reloader.$anonfun$findSource$1(Reloader.scala:547)
    at scala.Option.flatMap(Option.scala:271)
    at play.runsupport.Reloader.findSource(Reloader.scala:546)
    at play.core.server.DevServerStart$$anon$1$$anon$2.sourceOf(DevServerStart.scala:171)
    at play.core.SourceMapper.$anonfun$sourceFor$1(ApplicationProvider.scala:21)
    at play.core.SourceMapper.$anonfun$sourceFor$1$adapted(ApplicationProvider.scala:21)
    at scala.collection.ArrayOps$.find$extension(ArrayOps.scala:684)
    at play.core.SourceMapper.sourceFor(ApplicationProvider.scala:21)
    at play.core.SourceMapper.sourceFor$(ApplicationProvider.scala:20)
    at play.core.server.DevServerStart$$anon$1$$anon$2.sourceFor(DevServerStart.scala:169)
    at play.api.http.HttpErrorHandlerExceptions$.$anonfun$throwableToUsefulException$1(HttpErrorHandler.scala:358)
    at scala.Option.flatMap(Option.scala:283)
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:261)
    at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:128)
    at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:126)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:453)
    at play.api.libs.streams.Execution$trampoline$.execute(Execution.scala:70)
    at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:392)
    at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:302)
    at scala.concurrent.impl.Promise$DefaultPromise.tryComplete0(Promise.scala:249)
    at scala.concurrent.impl.Promise$Transformation.handleFailure(Promise.scala:407)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:469)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:56)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:93)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:93)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:48)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)

Solution

  • It was an incompatibility between play and sbt, and has been fixed: https://github.com/playframework/playframework/issues/10486