Details
diff --git a/server-spi/src/main/java/org/keycloak/models/KeycloakSession.java b/server-spi/src/main/java/org/keycloak/models/KeycloakSession.java
index 1a8d974..cb10891 100755
--- a/server-spi/src/main/java/org/keycloak/models/KeycloakSession.java
+++ b/server-spi/src/main/java/org/keycloak/models/KeycloakSession.java
@@ -73,6 +73,8 @@ public interface KeycloakSession {
<T extends Provider> Set<T> getAllProviders(Class<T> clazz);
+ Class<? extends Provider> getProviderClass(String providerClassName);
+
Object getAttribute(String attribute);
Object removeAttribute(String attribute);
void setAttribute(String name, Object value);
diff --git a/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java b/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
index a0d915e..507bfff 100644
--- a/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
+++ b/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
@@ -47,10 +47,8 @@ public class ComponentUtil {
}
public static ComponentFactory getComponentFactory(KeycloakSession session, ComponentModel component) {
- Class<? extends Provider> provider;
- try {
- provider = (Class<? extends Provider>) Class.forName(component.getProviderType());
- } catch (ClassNotFoundException e) {
+ Class<? extends Provider> provider = session.getProviderClass(component.getProviderType());
+ if (provider == null) {
throw new RuntimeException("Invalid provider type '" + component.getProviderType() + "'");
}
diff --git a/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java b/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
index c26dced..7fbd7a3 100644
--- a/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
+++ b/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
@@ -228,6 +228,11 @@ public class DefaultKeycloakSession implements KeycloakSession {
}
@Override
+ public Class<? extends Provider> getProviderClass(String providerClassName) {
+ return factory.getProviderClass(providerClassName);
+ }
+
+ @Override
public RealmProvider realms() {
if (model == null) {
model = getRealmProvider();
diff --git a/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java b/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java
index caf281a..d891f2c 100755
--- a/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java
+++ b/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java
@@ -339,6 +339,15 @@ public class DefaultKeycloakSessionFactory implements KeycloakSessionFactory, Pr
return ids;
}
+ Class<? extends Provider> getProviderClass(String providerClassName) {
+ for (Class<? extends Provider> clazz : factoriesMap.keySet()) {
+ if (clazz.getName().equals(providerClassName)) {
+ return clazz;
+ }
+ }
+ return null;
+ }
+
public void close() {
ProviderManagerRegistry.SINGLETON.setDeployer(null);
for (Map<String, ProviderFactory> factories : factoriesMap.values()) {