[keycloak-dev] Class is not visible from class loader exception

Scott Rossillo srossillo at smartling.com
Tue Sep 6 20:32:30 EDT 2016


We had to specify the class loader of the interface we wanted to make into
a client.

Take a look at this code:
github.com/Smartling/keycloak-user-migration-provider/blob/master/user-migration-federation-provider/src/main/java/com/smartling/keycloak/provider/RemoteUserFederationProvider.java
On Tue, Sep 6, 2016 at 7:45 PM Crafton Williams <crafton.williams at qut.edu.au>
wrote:

> Hi all:
>
>
> I'm in the process of developing a web service-based User Federation SPI.
> I've gone through the properties SPI example and had a look at the ldap and
> kerberos SPIs. They seem pretty straightforward and at first glance I think
> I've implemented things properly. For my service requests, I'm using the
> Resteasy client through the proxy interface with a few simple calls to test
> things out. When I package and deploy, Keycloak doesn't seem to complain,
> however when I search for a user, i get the following trace:
>
> *09:20:20,956 ERROR [io.undertow.request] (default task-15) UT005023:
> Exception handling request to /auth/admin/realms/master/users:
> org.jboss.resteasy.spi.UnhandledException:
> java.lang.IllegalArgumentException: interface
> org.keycloak.federation.ws.client.WsServiceClient is not visible from class
> loader*
> *at
> org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76)*
> *at
> org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212)*
> *at
> org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:168)*
> *at
> org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:411)*
> *at
> org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:202)*
> *at
> org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)*
> *at
> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)*
> *at
> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)*
> *at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)*
> *at
> io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)*
> *at
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)*
> *at
> org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:90)*
> *at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)*
> *at
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)*
> *at
> io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)*
> *at
> io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)*
> *at
> io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)*
> *at
> org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)*
> *at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)*
> *at
> io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)*
> *at
> io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)*
> *at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)*
> *at
> io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)*
> *at
> io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)*
> *at
> io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)*
> *at
> io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)*
> *at
> io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)*
> *at
> io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)*
> *at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)*
> *at
> org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)*
> *at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)*
> *at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)*
> *at
> io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)*
> *at
> io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)*
> *at
> io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)*
> *at
> io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)*
> *at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)*
> *at
> io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)*
> *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)*
>
> Some details about my environment:
> Keycloak version: 2.1.0.Final, running in standalone mode
> Java version: 1.8.0_101
>
> Project structure:
> or.keycloak.federation.ws
> *-client*
> *--WsServiceClient.java*
> *-ServiceModel.java*
> *-WsFederationProvider.java*
> *-WsFederationProviderFactory.java*
>
> *-resources*
> *--META-INF.services*
> *---org.keycloak.models.UserFederationProviderFactory*
>
>
> My getInstance for the factory class looks like this:
>
> @Override
> public WsFederationProvider getInstance(KeycloakSession session, UserFederationProviderModel model) {
>     ResteasyClient client = new ResteasyClientBuilder().build();
>     ResteasyWebTarget target = client.target(BASE_URL);
>     WsClientService serviceClient = target.proxy(WsClientService.class);
>
>     return new WsFederationProvider(session, model, serviceClient);
> }
>
> All dependencies in my POM are 'provided', so i've already ensured that
> the libraries aren't duplicated.
>
> Based on my research so far, this seems to be the preferred way to
> instantiate the RestClient to ensure the classloader picks it up on boot,
> however I'm still getting the exception. Can anybody provide any clues?
>
>
>
> Regards,
>
>
> Crafton
>
>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-dev/attachments/20160907/d9bf423d/attachment.html 


More information about the keycloak-dev mailing list