Closed JulienSt closed 1 month ago
did you changed scala version in build file?
Yes, the small code excerpt at the top is from the build.sbt
I can get the compilation to work with version 3, when I add the type to methods like so:
def facebookAdminIndex: Action[AnyContent] = ...
But then I get the following error when navigating to localhost:9000
[IJ][play-pac4j-scala-demo] $ run
--- (Running the application, auto-reloading is enabled) ---
INFO p.c.s.PekkoHttpServer - 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...)
INFO p.a.h.HttpErrorHandlerExceptions - Registering exception handler: guice-provision-exception-handler
[info] - org.pac4j.core.adapter.FrameworkAdapter - Using Play framework adapter
[warn] - org.pac4j.core.client.direct.AnonymousClient - Be careful when using the 'AnonymousClient': an 'AnonymousProfile' is returned and the access is granted for the request.
[warn] - org.pac4j.core.matching.matcher.PathMatcher - Be careful when using the 'excludeBranch' or 'excludeRegex' methods. They use regular expressions and their definitions may be error prone. You could exclude more URLs than expected.
@86bofno21: Execution exception[[NoSuchMethodError: 'void play.api.mvc.EssentialFilter.$init$(play.api.mvc.EssentialFilter)']]
at play.api.http.HttpErrorHandlerExceptions$.convertToPlayException$$anonfun$3(HttpErrorHandler.scala:407)
at scala.Option.getOrElse(Option.scala:201)
at play.api.http.HttpErrorHandlerExceptions$.convertToPlayException(HttpErrorHandler.scala:407)
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:390)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.reload(DevServerStart.scala:265)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.get(DevServerStart.scala:190)
at play.core.server.PekkoHttpServer.handleRequest(PekkoHttpServer.scala:320)
at play.core.server.PekkoHttpServer.$anonfun$3(PekkoHttpServer.scala:224)
at org.apache.pekko.stream.impl.fusing.MapAsyncUnordered$$anon$31.onPush(Ops.scala:1443)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:555)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:506)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:400)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:662)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:532)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:637)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter.org$apache$pekko$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:813)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter$$anon$2.applyOrElse(ActorGraphInterpreter.scala:831)
at org.apache.pekko.actor.Actor.aroundReceive(Actor.scala:547)
at org.apache.pekko.actor.Actor.aroundReceive$(Actor.scala:481)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter.aroundReceive(ActorGraphInterpreter.scala:729)
at org.apache.pekko.actor.ActorCell.receiveMessage(ActorCell.scala:590)
at org.apache.pekko.actor.ActorCell.invoke(ActorCell.scala:557)
at org.apache.pekko.dispatch.Mailbox.processMailbox(Mailbox.scala:280)
at org.apache.pekko.dispatch.Mailbox.run(Mailbox.scala:241)
at org.apache.pekko.dispatch.Mailbox.exec(Mailbox.scala:253)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.lang.NoSuchMethodError: 'void play.api.mvc.EssentialFilter.$init$(play.api.mvc.EssentialFilter)'
at org.pac4j.play.filters.SecurityFilter.<init>(SecurityFilter.scala:63)
at org.pac4j.play.filters.SecurityFilter$$FastClassByGuice$$1688d51.GUICE$TRAMPOLINE(<generated>)
at org.pac4j.play.filters.SecurityFilter$$FastClassByGuice$$1688d51.apply(<generated>)
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:169)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:169)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1148)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1186)
at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:434)
at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:429)
at play.api.inject.ContextClassLoaderInjector.instanceOf$$anonfun$2(Injector.scala:118)
at play.api.inject.ContextClassLoaderInjector.withContext(Injector.scala:127)
at play.api.inject.ContextClassLoaderInjector.instanceOf(Injector.scala:118)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:176)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.$anonfun$1(DevServerStart.scala:233)
at play.utils.Threads$.withContextClassLoader(Threads.scala:22)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.reload(DevServerStart.scala:234)
... 25 more
Stacktrace caused by project play-pac4j-scala-demo-master (filesystem path to project is [...]/play-pac4j-scala-demo-master).
[error] - play.api.http.DevHttpErrorHandler -
! @86bofno21 - Internal server error, for (GET) [/] ->
play.api.PlayException: Execution exception[[NoSuchMethodError: 'void play.api.mvc.EssentialFilter.$init$(play.api.mvc.EssentialFilter)']]
at play.api.http.HttpErrorHandlerExceptions$.convertToPlayException$$anonfun$3(HttpErrorHandler.scala:407)
at scala.Option.getOrElse(Option.scala:201)
at play.api.http.HttpErrorHandlerExceptions$.convertToPlayException(HttpErrorHandler.scala:407)
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:390)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.reload(DevServerStart.scala:265)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.get(DevServerStart.scala:190)
at play.core.server.PekkoHttpServer.handleRequest(PekkoHttpServer.scala:320)
at play.core.server.PekkoHttpServer.$anonfun$3(PekkoHttpServer.scala:224)
at org.apache.pekko.stream.impl.fusing.MapAsyncUnordered$$anon$31.onPush(Ops.scala:1443)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:555)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:506)
at org.apache.pekko.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:400)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:662)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:532)
at org.apache.pekko.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:637)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter.org$apache$pekko$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:813)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter$$anon$2.applyOrElse(ActorGraphInterpreter.scala:831)
at org.apache.pekko.actor.Actor.aroundReceive(Actor.scala:547)
at org.apache.pekko.actor.Actor.aroundReceive$(Actor.scala:481)
at org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter.aroundReceive(ActorGraphInterpreter.scala:729)
at org.apache.pekko.actor.ActorCell.receiveMessage(ActorCell.scala:590)
at org.apache.pekko.actor.ActorCell.invoke(ActorCell.scala:557)
at org.apache.pekko.dispatch.Mailbox.processMailbox(Mailbox.scala:280)
at org.apache.pekko.dispatch.Mailbox.run(Mailbox.scala:241)
at org.apache.pekko.dispatch.Mailbox.exec(Mailbox.scala:253)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.lang.NoSuchMethodError: 'void play.api.mvc.EssentialFilter.$init$(play.api.mvc.EssentialFilter)'
at org.pac4j.play.filters.SecurityFilter.<init>(SecurityFilter.scala:63)
at org.pac4j.play.filters.SecurityFilter$$FastClassByGuice$$1688d51.GUICE$TRAMPOLINE(<generated>)
at org.pac4j.play.filters.SecurityFilter$$FastClassByGuice$$1688d51.apply(<generated>)
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:169)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:40)
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:113)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:169)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1148)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1186)
at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:434)
at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:429)
at play.api.inject.ContextClassLoaderInjector.instanceOf$$anonfun$2(Injector.scala:118)
at play.api.inject.ContextClassLoaderInjector.withContext(Injector.scala:127)
at play.api.inject.ContextClassLoaderInjector.instanceOf(Injector.scala:118)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:176)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.$anonfun$1(DevServerStart.scala:233)
at play.utils.Threads$.withContextClassLoader(Threads.scala:22)
at play.core.server.DevServerStart$DevServerApplicationProvider$1.reload(DevServerStart.scala:234)
... 25 common frames omitted
As a reminder everything works on my end, when using the example as is or ever after updating everything else except the scala version
java.lang.NoSuchMethodError: 'void play.api.mvc.EssentialFilter.$init$(play.api.mvc.EssentialFilter)'
: it looks like we don't have the right play library versions, do we?
That might be the case. If I am interpreting things right, the root pom.xml defines the scala version as
<scala.version>2.13</scala.version>
and is used in the version 3 pom.xml without overriding it here:
<dependency>
<groupId>org.playframework</groupId>
<artifactId>play_${scala.version}</artifactId>
<version>${play.version}</version>
<scope>provided</scope>
</dependency>
The project is then compiled as Scala 3, but since the dependency is listed as provided, it will only crash for the end user when play for scala3 is used
You are fully right. Good catch! Would min submitting a PR for the project? Thanks
I will see what I can do. I hope it is only a version bump and no code change is needed
I just give a quick try and I see that the SecurityFilterTests.scala
must be adjusted...
The fix for SecurityFilterTests was easy - just needed to make the type there explicit. I changed the Scala version to the LTS. The newer version threw an error. Making it the LTS should also solve compatibility issues in the near future
Excellent! Thanks for the PR. I just merged it
I wanted to try out the demo with the newest versions and it does not work, as it throws runtime errors.
When running the following config:
Everything works fine, but as soon as the ScalaVersion ticks over to 3, I get the following errors: