Happy to help and glad it worked! Adding the group back in case this would help someone
else searching the list.
Best,
Scott
Scott Rossillo
Smartling | Senior Software Engineer
srossillo(a)smartling.com
On Sep 6, 2016, at 8:42 PM, Crafton Williams
<crafton.williams(a)qut.edu.au> wrote:
Hi Scott, this works perfectly! Thanks for your response.
From: Scott Rossillo <srossillo(a)smartling.com>
Sent: 07 September 2016 10:32:30
To: Crafton Williams; keycloak-dev(a)lists.jboss.org
Subject: Re: [keycloak-dev] Class is not visible from class loader exception
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-mi...
<
http://github.com/Smartling/keycloak-user-migration-provider/blob/master/...
On Tue, Sep 6, 2016 at 7:45 PM Crafton Williams <crafton.williams(a)qut.edu.au
<mailto:crafton.williams@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 <
http://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(a)lists.jboss.org <mailto:keycloak-dev@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/keycloak-dev
<
https://lists.jboss.org/mailman/listinfo/keycloak-dev>