[keycloak-dev] Question about a problem with Derivation and/or Deployment and/or (at the end) a 'NoClassDefFoundError'.
Marko Strukelj
mstrukel at redhat.com
Mon Sep 25 08:20:15 EDT 2017
Please use keycloak-user mailing list for questions like this (
https://lists.jboss.org/mailman/listinfo/keycloak-user).
It sounds like you should include jboss-deployment-structure.xml in your
example and add dependency on module org.keycloak.keycloak-services, and
possibly some other keycloak modules as well.
On Mon, Sep 25, 2017 at 11:23 AM, Christian Kayssner <
Christian.Kayssner at muthpartners.de> wrote:
> Hello,
>
> I have an problem in the deployment process.
>
> For an higher security context I have to intervene in the original
> username/password functionality.
>
> I searched and found the original class 'org.keycloak.authentication.
> authenticators.browser.UsernamePasswordFormFactory'.
> For this mail, I reduced the derivation and manipulation to a minimum and
> choose the 'secret-example' for deployment.
> The derivated factory class get the name 'org.example.derivations.MyUsernamePasswordFormFactory'
> and would be activated next to the existing factory in the file
> 'org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory'.
>
> I take the secret-question example because it closest to mine.
>
> But when I deploy the secret-example I get the 'NoClassDefFoundError' (see
> below).
>
> I checked the java visibilities (nothing private, protected or final).
> The core class reside in the artefactId 'keycloak-services', and the
> secret-example pom has a direct dependency entry.
> Eclipse (the maven-plugin) is satisfied.
>
> Therefore I found no reason for this exception.
>
> Does anyone have an idea why the *deployment* fails (and which party
> (Maven, Wildfly or Keycloak) is not amused)?
> Have I missed note something?
> Or is a derivation, per se, not desired??
>
>
> If someone wants to retrace, he/she needs:
> * a current 64bit linux with approximately 420MB free space with a
> directory of your choice,
> * with a running maven environment
> * and *without* running wildfly/keycloak system.
>
> Next, you:
> * download the demo version in your/this direcory
> wget -r https://downloads.jboss.org/
> keycloak/3.2.1.Final/keycloak-demo-3.2.1.Final.tar.gz
> * expand this archive,
> tar -xzf keycloak-demo-3.2.1.Final.tar.gz
> * save the follow patch (all content between
> <SecretExamplePatchFile> and </SecretExamplePatchFile>) file and execute it,
> patch -p 0 < NameOfYourSavedPatchFile
> * start the example server and save the terminal-log,
> keycloak-demo-3.2.1.Final/keycloak/bin/standalone.sh |
> tee keycloak-demo-3.2.1.Final.log
> * open a new terminal,
> * go to the secret example direcory and
> cd keycloak-demo-3.2.1.Final/examples/providers/
> authenticator
> * deploy it.
> mvn clean install wildfly:deploy
>
> * will see the 'NoClassDefFoundError' exception!
>
>
> Best regards
>
> Christian Kayssner
> --
> G. Muth Partners GmbH
> Borsigstraße 32
> D - 65205 Wiesbaden
> HRB 10196 Amtsgericht Wiesbaden
> Geschäftsführer: Klaus Gockel / Oliver Mächold
>
> Tel. : +49(0)6122/5981-0
> FAX. : +49(0)6122/5981-50
>
> eMail: christian.kayssner at muthpartners.de
> www : www.muthpartners.de
>
>
> --
> <stack trace>
> :
> :
> :
> [0m [0m17:39:08,074 INFO [org.jboss.as.repository]
> (management-handler-thread - 4) WFLYDR0001: Content added at location
> /path/to/your/own/playground/keycloak-demo-3.2.1.Final/
> keycloak/standalone/data/content/e4/95f32235bb131df52f479a09827186
> a3265788/content
> [0m [0m17:39:08,082 INFO [org.jboss.as.server.deployment] (MSC service
> thread 1-2) WFLYSRV0027: Starting deployment of "authenticator-required-action-example.jar"
> (runtime-name: "authenticator-required-action-example.jar")
> [0m [0m17:39:08,322 INFO [org.keycloak.subsystem.server.extension.
> KeycloakProviderDeploymentProcessor] (MSC service thread 1-1) Deploying
> Keycloak provider: authenticator-required-action-example.jar
> [0m [33m17:39:08,335 WARN [org.jboss.modules] (MSC service thread 1-1)
> Failed to define class org.example.derivations.MyUsernamePasswordFormFactory
> in Module "deployment.authenticator-required-action-example.jar:main"
> from Service Module Loader: java.lang.NoClassDefFoundError: Failed to
> link org/example/derivations/MyUsernamePasswordFormFactory (Module
> "deployment.authenticator-required-action-example.jar:main" from Service
> Module Loader): org/keycloak/authentication/authenticators/browser/
> UsernamePasswordFormFactory
> 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.modules.ModuleClassLoader.defineClass(
> ModuleClassLoader.java:446)
> at org.jboss.modules.ModuleClassLoader.loadClassLocal(
> ModuleClassLoader.java:274)
> at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(
> ModuleClassLoader.java:78)
> at org.jboss.modules.Module.loadModuleClass(Module.java:605)
> at org.jboss.modules.ModuleClassLoader.findClass(
> ModuleClassLoader.java:190)
> 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 java.util.ServiceLoader$LazyIterator.nextService(
> ServiceLoader.java:370)
> at java.util.ServiceLoader$LazyIterator.next(
> ServiceLoader.java:404)
> at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
> at org.keycloak.provider.DefaultProviderLoader.load(
> DefaultProviderLoader.java:47)
> at org.keycloak.provider.ProviderManager.load(
> ProviderManager.java:93)
> at org.keycloak.services.DefaultKeycloakSessionFactory.
> loadFactories(DefaultKeycloakSessionFactory.java:208)
> at org.keycloak.services.DefaultKeycloakSessionFactory.deploy(
> DefaultKeycloakSessionFactory.java:114)
> at org.keycloak.provider.ProviderManagerRegistry.deploy(
> ProviderManagerRegistry.java:42)
> at org.keycloak.subsystem.server.extension.
> KeycloakProviderDeploymentProcessor.deploy(KeycloakProviderDeploymentProc
> essor.java:54)
> at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
> start(DeploymentUnitPhaseService.java:147)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.startService(ServiceControllerImpl.java:1948)
> at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(
> ServiceControllerImpl.java:1881)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1149)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
>
> [0m [31m17:39:08,336 ERROR [org.jboss.msc.service.fail] (MSC service
> thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."
> authenticator-required-action-example.jar".POST_MODULE:
> org.jboss.msc.service.StartException in service jboss.deployment.unit."
> authenticator-required-action-example.jar".POST_MODULE: WFLYSRV0153:
> Failed to process phase POST_MODULE of deployment "authenticator-required-
> action-example.jar"
> at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
> start(DeploymentUnitPhaseService.java:154)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.startService(ServiceControllerImpl.java:1948)
> at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(
> ServiceControllerImpl.java:1881)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1149)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.NoClassDefFoundError: Failed to link
> org/example/derivations/MyUsernamePasswordFormFactory (Module
> "deployment.authenticator-required-action-example.jar:main" from Service
> Module Loader): org/keycloak/authentication/authenticators/browser/
> UsernamePasswordFormFactory
> 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.modules.ModuleClassLoader.defineClass(
> ModuleClassLoader.java:446)
> at org.jboss.modules.ModuleClassLoader.loadClassLocal(
> ModuleClassLoader.java:274)
> at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(
> ModuleClassLoader.java:78)
> at org.jboss.modules.Module.loadModuleClass(Module.java:605)
> at org.jboss.modules.ModuleClassLoader.findClass(
> ModuleClassLoader.java:190)
> 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 java.util.ServiceLoader$LazyIterator.nextService(
> ServiceLoader.java:370)
> at java.util.ServiceLoader$LazyIterator.next(
> ServiceLoader.java:404)
> at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
> at org.keycloak.provider.DefaultProviderLoader.load(
> DefaultProviderLoader.java:47)
> at org.keycloak.provider.ProviderManager.load(
> ProviderManager.java:93)
> at org.keycloak.services.DefaultKeycloakSessionFactory.
> loadFactories(DefaultKeycloakSessionFactory.java:208)
> at org.keycloak.services.DefaultKeycloakSessionFactory.deploy(
> DefaultKeycloakSessionFactory.java:114)
> at org.keycloak.provider.ProviderManagerRegistry.deploy(
> ProviderManagerRegistry.java:42)
> at org.keycloak.subsystem.server.extension.
> KeycloakProviderDeploymentProcessor.deploy(KeycloakProviderDeploymentProc
> essor.java:54)
> at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
> start(DeploymentUnitPhaseService.java:147)
> ... 5 more
>
> [0m [31m17:39:08,339 ERROR [org.jboss.as.controller.management-operation]
> (management-handler-thread - 4) WFLYCTL0013: Operation ("add") failed -
> address: ([("deployment" => "authenticator-required-action-example.jar")])
> - failure description: {"WFLYCTL0080: Failed services" =>
> {"jboss.deployment.unit.\"authenticator-required-action-example.jar\".POST_MODULE"
> => "org.jboss.msc.service.StartException in service
> jboss.deployment.unit.\"authenticator-required-action-example.jar\".POST_MODULE:
> WFLYSRV0153: Failed to process phase POST_MODULE of deployment
> \"authenticator-required-action-example.jar\"
> Caused by: java.lang.NoClassDefFoundError: Failed to link
> org/example/derivations/MyUsernamePasswordFormFactory (Module
> \"deployment.authenticator-required-action-example.jar:main\" from
> Service Module Loader): org/keycloak/authentication/
> authenticators/browser/UsernamePasswordFormFactory"}}
> [0m [31m17:39:08,341 ERROR [org.jboss.as.server]
> (management-handler-thread - 4) WFLYSRV0021: Deploy of deployment
> "authenticator-required-action-example.jar" was rolled back with the
> following failure message:
> {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"
> authenticator-required-action-example.jar\".POST_MODULE" =>
> "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"
> authenticator-required-action-example.jar\".POST_MODULE: WFLYSRV0153:
> Failed to process phase POST_MODULE of deployment \"authenticator-required-
> action-example.jar\"
> Caused by: java.lang.NoClassDefFoundError: Failed to link
> org/example/derivations/MyUsernamePasswordFormFactory (Module
> \"deployment.authenticator-required-action-example.jar:main\" from
> Service Module Loader): org/keycloak/authentication/
> authenticators/browser/UsernamePasswordFormFactory"}}
> [0m [0m17:39:08,356 INFO [org.jboss.as.server.deployment] (MSC service
> thread 1-5) WFLYSRV0028: Stopped deployment authenticator-required-action-example.jar
> (runtime-name: authenticator-required-action-example.jar) in 14ms
> [0m [0m17:39:08,357 INFO [org.jboss.as.controller]
> (management-handler-thread - 4) WFLYCTL0183: Service status report
> WFLYCTL0186: Services which failed to start: service
> jboss.deployment.unit."authenticator-required-action-
> example.jar".POST_MODULE
>
> [0m
> </stack trace>
>
> --
> <SecretExamplePatchFile>
> diff -Naur keycloak-demo-3.2.1.Final/examples/providers/
> authenticator/src/main/java/org/example/derivations/
> MyUsernamePasswordFormFactory.java keycloak-demo-3.2.1.Final-
> modified/examples/providers/authenticator/src/main/java/
> org/example/derivations/MyUsernamePasswordFormFactory.java
> --- keycloak-demo-3.2.1.Final/examples/providers/
> authenticator/src/main/java/org/example/derivations/
> MyUsernamePasswordFormFactory.java 1970-01-01 00:00:00.000000000 +0000
> +++ keycloak-demo-3.2.1.Final-modified/examples/providers/
> authenticator/src/main/java/org/example/derivations/
> MyUsernamePasswordFormFactory.java 2017-09-20 11:37:09.425674263
> +0000
> @@ -0,0 +1,54 @@
> +/*
> + * Copyright 2016 Red Hat, Inc. and/or its affiliates
> + * and other contributors as indicated by the @author tags.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.example.derivations;
> +
> +import org.keycloak.authentication.authenticators.browser.
> UsernamePasswordFormFactory;
> +
> +/**
> + */
> +public//
> +class MyUsernamePasswordFormFactory//
> + extends UsernamePasswordFormFactory//
> +{
> + public//
> + static//
> + final//
> + String PROVIDER_ID = "my-auth-username-password-form";
> +
> + /**
> + * {@inheritDoc}
> + */
> + @Override
> + public//
> + String getId()//
> + {
> + return MyUsernamePasswordFormFactory.PROVIDER_ID;
> + }
> +
> + /**
> + * {@inheritDoc}
> + *
> + * @return The heading for the (browser) page to explain the
> necessary inputs.
> + */
> + @Override
> + public//
> + String getDisplayType()//
> + {
> + return "My Username Password Form";
> + }
> +}
> diff -Naur keycloak-demo-3.2.1.Final/examples/providers/
> authenticator/src/main/resources/META-INF/services/
> org.keycloak.authentication.AuthenticatorFactory
> keycloak-demo-3.2.1.Final-modified/examples/providers/
> authenticator/src/main/resources/META-INF/services/
> org.keycloak.authentication.AuthenticatorFactory
> --- keycloak-demo-3.2.1.Final/examples/providers/authenticator/src/main/
> resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory
> 2017-07-21 11:31:26.000000000 +0000
> +++ keycloak-demo-3.2.1.Final-modified/examples/providers/
> authenticator/src/main/resources/META-INF/services/
> org.keycloak.authentication.AuthenticatorFactory 2017-09-20
> 11:43:31.354018042 +0000
> @@ -15,4 +15,5 @@
> # limitations under the License.
> #
>
> -org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory
> \ No newline at end of file
> +org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory
> +org.example.derivations.MyUsernamePasswordFormFactory
> \ No newline at end of file
> diff -Naur keycloak-demo-3.2.1.Final/keycloak/modules/layers.conf
> keycloak-demo-3.2.1.Final-modified/keycloak/modules/layers.conf
> --- keycloak-demo-3.2.1.Final/keycloak/modules/layers.conf
> 1970-01-01 00:00:00.000000000 +0000
> +++ keycloak-demo-3.2.1.Final-modified/keycloak/modules/layers.conf
> 2017-07-21 09:11:58.000000000 +0000
> @@ -0,0 +1 @@
> +layers=keycloak
> \ No newline at end of file
> </SecretExamplePatchFile>
>
>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>
More information about the keycloak-dev
mailing list