[keycloak-user] java.lang.ClassNotFoundException when running Keycloak with an spi that is using Akka
Stian Thorgersen
sthorger at redhat.com
Tue Jun 27 07:31:15 EDT 2017
You probably just need to make sure you are passing the correct classloader
to ReflectiveDynamicAccess.
On 27 June 2017 at 10:58, Jonas Schönenberger <
jonas.schoenenberger at gmail.com> wrote:
> Hi everyone
>
> I am writing an Keycloak SPI that will modify clients based on events.
> Therefore I use the EventListenerProvider. In the SPI code, that is written
> in Scala, I am using the Akka library for certain tasks. Unfortunately I
> get an ClassNotFoundException for the class
> akka.event.DefaultLoggingFilter when I run Keycloak with the spi. I've
> built an spi before, that is not using Akka and it worked.
> The class is available inside the spi .jar-file. I found a ticket on
> Keycloak's Jira Board (https://issues.jboss.org/browse/KEYCLOAK-4738) and
> updated to Keycloak version 3.1.0.Final, that contains the fix for this
> ticket - didn't help.
>
> Here is the full error message I get:
>
> 09:47:49,003 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool
> > -- 52) MSC000001: Failed to start service
> > jboss.undertow.deployment.default-server.default-host./auth:
> > org.jboss.msc.service.StartException in service
> > jboss.undertow.deployment.default-server.default-host./auth:
> > java.lang.RuntimeException: RESTEASY003325: Failed to construct public
> > org.keycloak.services.resources.KeycloakApplication(
> javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
> > at
> > org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.
> run(UndertowDeploymentService.java:85)
> > at java.util.concurrent.Executors$RunnableAdapter.
> call(Executors.java:511)
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > at
> > java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> > at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> > at java.lang.Thread.run(Thread.java:745)
> > at org.jboss.threads.JBossThread.run(JBossThread.java:320)
> > Caused by: java.lang.RuntimeException: RESTEASY003325: Failed to
> construct
> > public
> > org.keycloak.services.resources.KeycloakApplication(
> javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
> > at
> > org.jboss.resteasy.core.ConstructorInjectorImpl.construct(
> ConstructorInjectorImpl.java:162)
> > at
> > org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(
> ResteasyProviderFactory.java:2209)
> > at
> > org.jboss.resteasy.spi.ResteasyDeployment.createApplication(
> ResteasyDeployment.java:299)
> > at
> > org.jboss.resteasy.spi.ResteasyDeployment.start(
> ResteasyDeployment.java:240)
> > at
> > org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.
> init(ServletContainerDispatcher.java:113)
> > at
> > org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(
> HttpServletDispatcher.java:36)
> > at
> > io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(
> LifecyleInterceptorInvocation.java:117)
> > at
> > org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(
> RunAsLifecycleInterceptor.java:78)
> > at
> > io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(
> LifecyleInterceptorInvocation.java:103)
> > at
> > io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(
> ManagedServlet.java:231)
> > at
> > io.undertow.servlet.core.ManagedServlet.createServlet(
> ManagedServlet.java:132)
> > at
> > io.undertow.servlet.core.DeploymentManagerImpl.start(
> DeploymentManagerImpl.java:526)
> > at
> > org.wildfly.extension.undertow.deployment.UndertowDeploymentService.
> startContext(UndertowDeploymentService.java:101)
> > at
> > org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.
> run(UndertowDeploymentService.java:82)
> > ... 6 more
> > Caused by: java.lang.ClassNotFoundException:
> > akka.event.DefaultLoggingFilter from [Module
> > "deployment.keycloak-server.war:main" from Service Module Loader]
> > at
> > org.jboss.modules.ModuleClassLoader.findClass(
> ModuleClassLoader.java:198)
> > at
> > org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(
> ConcurrentClassLoader.java:363)
> > at
> > org.jboss.modules.ConcurrentClassLoader.performLoadClass(
> ConcurrentClassLoader.java:351)
> > at
> > org.jboss.modules.ConcurrentClassLoader.loadClass(
> ConcurrentClassLoader.java:93)
> > at java.lang.Class.forName0(Native Method)
> > at java.lang.Class.forName(Class.java:348)
> > at
> > akka.actor.ReflectiveDynamicAccess.$anonfun$getClassFor$1(
> ReflectiveDynamicAccess.scala:21)
> > at scala.util.Try$.apply(Try.scala:209)
> > at
> > akka.actor.ReflectiveDynamicAccess.getClassFor(
> ReflectiveDynamicAccess.scala:20)
> > at
> > akka.actor.ReflectiveDynamicAccess.createInstanceFor(
> ReflectiveDynamicAccess.scala:38)
> > at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:758)
> > at akka.actor.ActorSystem$.apply(ActorSystem.scala:245)
> > at akka.actor.ActorSystem$.apply(ActorSystem.scala:288)
> > at akka.actor.ActorSystem$.apply(ActorSystem.scala:263)
> > at
> > some.package.keycloak.keycloak.REST.KeycloakAdminClient.<init>(
> REST.scala:592)
> > at
> > some.package.keycloak.keycloak.KeycloakConfigurator.
> <init>(KeycloakConfigurator.scala:21)
> > at
> > some.package.keycloak.MyEventListenerProviderFactory
> .init(MyEventListenerProvider.scala:50)
> > at
> > org.keycloak.services.DefaultKeycloakSessionFactory.loadFactories(
> DefaultKeycloakSessionFactory.java:209)
> > at
> > org.keycloak.services.DefaultKeycloakSessionFactory.init(
> DefaultKeycloakSessionFactory.java:76)
> > at
> > org.keycloak.services.resources.KeycloakApplication.
> createSessionFactory(KeycloakApplication.java:313)
> > at
> > org.keycloak.services.resources.KeycloakApplication.
> <init>(KeycloakApplication.java:110)
> > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> > at
> > sun.reflect.NativeConstructorAccessorImpl.newInstance(
> NativeConstructorAccessorImpl.java:62)
> > at
> > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(
> DelegatingConstructorAccessorImpl.java:45)
> > at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> > at
> > org.jboss.resteasy.core.ConstructorInjectorImpl.construct(
> ConstructorInjectorImpl.java:150)
> > ... 19 more
> > 09:47:49,010 ERROR [org.jboss.as.controller.management-operation]
> > (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address:
> > ([("deployment" => "keycloak-server.war")]) - failure description:
> > {"WFLYCTL0080: Failed services" =>
> > {"jboss.undertow.deployment.default-server.default-host./auth" =>
> > "org.jboss.msc.service.StartException in service
> > jboss.undertow.deployment.default-server.default-host./auth:
> > java.lang.RuntimeException: RESTEASY003325: Failed to construct public
> > org.keycloak.services.resources.KeycloakApplication(
> javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
> > Caused by: java.lang.RuntimeException: RESTEASY003325: Failed to
> > construct public
> > org.keycloak.services.resources.KeycloakApplication(
> javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
> > Caused by: java.lang.ClassNotFoundException:
> > akka.event.DefaultLoggingFilter from [Module
> > \"deployment.keycloak-server.war:main\" from Service Module Loader]"}}
>
>
> Do you guys have an idea what can cause this error and how to solve it?
>
> Thank you for your help and Best Regards
> Jonas
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>
More information about the keycloak-user
mailing list